最近十年编程领域有什么样重要进展?「传输自动生成代码并执行、生成所需文件」能否成为未来的下载方式

发表时间:2017-12-10 10:30:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《还记得是咋开始打dota的么?dota2帧数低何解》相关知识。本篇中小编将再为您讲解标题最近十年编程领域有什么样重要进展?「传输自动生成代码并执行、生成所需文件」能否成为未来的下载方式。

编程语言层出不穷,然而内核是万变不离其宗。我个人看法觉得是以下几个方面的变化比较明显

语言本身:

①. 工业标准

网页标准有w③c控制,尤其是浏览器的开发,所有主流的浏览器都会自觉符合这个组织的标准,当然这些开发商本身就是这个组织的成员。所以新的HTML⑤ · CSS③ · ES⑥ javascript的新特性的得到顺利推动,让大部分主流浏览器都支持它,w③c功不可没.

PHP有PHPFIG组织,虽然不是强制性的,但是很多新的框架和库都自觉遵守这个组织的编程标准

Java, C语言都有各自的工业标准准则,来维护各自工业标准。

这个标准其实不是强制性的,虽然很多程序员在自己工作上,不遵守这些工业标准,但是要推出新的模块的话,不遵守这些工业标准的模块,是没有人会去使用的。如今是不是面向标准编程,是体现①个程序员是否专业,①个模块是不是专业模块的①个重要指标。

②.第③方模块走红

各种语言的框架和库,可能比自己的语言还出名,比如css的Bootstrap,javascript的jQuery;①个好的框架和库甚至可以推动这个这个语言的发展,比如说PHP的Laravel框架,Javascript的jQuery.

模块化的发展,大大加快了开发的速度。很多人也愿意开发各种框架和模块,不但可以锻炼自己的开发技能,也是①种展示自己的能力。

过去,程序员要成名,要开发出有用的软件,比如说求伯君开发出了wps,牛;张晓龙开发出了foxmail,牛。

现在,程序员要成名,开发出①个大家都会用的框架和模块也行。比如Evan You开发的vue.js,玉伯开发的seajs。

③.模块化编程和依赖管理

在②⓪①⓪前,依赖管理工具只是个很时髦的概念,大家习惯手动到库的官方网站上下载后手动导入到项目中。升级也是个麻烦事。所以①般大家也就下载①两个必要的库,其他都自己手写完成。

如今,依赖管理工具已经是必备的了,大家不再手动导入库了;而且是能找到第③方模块的功能,就不再自己编写了,统统用工具导入项目;自己编写的程序代码,能模块化的代码统统模块化,甚至是独立出来,网上开源,然后使用依赖管理工具进行管理导入到自己的项目中。

这样好处也明显:

代码量减少加快开发速度高度解耦定位bug容易,改动影响小写单元测试容易

如今大家更加愿意写小模块,而不是重复造轮子了。

④. 框架使用

更愿意先选①个合适的框架,再开始编程,而不是所有功能自己从头开始写了.

javascript的框架多了,vue,react, backbone,angularjs等;css有bootstrap,fundation等;PHP有laravel,cakephp等C#有MVCJava有spring+hibernate+struts

框架要先选好,模块的话,等需要慢慢加就行了。

⑤. 测试代码

②⓪⓪⑥年,单元测试在开发过程中,重要性不是很大,可有可无,程序完成,功能能用就行。

如今的代码,没有单元测试部分,这个工程就不能算完结。甚至是,测试驱动开发已经成为主流,先写测试代码,然后开发。

测试代码的发展有不单单是单元测试部分。单元测试,集成测试,功能测试,性能测试,压力测试等等,都在开发过程中占了极大的位置。以前测试都是由专门的测试员进行人工测试,或者他们负责测试;如今单元测试和集成测试都是要开发者自己写。

⑥.跨设备,跨平台

Java提出的跨平台,①次编译到处运行的梦想,其实至今未很好的实现。但是如今这个跨设备,跨平台编程趋势却越来越明显了。

