做职业化的软件工程师

简介:
做职业化的软件工程师
     文 / 陈尚义
 
20 年前不一样,现在软件正发挥着越来越重要的作用,而且以越来越快的速度影响着国家、公司、甚至是每一个人。作为软件工程师,我们从事的事业正在影响着世界的每一个角落,我们应该感到无上光荣和自豪,与此同时,我们的工作质量与职业水准变得更重要。软件开发已成为一个职业,职业规范和标准正在逐步形成和完善,工程师的职业化也已经提到议事日程。尤其在我国,软件业的振兴在很大程度上依赖于软件从业人员职业水平的提高,不幸的是,我们目前的职业化水平还很低,与美国相比,我们拥有的软件工程师数量可能和美国相近,但我们合格的软件工程师却是凤毛麟角。这严重制约了我们软件行业的发展。
 
“职业化”是软件工程师的必然选择
 
职业化是经济发展、社会分工的产物。大到全球经济链条,国与国之间形成了明显的分工:谁提供能源,谁提供服务,谁制造产品,发展中国家和发达国家扮演着不同的角色。工业和经济的高度发展,需要人们“术有专攻”;流水线的发明和推广应用使这种分工得以明确和固化,工程化程度越高,分工就越明确,由此而来的就是对各种专业人才的需求越来越强烈。大到一个国家、一个地区和一个企业,小到一个人,只有在这种明确分工的环境中找到自己的位置,才能适应未来的发展。
职业化能带来财富。世界在变化,变得到处充满竞争,不再有稳定的工作。中国软件人才的现状是,一方面,所谓的“软件工程师”到处可见,大学毕业生找不到工作,一个招聘广告引来一堆应聘者简历;另一方面,真正合格的软件工程师却不多见,公司找人难。于是大量的培训机构搞起了“就业培训”、“岗前训练”、“定制培训”、“实训基地”等等,籍此弥补专业人士的不足。
综上所述,职业化是市场经济和社会发展的必然要求;市场呼唤职业化人才;职业化能给自己带来光明的职业前途和财富。毫无疑问,对于软件工程师而言,职业化是必然选择。
 
怎样才是职业的?
 
职业化的软件工程师应该是这样一些人:他们拥有扎实的基础知识,有能力在软件开发的工作中找到自己的位置,他们以正确的方式做事,他们遵守这个行业的游戏规则,信守和公司的合约,他们会尽努力使自己的工作成果尽可能地符合这个行业的标准或规范,他们知道国内外同行都在做些什么,他们比较了解所从事的这个行业的发展趋势。
对职业化的更高要求是遵守行业标准和不断创新。但是,职业化的概念也正在经历着变迁。上个世纪 80 年代,我国的软件业还刚刚兴起,那个时候的软件简单,规模也很小,软件生产还是一个手艺,软件工程师还是一个匠人,软件工程缺乏相应的标准和规范。但是,时代在变化,对软件工程师的要求也在不断提高。开源代码社区里涌现很多很高职业水准的软件工程师,他们不仅技术精湛,而且遵守软件行业标准、规范和最佳实践,同时他们将这些技术、标准、规范和最佳实践,通过互联网,向全世界的软件开发同行传播,带动这整个软件行业的发展。他们是最职业化的一批人。
不同的组织对职业化有不同的理解,有人对职业化的定义是:职业化的软件工程师应该解决有意义(有益于社会和大众利益)的问题;应该尽最大努力满足客户的需要;应该尽可能提供高质量的产品;应该富有创新精神;等等。
IEEE CS 通过 11 个方面的认证,包括职业道德规范和技能训练,通过考试者将被 IEEE 授予“软件开发职业工程师”( Certified Software Development Professional )。
各大软件厂商也有自己的资格认证。但这些认证不是从整体上评价一个软件工程师是否职业化,而是对他们各自产品和服务的一种熟悉程度的测评和认证。
 
成为职业化的软件工程师
 
自律、沟通和技能是成为职业化软件工程师的必要条件, IEEE CSDP 是通向职业化的有效途经。
 
自律  
 
