来自:知乎
作者:caoglish
链接:https://www.zhihu.com/question/36615008/answer/115414003
(点击尾部阅读原文前往)
编程语言层出不穷,然而内核是万变不离其宗。我个人看法觉得是以下几个方面的变化比较明显。
✦ ✦ ✦ ✦ ✦ ✦ ✦ ✦
语言本身
1
工业标准
网
页标准有w3c控制,尤其是浏览器的开发,所有主流的浏览器都会自觉符合这个组织的标准,当然这些开发商本身就是这个组织的成员。所以新的HTML5,CSS3,ES6 javascript的新特性的得到顺利推动,让大部分主流浏览器都支持它,w3c功不可没。
PHP有PHPFIG组织,虽然不是强制性的,但是很多新的框架和库都自觉遵守这个组织的编程标准
Java, C语言都有各自的工业标准准则,来维护各自工业标准。
这个标准其实不是强制性的,虽然很多程序员在自己工作上,不遵守这些工业标准,但是要推出新的模块的话,不遵守这些工业标准的模块,是没有人会去使用的。如今是不是面向标准编程,是体现一个程序员是否专业,一个模块是不是专业模块的一个重要指标。
2
第三方模块走红
各
种语言的框架和库,可能比自己的语言还出名,比如css的Bootstrap,javascript的jQuery;一个好的框架和库甚至可以推动这个这个语言的发展,比如说PHP的Laravel框架,Javascript的jQuery。
模块化的发展,大大加快了开发的速度。很多人也愿意开发各种框架和模块,不但可以锻炼自己的开发技能,也是一种展示自己的能力。
过去,程序员要成名,要开发出有用的软件,比如说求伯君开发出了wps,牛;张晓龙开发出了foxmail,牛。
现在,程序员要成名,开发出一个大家都会用的框架和模块也行。比如Evan You开发的vue.js,玉伯开发的seajs。
3
模块化编程和依赖管理
在
2010前,依赖管理工具只是个很时髦的概念,大家习惯手动到库的官方网站上下载后手动导入到项目中。升级也是个麻烦事。所以一般大家也就下载一两个必要的库,其他都自己手写完成。
如今,依赖管理工具已经是必备的了,大家不再手动导入库了;而且是能找到第三方模块的功能,就不再自己编写了,统统用工具导入项目;自己编写的程序代码,能模块化的代码统统模块化,甚至是独立出来,网上开源,然后使用依赖管理工具进行管理导入到自己的项目中。
这样好处也明显:
-
代码量减少
-
加快开发速度
-
高度解耦
-
定位bug容易,改动影响小
-
写单元测试容易
如今大家更加愿意写小模块,而不是重复造轮子了。
4
框架使用
更
愿意先选一个合适的框架,再开始编程,而不是所有功能自己从头开始写了。
-
javascript的框架多了,vue,react, backbone,angularjs等;
-
css有bootstrap,fundation等;
-
PHP有laravel,cakephp等
-
C#有MVC
-
Java有spring+hibernate+struts
框架要先选好,模块的话,等需要慢慢加就行了。
5
测试代码
2006年,单元测试在开发过程中,重要性不是很大,可有可无,程序完成,功能能用就行。
如今的代码,没有单元测试部分,这个工程就不能算完结。甚至是,测试驱动开发已经成为主流,先写测试代码,然后开发。
测试代码的发展有不单单是单元测试部分。单元测试,集成测试,功能测试,性能测试,压力测试等等,都在开发过程中占了极大的位置。以前测试都是由专门的测试员进行人工测试,或者他们负责测试;如今单元测试和集成测试都是要开发者自己写。
6
跨设备,跨平台
Java提出的跨平台,一次编译到处运行的梦想,其实至今未很好的实现。但是如今这个跨设备,跨平台编程趋势却越来越明显了。
跨设备,主要是指桌面和手机,尤其是针对显示器的最佳实践是层出不穷,如今是响应式成为了主流。
跨平台,出自于Java的一个概念,如今已经算普及了,尤其是JavaScript,桌面,手机,服务器,浏览器,嵌入式都能看到javascript的身影,这大大归功于JavaScript标准化的推广。跨平台过去是说一次编译到处运行;如今是只要这个平台支持这个语言或标准,就能用。如今的跨平台编程,更讲究特性检查这个功能,如果你这个平台没有这个特性,那么就关闭这个有这个特性的功能,但其他功能还可以继续使用。
今后,各种设备层出不穷,VR头盔,AR眼镜,巨型屏幕,物联网等等,跨平台会有进一步的发展。
✦ ✦ ✦ ✦ ✦ ✦ ✦ ✦
工程方面
1
工具化
我
觉得工具化非常突出了,凡是能工具完成的事情,绝对不手工完成。以下几个方面都是可以找到相应工具,帮助开发者管理代码质量
-
代码风格检查
-
工业标准检查
-
代码整理
-
代码复杂度检查
-
单元测试覆盖率检查
-
依赖管理
-
压缩代码
-
重复代码检查
-
无用代码检查
等等,
2
工程化
工
程化也是近年来最最突出的一个发展趋势,过去只是选择性的,现在是必须的。
工程化是以工具化为基础的,没有工具,那么工程化也无从谈起。
工程的核心就是流程自动化,又称之为构建,这些包括了:代码质量检测,代码压缩,代码合并,代码优化,代码编译,单元测试等等部分。构建就是把这些以工作流程的方式组合起来,然后用一个命令行运行这整个流程。它有点像批处理,但是是程序开发中使用的特殊批处理
在网页编程的过程中,现在又流行“实时编程”,就是当你在保存代码的时候,以上的构建流程就开始工作完成后自动刷新浏览器,保证新代码效果立刻反应在浏览器上。
现在,你去github的项目库中找软件,首先翻看,是否有工程文件,看看它的构建流程是什么,就知道这个项目的专业程度和项目的质量了
而自己,没有一个配置一个工程化的流程系统,都不好意思说自己在做软件工程。