软件产品的终极目标是为了实现用户需求从而满足人们的需要。也正是为了不断满足人们的需要使得软件行业不断向前发展。比如,新的算法(MPEG-1、MPEG-2、MPEG-4、H.264、……)等的出现都在当时为了满足不同的需要而被发明。然而,人们的需要(行业发展的外部动力)却并非是软件技术发展的唯一驱动力,因为它无法解释为什么业内的编程语言、软件平台与框架等会层出不穷,有的甚至给人“重新发明轮子”的感觉。如何判断“新轮子”的确是必要的呢?这与本文想重点关注的另外三大驱动力有关,重点关注它们的原因源于其与我们的日常工作更加息息相关。

我认为,软件技术发展的另外三大驱动力分别是简化、复用和美化(行业发展的内部动力)。“新轮子”是否必要的关键,是看它在简化、复用和美化这三个纬度上是否存在优于“老轮子”的内容。注意,这三大驱动力是站在程序员的角度去观察的,而不是从软件产品的最终用户角度。因为最终用户只关心产品的功能与使用体验,而不关注产品的开发过程,更不关心产品是用“老轮子”抑或“新轮子”构建的。

简化是应对日益复杂和规模庞大软件的核心有效手段,因为“复杂的问题总是以简单的方法解决的”(引自《大师亚当斯》)。简化的关键不是“拍脑袋”做到哪是哪,而需运用我们的洞察力去找到解决问题的关键路径、去繁求简。然而,洞察力的获得除了需要在某一技术方向上的长期积累外,更需要我们不断坚持就所面临的问题全神贯注地思考,洞察力也因此成为了行业的稀缺资源,也决定了真正能简化软件设计与实现的人少之又少。

简化在业内有各种不同的表现形式,除了有方法论(比如,领域驱动开发、面向对象编程、设计模式和解耦),更有通过不同形式和程度的抽象(比如,C编程语言之于汇编语言、C++编程语言之于C编程语言、各种软件平台与框架)。有趣的是,这些表现形式在简化的道路上自身却带来了更大的复杂度(复杂度是守恒的?)。

复用的好处相信众人皆知,这使得我们因避免“重新造(相同的)轮子”而获得更高的开发效率和更高质的产品。复用这一驱动力使得业内出现各种不同的开源软件平台与框架,也使得软件企业长期致力于打造自有产品的通用软件平台与框架。对于复杂软件来说,竞品的背后实际上是软件平台与框架之争。

复用的表现形式不只是构建软件平台与框架,还有各种编程语言的“语法糖”等。

简单是一种美,但美不只在于简单,更有软件的内在结构与代码的表现形式,美化因此也成为了驱动软件技术发展的另一大动力。我认为软件之美在于:1)对适应将来软件功能变化而导致的代码变更保持一定的弹性。这种适应能力其实是对软件内在结构的合理性提出了要求。2)代码能作为程序员间流畅沟通的载体与桥梁。这是对代码的表现形式所提出的要求,也间接地指出编程的目的不只是提供API或实现软件功能。美化工作的不到位是很多软件开发团队深陷质量困境的重要原因。

现实中,软件技术的进步其实是简化、复用和美化三大驱动力的综合结果,因为三者间并非完全正交。比如,简化的结果可能也实现了美化,美化的结果可能也带来了简化,复用又为我们带来了简化。无论如何,通常其中一个是作为技术发展的主导动机。

了解三大驱动力有助于我们更理性地看待软件技术的发展,同时作者也想暗示,我们在软件开发工作中应从简化、复用和美化三方面着手,而不能停留在“软件能用就行”这种“原始需求”上。否则,我们的行为就是不符合软件技术发展的“潮流”哦!

推荐阅读

《软件设计的真谛》

《驾驭你的“职场布朗运动”》

本文出自李云的博客,请务必保留此出处:http://blog.csdn.net/hzliyun/article/details/8252245。

