软件开发之职业规划
原著 高桥哲夫 翻译 东北藏
软件开发行业要培养出优秀的工程师是需要时间的。要体现出教育成果至少得10年。因为在计算机技术,网络技术,系统技术,软件工程,项目管理等领域从基础到应用是需要高深知识和经验积累的。并不是能够熟练使用编程语言,数据库,网络等就足够了这么简单。那么怎样才能培养出优秀的工程师呢。
培养软件开发的优秀工程师要重视职业规划。职业规划是一种思考方式的体现:前阶段所学的知识,经验或者体验要能促进后阶段的学习这一经验原则。而且在提职业规划前,要认清是否是面向人的这个事实。
本稿要探讨软件开发工程师必要的潜能,以及关于职业规划的见解。
1.软件开发工程师必要的潜能
软件开发所必需的能力是多方面的,可以列举很多项。也不是说什么都得会。比如,编程经验虽然必要,不擅长编程的人如果沟通能力强的话一样可以为项目做出自己的贡献。追求全能的个人本身就不切实际。由擅长不同领域的若干人组成团队来开发项目的话,就是具开发能力的团队。
不擅于理论思考的人不适合软件开发确为事实。因为软件是理论表达的对象。不适合的人是事故的起因,要控制其在这个领域的发展。很多软件开发企业在录用新毕业生时进行适合性测验,一般修养测验,面试等。有的企业甚至要求写小论文,也行之有效。
“无论什么论题均可,用两张A4纸的篇幅总结自己的主张,请于一个星期后提出来。”等这样的问题。一个星期后会对这个小论文提出若干问题。小论文的形式可以起到判断是否具有理论思考力的作用。软件开发与论文写作有相似点。软件开发有自上而下的手法,首先设计整体构成,再进行详细化,这是一般的手法。写论文也同样,首先明确论点,从全局构成出发继而执笔。我本人也使用这种方法,可以判断出适合性。不能写出理论性文章的人也就不适合软件开发。判断适不适合软件开发,小论文的方法是很有效的。当然上述方法是一种假设。教信息技术的人若能调查一下论文书写能力与软件开发能力的关系的话就好了。没有这样的人吧。
软件开发也需要具备归纳的能力。归纳就是从具体到一般,软件开发也要有这种能力。软件的设计也是从这种思考的方式出发的。通过分析/观察一般的多个事实总结出一般化的东西,即组织成程序形式的工作是软件开发的核心工作。
作为软件开发能力的要求,包括编程能力,文档化能力,交流能力等。更具体些就是Java语言,C语言,ORACLE、UNIX、Windows、.NET、J2EE等等的知识和使用经验,这种能力对善于理论思考的人来说几个月便可掌握。仅因为现在没有掌握某种技能便判定其不适合软件开发缺乏准确性。
2.职业规划
要培养出一生以软件开发为事业的工程师,执业规划颇为重要。如果说30岁以前换行业还比较容易的话,随着年龄的增长这样的机会就越来越少。到那时就应考虑发挥此前的经验进一步提高技术熟练度了。
那么,从一般的软件开发工程师到高级工程师必须要走过怎样的职业道路呢。图1的职业规划是我的想法。最初阶段要学习计算机及通信等的基本原理。新产品的开发必须先掌握基础。然后解读使用了这种原理的软件,学习原理是怎样实现的。大量地阅读代码对软件工程师来说至关重要。图1的程序解读虽然给出了Linux和MySQL开源的例子,要有其他好代码的话也可以读。然后经过长年积累学习流行的软件设计技术。不懂实际的软件代码即使学习了软件设计也很难理解其本质。到这一步可以说是软件工程师的基础教育。
经过良好基础教育的软件工程师要进入实践教育阶段了。应用中的软件一旦出现问题,通过阅读代码确定问题产生的原因,这种修正工作对软件的功能理解,构造的理解,原理的理解,设计技术的理解等都大有裨益。然后在组长的指导下进行实际的开发。这个阶段开始就进入关键时期了。
经过软件开发经验的积累就要学习些项目管理了。几乎没有只一个人进行的软件开发,大部分都是经过大家的共同努力完成一个软件的开发任务。经过软件开发的实践就应该清楚项目管理是多么重要了。到了这个阶段,虽然学习了理论很容易停留在观念的理解上。项目管理上同样,要充分利用先辈的成果。大量的书籍与文献里记载了很多项目管理的知识,运用到实际项目中必然要经过实践。人,组织及目标等都不同的不同环境下,不能使用一成不变的固定管理方法。研究相似的案例,实践中理解先辈的思考方式,行动,工作方法进而总结出自己的东西,没有比这更行之有效的了。
图1 职业规划
可以担当一个项目的开发没有几个项目的磨练是不行的。培养出软件开发高级工程师,没有这些知识与经验的积累是不现实的。而且,即便成为了某个层次的工程师,软件开发环境在变,不能停止研究不再钻研。
※最近有些不得不提的事,软件开发的编码与单体测试工程被称作“制造工程”,与上流工程或详细设计工程相分离,让单价更为便宜的其他技术人员担当。很多软件企业把这种“制造工程”外包到中国。
其实,软件开发中没有“制造工程”这一工程。只有设计工程。直至所有的测试都完成的所有工作都是设计。引入“制造工程”这一错误想法的理由很简单。计算机发展的初期阶段还没有理解软件是什么东西的人就成了软件开发的管理者。软件开发有加入公司不久的年轻人担当,管理则被指定为硬件开发出身的人。编码与单体测试就对应成了硬件中的制造工程。这样,很多人就相信了“制造工程”与之前的设计工程是可以分离的。
从本文“2.职业规划”的说明可以看出,没有编码经验的话,不能理解软件设计技术,项目管理手法。更谈不上实际的项目管理了。没有实际感觉到的东西,就只能试探式的管理了。
从职业规划角度看,编码与单体测试被分离出的话,人才的培养便漏洞百出。在各个工程阶段都做到经验的充分积累绝对是必要的。
现在这种“制造工程”继续向中国外包的话,无论是日本国内还是中国国内恐怕很难培养出软件开发高级工程师的。
编者按:中国最发达的11个城市被认定为国家软件出口基地及国家软件出口创新基地。国家的软件外包发展战略固然会对中国软件产业的蓬勃发展起到很大的促进作用。但任何事物都有它的两面性。做任何事情都要讲究度。毕竟有它的负面价值。
仅以此文纪念“国家开发银行50亿贷款为软件外包业开路”政策的出台。