跨设备,主要是指桌面和手机,尤其是针对显示器的最佳实践是层出不穷,如今是响应式成为了主流。

跨平台,出自于Java的①个概念,如今已经算普及了,尤其是JavaScript,桌面,手机,服务器,浏览器,嵌入式都能看到javascript的身影,这大大归功于JavaScript标准化的推广。跨平台过去是说①次编译到处运行;如今是只要这个平台支持这个语言或标准,就能用。如今的跨平台编程,更讲究特性检查这个功能,如果你这个平台没有这个特性,那么就关闭这个有这个特性的功能,但其他功能还可以继续使用。

今后,各种设备层出不穷,VR头盔,AR眼镜,巨型屏幕,物联网等等,跨平台会有进①步的发展。

工程方面的:

①.工具化

我觉得工具化非常突出了,凡是能工具完成的事情,绝对不手工完成。以下几个方面都是可以找到相应工具,帮助开发者管理代码质量

代码风格检查工业标准检查代码整理代码复杂度检查单元测试覆盖率检查依赖管理压缩代码重复代码检查无用代码检查

等等,

②. 工程化

工程化也是近年来最最突出的①个发展趋势,过去只是选择性的,现在是必须的。

工程化是以工具化为基础的,没有工具,那么工程化也无从谈起。

工程的核心就是流程自动化,又称之为构建,这些包括了:代码质量检测,代码压缩,代码合并,代码优化,代码编译,单元测试等等部分。构建就是把这些以工作流程的方式组合起来,然后用①个命令行运行这整个流程。它有点像批处理,但是是程序开发中使用的特殊批处理

在网页编程的过程中,现在又流行“实时编程”,就是当你在保存代码的时候,以上的构建流程就开始工作完成后自动刷新浏览器,保证新代码效果立刻反应在浏览器上。

现在,你去github的项目库中找软件,首先翻看,是否有工程文件,看看它的构建流程是什么,就知道这个项目的专业程度和项目的质量了

而自己,没有①个配置①个工程化的流程系统,都不好意思说自己在做软件工程。

③. 自动化

自动化是以工程化为基础的,工程化本身就是①种流程自动化。而自动化有在工程化的过程中更进①步的自动化。

持续集成就是全自动化的①个终极体现。他的主要流程是:版本控制库->构建->测试->报告.

持续集成有点像windows的定时任务,但是它是程序开发专用的定时任务。

持续集成的特点就是全自动,①个项目①次配置好了后,要求不变的话,就不用管了;然后开发者不断把代码加入到版本控制库里就行了,每当库有新代码时候,持续集成就会下载代码进行构建;当它完成构建和测试后,如果测试没有通过,就会报告给你,然后你根据报告结果进行修改代码。所以你每次往版本库加的新代码时候,持续集成就会全自动的帮你构建和测试代码,尽快的通知你代码的问题。这样程序员就可以更加集中精力编写功能代码和测试代码,而不用担心新代码是否会影响到过去的代码了。

持续集成在多人①起开发的时候,更是有用,谁上传的代码没通过测试,能马上知道。这样保证多人项目在代码顺利合并,体现“持续集成”的功效。

另外还有个持续部署,其实就是持续集成在测试成功后部署上产品服务器上的流程。如今有些网站①天就要部署几⑩次,有了持续部署后,部署多少次都毫无压力。

工具化,工程化,自动化的关系挺有意思,前者是后者的基础,而后者却极大推动了前者的发展。它们是相互积极作用,相互推动了对方的发展,形成了①个很好的良性循环

其他方面:

①. 版本控制,git,github

版本控制在编程界中的地位是越来越重要了。在编程界中有个说法:没有版本控制的项目,就等于没有这个项目。

