《软件设计哲学》第三章 工作代码是不够的(战略与战术编程)
第三章 工作代码是不够的(战略与战术编程)
好的软件设计中最重要的元素之一是您在执行编程任务时所采用的思维方式。许多组织都鼓励采取战术思维方式,着眼于使功能尽快运行。但是,如果您想要一个好的设计,则必须采取更具战略性的方法,在此上花费时间来制作干净的设计并解决问题。本章讨论了从长远来看,为什么战略方法可以产生更好的设计,而实际上却比战术方法便宜。
好的软件设计中最重要的元素之一是您在执行编程任务时所采用的思维方式。许多组织都鼓励采取战术思维方式,着眼于使功能尽快运行。但是,如果您想要一个好的设计,则必须采取更具战略性的方法,在此上花费时间来制作干净的设计并解决问题。本章讨论了从长远来看,为什么战略方法可以产生更好的设计,而实际上却比战术方法便宜。
这本书是关于如何设计软件系统以最小化其复杂性。第一步是了解敌人。究竟什么是“复杂性”?你如何判断系统是否过于复杂?是什么导致系统变得复杂?本章将在较高层次上解决这些问题。后续章节将向你展示如何从较低的层次上根据特定的结构特征来识别复杂性。
编写计算机软件是人类历史上最纯粹的创作活动之一。程序员不受诸如物理定律等实际限制的约束。我们可以用现实世界中永远不会存在的行为创建令人兴奋的虚拟世界。编程不需要很高的身体技能或协调能力,例如芭蕾或篮球。所有编程都需要具有创造力的头脑和组织思想的能力。如果您可以可视化系统,则可以在计算机程 序中实现它。
80 多年来,人们一直在为电子计算机编写程序,但令人惊讶的是,关于如何设计这些程序或什么是好的程序应该是什么样子的讨论却很少。关于软件开发过程(如敏 捷开发)和开发工具(如调试器、版本控制系统和测试覆盖工具),已经有了相当多的讨论。还广泛分析了编程技术,如面向对象编程和函数式编程,以及设计模式和算法。所有这些讨论都是有价值的,但是软件设计的核心问题在很大程度上仍然没有触及。David Parnas 的经典论文“关于将系统分解成模块的标准”发表于 1971 年,但是在随后的 45 年里,软件设计的技术水平并没有超过这篇论文。
很多地方给的答案都是:

编程语言越来越像思维的一部分。而编程这一过程就是用计算机作为媒介的一种表达。
你说的是 synchronization?这个有翻译的问题,当然也有你对 synchronization 概念理解的问题。很多人觉得 synchronization 指的就是互斥,操作层面这么说其实也没什么问题,毕竟,但凡被标记成 synchronized 的代码段,同一时间只有一个线程可以被准入。不过互斥并不是synchronization 的目的,只是达到 synchronization 的手段。
如果你要考虑数据一致性或者线程安全的问题, 能承载 2 个线程就是解决了高并发的问题。
以下列出一个学习提纲,主要针对的是有经验的人,初学者不合适。这个提纲只能用于一般的庸俗编程语言学习,目前在流行编程语言排行榜上排前20的基本上都是庸俗语言。如果你要学的是LISP之类非庸俗语言(这就是普通人驾驭不了的语言),或是某个软件中的二次开发语言,这里的建议未必合适。还是那句话,仅供参考。
因为经常看到说,使用synchronized锁太重了。昨天尝试了一下使用Semaphore来代替锁实现多线程之间的同步。
最初,你可以将模式视为解决特定类问题的一种特别巧妙且有深刻见解的方法。这就像前辈已经从所有角度去解决问题,并提出了最通用,最灵活的解决方案。问题可能是你之前看到并解决过的问题,但你的解决方案可能没有你在模式中体现的那种完整性。
所谓编程范式(Programming Paradigm),指的是计算机编程的基本风格或典范模式。借用哲学的术语,如果说每个编程者都在创造虚拟世界,那么编程范式就是他们置身其中自觉不自觉采用的世界观和方法论。
Error handling mechanisms like exceptions cause deviations in the usual control flow of the program.
Java 的匿名类(也叫匿名内部类,因为肯定在某个类的内部)是没有名称的类。因为没有名称就无法在别的地方调用,只能在定义的时候调用了。
当我们重试到一定阶段的时候,需要终止重试过程,比如重试了n次或者重试了n秒等。
guava-retrying 提供了WaitStrategy接口,用来控制2次重试的时间间隔,这个接口与StopStrategy有点类似。内置的等待策略在WaitStrategies中定义。
在 pom.xml 文件中添加当前的 JDK 版本
本文的内容已经过时或失效,未删除是因为当作一个记录。
本文内容已经过时或失效,仅当作存档使用