软件区别于其它传统产品,因为它是看不见摸不到。软件只有安装运行后,人们才看见它的界面;开发进度也是肉眼看不见的,你根本无法准确知道你的下属完成了任务的 80% 还是 30% ;质量更是不可见的,只有通过非常认真、全面的测试和度量,你才能了解你下属的代码的质量。一个程序员认真思考问题时的模样和他发呆时的表现一样,外人很难判断。因此说,“自律”对软件工程师来说更为重要。
自律不仅表现在认真工作上,还表现在与公众( the public )利益的一致性上,表现在和雇主、同行、上级等的关系处理上。 IEEE ACM 联合发布了一个软件工程师职业道德规范,规范涉及 8 个方面 [1] ,软件工程师应以此来约束和规范自己的行为。
自律还表现是否为客户着想。你的软件是为客户开发的,只有心中装着客户,才能不断改进产品,不断提高客户满意度。更广义的客户,不仅是掏钱买你产品的人,还有你所服务的所有对象,包括你的经理、你的下属和你周围的同事和合作伙伴,让他们的工作顺利进行,和他们一起共同完成任务,是职业化软件工程师的最起码的职责。
 
沟通  
 
沟通的目的是使得软件本身变得可理解。软件既看不见,也摸不着,软件越来越复杂,而且处在不断的变化过程中。因此需要软件工程师进行大量书面的、口头的、或面对面的沟通。大到产品的整体功能要求和性能要求,小到程序的结构,甚至一个函数和一个变量的含义和使用方法。
沟通的方法有很多。既有标准化的、结构化的工具语言,如 UML ,也有文档化的表达方式,软件工程强调文档的重要性就是以文档作为沟通的工具,用它和客户沟通( requirement specification );用于工程师和工程师沟通 (design document) ,用于市场人员和工程师沟通 (product definition system specification) ;用于开发人员和测试工程师沟通 (design document, requirement specification) 等。口头沟通是必不可少的,尽管文档的重要性在软件工程中被反复强调,但是,口头沟通是文档的必要补充,既可以用于文档形成之前,也可以用于文档形成之后。
沟通的技巧也有很多。文字表达技巧、科技写作技巧和口头表达技巧都属于沟通技巧范围之内。不幸的是,软件工程师在这方面普遍呈现能力不足。同时对本领域知识的理解和实践经验是沟通的基础。更为重要的是软件工程师对所负责开发的软件的责任感。主动和上级、和同行、和下属沟通是职业化所必须的,因为软件开发需要团队协作,任何一个工程师的工作都可能会影响全局。软件工程的实践表明,个别人缺乏主动沟通,往往导致整个团队的技术方案出现偏差,或整个项目的进度受到影响。
 
技能
 
在中国,一线的软件工程师都很年轻。这些年轻的工程师都很年轻。这些年轻的工程师过于关心自己掌握的技能是否达到一定水准,却忽视了用户需求,甚至很多时候也忽视软件开发的规范,讽刺的是,他们理所当然地认为这并不重要。
IEEE 的职业化认证,要求职业化的软件工程师不仅要掌握必要的专业知识和专业技能,如编译原理、操作系统原理、数据结构、数据库、编程语言和算法, IEEE 更强调以下几个方面:需求的引导和分析、软件设计、软件构造、软件测试、软件维护、配置管理、软件工程管理、软件过程管理、软件工具和方法以及软件质量保证等 [2] 。这是业界专家学者从大量实践中总结出来的,是面对“软件危机”时人们提出的工程化思想的具体体现。
 
结 语
著名的数学家和 IT 教育专家袁传宽教授,在认真比较了中美两国的软件工程师之间的差别之后,认为中国目前最紧迫需要的是占整个软件工程师队伍的 35% 的高级软件工程师 [3] ,认为这 35% 应该有良好的沟通能力和国际化的文化交流能力,能够看清大局,能够把握项目实施的方向,保证产品开发优有序进行。袁教授对我国目前的软件人才队伍表示担忧:中国软件业正是缺少懂技术、会管理的这 35% ,才导致有想法无法落实,有资源无法组织,水平不高,发展不快。而这一切的根本原因,是我们教育体系不够健全。袁教授所说的 35% ,大致就是我这里所说的职业化的软件工程师。 袁教授认为,必要的系统训练,并获得权威部门的认证,是通过职业化的最佳途径。
 
