软件也是有熵的,并且会有破窗效应,要及时修复破窗的代码。

破窗效应、温水煮青蛙、石头汤

屎山之大,非一日之积也 ————沃兹基梭德

《石头汤》的故事启发,设计合里要求的东西,好好开发它,一旦完成,就拿给大家看,让大家大吃一惊,然后说:“要是我们增加。。。可能会更好”,假装哪些不重要,然后他们开始增加你本来就想要的功能。人们发现参与正在发生的成功更容易。让他们看到未来。

温水煮青蛙和破窗理论不一样,破窗理论强调有人在代码里写了一坨屎,发现没有人在意。而温水煮青蛙是说没有人注意到项目逐渐在变成屎山。视角不一样。

知识上的投资总能得到最好的回报,但遗憾的是,知识是有时效的资产。随着新技术和环境的出现,知识很快会过时。

经营知识资产:

定期投资:即使量小也要养成一些习惯。

多元化:你知道的不同的事情越多,你就越有价值。要多掌握技术,赶上变化

管理风险:技术上也有高风险高回报、低风险低回报的图谱,要平衡这两种东西。

低买高卖:新兴的技术流行之前学习它可能就和找到被低估的股票一样困难,但是所得到的收益就和股票一样。Java刚出之前就有学习它的风险,但是对于早期学习者有更高的回报。

重新评估和平衡:这是一个非常动荡的行业。

目标:每年至少学习一种新语言

每季度阅读一本技术书籍,也要阅读非技术书籍。

上课,参加社区交流。

实验不同的环境。windows、mac、linux,各种编辑器

跟上潮流

批判性思考:不要被媒体炒作影响,不要低估商业注意的力量,有些答案排在前面,可能是给搜索引擎交钱了。

在网络时代,很多人似乎已经忘了满是研究资料和工作人员的真实图书馆。

《不要重复》法则告诉我们,糟糕的代码才需要注释,要把低级的知识放在代码中,把注释保留给其他高级的说明,否则这就是在重复知识

计算机会影响人思考问题的方式和交流方式,所有的语言特性也会影响思维方式。

要学会估算项目的数据量和估算项目进度。

多花时间熟悉工具。

DRY

DRY(Don’t Repeat Yourself)是一种软件开发的原则,强调在编程过程中避免重复。具体而言,DRY原则鼓励开发者避免在代码中重复相同的逻辑、功能或信息。其核心思想是,任何给定的功能或信息应该在系统中有一个明确、唯一的表示,以确保代码的可维护性、可读性和可扩展性。

遵循DRY原则的好处包括:

  1. 可维护性: 当系统中的某一部分需要修改时,只需在一个地方进行修改,而不必查找和修改多个副本。
  2. 可读性: 通过避免冗余,代码变得更加简洁和清晰,易于理解。
  3. 可测试性: 重复的代码通常会导致更难编写和维护的测试。通过遵循DRY原则,测试更容易编写,因为只需在一个地方验证特定的逻辑。
  4. 减少错误: 由于修改只需在一个地方进行,因此减少了因为漏掉某处而导致的错误的可能性。

DRY原则与其他一些编程原则和实践(如抽象、模块化和设计模式)相辅相成,共同促使高质量、可维护的代码。在实际编程中,程序员通常会努力消除重复代码,将共享的逻辑提取为函数、类或模块,以提高代码的质量和可维护性。

KISS

KISS(Keep It Simple, Stupid)是一种软件开发和设计的原则,其核心思想是保持系统和代码的简单性。这个原则强调,设计和实现应该尽可能地简单,而不应该过度复杂。简单的设计更容易理解、维护和调试,有助于减少错误和提高系统的可靠性。

KISS原则的一些关键点包括:

  1. 避免不必要的复杂性: 不要在设计中引入不必要的特性、层次或组件。保持系统结构和代码清晰简单,只添加那些真正需要的功能。
  2. 易于理解: 简单的设计使代码更容易理解,不仅对原始开发者而且对其他人阅读和维护代码的人来说都更为友好。
  3. 易于维护: 简单的系统更容易维护。当需要进行修改或修复时,理解和修改简单代码通常比复杂代码更为高效。
  4. 降低风险: 复杂性通常伴随着更多的潜在问题和错误。通过保持简单,可以减少引入错误的机会,从而提高系统的稳定性。
  5. 追求最简方案: 在设计和实现中,应该寻找最简单、最直接的解决方案。不要过度设计或过度工程化。

总体而言,KISS原则强调在软件开发中避免过度复杂化,注重简洁、清晰和可理解的设计,以提高软件的质量和可维护性。

YAGNI

YAGNI(You Ain’t Gonna Need It)是一种软件开发原则,强调在开发过程中避免过度设计和实现不必要的功能。该原则的核心思想是,不要为系统添加当前不需要的功能,而应该在真正需要时再进行扩展。 YAGNI 的目标是避免浪费开发资源和时间在可能永远不会被使用的功能上。

关键点包括:

  1. 只实现当前需求: 不要过度预测未来的需求,只专注于当前需要解决的问题。不要为了未来的可能性而增加不必要的复杂性。
  2. 避免过度设计: 不要过度设计系统以满足尚未明确的未来需求。保持简单,只为当前需求提供合适的解决方案。
  3. 节省开发资源: 避免在不确定的未来场景下花费过多的开发资源。等到真正需要时再进行开发,以确保资源的有效利用。
  4. 灵活性和敏捷性: 保持系统的灵活性,使其能够迅速适应未来的变化。不要将过多的时间和资源投入到可能永远不会发生的情况上。

YAGNI与敏捷开发和迭代开发方法ologies密切相关,强调在整个开发过程中保持灵活性和响应能力。通过遵循YAGNI原则,开发者可以更好地应对需求的变化,减少不必要的开发工作,提高开发效率。

要修正问题,而不是发出指责。

调试的第一准则:不要恐慌

DBC

DBC 指的是设计者通过事先定义的规约来规定系统行为,以确保系统在任何时候都满足这些规约。DBC 是 Design by Contract(按合同设计)的缩写,由计算机科学家 Bertrand Meyer 提出。

DBC 包含以下三个关键元素:

  1. 前置条件(Preconditions): 这是指在调用一个方法或函数之前,必须满足的条件。前置条件定义了调用者在调用时需要保证的约定。
  2. 后置条件(Postconditions): 这是指在方法或函数执行完毕之后,系统必须满足的条件。后置条件定义了方法或函数应该产生的结果和效果。
  3. 不变式(Invariants): 这是指在整个方法或函数执行期间,系统必须保持的条件。不变式是对系统状态的限制,它在整个过程中都应该得到维护。

虽然 DBC 在理论上是一种强大的方法,但在实际项目中的广泛应用可能有所限制。在一些编程语言和框架中,也有尝试实现 DBC 的工具和库,以帮助开发者更轻松地使用这一设计理念。

耦合(Coupling)是指两个模块之间相互依赖的程度或紧密度。更高的耦合意味着模块之间的关联更紧密,而较低的耦合则表示它们更独立。耦合是软件设计中一个重要的概念,影响着系统的可维护性、可扩展性和复用性。

元数据:就是数据的数据,例如一些配置信息、数据库的schema。

把抽象放进代码,细节放进元数据。

不要只顾的收集需求,要注意挖掘需求,有些需求背后隐藏着政策信息,政策变了,需求就变了,因此对于政策信息可以写成元数据。