title: 670.未来五年程序员需要掌握的10项技能 outline: deep

由于最近经济形势的变化,很多开发人员只关注他们短期的工作前景。与此同时,把时间和精力花在学习最能带来回报的新技术上是件非常重要的事情。这里是我们列举的10种你需要马上开始学习的技术,让你的简历在未来5年不会落伍。这个列表并不完全,有很多业界的领域(比如大型机开发人员)没有涉及。尽管如此,对通常的主流开发来说,学习其中至少7项技能肯定不会错 ——不但要达到能在面试时侃侃而谈的程度,还得能在工作中运用自如。

1) 编程语言三选一 (.NET, Java, PHP)
除非开发世界有根本的改变(类似小行星击中雷德蒙),在不远的将来,大部分开发人员将需要了解三大开发平台——.NET (VB.NET或者C#), Java, 或者PHP——中的至少一个。并且只了解核心语言也是不够的。因为项目会包含越来越多不同的功能,你需要对相关框架和库有深入的了解。(本人以为C/C++可能比这三个语言更有竞争力)

2) 互联网Rich Application (RIAs)
不管爱她还是恨她,最近几年,Flash的用途突然间不仅仅是制作政治人物弱智歌曲演唱动画而已了。Flash也萌生出了以Flex和AIR为形式的附加功能。Flash的竞争对手,比如JavaFx和Silverlight,也在不停的在特性和性能上加筹码。HTML5集成了所有RIA的功能,包括数据库连接,而W3C正式地贴上了AJAX的标签。在不久的将来,RIA专家将会是简历的一个重要筛选条件。

3) Web开发
Web开发在近期内不会消失。很多开发人员满足于忽略Web或者只是使用他们的框架给他们提供的”基本元素”。但是公司需要越来越多的真正知道怎样使用底层技术进行“手工编码”的人。所以要获得成功请在未来5年里努力钻研JavaScript,CSS和HTML。

4) Web服务
REST或者SOAP?JSON或者XML? 尽管选项和答案取决于项目本身,不使用或者创建Web服务对一个开发人员(甚至是那些不做Web应用程序的)来说越来越困难。那些原来采用ODBC,COM或者RPC domains的领域,现在也在某种程度上过渡到了Web服务。不会用Web服务的开发人员将会发现他们被排挤或者沦为维护人员。

5) 其它软实力
有一种已经开始了很久的趋势,IT在企业内部或者外部变得越来越透明。开发人员被卷入越来越多的非开发性会议和过程以给与反馈。举个例子,CFO要改变会计规则不能不依靠IT去更新系统。如果没有IT去升级CRM的工作流,运营经理就不能更改呼叫中心的流程。同样的,客户常常需要和开发小组一起工作来保证他们的需求被满足。每一个开发人员都需要找主持人帮助或者去学习《怎样结交朋友并影响别人》么?不是。但是拥有这种能力的开发人员对他们的雇主来说更有价值——并且更抢手。

**6) 掌握一门动态的和/或一门函数编程语言
**像Ruby,Python, F#, 和Groovy这样的语言并不很主流——但是他们包含的想法却是。比如说,微软的.NET中的LINO系统是函数编程技术的直接产物。Ruby和Python在某些部门很热门,分别感谢Rails框架和Silverlight。学习其中的一门语言不只会提升你的简历;它能开阔你的视野。我见过的每一个顶级开发人员都推荐学习至少一种动态或者函数编程语言,用来理解新的思考方式,个人经验来讲,我可以告诉你确实有用。

7)敏捷开发方法
在敏捷开发方法刚开始进入主流视线的时候,我持怀疑态度,和其他我认识的很多家伙一样。它看起来就像某种对传统的下意识反应,丢掉控制和标准而偏爱混乱。但是随着时间的推移,敏捷开发背后的智慧被更好的定义和表达出来。很多团队不是应用了敏捷开发就是在进行敏捷开发的概念证明实验。尽管敏捷开发不是治愈项目失败的终极灵药,它的确在很多项目上有一席之地。在未来几年里,对有着敏捷开发环境的理解和成功经验的开发人员的需求将会高速增涨。

8) 相关领域知识
和敏捷开发密切关联,开发小组在项目定义中被越来越多的看做是同伴。这意味着了解问题领域的开发人员能够用更可见的,高价值的方式给项目作出贡献。敏捷开发中,一个能够说,“从这里,我们也可以很简单的添加这项功能,而且这能给我们带来很多回报,” 或者 “噢,这个要求和我们的日志中显示的使用模式并不相符” 的人将是优胜者。正如许多开发人员有抵制了解问题领域的想法,不可否认的是越来越多的组织希望(如果不是要求)开发人员至少能理解基本的内容。

9) 开发修养
几年之前,很多(如果不是大部分)团队都没有使用bug跟踪系统,版本控制,和其他类似工具;只有开发人员和他们选择的IDE。但是,感谢新的整合套件的开发,比如Microsoft Visual Studio Team System以及高质量开源环境的爆炸性发展,没用到这些工具的组织变得更不常见。开发人员必须比知道怎么在代码控制中提交和获得代码或者怎样用VM系统配置测试环境了解更多的东西。他们需要在适当的地方养成严格的卫生习惯以保证他们和其他的小组恰当的合作。“代码牛仔”,把所有的东西存放在私人USB盘上,不把对任务对象的相应改变记录成文档,等等的人,在传统的团队里不受欢迎,在需要团队成员之间紧密合作的敏捷开发环境中更是如此。

10) 移动无线开发
上世纪90年末代web开发被主流接受开始在很多领域将传统的桌面程序边缘化,在2008年,移动无线开发开始兴起,在未来5年里,它将会变得越来越重要。当然,移动开发有很多不同的方法:针对移动设备的web应用程序开发,针对市场的RIAs,和直接在设备上运行的应用程序。不管你选择了哪个方向,把移动开发加入你的技能集会保证你满足未来的需求。