概述:相比起过去简单而安逸的编程生活,程序员不得不面对复杂的语言、代码、编辑器和人际关系,那么是什么让程序员的生活发生了如此巨大的改变呢?让我们来看一看这改变程序员开发方式的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
相关推荐
【程序员开发高频英语词汇】是针对IT行业,特别是程序员日常工作中常见英语术语的汇总,旨在帮助程序员提升在英文环境中阅读、编写代码和沟通的能力。以下是一些关键的词汇及其详细解释: 1. **Abstract**: 在编程...
《C++ STL程序员开发指南》这本书可能还会涉及以下几个高级主题: - **迭代器失效**:在对容器进行操作(如插入、删除)后,迭代器可能变得无效,因此开发者需要理解何时和为什么迭代器会失效,并据此编写安全的...
总的来说,这个压缩包为Java程序员提供了一套完整的前端技术参考资料,无论是在开发过程中遇到问题,还是学习新知识,都能从中得到帮助。JavaScript、CSS2、HTML5和HTML基础的结合,使得开发者可以从整体上把握Web...
对于Java/C程序员来说,学习Erlang可以拓宽技术栈,提高解决复杂并发问题的能力。以下是一些关键知识点: 1. **函数式编程**:Erlang是纯函数式语言,这意味着没有变量的概念,只有不可变的数据。函数调用不会改变...
### 一个程序员的开发习惯 #### 一、项目目录结构的重要性及建议 1. **创建清晰的项目目录:** - 开发过程中,一个清晰合理的项目目录结构对于提高开发效率和后期维护至关重要。 - 建议为每个项目设置一个主目录...
### 程序员的十个层次 在IT行业中,程序员的职业发展路径往往被分为不同的层次。这些层次不仅代表了技术水平的高低,也反映了对技术理解的深度与广度。本文将根据给定的信息,深入探讨程序员职业成长的不同阶段及其...
### 如何成为一个优秀的Java程序员 在当今快速发展的信息技术领域中,Java作为一种强大的编程语言,不仅在企业级应用中占据着举足轻重的地位,也在移动应用、桌面应用等多个领域发挥着重要作用。对于想要成为一名...
总之,程序员钻研技术的目的多种多样,既有物质层面的追求,也有精神层面的满足,涵盖金钱、权力、名誉、尊重、自由、全面发展和个人价值的实现等多个方面。在这个过程中,他们不断提升自我,适应快速变化的科技环境...
随着软件开发技术的不断进步,Microsoft Foundation Classes (MFC) 和 Windows Template Library (WTL) 成为了Windows平台上进行高效快速开发的重要工具。《MFC程序员的WTL开发指南》是一本专为MFC程序员设计的书籍...
IT行业的技术日新月异,人工智能、大数据、云计算等新兴技术正在改变着程序员的工作方式。不断学习新技术,了解行业动向,对未来的发展趋势保持敏感,是每一个程序员适应时代变迁、保持竞争力的必由之路。 总而言之...
但是,程序员需要改变工作方式,加强沟通能力与人际交往能力,面临销售指标的压力。 出路三:向项目管理努力 项目管理是软件项目经理是人才市场上炙手可热的人才,有丰富经验、外语好的软件项目经理是抢手的香饽饽...
一本书往往能够改变一个人的思维方式和职业生涯。程序员必读书单推荐中列举了一系列经典的书籍,涵盖了编程实践、设计原则、算法、软件工程等多个方面,帮助程序员从入门到进阶甚至成为大师级人物。 首先,《代码...
在IT行业中,程序员们往往以其独特的方式表达情感,其中之一就是创建独特的数字艺术作品,比如“程序员表白心形页面”。这个项目结合了炫酷的界面设计和HTML(超文本标记语言)编程技术,来构建一个充满创意和心意的...
根据给定的信息,我们可以梳理出以下相关知识点: ### 一、编程语言之争 ... 在描述中提到“对于程序员而言,语言之争永无止境,php是最好的语言...每位程序员都应该根据自己的实际情况来选择最适合自己的工具和技术栈。
7. **云计算**:云计算改变了IT基础设施的构建方式。AWS、Azure、Google Cloud等公有云平台的最新服务、最佳实践和迁移策略是杂志关注的重点。 8. **行业趋势与分析**:杂志还会对IT行业的最新趋势进行深入解读,...
"爱心源码"就是一个很好的例子,展示了程序员如何用代码来绘制出视觉上具有吸引力的图形,这通常用于节日、特殊活动或者向某人表达心意。在这个主题中,我们将深入探讨HTML源码在创建此类图形中的应用。 HTML...
### JAVA程序员面试必备的32个要点详解 #### 1. final、finally、finalize 的区别 - **final**: 用于声明变量、方法或类时,表示该元素是不可变的。例如,当一个变量被声明为final时,则该变量不能重新赋值;如果是...
- **文件权限**:理解Linux文件权限的表示方式,如rwx的含义,以及如何使用`chmod`命令改变权限。熟悉文件和目录的创建、删除、编辑操作,如touch、rm、mkdir、vi等命令的使用。 - **用户管理**:学习如何创建、...