在审视屏幕上的数据图表时,大文豪狄更斯的断言不断在脑际萦绕。面前这份Excel文件,包含了20,000多名中国程序员对近70个问题做出的回答。这些问题涉及软件开发工作的各个方面,来自今年早些时候本刊联合CSDN网站和各种IT机构所做的大型网络调查。面对全国60万开发人员(其中30万为职业开发人员),结合其他的一些调查和报告,本文试图说明中国开发者工作状况,并在某种程度上对今年的发展趋势做出预测。
他们是谁?在做什么?
有位朋友在一篇为中国软件技术叫屈的文章中说,他当年曾经“用6502写过软卷轴”。相信现在大多数中国程序员都看不懂这句话——实在太过时了。现在是年轻人的天下,20—30岁程序员占总人数的80%以上,而其中26岁以下的又占一大半。乳臭未干但朝气蓬勃,这是最恰如其分的评价。
这有理由让人担心中国程序员年轻化带来的问题。从人员结构来看,程序员、高级程序员、项目经理、架构师的比例分别是35.44%、19.74%、10.24%和2.42%,27岁以上30岁以下的人员,具备相当实战经验,人数虽少,但却是项目的中坚力量。大量缺乏经验的年轻开发者,仍在“从奴隶到将军”的漫漫长路上摸爬滚打。他们的成长,同时也代表着中国软件技术和业界的逐渐成熟。
这支年轻的队伍是新生产力的代言人,他们是否得到了应有的回报呢?52.86%的受访者月收入在1000-3000元之间,基本上是入行两年内的正常收入水平。月收入3001-5000元的占25.49%,属于项目中的主力程序员级别。12.42%的受访者月收入达到5000-10000元人民币,恰好与前文提及的项目经理和架构师比例之和大致相当。国家统计局2004年3季度的统计结果显示,城镇人员月平均收入约2900元;软件从业人员的收入在社会上处于中等偏上位置。另一项关于薪资的调查显示,开发技能和经验是影响程序员收入的重要因素。
影响薪资的因素还包括工作地点。北京、上海、深圳、广州是IT企业集中的城市,这些城市的软件开发人员收入水平大致相当,但各地有各地的特点:广州中低收入者比例比其他城市高,北京中偏高收入者居多,上海和北京类似甚至更为明显,深圳月收入5000-10000元的程序员在四个城市中是比例最高的。
93.75%的受访者在项目中用到数据库技术,行业项目开发和应用软件开发势均力敌。特别值得注意的是教育(5.85%)和制造业(10.82%)的行业应用。国家在远程教育方面的政策性投入显然推动了教育行业软件的发展;在10.82%的数字背后,是制造业信息化需求高涨的呼声。教育软件和远程教育系统仍将呈增长态势;而计算机相关制造业方面,由于PC市场的整合,有太多未知因素会影响其发展。
我Java,我开源
中国开发者普遍接受J2SE 1.4平台,作为推出已经两年的成熟Java2平台,J2SE 1.4完全有理由享有这样的明星待遇。开发工具方面,JBuilder继续称霸,但开源的Eclipse已经抢到18.94%的占有率,且呈增长态势。在8月份的一次线下活动上,Borland(中国)高级工程师左轻侯先生表示,Eclipse和JBuilder不是一个级别的东西,前者是IDE,而后者涵盖了软件开发生命周期的各过程,是成熟的企业级开发平台。随着Eclipse的成熟,更多特性被加入进来,很难说它未来会发展到什么程度。IBM对开源社区的捐助,显然有其深意。
无论如何,开源软件为Java拥有成熟企业级架构做出了极大的贡献,同时自己也赢得了市场的认可。JBoss试图通过销售服务挣钱,如果它真的成功,开源软件对抗商业软件也有了经济意义上的说服力。没有人会只想要一张吱嘎作响的床,开源与商业的根本分歧在于,到底什么才能成为商品。今年开源社区官司不断,其中甚至有开源组织之间互相攻击的例子(Apache与JBoss互称对方侵权),让不了解开源的人顿生“相煎何太急”之感。别忘了,开源协议的复杂度,并不比微软那纸“最终用户协议”来得轻巧。号称“自有知识产权的Linux操作系统”的,可以休矣,踏踏实实学JBoss才是有出息的做法。
调查显示,开源软件的首选平台是Linux。商业(ERP、CRM)和Web应用是开源软件的两大应用方向。在被问及“使用何种开源协议”时,近一半用户选择了GPL,相信这与开发者对各种协议的熟悉程度有关(或者说,与受访者经常使用的开源软件所采用的协议有关)。
.NET异军突起
当Anders Hejlsberg选择离开Borland时,整个Delphi开发者社群都在叹息。在 .NET Framework上Hejlsberg找到了更能实现自己想法的空间。如同整个.NET平台,C#语言如今已经是计算世界中不容忽视的初生牛犊。
.NET是继Java之后最重要的平台级开发框架。尽管在我们的调查中仅有一半的受访者已经开始在.NET Framework上进行应用开发,但在回答“明年打算学习什么语言”时,选择C#的多达36.21%。这说明基于.NET Framework的应用开发还有很大空间。
仓促推出的Delphi 8 for .NET并没有让Borland追上微软的脚步。该产品被普遍认为是让人失望的“半完成版”,许多Delphi开发者转向VS.NET。VS.NET几乎是唯一可选的成熟.NET开发工具,在Delphi 2005真正赢得市场(机会微乎其微)之前,目前83.82%的占有率不大可能降下来。作为Delphi的老用户,我期望Delphi 2005能收拾Delphi 8 for .NET的烂摊子,在.NET Framework开发工具战场打下自己的一块地盘——这个任务有些艰巨,因为有82%的受访者表示,短期内不会考虑更换开发工具。
借.NET Framework高歌猛进之机,微软对VB动了一次大手术。VB.NET是真正面向对象的语言,撇除某些历史遗留问题,对.NET Framework的支持已经足可称完整,而且也获得了仅次于C#的用户追捧度。Visual C++.NET可谓是夹缝中生存,面临不高不低的尴尬局面。对于C++程序员来说,现在马上决定转向.NET平台尚为时过早。除了Delphi,另外一些编程语言/应用平台也在向.NET靠拢,特别是一些动态语言。
绝大多数程序员是从其他平台或编程语言转向.NET Framework应用开发。其中,来自C/C++的人数最多,达27.29%(我猜他们不会太happy);来自VB的占22.49%(上帝保佑吃饱了饭的VB程序员);来自Java的占16.42(Bye, McNealey);来自Delphi的占15.99%(跟着Anders没错)。不能忽略从ASP等脚本语言转向ASP.NET的程序员们,他们占总人数的13.18%。是的,他们还不是多数,不过请注意,.NET Framework似乎对每个领域的开发者都具有吸引力,这的确是它可怕的地方。
有趣的是,58.34%的受访者表示,他们的.NET应用需要移植到其它操作系统平台。开发者的胃口似乎永远填不饱,怎么能责怪他们——谁敢说结合Java跨平台和.NET语言无关的想法是错误的呢?然而理想终归是理想,微软将把.NET Framework和Windows操作系统融为一体,它可不希望别的操作系统借助.NET而崛起。
Web Service:爱你没商量
在不间断的争论之后,XML/Web Service终于渐入佳境。目前在开发中使用XML的人数占总人数的59.54%;对于Web Service,这个数字仅是49.51%。调查中显示的增长趋势令人震惊:计划使用XML的人数占总人数的89.44%,计划使用Web Service的人数占总人数的84.74%。很明显,XML/Web Service已经或即将成为未来应用中数据交换、表达的杀手级标准。由于大量应用会是跨地域的网络应用,所以,Web Service的安全性和效率,是受到普遍关注和担忧的问题。
令人忧虑的是,有约15%的用户在选择使用XML时,是出于“遵循业界标准”的考虑。把“业界标准”当作唯一的影响因素,极有可能忽略项目本身架构的合理需要,使数据表达和数据交换成为项目的薄弱环节,甚至是鸡肋。
移动设备应用开发:这块奶酪能动吗?
有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足可说明嵌入式/移动设备应用开发是一块诱人的新鲜奶酪。J2ME是嵌入式/移动应用平台的王者,Linux和WinCE分列二、三位。Nokia等厂商力推的Symbian平台目前开发者占有率尚未达到满意水平,考虑到调查项合并了嵌入式设备(例如PDA)和移动设备(例如智能手机),Symbian、WinCE系列在移动平台上会是竞争的主要两方。如果厂商能在标准实现上做得更加规范,则J2ME的跨平台特性会发挥得更加淋漓尽致,继续保有王者地位。
从编程语言的角度来看,C/C++、Java、C#是嵌入式/移动设备应用的主要开发语言。这也恰好可以解释为什么许多程序员选择C/C++、Java和C#作为他们下一个要学习的语言。
我在今年初的文章中曾断言,未来的应用会是跨设备、跨媒体的。无论是“PDA+手机”还是“手机+PDA”,最终个人移动终端会是我们不可缺少的随身工具。越贴近移动终端特性的应用,需求也越大。通讯、日程管理、商务,是移动设备应用的三大主题。
这块奶酪到底能不能动?个人移动终端软件应用会是极其庞大的市场,不过最好厂商之间的隔离、操作系统之间的隔离考虑在内,甚至同一厂商和操作系统,你也有可能需要为每个机型做一个单独的版本。“一次编写,到处运行”在移动终端上现在还行不通,哪怕是J2ME也不能完全做到。所以,你针对的用户,将会是整块奶酪上面的一小粒。为了获得另外一小粒,要付出的力量可不小。与硬件紧密相关的特点,使得移动终端开发具有相当陡峭的学习曲线(仅就各主要手机型号的native的代码而言,不包括Java,也不包括WinCE)。选择移动终端应用开发,或许得抱着不成功则成仁的决心。
精致化遭遇软件作坊
李维先生在《Borland传奇》一书中写道:“精致化的程序开发能力、面向对象和Modeling技术的平民化,则是属于比较贴近开发人员的发展,也是开发人员能够掌握和进一步控制的因素,是软件人员必须了解未来继续从事软件开发工作时必须克服和掌控的技术趋势。”各个开发工具厂商都在推自己的“精致化”方案,例如Borland的ALM/SDO,IBM Rational的六种开发角色。事实上这些方案都是关注开发过程本身,力图使其中各种参与角色和环节达到最优化的配置与协同。
这些概念在多数中国软件公司中遭遇了困境。
我们不得不承认,许多软件公司的开发过程仍然停留在作坊时代,甚至连最基本的配置管理都没有做到。在工作中没有使用任何源代码版本管理工具的竟然占总数的34.1%,因此带来的混乱和损失之巨大几乎无法估量。在开发工作的尾声,没有使用任何自动化测试工具的占到总数的60.24%,这样做出来的产品谁用谁倒霉。
有69.21%的受访者表示其服务的组织使用各种建模工具。具有讽刺意味的是,我不止一次听到过所谓“先编码,后建模”的说法。建模成为糊弄客户的手段,或是纯属为了达到CMM标准要求做的表面功夫。难以想象没有源代码管理和自动化测试的软件企业,能很好地利用建模和其他方法,做出高品质产品。
TDD/Agile/XP/RUP/MDA,这些软件开发方法和思想不见得会在短时间内对中国软件开发技术产生很大影响。许多中国软件企业需要补基本功这一课,再来谈“银弹”。对于开发者也是如此,与其问“你XP了吗”,不如问“谁吃了我的代码”来得实在和有意义。
专业水平:修行靠个人?
多数软件企业没有对程序员开发水平的提高给予足够重视,也未配备相关资源。没有为开发人员技术培训拨出专项费用的企业占77.64%。
由于各种原因,程序员经常参加各类技术讲座的比例不超过22%,有30.58%的受访者不参加任何由厂商主办的开发者技术大会。开发人员了解技术信息的渠道,集中在厂商技术支持站点和第三方技术信息站点。MSDN中文站、IBM DeveloperWorks中国网站和Sun技术社区,是中国开发人员最常访问的厂商技术支持网站。BEA dev2dev和Sybase Developer Network是相关领域技术人员的首选信息来源站点。大多数开发者倾向于获取本地化内容,而非阅读英文内容。
受访者普遍认同各类厂商认证考试,持有厂商认证证书的受访者占总数的34.8%,而有77.74%的受访者表示打算参加这些认证考试。
培训是受访者认为重要的学习渠道之一。“希望通过培训学习实际技能”和“希望通过培训学习更多理论知识”的人数大致相当。费用和时间是阻碍开发者参加培训的两大障碍,后者与所在企业相关规定有关。所以,选择“晚班或双休日班”培训的人数占总人数的76.8%,也就不足为奇了。在选择培训机构时,师资力量是最重要的衡量因素。知名的资深人士、专业培训讲师、专家学者,是受训者最愿意接受的讲师。只有4.32%的受访者愿意选择大学教师作为讲师,这从一个侧面反映了我国大学计算机专业教育躲进小楼自成一统的自闭格局。
结语
2004年初,我曾提出几个关键字:移动平台,64位计算,Linux,在线娱乐,Blog。2004,这不安分的年度开始于一个笑话(FM365域名被抢注),结束于另一个笑话(联想收购IBM全球PC业务)。2005可能是震荡的一年,无论是软件还是硬件,抑或是互联网本身,都即将进入新一轮的进化与整合。系好安全带了吗?狠狠地踩下油门吧。
本次调查是CSDN主办,联合众多技术网站共同进行的调查,用户需要填写几十个专业问题。这是中国软件史上最为详尽和专业的调查,大家的参与热情之高,远远超出我们当初的预料。(完)