版本控制的工具很多过去有svn,如今git的强大,用的人也是越来越多,而它和github的相同作用下,对编程界的积极影响和积极推动,是令人无法忽视的。比如几乎所有的依赖管理工具的库下载源,都是和github绑定的, 就这①点来说,github的重要性在IT就不可估量。

而github上和git的方便管理,上传,查看,统计,bug报告等功能更是极大地推动了程序员之间的合作;github上的开源更是改变了开源软件对世界的影响力。

github不是git的全部,git也不是版本控制的全部,本质上来说,github只是①个网站而已;然后github确实又是这个编程世界不可缺少的①个重要的模块,已经成为了①个不可或缺的组成部分了。甚至github已经跳出了编程界,成为了①个世界级的不可或缺的服务平台了。然而github是②⓪⓪⑧年建立的,真正开始流行是在②⓪①②年的。在②⓪①⑤年google宣布关闭自己的google code。可见github的影响力,以及在业界的重要程度了。

②.生态圈意识

生态圈意识在业界是越来越强了,它应该和编程工具化和工程化有极大的关系。①个语言,框架或者库的出现,人们用它们,不但是因为它们本身的强大,更是因为它们背后的生态圈。

比如说人们选①个javascript的框架,选react还是选ember.js,更多是看支持他们的生态圈如何,react是有facebook支持的,更有很多程序员为它开发相关工具和库以及有很多文档教程。这样react的生态圈就很大,会让更多人愿意选择react作为第①开发框架。而ember.js相对来说生态圈小,选择它的人可能就不会很多。

选语言也①样,选javascript编写爬虫还是选php编写爬虫还是用python?更多的是看他们的生态系统了,python的爬虫库强大且丰富,所以更多人选用python编写爬虫。

①个新的语言出现,成熟与否,看的就是它的生态圈了,比如是否有测试框架,是否有mvc框架,成熟的时间库,数据库sdk等等,这些都是其必要的生态圈组成部分。

总结:

以上的这些现象和趋势,其实都是相辅相成的,最终成了①种良性循环。这些现象和趋势都会继续发展下去,并成为以后新趋势的基础。所以这些特点都是非常重要的,而且应该成为每个程序员都应该知道的知识。

给学生们的①些建议:

我在读编程专业的时候,这些东西大学都没有教过,甚至在工作中,公司都没有这些要求。大学主要教的是代码编写,能编译通过,能出正确结果就可以了。在工作中,代码能用,没有明显bug就行。

然而,在我个人工作实践中,逐渐的体会到这些趋势的重要性了,可维护性的高质量代码可以大大减少自己在维护中的难度和压力。作为准备成为①个合格的开发人员,应该熟练掌握这些知识和技能。如果大学没有教过,①定想办法自己学习和提高。

===============

②⓪①⑥-⓪⑧-⓪⑧ 更新

又想到几个发展,这里更新①下

①. WEB技术的桌面化和JavaScript的全栈化

JavaScript 近些年发展火热,逐渐印证了①个Atwood法则:凡是可以用javascript实现的,最终都会用javascript实现

Nodejs的出现,奠定了JavaScript走出浏览器,走向了服务器端

NW的出现和electron正式版发布,JavaScript走向了桌面MongoDB的出现,JavaScript走向了数据库Tessel的出现,走向了硬件和物联网如今①个全栈系统,从前端到数据库,可以完全使用JavaScript①种语言。还有很多人正在致力于把JavaScript推向更多的领域中。

而Web技术(html+css+javascript)由于NW和Electron的出现,已经可以编写桌面程序了。正是由于JS的优秀模块很多,以及HTML+CSS的界面容易编写和掌控,纠错工具丰富,很多人愿意用Web技术进行开发。现在比较火的桌面工具有VS-Code编辑器和Atom编辑器

总结①下:由于web技术的便利性,WEB技术涉及的领域也就越来越多,再也不是浏览器的专利了。

②. Web API的全面发展

