软件开发方式变化历程解析及展望

计算机发展到现在,开发方式在不断的改变,开发范式也在不断的完善,从19世纪40年代,到20世纪40年代的百年期间,程序开发就像民间作坊中手艺人的个人创作行为,而程序则是被称为天才程序员在其私人作坊中创作的精妙作品.在往后的二十年间,随着计算机硬件的高速发展与应用范围的迅速扩张,社会对软件的需求以及本身的复杂程度开始急剧上升,这就是当时社会面临的”软件危机”,而因为此原因促使了”软件工程”这个概念的诞生.

在百度百科中给出软件工程的定义:”研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来” - 我们可从编程语言,编程的方法论,软件的开发范式三个方面去解析。

从编程语言的层面上说,从以前使用汇编语言需要写几百行,到使用c语言只需要写几十行甚至几行,再到使用python等新语言,代码量则会越来越少,各种各样的开发理念使我们在实际开发过程中,编程的效率越来越高,可以让我们编写更容易理解和重构的代码.各个编程语言有默默被淘汰的,也有发展到现在的。它们互相吸收和相互竞争同时又促进这种编程语言的不断进步与发展,于是各类编程语言都不断出现自己的最新版本,如现在的java,从以前固定使用版本java1.6 , java8,到java11的稳固版本,现在已经出现java17的版本,先进版本肯定比前面的版本要先进的多,功能要强大的对。如java8的stream特性,java11的集合,stream加强等。但对应企业来说,不是最新版本就是最好的,因为各个依赖的依赖关系可能并不会跟着以前的版本一起更新。

从编程的方法论来说,在1842年,数学家Ada Lovelace的编写了世界上第一个机器算法,后来被称为第一个计算机程序,只是由于当时没有计算机而无法运行。在1957年,John Backus 发明了FORTRAN 语言,这是第一门真正被程序员使用的语言。1959年,Grace Hopper 发明了第一个面向企业业务的编程语言,又称“面向商业的通用语言”,也常常简称COBOL。1964年美国达特茅斯学院约翰·凯梅尼和托马斯·卡茨认为,像 FORTRAN 那样的语言太过专业,编程非常困难。于是他们简化了 FORTRAN,并设计出了更适合初学者的 BASIC 语言。在1972年,丹尼斯·里奇在贝尔实验室工作期间发明了 C 语言,开启了现代程序语言的革命也是著名的面向结构(过程)化编程。而后,“软件危机”的出现最终导致“面向对象”的编程方法大行其道,1983年,Bjarne Stroustrup 在 C 语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言并将其命名为 C++。在后,在1996年,James Gosling 发明了 Java,这是第一个真正意义上面向对象得编程语言,万物皆对象由此产生,其中设计模式在实用主义中占统治地位。随着软件逐渐工业化管理,系统是越来越大,越来越复杂,同时出现的问题也越来越多。于是出现的复用软件方法论,“面向组件编程”缩写是COP,通过定义组件之间的协作关系(通过服务)来完成系统的构建。这样做的好处是能够隔离变化,合理的划分系统。就是我们俗称的造轮子,当别人把轮子造好了,直接使用,在代码层面但不像OOP的一样,是时刻需要运用的东西。而后在这基础上,因不管项目多复杂,有多少个模块,全在一个项目中编写,使得项目耦合度高,不利于扩展,不利于团队协助维护等原因,引出IBM的“SOA”理论的面向服务的架构,将传统项目中的一个模块,拆分成一个一个项目,其优点则是解决模块之间的耦合度和利于维护问题。缺点就是对于小型项目 ,成本比较高,结构复杂。

从软件的开发范式来说,因“软件危机”软件的开发逐渐的工程化,分为工程范式,开源范式和群智范式。三个范式都离不开“需求”,“质量”,“效率”三个方面,工程范式则是有明确需求,源代码满足规格需求,满足开发需求软件的时间和成本,遵循“自上而下、逐步求精”,表示的模型有瀑布模型,敏捷模型,CMM能力成熟模型,像是一个完整的软件开发工程。而开源范式则像是自发的开发自己的小项目,然后把项目上传到github(公共平台)上,让其他开发者一起参与进来完善项目。是一种自下而上,关联演化的过程。从软件质量上来看,开发社区的规模和口碑则是这个项目的最好证明,就像开发者选择一个插件,第一眼看的一般就是人数与口碑。从软件效率方面则是相应开发社区的问题时间,有些则是不好的,作者难的搭理的项目,在开发社区中的问题则会石沉大海了。最后就是群智范式,它是一种宏观演化,局部求精的过程,通过潜在客户。基于原型体验发现客户,引导客户体验,并不断产生需求,而质量的保证则是软件社区关注度和口碑,效率则是通过开源让参与者做出贡献。就像鸿蒙操作系统的商业化与开源。

对于未来的展望,现在的java当中的分布式微服务已经非常火爆,慢慢的已经成为面试必问题,微服务应用是分布式系统,由此会带来固有的复杂性。开发者需要在RPC或者消息传递之间选择并完成进程间通讯机制。他们必须写代码来处理消息传递中速度过慢或者不可用等局部失效问题。当然这并不是什么难事,但相对于单体式应用中通过语言层级的方法或者进程调用,微服务下这种技术显得更复杂一些。对于现在流行的无代码开发或低代码开发,通过可视化搭建或者通过配置生成代码在不满足功能的情况下进行二次开发,就比如vue-admin-element这个框架则是在element-ui的基础上进行二次开发,比如mybaits的代码自动生成的器,通过配置xml就可以快速生成对应的三层架构以及实体类出来,让编程人员把更多的精力集中在业务层。 又比如阿里巴巴的宜搭平台,核心用户为无编码基础用户,通过一种搭积木的方式进行编程。

在这个网络发展的时代,编程好像成为了人们必须学习的一种技能,而对于非计算机专业的人员也可以通过宜搭等平台来快速实现自己的想法,在不久的将来,无代码开发和低代码开发都会越来越高级,码农则应该累积自己应有的开发经验才能与之抗衡。

参考文献:

  1. https://wenku.baidu.com/view/2b69ce2a453610661ed9f455.html?fr=income1-wk_app_search_ctr-search 软件发展历程

  2. https://mp.weixin.qq.com/s/QOvXybzfmPjiMYMXZGh3bw 软件开发范式的变革

  3. http://www.jos.org.cn/html/2019/1/5650.htm#outline_anchor_27 软件开发方法发展回顾与展望

  4. https://www.zhihu.com/question/20478119 面向对象、面向服务、面向组件三种编程模式有什么区别?分别适用于哪些领域的开发?

  5. https://blog.csdn.net/qinhl99/article/details/3854191 SOA之二——程序设计语言的发展历程

  6. https://baijiahao.baidu.com/s?id=1666187641701604670&wfr=spider&for=pc 编程是什么——简述编程的发展历程

  7. https://baijiahao.baidu.com/s?id=1596456025442090432&wfr=spider&for=pc 从编程语言进化史,看 Java、C、C++ 等语言的演变

  8. https://www.cnblogs.com/heqingxiaohuo/p/12146590.html [微服务架构的优缺点]

  9. https://www.informat.cn/qa/103 低代码和无代码开发的优缺点?

你可能感兴趣的:(软件开发方式变化历程解析及展望)