译文 | 为什么软件架构如此重要?

python爬虫爬取古诗词实例补充讲解之获取注释和译文 对这个网站的具体每首诗,如果想获取它的注释和译文,要怎么实现。 比如: https://so.gushiwen.org/shiwenv_30a67e5c53be.aspx 这首诗,直接进去后,注释和译文不是完全展示出来的,需要点击“展开阅读全文”,才会完全显示。 python第三方库re库实例之爬取古诗词网上诗歌 python第三方库bs4库实例之爬取古诗词网上诗歌 python第三方库xpath... 阅读详情

本文翻译自:Why Software Architecture Matters
(https://www.imaginarycloud.com/blog/why-software-architecture-matters/)

抛开某项特定的技术或某个特定的项目不说,这篇文章我想讲讲关于犯错这个话题。

谈论和赞扬成功也许很轻松,但是我发现犯错仍是个很有意思的话题。主要是因为它们在学习的过程中颇有用处。

一开始我将讲一些背景知识,然后阐述一下我对软件架构的看法。 后者是我认为在软件开发过程中最重要的一部分,并且谈下如何避免陷入常见的开发陷阱。

预热阶段

当任何一个程序员被问到:

“哪种方式你更为热衷:从零开始一个项目,或者维护一个已存在的项目?”

他们通常回答:

“从零开始一个项目”

答案是显而易见的,因为成就感给人带来的感觉更棒。我们可以这样说:“这是我做的(至少是其中相当的一部分内容)。之前并不存在,而现在,看!就在眼前。”

但其中的意义往往不止于此。人类的大脑是喜欢有秩序的,它喜欢从一些混乱和看似随机的信息中寻找规律(模式),在软件开发中,这点也一样。

但是在一个已存在的项目中会发生什么?很可能这个项目已经掺杂一定程度的混乱,并且它的混乱程度显然比一个不存在的项目严重多了。

因此,最直接的回应(做法)是从头开始一个项目,这样的话你就可以完全通过你的经验来把控它的混乱度。

当然,在软件的乌托邦,我们永远不会因为疏忽大意而(给项目)造成混乱的局面。遗憾的是,我们并不是生活在那个世界,但是我们可以用工具和原则来指导我们。

优秀的架构省时省力

我们所拥有的用来处理回归复原、修复BUG等令人厌恶的任务的最好方式就是提前做规划。一个优秀的架构是我们的朋友。

一个优秀的设计解决方案顶得上数千个小时的时间,毕竟在未来它真的帮我们省掉了很多时间。

我们大多数都看过一些书,我们知道要做什么。我们同样应该认真地进行(软件)测试和应用设计模式。“让我们真正专注并贯彻于MVC(译注:一种将业务逻辑、数据和界面显示分离的软件设计模式);让我们为此采用BDD模式(译注:行为驱动开发,敏捷开发技术的一种);让我们在写生产代码前先设计特性测试。”

有时候,我们忘记了第一步该做什么的重要性,甚至在那之前。

架构

当然,在你写功能性代码前,是的,请写下你的第一个测试案例。

但在你写下第一个测试案例之前,设计团队有可能已经收集了所有的需求,已经与客户和其他利益相关方达成了协议,他们甚至可能已经出来了多个版本的产品设计方案并进行了多加验证,所以你可能会认为你应该立即进行代码的编写。

你应该做的

整个团队应该坐下来讨论关于他们将要开发的产品。他们应该拿出一张纸或者到白板面前,然后开始列举未来产品将要有的特性。

清晰地确定出所有的技术要求和提议方案的可行性。考虑在实施不同的实现方案中每一步所面临的挑战并为此想出解决措施,可能是(采用)不同的框架,甚至是不同的编程语言。

兜底地说,(在软件开发中)没有其他事情能值得你花的时间与花在架构一样多。

从错误中学习

对于我来说,最好的学习方式之一就是犯错。

尽管犯错会让人感到困窘和沮丧,但当我们真犯了错,我们就会投入精力去弄明白究竟发生了什么,会努力地寻找解决方案,找到不再犯同样错误的最好办法。

这就等同于经验。

经验就是错误的别称。

—— 奥斯卡·王尔德

最近我在做一个非常复杂的IOS项目。在项目刚开始的时候,有几件事情是没做好的。需求并没有百分百确定,先决条件并没有百分之百满足,APIs(应用程序接口)还没准备好……

但最重要的可能是:我们没有像我们应该做的那样定义出项目的架构。

当然,我是在出现损失时才意识到这点的。我们(当时)做了大量的还原、改写的工作,有几次我一直追问自己说:“为什么我没有采用正确的方式?”

一个陷阱是:没有使用测试框架。归根到底,测试和验证是通过用户测试和代码检视来完成的。然后当一个测试框架真正地被引进项目时,这已经太晚了。

一个热门的被众人所认可的IOS开发框架并不是都能适用于所有的复杂情况的,也并不一定适用于各种开发语言和弥补在设计产品架构时(从技术的角度来看)所作出的糟糕决策。

更好的方法:一些经验法则

敲黑板。你接到一个新项目,可能你在需求收集阶段就已经开始参与了。抛开脑海中已有的针对这项目的整体技术解决方案的想法,我会建议:

  1. 写下所有的东西。制作图表,画组件图、类图、流程图,写下所有你觉得有助于你和团队快速了解问题全貌的东西。

    平时常拿出来进行反复思考,在写下第一行代码前可能会对其做多次的更改修正。

  2. 当所有的组件/模块已经定义好了,尝试为其找一些现有的可靠的解决方案。开源框架是一个很好的方向,因为它们已经被很多人测试过和使用过,因此也会比你自己实现的方案少很多的BUG。

  3. 当选择一个外部或第三方的框架时,确保它们与其他框架“合得来”。尽量找出足够的证据证明你将使用到的框架之间都能够很好地进行兼容。

    在开发过程中你不得不更换某些框架,因为你发现某些部分在其他框架中运行时并没有像预期那样进行工作,不管怎样这都会迫使你耗费时间去另寻解决方案,同时这也会耗费你更多时间去做那些并不想做的回归工作。

  4. 选择一个好的测试框架。跟上一条相似,确保测试框架无需耗费你额外的精力就能与其他框架一起工作。

    一个测试框架的好坏取决于它针对项目所能覆盖的测试范围。如果它对你将使用到的特定的技术和模块不是很合适或者不能完全进行覆盖,那就不要依赖它。

八个盖子十个锅并不是一个好的主意

对于下一个我将会参与到的项目,我会竭尽全力遵循这些原则并且在有必要的时候进行更新。也许这里的假定有一个或多个会有所改动或者被改善。

对于开始实施一个新项目时首先应该做什么这事,如果你的经历告诉你有不同的观点,你可以自由地分享你的观点和建议。

Fedproto:原型聚合的联邦学习框架 文中说明,联邦学习通过计算传递梯度聚合模型时,客户端之间的异构性通常会阻碍模型优化收敛和泛化性能。故本文提出新的FedProto框架,将梯度替换成为原型,通过计算、聚合从不同客户端收集到的本地原型,然后将全局原型发送回所有客户端,以规范本地模型的训练。对每个客户机进行局部训练的目的是最小化对本地数据的分类损失,同时保持生成的本地原型足够接近相应的全局原型(损失函数最小+正则)。什么是原型?文中提到:“ 阅读详情

相关推荐

三相电机控制中的端电压、相电压与线电压波形解析

本文深入解析了三相电机控制中端电压、相电压与线电压的核心概念与波形差异。通过对比方波控制、SPWM和SVPWM三种主流控制策略下的实测波形特征,揭示了不同控制逻辑对电压波形(如梯形波、正弦波、马鞍波)的影响。文章重点阐述了SVPWM控制如何通过生成马鞍波形端电压来提高直流母线电压利用率,并提供了实用的波形测量与调试指南,帮助工程师深入理解电机控制原理并进行有效调试。

qsc901234567的博客 1396

什么是架构?架构的本质和作用!

架构一个系统在其所处环境中所具备的各种基本概念和属性,具体体现为其所包含的各个元素、他们之间的关系以及架构的设计和演进原则之中。架构的本质就是对系统进行有序化地重构以致符合当前业务的发展,并可以快速扩展。视角(Viewpoint):一个针对某视图所采用的观察角度的定义,是构建和使用某视图的规约的描述(通常采用一个适当的模式或模版的形式)。通俗的说,视图描述了所看到的内容;而视角则描述了站在何处进行观察——一个能够决定你所能看到的事物的制高点或角度。视图(View):针对一系列相互关联的关注点的表达。

AlbenXie的博客 2272

生成式引擎优化(GEO)的概念与技术路径

生成式引擎优化(GEO)是针对生成式AI引擎的新型优化策略,旨在提升内容在AI搜索与问答平台中的可见性和可信度。与传统SEO相比,GEO更注重语义理解、知识图谱和多模态生成等技术,通过优化内容的结构化和平台适配性,使品牌信息在生成式AI中更易被采纳和呈现。其核心技术包括语义理解、向量数据库和实时反馈优化等,应用于品牌传播、智能客服和个性化推荐等领域。随着AI技术发展,GEO将向智能化、自动化方向演进,成为内容优化的重要工具。

Baixue5209的博客 1047

2 为什么软件架构很重要

Software architecture is the set of design decisions which, if made incorrectly, may cause your project to be cancelled. -Eoin Woods 为什么需要架构? 本章将聚从技术视角来阐述架构的重要性。我们将从以下几方面展开: 1 架构可以控制系统对质量指标的掌控。 2 在架构中的决策可以用来推断或管理系统演化过程中的...

村长Korbin 1849

【C语言】程序员筑基功法——《函数栈帧的创建与销毁》

汇编角度带你走进函数栈帧

StackFrame 3660

利用XGBoost实现短期电力负荷预测

本数据集为某地区2009年-2015年的用电负荷,时间片为每分钟这里我们定义了XGB模型作为实例,来进行模型训练,之后我们会对其使用网格搜索找到最优的参数。

优快云 精品推荐 4495

为什么软件架构重要?

作者:[美]伦·巴斯等第2章为什么软件架构重要如果架构是答案,那么问题是什么?本章主要从技术角度讨论为什么架构重要。我们将研究13个重要原因。你可以利用它们来推动新架构的创建,或者对已有系统架构进行分析和优化。1)架构可以抑制或支持系统的质量属性。2)在架构中做出的决策允许你根据系统的发展进行推理和变更管理。3)对架构的分析能够提前预测系统的质量。4)文档化的架构增强了利益相关者之间的沟通。5)架...