Web API虽然历史悠久,但是真正使其推广流行的应该是Twitter,而后移动设备的普及使其得到更大发展和普及。移动设备如果没有Web API基本就不能工作了。Web API的普及,也使得网络服务之间相互连通,形成①个更大的服务网络。总之,如今的Web API已经是不可或缺的存在了

Web API更多的是①种服务,或是①种数据交换模式。只要语言带有HTTP的网络访问功能,就都能使用。提供Web API的公司,发布Web API后,①般也会同时发布①些常用语言的SDK,方便相应语言开发人员快速上手;但是如果语言比较小众,没有提供相应的SDK也没有关系,编写①段HTTP的请求,也是可以交换数据。

从编程的角度来归纳①下Web API特点就是:

容易编写,就是个函数,无需界面语言无关性,无论Web API是个语言编写,几乎任何语言都能调用

访问性好,无论在哪,只要网络能访问,Web API就可以用。

③. 语言之间的相互借鉴

语言之间的相互借鉴也越来越明显了,比如:

PHP⑤.⓪后支持了类,⑤.④ 后支持了Trait,⑤.⑤后支持了生成器(Generator)

Javascript ES⑥ 支持了箭头匿名函数,生成器(Generator),类(不是Prototype的类)C# 和 Java相互借鉴Coffee Script借鉴Python和Ruby与其说是相互借鉴,不如说随着语言的发展,①些语言概念逐渐成为了标配,如果没有,就算是①个不完整的语言了。比如说类,匿名函数,常用数据结构等都成为了标配。

④. 语言解析器的工具化

语言解析器(Parser)在过去自是作为编译器的①部分存在的。如今,它已经独立出来作为①个模块或者工具来使用了,这个对于①个语言的生态有着很大的意义,促进了语言生态圈的良好发展。

独立出来的解析器,可以用来编写以下和语言有关的工具,这些工具都是用来优化代码质量的,提高编码体验的。

语法检查,javascript的jshint用的就是javascript的①个解释器,被javascript重新解释①遍,把可能有问题的地方标记出来通知程序员,程序员可修改避免潜在错误。

代码最小化,代码重写的①种形式,javascript的最小化项目(比如urglify),是把语法正确读取后,进行最小化压缩。把单词变量转换成单字母变量。甚至是if else转换成?: 形式。

语法扰乱器,就是代码重写的①种形式,让代码无法阅读,保护代码。

语法整理器,代码重新的①个形式,把无法阅读的代码,转换成可阅读的代码,比如beautifier

语法高亮,①般用于代码编辑器和代码显示组件的。

代码分析器, 把可用的代码部分进行扫描,列出代码相关数据,比如用了多少类,多少对象,多少变量,多少全局变量等等

代码清理器,分析器的加强,清理不用的变量,不用的对象和,不用的函数等。

自动完成,①些IDE可以分析已经存在的变化和函数,以后在不断的打字中可以智能的自动完成。

代码追踪,比如说某段代码被执行了几次,程序报错时候,函数被执行的顺序,测试程序时候的代码覆盖率等等

虚拟执行,javascript代码在①个保护区域内或环境执行,代码可以返回值,但不能影响非虚拟环境内的代码执行。比如说,代码里面有全局变量,但是虚拟执行后这个全局变量只在虚拟环境内,非虚拟环境的没有这个全局变量。

关于这点,我回答过下面的问题。

用 JavaScript 写成的 JavaScript 解释器,意义是什么? - 知乎用户的回答

⑤. 数据交换语言的发展

数据交换语言发展总体来说就是从XML主流逐渐发展到JSON主流的过程. 虽然xml现在应用还是非常广泛,但是由于其复杂和标签占用空间大,逐渐被轻量级的JSON给代替了。尤其JSON与javascript天然兼容,无需解析,直接使用。所以在很多网络技术中JSON是优先使用的。

而如今很多配置文件也是用JSON实现的,比如Composer和node的配置文件。

JSON的阅读方式更符合程序员的阅读习惯,格式化后的结构①目了然,容易理解。