软件技术发展的驱动力相关推荐

  1. BAT解密:互联网技术发展之路(1) - 技术发展的驱动力

    BAT解密:互联网技术发展之路(1) - 技术发展的驱动力 互联网行业是一个快速发展.快速变化的行业,新的业务.新的机会层出不穷,新的技术如雨后春笋般冒出,NoSQL.大数据.云.Node.js.Do ...

  2. 对云计算时代软件技术发展的若干思考和实践和软件工程技术思索 读后感

    观<对云计算时代软件技术发展的若干思考和实践>(梅宏)后感 看完这篇文章,感觉云里雾里的,头脑有点蒙了.什么是云计算?云计算有着不同的定义,作者的观点是:云计算在某种意义上,它就是一种新一 ...

  3. 软件技术发展的几个阶段

    软件技术经历也如下几个发展阶段: 1.纯属科学家的玩意 2.个人英雄者的世界,比如我们常说的第一代程序员 3.纯软件公司,产生了大批纯软件公司,而且活得很好,如当年的四大软件园 4.软硬结合,纯软件的 ...

  4. 微服务技术发展的现状与展望

    微服务技术发展的现状与展望 人工智能技术与咨询 来源:计算机研究与发展,作者冯志勇等 摘 要 随着云计算.物联网等技术迅速发展,用户对软件系统的需求趋于多样化,面向服务的体系架构(service or ...

  5. CAD技术发展历程概览

    CAD技术起步于50年代后期.进入60年代,随着在计算机屏幕上绘图变为可行而开始迅速发展.人们希望借助此项技术来摆脱繁琐.费时.绘制精度低的传统手工绘图.此时CAD技术的出发点是用传统的三视图方法来表 ...

  6. 金融软件技术:创新与安全并行驶

    随着科技的迅速发展,金融行业正经历着一场前所未有的数字化转型.金融机构需要不断创新和提升效率,以满足客户需求,并保持竞争优势.在这个数字时代中,金融软件技术成为了实现这一目标的关键要素.本文将从两个方 ...

  7. 业务、架构、技术,我们应该关注什么 Java和.Net的优势劣势简单看法 市场经济决定,商业之道即是软件之道,市场的需求决定着软件技术的发展 利益决定着选择应用新技术...

    业务.架构.技术,我们应该关注什么 一个企业存在的必然和前提就是获取企业生成的利润,怎么样合法合理取得利润呢,企业怎么样生存下去呢,很简单,为客户提供等值的产品与服务,客户支付你相应的报酬. 我们是从 ...

  8. OA软件的技术发展过程及未来趋势

    [IT168 信息化] OA产品的技术发展过程及未来趋势:OA的发展经历了三代: 第一代 OA 硬件:个人电脑的出现和应用 网络:简单的联网,以文件交换为主. 软件:国外以微软公司的Microsoft ...

  9. 《中国软件根技术发展白皮书(基础软件册)》发布!

    深根固本,共铸数字经济新基建 2022年1月11日,由 中国软件行业协会联合 openGauss开 源社区 .openEuler开源社区 和昇思MindSpore开 源社区举办的<中国软件根技术 ...

最新文章

  1. Mapbox gl tile瓦片渲染点以及图片Icon
  2. 八百客CRM:微信提现收费,仅仅用户钱包受了伤?
  3. YOLO_ Real-Time Object Detection 实时目标检测
  4. Neo4j Backup:在Mark Needham上存储副本和一致性检查
  5. Fiddler中session的请求/响应类型与图标对照表
  6. 自动完成代码,提高工作效率
  7. Go语言标准库之strconv
  8. 065_VFPage中CallBack回调函数的解释
  9. oracle用户删除了可以恢复吗,恢复用户误删除的没备份的Oracle数据文件
  10. 怎样写一封得体的电子邮件
  11. 基于遗传算法的simulink/PID参数整定(s函数)
  12. windows用VS2019下编译log4cxx日志库
  13. 手机号验证 199号码等
  14. ThreadLock
  15. eclipse中的buidpath配置(工程不build)
  16. pythonjam怎么使用_Jam 使用说明
  17. backtrack 4 安装vm-tool
  18. Linux /etc/shadow文件含义
  19. Golang GMP调度模型
  20. 疫情下,我被公司裁员了……

热门文章

  1. 为什么Q-learning不用重要性采样(importance sampling)?
  2. 破解Linux的root密码
  3. 树莓派4b移植4G USB驱动Quectel EC200T以及ppp拨号
  4. 语音识别—实现百度语音识别
  5. 自动更新+淘客+电影网站PHP源码+手机版,可对接微信公众号带会员收费系统
  6. 秋招算是结束了,写个总结吧!
  7. 如何将mysql导出数据泵_Oracle数据库之ORACLE 数据泵导入导出数据
  8. 手机锁屏后有时收不到微信通知,有时又能收到是怎么回事?
  9. 为什么IPv6显示无网络访问权限
  10. 转 让FPGA替代GPU的6大顾虑,你确定不看看吗?