u013527895的博客 2064

SerDes系列之FFE均衡技术

FFE的基本结构可以在RX侧或TX侧实现,其基本工作原理相同:它通过从同一信号源应用适当的延迟来产生多径信号,然后对它们进行线性缩放和组合以消除信道ISI。

一只豌豆象的博客 4242

软件架构的定义及其理解

一、定义           所谓软件架构,指的是软件系统的整体结构,包括软件子元素,这些元素的外部属性以及元素元素之间的关系。 这个定义包含了以下三层意思:         (1)软件架构是对系统的抽象。它不仅规定了系统有哪些主要软件元素或模块,还定义了这些元素之间是如何交互的。它并不暴露每个元素的内部属性(也叫局部信息),也就是说每个子模块的私有信息是不划归到软件架构的范畴的。需要注意的

铁匠Smith先生的专栏 1万+

利用autojs制作抢购支付宝消费劵的手机脚本

前期准备工作 1.打开支付宝,点击中间的抢消费券的广告 2.点击左上角,将抢购页面添加到首页 3.查看支付宝首页是否出现消费劵 . autojs代码 "auto"; functiontaskstart(){ sleep(1000); launchApp('支付宝'); toast("正在打开支付宝应用"); sleep(1000); varxf=textContains("消费").findOne().bounds(); ...

洛阳泰山的博客 1万+

【ELK】最新版ELK日志搜集,过滤与展示,手把手教你搭建企业级ELK日志平台

ELFK是一套完整的日志集中处理方案。 E:ElasticSearck ES 分布式索引型非关系数据库 存储logstash输出的日志 全文检索引擎,保存的格式是json格式 L:logstash 基于java语言开发的,数据收集引擎。日志的收集,可以对数据进行过滤,分析,汇总,以标准格式输出 K:Kiabana 是es的可视化工具。对es存储的数据进行可视化展示,分析和检索。 F: FileBeat是一个轻量级日志采集器,Filebeat属于Beats家族的6个成员之一。

景天科技苑 7万+

嵌入式系统软件架构浅析

软件架构,就是软件的结构,包含软件元素(模块构件等)、外部接口及其相互关系。 1.软件架构的作用 做到嵌入式软件的代码逻辑清晰,且避免重复造轮子;架构设计有利于软件的移植,没有架构,代码混乱,移植将非常痛苦;能最大限度地复用原有的代码;使代码高内聚低耦合,维护和修改简单方便。 2.设计思路 2.1架构风格 嵌入式系统软件与硬件联系紧密。首先想到要将硬件的驱动程序和功能应用的程序分开,且相对独立,做到高内聚、低耦合。最常用的方法就是模块化设计,就是将驱动程序、...

HZero 1万+

SAP UI5 本地开发工具 fiori-tools-proxy 中间件详解及使用场景

该中间件基于 http-proxy-middleware 库实现,分为 ui5 资源代理和 backend 代理两大模式,并可与 fiori run 或 ui5 serve 命令无缝集成,通过配置 ui5.path、ui5.url 以及 backend.path、backend.url 等参数,实现与目标系统的灵活对接和安全配置 (就后端系统代理而言,fiori-tools-proxy 内置 @sap-ux/backend-proxy-middleware,可将以指定前缀(如。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 516

译文质量评价

问题的提出:   机器翻译的研究必然伴随着翻译质量评价,质量评价是研究翻译领域不可或缺的反馈环节。评价译文质量的应用需求十分广泛, 不仅机器翻译系统需要评测和对比,在译文的出版编辑、语言翻译教学等领域也需要对译文的质量进行评价。译文质量评价是一个 主观性较强的问题,评分的高低实质上是对评价者而言译文的可接受程度。同一个译文,不同的评价者或同一个评价者多次翻译的 结果可能并不完全一致。  ...

weixin_30752377的博客 960

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

为译文信息打分的程序

#!usr/bin/perl #use strict;    # always use strict, its a good habit####### Intromy ($date, $time) = date_time_stamp();print "MT evaluation run on $date at $time/n";print "command line:  ", $0, "

红羊家园 1331

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【亲测免费】 RISC-V IOMMU 规范译文

RISC-V IOMMU 规范译文 【下载地址】RISC-VIOMMU规范译文分享 RISC-V IOMMU 规范译文欢迎来到 RISC-V IOMMU(Input/Output Memory Management Unit)规范的中文译文资源页 ...

gitblog_06637的博客 921

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

从实践者的角度看软件架构的历史

无论什么东西,套用宋丹丹的话,就是都有它的过去、现在和将(jiǎng)来。因此学习一样东西,如果能多学一点它的历史,会让我们对其为何有如此现状少一些纠结,同时才有可能对其未来趋势有靠谱一点点的洞见。昨夜窗外雨声稀疏,难以入眠,突然想到软件架构的发展史是怎样的,于是今晨起来网上逛一圈,邂逅到这篇论文《The History of Software Architecture – In the Eye ...

weixin_30527323的博客 125

译文丨10种常见的软件架构模式

本文译自https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nut...

架构文摘 328

研究生英语读写译教程下课文译文及课后答案

研究生英语读写译教程下课文译文及课后答案 华中师范大学出版社 Unit 1,Book 2 Text A 参考译文: 远与近 托马斯·沃尔夫 1 小镇座落在从铁道旁向后绵亘过去的一片高地上。镇郊有所整洁的白色小木屋,装配着绿色的百叶窗。屋旁园子里有整齐的菜畦和秋后才成熟的一架葡萄;屋前有三棵大橡树,浓荫遮挡着夏日的骄阳;另一旁墙根的花圃,繁花锦簇。整个地方给人一种整洁、简单、朴素的舒适感。 2 每天下午两点钟后数分钟,两个城市之间的特别快车总是经过这块地方。那巨大的火车,在附近的市区停...

sereasuesue的博客 1万+

中庸 原文与译文

《中庸》是中国古代论述人生修养境界的一部道德哲学专著,是儒家经典著作之一,原属《礼记》第三十一篇,相传为战国时期子思所作。其内容肯定“中庸”是道德行为的最高标准,认为“至诚”则达到人生的最高境界,并提出“博学之,审问之,慎思之,明辨之,笃行之”的学习过程和认识方法。宋代学者将《中庸》从《礼记》中抽出,与《大学》《论语》《孟子》合称为“四书”。宋元以后,成为学校官定的教科书和科举考试的必读书,对中国古代教育和社会产生了极大的影响。其主要注本有程颢《中庸义》、程颐《中庸解义》、朱熹《中庸章句》、李塨《中庸传注》

lxlmycsdnfree的博客 2024

【论文译文】VAE

译文仅供参考! 原文是pdf,想下载的话可以戳:www.gwylab.com/download.html

a312863063的博客 1981

【论文译文】GauGAN

译文仅供参考! 原文是pdf,想下载的话可以戳:www.gwylab.com/download.html

a312863063的博客 4744

【论文译文】FastRCNN

译文仅供参考! 原文是pdf,想下载的话可以戳:www.gwylab.com/download.html

a312863063的博客 3177

期待您的加入!优快云社区优质译文翻译计划启动

对于程序员来说,新鲜热门的一线资料往往都是英文的,这对英文不好的程序员来说,着实是一种折磨。我们在浏览优快云博客的时候,经常会看到一些译文,这些优质技术文章的引进离不开背后辛勤的译者们。 为了鼓励大家积极引进并翻译优质的技术外文,优快云特在首页开设一个译文专区,供优质译者展示精心翻译的技术译文。希望将更多较好的技术外文翻译成中文,服务国内开发者,提升技能,开阔眼界。 我要成为优质英文技术布道者...

优快云 译文 740
上一篇: 102 - cobra-寻找scheduler组件启动函数
下一篇: 102 - cobra-寻找scheduler组件启动函数
ahilll
博客等级 码龄10年 1031粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值