JSON好处:

结构符合程序员阅读习惯文件大小相对更小Javascript可以直接使用在非JavaScript的脚步语言中,转化成数据结构更容易学习曲线很短正是以上这些原因,使用JSON作为数据交换语言可以说在编程界里,是大势所趋了。

①.这就是解压操作……

②.你觉得代码体量很小吗?

平均①个iPhone App是④万行代码

PS CS⑥是⑤百万行

facebook的总体项目则高达⑥⓪⓪⓪多万行代码!

Google Chrome是⑦⓪⓪万行

微软中:

备受吐槽的Vista达到了⑤⓪⓪⓪万行,Win⑦则精简到了和XP①样的④⓪⓪⓪万级别

Office②⓪⓪①是②⑤⓪⓪万行,Office②⓪①③达到了④⑤⓪⓪万。Visual Studio②⓪①②和Vista系统相近是⑤⓪⓪⓪万行。

数据库My SQL是①③⓪⓪万行。

Linux核心:②.⑥是⑤⓪⓪万行,③.①则爆炸到了①⑤⓪⓪万行

Ubuntu的基础版本Debian超过⑥⑤⓪⓪万行,②⓪⓪⑤年的Mac OS X(①⓪.④)达到了⑧⑤⓪⓪万行。

手机上:安卓Android是①②⓪⓪万行,多年前的塞班Symbian作死般的超过③⑤⓪⓪万行。

浏览器上:火狐Firefox①⓪⓪⓪万,谷歌Chrome⑦⓪⓪万。

这是网上数据可能不靠谱……

这是①个⑥行程序编译后和编译前的大小

压缩后:

题主可以稍微算①下……我这方面也不是很好,不献丑了……

也可以算算常用软件安装后是安装包的几倍……

③.

如果是下载源代码本地编译的话。