参考文献
1. IEEE/ACM :《 Ethical code of Software Engineer
2. Summivalue :《 Software Enginneering 机械工业出版社, 2005
3.  袁传宽:“培养关键的 35% 《程序员》杂志, 2007 7
 
陈尚义先生简介: 
现任中国软件与技术服务股份有限公司通用产品研发中心总经理。
毕业于北京航空航天大学,获软件工程工学硕士学位。十几年来一直致力于企业信息化与软件产品开发,积累了丰富的海内外实践经验。先后在国家政府机关、金融系统、外资软件企业担任专业领导职务,成功领导了很多大型信息系统的开发和实施。
1999年陈先生接受闻名东南亚的新加坡KRDL(Kent Ridge Digital Labs)数码实验室的邀请,从事信息安全研究工作。2001年至2004年受聘于美国Ipedo Inc.,任工程经理,从事新一代数据库软件的研发,该公司位于硅谷腹地,其产品处于世界领先地位。
陈先生注重将软件工程的理论和实践相结合,在实践中总结经验。先后在专业期刊、学术会议上发表学术论文多篇,涉及软件开发方法、软件维护、企业信息化建设、信息安全等众多领域。
陈先生兼任美国硅谷信息管理研究院(Silicon Valley Institute of Information Management)研究员,硅谷中国工程师协会(Silicon Valley Chinese Engineer Association)会员,北京航空航天大学、中国科学技术大学校外硕士生导师。
IEEE授权培训结构高级讲师。


















本文转自arthur593351CTO博客,原文链接: http://blog.51cto.com/arthur5933/112289  ,如需转载请自行联系原作者

相关文章
|
3月前
|
设计模式 安全 C语言
软件工程师,全面思考问题很重要
软件工程师,全面思考问题很重要
57 9
|
前端开发 程序员 pouch
程序员最重要的八种软技能
笔者在带团队的六年中发现,程序员们在职场都有一个共同的困扰:“好像写代码都没什么问题了,日常工作基本上都是应付业务需求的开发,好像找不到其他的更大的附加价值了,我应该找一些什么样的发力点才能让我的价值更突出呢?” 。笔者以为,这就是典型的硬技能当下「看似」没有什么问题了,瓶颈卡在了软技能上。所以开篇做个小分享,聊聊程序员的软技能。
41593 18
程序员最重要的八种软技能
|
设计模式 分布式计算 网络协议
软件工程师的 10 个认知模型
软件工程师的 10 个认知模型
214 0
软件工程师的 10 个认知模型
|
敏捷开发 架构师 测试技术
软技能2:软件开发者职业生涯指南-读书笔记
整书有很多内容,从成为一名软件开发者一直到完整的职业生涯,这里只是记录自己阅读过程中感受最深或者最受用的部分。
|
分布式计算 算法 NoSQL
如果说程序员的硬通货是技术,那么软技能是什么?
程序员往往一心扑在编程技术上面,学习编程语言,算法,网络,自己子领域相关的知识等等。这非常正确,也是作为coder的核心竞争力所在,姑且称之为“硬技能”吧。 对于有一个程序员来说除了日常码代码之外,其实也需要很多编程之外的软件能,非专业上面的技能可以更好的展现你的情商,与人合作的能力等。
|
程序员 开发工具 IDE
对程序员非常重要的24个软技能
英文原文:Soft Skills are so important to Software Engineers   软技能通常是被低估的。几乎所有的软件工程师都知道要关注技术的提高,但你忽视的软技能很可能会影响你的职业生涯。
1111 1
软件工程师的职业规划
电信、银行等行业一直是许多人非常向往的工作单位,清差厚禄,旱涝保收,陈皓却不以此为然。所以当记者采访他的时候,他连用了两个“最”字来形容他离开银行的成就感。 陈皓毕业后的前两年就职于云南省工商银行,从事银行电信内全国性业务系统开发。
1541 0
|
程序员
程序员修炼的务实哲学
虽然软件开发不受绝大多数物理法则的约束,但我们无法躲避来自熵的增加的重击。熵是一个物理学术语,它定义了一个系统的“无序”总量。不幸的是,热力学法则决定了宇宙中的熵会趋向最大化。当软件中的无序化增加时,程序员会说“软件在腐烂”。

相关实验场景

更多