软件产品的终极目标是为了实现用户需求从而知足人们的须要。也正是为了避免断知足人们的须要使得软件行业不断向前发展。好比,新的算法(MPEG-一、MPEG-二、MPEG-四、H.26四、……)等的出现都在当时为了知足不一样的须要而被发明。然而,人们的须要(行业发展的外部动力)却并不是是软件技术发展的惟一驱动力,由于它没法解释为何业内的编程语言、软件平台与框架等会层出不穷,有的甚至给人“从新发明轮子”的感受。如何判断“新轮子”的确是必要的呢?这与本文想重点关注的另外三大驱动力有关,重点关注它们的缘由源于其与咱们的平常工做更加息息相关。
我认为,软件技术发展的另外三大驱动力分别是简化、复用和美化(行业发展的内部动力)。“新轮子”是否必要的关键,是看它在简化、复用和美化这三个纬度上是否存在优于“老轮子”的内容。注意,这三大驱动力是站在程序员的角度去观察的,而不是从软件产品的最终用户角度。由于最终用户只关心产品的功能与使用体验,而不关注产品的开发过程,更不关心产品是用“老轮子”抑或“新轮子”构建的。
简化是应对日益复杂和规模庞大软件的核心有效手段,由于“复杂的问题老是以简单的方法解决的”(引自《大师亚当斯》)。简化的关键不是“拍脑壳”作到哪是哪,而需运用咱们的洞察力去找到解决问题的关键路径、去繁求简。然而,洞察力的得到除了须要在某一技术方向上的长期积累外,更须要咱们不断坚持就所面临的问题全神贯注地思考,洞察力也所以成为了行业的稀缺资源,也决定了真正能简化软件设计与实现的人少之又少。
简化在业内有各类不一样的表现形式,除了有方法论(好比,领域驱动开发、面向对象编程、设计模式和解耦),更有经过不一样形式和程度的抽象(好比,C编程语言之于汇编语言、C++编程语言之于C编程语言、各类软件平台与框架)。有趣的是,这些表现形式在简化的道路上自身却带来了更大的复杂度(复杂度是守恒的?)。
复用的好处相信众人皆知,这使得咱们因避免“从新造(相同的)轮子”而得到更高的开发效率和更高质的产品。复用这一驱动力使得业内出现各类不一样的开源软件平台与框架,也使得软件企业长期致力于打造自有产品的通用软件平台与框架。对于复杂软件来讲,竞品的背后其实是软件平台与框架之争。
复用的表现形式不仅是构建软件平台与框架,还有各类编程语言的“语法糖”等。
简单是一种美,但美不仅在于简单,更有软件的内在结构与代码的表现形式,美化所以也成为了驱动软件技术发展的另外一大动力。我认为软件之美在于:1)对适应未来软件功能变化而致使的代码变动保持必定的弹性。这种适应能力实际上是对软件内在结构的合理性提出了要求。2)代码能做为程序员间流畅沟通的载体与桥梁。这是对代码的表现形式所提出的要求,也间接地指出编程的目的不仅是提供API或实现软件功能。美化工做的不到位是不少软件开发团队深陷质量困境的重要缘由。
现实中,软件技术的进步实际上是简化、复用和美化三大驱动力的综合结果,由于三者间并不是彻底正交。好比,简化的结果可能也实现了美化,美化的结果可能也带来了简化,复用又为咱们带来了简化。不管如何,一般其中一个是做为技术发展的主导动机。程序员
推荐阅读
算法
《软件设计的真谛》编程
《驾驭你的“职场布朗运动”》设计模式