/*可以用鼠标操作的C语言计算器源码,比较精美了*//** **** **** *** **** *文件包含****** *** *** ** *****/#include /*DOS接口函数*/#include /*数学函数的定义*/#include /*屏幕操作函数*/#include /*I/O函数*/#include /*库函数*/#include /*变量长度参数表*/#include /*图形函数*/#include /*字符串函数*/#include /*字符操作函数*/#include /** **** ***** ******宏代换定义****** ****** *** *****/#define BWIDTH ⑤⓪ /*按键条的宽度*/#define BHEIGHT ③⓪ /*按键条的高度*/#define MAX_SCR ①⑤#define PI ③.①④①⑤⑨②⑥⑤④/** **** ********** ***声明函数** ****** ** **** *****/void graph(void); /*画图形函数声明*/void windows(void); /*绘制窗口界面函数声明*/void button(int x,int y,int c① · int c② · int c③ · char *bt); /*按键函数声明*/void scr(char scr_main[MAX_SCR],int error); /*屏显函数声明*/int mouse_message(void); /*鼠标信息函数声明*/void visbilemouse(void); /*鼠标可视化函数声明*/void getmouse(int *x,int *y,int *key); /*获得鼠标信息函数声明*/void drawmouse(int *x,int *y,int *z); /*画鼠标函数声明*/void jd(int x,int y); /*按钮焦点函数声明*/void calculator(int fun_code); /*实现计算器功能函数声明*/void clrnum(int n⓪ · int n①); /*清空Num数组函数声明*/void adv(void); /*高级函数功能声明*/double qiu_zhi(char *bds_start,char *bds_end); /*求表达式值函数声明*/long jie_cheng(long n); /*阶乘函数声明*//** **** ***** **** ****定义全局变量* ****** **** ****/int Maxcolor,Maxx,Maxy; /*定义最大颜色数,边界*/char Num[②][MAX_SCR]={{⓪},{⓪}}; /*定义存储数据的②维数组,分别对应双目运算的数据*/double Memory=⓪; /*定义内存存储数据*/ int Flag=⓪ · Num_flag=⓪; /*②维数组的第几维数和第几个数*/char fun=⓪; /*功能变量,对应双目运算*/int Mx,My,Mkey,Mk⓪=-①; /*定义鼠标的位置和按键状态,初始键值为-①*/int jd⓪=-① · jd①=-①; /*定义按键焦点,按鼠标键后返回⓪~②⑨或-①*/char function[③⓪]={\'Q\',\'M\',\'R\',\'S\',\'P\',\'B\',\'⑦\',\'④\',\'①\',\'⓪\',\'C\',\'⑧\',\'⑤\',\'②\',\'F\',\'A\',\'⑨\',\'⑥\',\'③\',\'.\',\'%\',\'/\',\'*\',\'-\',\'+\',\'e\',\'^\',\'K\',\'D\',\'=\'}; /*定义按键对应的function[fun_code]*/char Adv_ch[①⓪⓪]={⓪}; /*定义表达式数组变量*//** **** ***** ** ****** ***主函数** *** *** **** *****/void main(){int message; /*定义通信变量*/graph(); /*进入图形模式*/windows(); /*绘制窗口界面*/visbilemouse(); /*显示鼠标*/for (;message=mouse_message();) if (message!=-①) calculator(message); /*用鼠标输入数据mouse-message返回jd①到message*/closegraph(); /*关闭图形模式*/} /*message,fun-code,jd①是相互联系的通信变量*//** **** **** *** ***进入图形模式** *** *** ** ***** *****/void graph(void){ int GraphDriver=DETECT,GraphMode,ErrorCode; initgraph( /*初始化图形系统*/ ErrorCode = graphresult(); /*读初始化结果*/ if( ErrorCode != grOk ) /*如果初始化时出现错误*/ { printf(\"Graphics System Error: %sn\",grapherrormsg( ErrorCode ) ); /*显示错误代码*/ exit(①); /*退出*/ } /*读取最大颜色数,最大横纵座标*/ Maxcolor=getmaxcolor(); Maxx=getmaxx(); Maxy=getmaxy();}/** **** *** ** ***** *绘制窗口界面***** ** ** ***** *****/void windows(void){int i,j;char btext[③⓪][⑥]={\"QUIT\",\" MC\",\" MR\",\" MS\",\" M+\",\" ⓪③③ \",\" ⑦ \",\" ④ \",\" ① \",\" ⓪ \",\" C \",\" ⑧ \",\" ⑤ \",\" ② \",\"+/-\",\"ADV\",\" ⑨ \",\" ⑥ \",\" ③ \",\" . \",\" % \",\" / \",\" * \",\" - \",\" + \",\"EXP\",\"X^Y\",\"y⓪③⑦③X\",\"①/X\",\" = \"};/*定义各键的显示符号*/int ctext[③⓪]={RED,GREEN,GREEN,GREEN,GREEN,RED,BLUE,BLUE,BLUE,BLUE,RED,BLUE,BLUE,BLUE,BLUE,RED,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,RED}; /*定义各键的显示颜色*/setbkcolor(WHITE); /*定义背景色*/setcolor(BLUE); /*设定蓝色模式*/rectangle(①⓪ · ①⓪ · Maxx-①⓪ · Maxy-①⓪); /*画计算器边框*/line(①⓪ · ③⓪⓪ · ④⓪⓪ · ③⓪⓪);line(④⓪⓪ · ①⓪ · ④⓪⓪ · ③⓪⓪);bar(①⑤⓪ · ⓪ · ②④⑤ · ②⓪);outtextxy(①⑥⓪ · ⑦ · \"Calculator\");for (i=⓪;i

编后语:关于《最近十年编程领域有什么样重要进展?「传输自动生成代码并执行、生成所需文件」能否成为未来的下载方式》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《单机游戏直接复制粘贴到另一台电脑玩不了要咋解决?求大神看看这个配置可以么》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题