概述:相比起过去简单而安逸的编程生活,程序员不得不面对复杂的语言、代码、编辑器和人际关系,那么是什么让程序员的生活发生了如此巨大的改变呢?让我们来看一看这改变程序员开发方式的15个技术吧!
很久以前,那些传说中的“古董级”程序员和他们的汇编语言过着简单而安逸的生活。当经费宽松的时候,程序员们会花钱雇佣人来帮他们拨动连接在机器上用于存储代码的纸带(参见穿孔纸带);当经费紧张的时候,程序员们则会自己亲自动手。那段时间的编程过程很简单:软件加载内存数据,做一些算法,然后发送出来。这些就是全部的工作了。
时至今日,程序员们需要跟世界各地使用不同编程语言的人打交道并且还得忍受不同版本的编译器。而陪伴程序员生活的代码也变得不再单纯了,有的代码才诞生不久,有的则在旧函数库里躺了几十年了,而有的甚至连源代码都不知道。团队协作机制和多样复杂的开发特性是如今程序员开发的大环境。
那么,是什么改变了程序员曾经简单而安逸的生活呢?让我们来看看这15个改变程序员开发方式的技术吧。
1. 持续性集成
连接加载代码库的时候,在以前你能够用这段时间休息、喝咖啡甚至去吃个午饭。而现在呢,你可没有这么悠闲的时间了。代码库现在与持续构建的系统紧密相连,编译你的代码、检查当前构架、启动数以百计测试并随时在你萎靡不振的时候提醒你每一个潜在的错误。在你准备离开办公桌去休息的时候,它都在随时提醒你:快回到工作上来,这儿有些东西需要处理——你已经彻底成为了它的奴隶了。
2. 框架
重用他人的工作成果就好比是站在巨人肩膀上,这并不是一个新的概念,但在今日这种方式已经成为了应用开发的绝对主流。人们极少选择重头开发,而是将选择自认为最好最适合的框架,研究其应用接口并编写连接到这些接口的代码来当作是最有意义的工作。网站页面离不开HTML和CSS;而代码部分则会以Ext JS、ExpressJS等为基础。
当然,你可以选择抛弃一切,重头开发,但是那意味着你是在自寻死路,因为你一个人的工作始终无法与一大群人相比。你需要明白,成为一个框架改良者才是你要做的事,如果你想编写代码的话,你要做的就是停止重头开发找到一个现成的好框架去改良它。
3. 库
库是框架的近亲,是常用代码的集合,程序员的开发离不开它。有谁可以在不使用jQuery库的情况下编写浏览器的代码?有谁能记住内置函数GetElementByID写的是什么?也许极少有人能够做到吧,jQuery这样的库已经广泛的管理着各个层面的堆栈了。
人们经常谈论他们最喜欢的语言,却很少谈论这些语言是如何工作的。如果你打算雇佣程序员,你应当了解他对库方面的了解情况。比如,JavaScript程序员了解jQuery和 Dojo tribe这一类库么?会使用C++的程序员知道Allegro、Unity、Corona和其它的库么?对库的了解和对程序语言来龙去脉的了解同样重要!
4. API
在以前,程序员们会很担心数据结构,他们将信息包装成位元组块,并挨个逐一统计位元组个数,以确保指针中的值能安排正确的间隔。如今,谢天谢地,编译器帮我们帮处理了这一麻烦的事。
目前,我们使用更加严谨的接口来处理这个工作,它有一个动听的好名字:API。它们被安装在完全不同的机器上,由完全不同的公司管理着,处理着我们的每一次请求。当你需要将一个街道地址和一个邮政编码转化成经纬度时,只需要一点钱,购买一个API就可以帮你完成关于这个问题的所有答案。
在大多数情况下,数据不需要被紧密包装,那些清点位元组的老游戏已经被JSON、XML等可分析的数据结构所代替了,当你需要在某个位置插入正确的标点的时候,已经有一个程序库在等着帮你处理了。
5. PaaS
现在也许再也用自己来构建网站了。我们可以在别人的网站上创建一个账户并进行定制。需要的只是网页表单上的一些字段,你的新网站就可以拥有所有你想要的功能了,比如上传一个关于猫的视频到YouTube上或者在eBay上为一个糖果盒出价。
当然,这有点夸张。如今许多PaaS选项需要程序员能够熟知每个网页表单需要放入什么。例如,Microsoft Azure平台需要你放入一些能够描述网站如何响应的JavaScript函数,然后Azure就会把它们包装成正确的库并把它们运行在Node.js上。
6. 浏览器
以前有段时间,程序员编写的桌面软件、服务器软件以及设备软件都是不同的。它们都有各自与用户沟通的方式。现在这些东西都通过浏览器了,当我在家里建立一个本地文件服务器用于保存音乐,我会将它放到网站上并定位一个URL地址。苹果的桌面小工具多年来一直使用JavaScript和HTML。而许多跨平台的移动应用程序也都是从HTML和附带了Apache Cordova的JavaScript开始的。
当然,也有一些例外。最好的游戏仍然使用自定义应用,不需要浏览器。但是这一切也在慢慢的改变,越来越多的JavaScript开发人员找到了如何编写屏幕画布对象(可参见用CSS3绘制的汤普森一家)。而愤怒的小鸟等游戏已经运行在了浏览器窗口中。
7. 应用程序容器
构建服务器在过去是一件艰苦的工作。程序员想要在其它地方运行他们的代码,需要向团队的服务器管理员发送关于哪些软件需要安装的备忘录。有些时候服务器调用了正确的库,但是有些时候却没有,这就需要重新再弄。
现在,象Docker这样的应用程序容器可以让我们只需一个按钮就可以将所有库正确的打包到可移植的容器中。如果它能够运行在我们的测试机上,那么它就几乎肯定可以运行在服务器上。由于所有的东西都是相互捆绑在一起的,所以大多数工作平台和服务器的兼容性问题将荡然无存。
8. IaaS
前面提到的服务器管理员到哪里去了?在过去这些人可都是悠闲的很啊。现在的服务器管理员你已经看不到了,他们已经被抽象出来放进了云层里,作为全球范围内的数据中心从事着过去服务器管理员的工作,管理着从云端这头到那头的不同公司。很少有程序员需要基础设施团队为他们的新项目构建一个新的服务器。大多数的人只需要登录一个网站,按一个按钮,使服务器运行就可以了。这一切都如此容易,这些IaaS管理网站让你无需再专门为服务器管理员开一份薪水,也将服务器管理员从整日围着服务器转的牢狱中拯救了出来。
9. Node.js和JavaScript
在很多程序员都还没有诞生的时候,Web服务器只支持静态HTML。然后有人想到了如何创建与数据库交互的动态服务器。那个时候,每一个团队都需要一个人编写SQL数据库,一个人用PHP或者Java编写服务器代码,一个人去设计HTML模板。当客户端的AJAX和JavaScript技术风靡的时候,网站还需要有人会使用这些语言。
现在,这些都是由JavaScript技术来完成了。在浏览器方面使用的是JavaScript,而在服务器层和数据库层则分别是由Node.js和MongoDB/CouchDB来完成。甚至对于HTML页面,都可以使用JavaScript代码在Ext JS或者jQueryMobile框架上进行客户端生成来完成。
10. 二级市场
如果你正在做一款游戏,你可以请设计师来为你设计令人惊叹的模型,甚至可以请几个程序员来帮你添加视觉效果使游戏看起来更酷。当然你也可以选择去二级市场购买开发需要的东西,这跟去实体零售店去购买需要的物品一样。当我在写这篇文章的时候,二级市场的一个下水道场景拼图工具包正在打折,这是一个用于构建不同尺寸的下水道游戏场景的模块化工具包。但即使是恢复原价,这个工具包的价格也不会超过45美元。如果换作是设计师或者程序员,你开这个价格他肯定不会做了。
这些出售插件、扩展包、库和其它附件的二级市场现在变得越来越火爆了。与前面所说的库和框架一样,通过合适的价格购买需要的部件,无需过多的编程就可以融入开发项目中。在国内,这一类二级市场通常被称为控件网。
11. 虚拟机
为硅片写代码的日子已经离我们远去了。现在我们的大部分代码都运行在虚拟机上,它能够把你的指令转化成芯片能够理解的语言。Java虚拟机、C#/.Net虚拟机以及现在的JavaScript引擎成为了编写代码的最主要对象。
大受欢迎的虚拟机不断地将许多东西吸收进堆栈里。在过去,如果你想创建一个新的语言,你需要构建从预处理器到寄存器分配器的整个堆栈。现在新的语言站在了虚拟机这个巨人的肩膀上。Clojure、Scala、Jython、JRuby等语言都使用了Sun公司(现在已经Oracle公司的一部分了)的伟大虚拟机技术。
浏览器的世界与上面所述很相似。你可以选择创建自己的浏览器和语言,或者在 JavaScript上作为模拟进行交叉编译。这就是人们构建CoffeeScript这样的清理工具想要完成的事。如果你觉得这样很容易混淆,谷歌产品GWT(Google Web Toolkit)还可以帮你把Java转换成JavaScript。
12. 社交媒体网站
在早期的互联网,当你建立网站的时候,你会交叉手指祈祷大家能够找到它,当大家找到它之后,如果需要再次访问这个页面则必须记住它的URL地址。
现在,越来越多的网页被放进了Facebook或者Salesforce这样的大容器里,如果你建立了自己的网站,可能只有很少的人来访问它,因为绝大多数用户都去点击访问Facebook或者Salesforce这样的社交媒体网站了。
而具体的解决方案就是建立一个Facebook或Salesforce的应用,它们会让你加入进来,然后将你的网页集成进来成为平台上的一个点。可是到头来,你的应用仍然会受到很大的限制和操控。可是,你还有什么办法呢?要么为选择大型门户网站服务,要么选择被互联网洪流所吞没。
13. 开发工具
曾几何时,我们在服务器上安装的软件非常单一,现在我们租用大量服务器来满足成百上千台机器的需求,这些服务器为满足不同需求,需要更新多种最新软件,它们能够自动完成这些用手动不能胜任的工作。
进入“devops”模式,那些基础工具如Chef和Puppet可以帮助你完成服务器的维护。将最新的软件放置在云端,这些工具将会通过让每台机器运行相同的代码来处理这些工作,它们自动化的完成了我们过去在每台机器手动处理的事情。
某些服务项目如Google App Engine已经着手从内部处理这些工作了。你所要做的全部工作就是上传你的应用程序,然后它就会自动为你服务了。除了能够看到CPU的使用状况清单,你甚至在不知道后台都发生了什么的情况下就完成了软件的更新和维护。
14. GitHub、SourceForge等代码共享的社交平台
代码共享网站为开源世界作出了最大贡献,在SourceForge等出现以前,软件就是由你自己来编写并且只能与自己分享成果的东西,如果某人想要复制你的代码,在征求到你的同意后,他们需要从你这里接收一个tar压缩文件包。
现在代码共享已经成为社交网络的一部分。SourceForge和GitHub等网站会发布所有代码供大家观看和下载。它们将程序的维护、共享和代码注释合并到了一个易于访问的地方。你可以在同一个界面阅读代码并提出修改建议。这就是为什么许多项目在一周时间时间内有数万甚至数十万的访问次数,而这在以前是绝不可能出现的。
这种代码共享的主流模式被大多数专利项目推崇,象GitHub和BitBucket这样的网站都支持它们为出售非公开存储库而将项目代码共享给权限受限的用户群的做法。
15. 性能监控
在最早的时候,代码跟踪是非常简单的事情。当编码开始时开始打印,编码结束时打印终止。如果你有了一些新的想法,那么你可以在原来的程序后面增加一些关于调整的运算。
但现在,这种方式已经过时了,许多问题都不仅发生在机器本身,就算添加一个代码分析器也并不能完全解决问题,因为故障原因还包括网络线路以及数据库缓慢等方面。现代工具追踪网络要求软件网络与独立模块的性能一致,这是辨别是否正常工作的唯一方法。
本文翻译自15 technologies changing how developers work