http://shangyi.chinardm.com
欢迎光临
博客网
日历
登录
最新日志
最新留言
日志搜索
日志统计
用户公告

开发软件,你是职业的吗?

开发软件,你是职业的吗?

 

 

20年前不一样,现在软件正发挥着越来越重要的作用,而且以越来越快的速度影响着每一个国家、每一个公司、甚至是每一个人。它是国家核心竞争力的体现,它为商业流程优化提供了可能性,它在不断地改善着我们的日常生活。君不见,软件已经无处不在,无处不有,无人不用吗?

我们工作在这样一个如此重要的领域里,我们从事的事业正在影响着世界的每一个角落。我们应该感到无上光荣和自豪,但与此同时,我们的工作质量,我们的职业道德,将是何等重要。软件开发已成为一个职业,职业规范和标准正在逐步形成和完善,工程师的职业化也已经提到议事日程。在我国,软件业的振兴有赖于软件从业人员队伍的职业化水平,不幸的是我们目前的职业化水平还很低,严重制约了我们软件行业的发展。

下面我从“职业化是软件工程师的必然选择”、“什么是职业化”以及“怎样做职业化的软件工程师”等几个方面,谈谈自己的体会和认识。

 

“职业化”是软件工程师的必然选择

 

世界正在经历着前所未有的变化。世界正在逐渐变平,全球经济一体化的进程在加快,发展中的中国正在与世界接轨。过去那些老的观念彻底地受到冲击,“学而优则仕”只是老一代的想法,虽然延续了数千年,但终于和农民的农业税一起走进了历史。站在时代最前列的年轻一辈则更有着不同的价值观念,他们更多地追捧商业的成功;他们崇拜Bill GatesLarry Ellison;他们不再对国家授予给他们的“助理工程师”、“工程师”头衔感兴趣,他们不再关心自己的单位是什么性质,“个体户”被赋予了正面含义,民营企业也许更充满活力;他们也不担心自己是干部还是工人;他们关注的是职业的素质和技能,他们在乎的是自己的市场价值;他们再不像父辈那样有铁饭碗,他们没有稳定感,他们只有不断地提高自己,以适应社会经济的快速发展,才能不断地争取美好生活。他们尊重职业道德,他们正实践着职场的各种各样规则,并以自己能成为职业人为目标。

越是发达的国家和地区,这种变化表现得越明显。“职业化”是历史发展的必然趋势。

职业化是经济发展、社会分工的产物。大到全球经济链条,国与国之间形成了明显的分工:谁提供能源,谁提供服务,谁制造产品,发展中国家和发达国家扮演着不同的角色。工业和经济的高度发展,需要人们“术有专攻”;流水线的发明和推广应用使分工得以明确和固化,工程化程度越高,分工就越明确,由此而来的就是对各种专业人才的需求越来越强烈。大到一个国家、一个地区和一个企业,小到一个人,只有在这种明确分工的环境中找到自己的位置,才能适应未来的发展。

职业化能带来财富。世界在变化,变得到处充满竞争,不再有稳定的工作。随着宏观经济走势的时好时坏,那些还不够“职业”的人,其工作起起落落。在这个年代,没有可以托付终身的单位,只有托付给自己,不断提升自己,时刻保持竞争力,成为一个真正的职业化人士。唯有这样,才是根本出路。现在的情况是,一方面,所谓的“软件工程师”到处可见,大学毕业生找不到工作,一个招聘广告引来一堆应聘者简历;另一方面,真正合格的软件工程师没几个,公司找人难。于是大量的培训机构搞起了“就业培训”、“岗前训练”、“定制培训”、“实训基地”等等。

综上所述,职业化是市场经济和社会发展的必然要求;市场呼唤职业化人才;职业化能给自己带来光明的职业前途和财富。毫无疑问,对于软件工程师而言,职业化是必然选择。

 

怎样才是职业的(Professional)?

 

字典里,professional既是名词也是形容词。形容词的含义是:职业的、与职业相关的、从事职业的或适合职业的;或是符合职业标准的;或是从事某一特定活动作为职业或谋生手段的。对名词的解释是:从事某项职业的人,尤指有学问的职业;以特定职业为生的人;技术熟练的行业者和专家。

不难看出,非职业的应该是业余的,俗话称其为“二把刀”。这种人说他行,他却不行。说他行是因为他的教育背景,或从他的简历上看到的;说他不行,是因为他不能真正从事这个领域里的正规工作,高不成,低不就。非职业的就是平庸的,平庸的从业人员者在做事方式、思考问题的方式上不到位,缺乏必要的技能和职业素养,其工作成果也不够专业水准。这些人工作是不稳定的,收入也是平庸的,他们在泡沫年代能找到自己的暂时的位置,一遇到泡沫破裂,迅速沦为下岗一族。我们拥有太多这样的软件工程师,缺乏真正职业化的软件工程师。

职业化的软件工程师应该是这样一些人,他们拥有扎实的基础知识,有能力在软件开发的工作中找到自己的位置,他们以正确的方式做事,他们遵守这个行业的游戏规则,信守和公司的合约,他们会尽努力使自己的工作成果尽可能地符合这个行业的标准或规范,他们知道国内外同行都在做些什么,他们大致了解所从事的这个行业的发展趋势。

对职业化的更高要求是遵守行业标准和不断创新。为更深入地理解什么是职业化的软件工程师,我们来看看三个外科医生的故事:

第一个外科医生,重复做着同样的手术,挣到了很多钱,但他的技术不符合规范,也从来不教给别人。

第二个外科医生按照标准给别人做手术,同时他还不断地改进规程。由于大量时间花在创新上,他挣的钱就比第一个外科医生少了一些。

第三个外科医生,开发了一个新的手术规程并加以实践,经常出差到其它地方教其他的医生同行如何去实践这些创新。

谁更职业呢?大家一般不会否认,第三个工程师是最职业的。一个死守陈旧技术、生怕别人学会、只顾自己挣钱的第一个医生,是没有医德的医生,他的技术再精湛,却无论如何也不是职业的。

但是,职业化的概念也正在经历着变迁。上个世纪80年代,我刚接触计算软件的时候,那时我国的软件业还刚刚兴起,那个时候的软件简单,规模也很小,软件生产还是一个手艺,软件工程师还是一个匠人,软件工程缺乏相应的标准和规范,不可能要求软件工程师象第三个医生那样专业。但是,有很多证据表明,时代在变化,对软件工程师的要求也在不断提高。开源代码社区里涌现很多很高职业水准的软件工程师,他们不仅技术精湛,而且践行软件行业标准、规范和最佳实践,同时他们将这些技术、标准、规范和最佳实践,通过互联网络,向全世界的软件开发同行传播,带动这整个软件行业的发展。他们是最职业化的一批人。

不同的组织对职业化有不同的理解,象Construx 这样的权威的咨询机构对职业化的定义是:职业化的软件工程师应该解决有意义(有益于社会和大众利益)的问题;应该尽最大努力满足客户的需要;应该尽可能提供高质量的产品;应该富有创新精神;等等。

IEEE CS也有自己的理解。他们通过11个方面的认证,包括职业道德规范和技能考试,通过者将被IEEE授予“软件开发职业工程师”。

各大软件厂商也有自己的资格认证。但这些认证不是从整体上评价一个软件工程师是否职业化,而是对他们各自产品和服务的一种熟悉程度的测评和认证。

 

怎样才能成为一个职业化的软件工程师?

 

自律、沟通和技能是成为职业化软件工程师的必要条件。

 

一、自律

软件区别于其它传统产品,因为它是看不见、也摸不到的。它本身不像一个具体的物品,人们肉眼看不见软件本身,软件存放在CD里,存放在磁盘里,只有安装后,运行了才看见它的界面;它的开发进度也是肉眼看不见的,你根本无法准确知道你的下属完成了任务的80%还是30%;质量更是不可见的,除非你通过非常认真、全面的测试,你才能了解你下属的代码的质量。一个程序员认真思考问题时的模样和他发呆时的表现一样,外人很难判断。正常上班时间,他要不是好好工作,而是在想心事甚至在消极怠工,你也无从知道。

因此说,“自律”对软件工程师来说更为重要。不象产品流水线上的工人,他们的一举一动都能被看见,他们的工作质量和他们当时的心情关系并不大,他们的工作业绩当时就非常清楚地评判。

自律不仅表现在认真工作上,还表现在与公众(the public)利益的一致性上,表现在和雇主、同行、上级等的关系处理上。IEEEACM联合发布了一个软件工程师职业道德规范,规范一共8条,软件工程师应以此来约束和规范自己的行为。

自律还表现是否为客户着想。你的软件是为客户开发的,只有心中装着客户,才能不断改进产品,不断提高客户满意度。更广义的客户,不仅是掏钱买你产品的人,还有你所服务的所有对象,包括你的经理、你的下属和你周围的同事和合作伙伴,让他们的工作顺利进行,和他们一起共同完成任务,是职业化软件工程师的最起码的职责。

 

二、沟通

还是由于软件的不可见的特性,决定了沟通对于软件工程师的特殊重要性。

沟通的目的是使得软件本身变得可理解。软件既看不见,也摸不着,软件越来越复杂,而且处在不断的变化过程中,几乎不可能一次性地将软件完整、准确地描述清楚,更没有一个文档将软件毫无遗漏地、无二义性地将软件完整定义。为了说明一个产品,到产品的整体功能要求和性能要求,小到程序的结构,甚至一个函数和一个变量的含义和使用方法。

沟通的另一个目的是使得软件工程过程得到有效管理。什么时候能交付一个什么样的产品,软件的质量要达到什么样的程度,是软件项目管理的主要任务。如果没有很好的沟通,项目经理就不能准确知道你的进度如何、你的代码质量如何,项目经理也无从知道什么时候项目能够结束,总共要花去多大成本。

沟通的方法有很多。既有标准化的、结构化的工具语言,如UML,也有书面的表达方式,软件工程强调文档的重要性就是以文档作为沟通的工具,用它和客户沟通(requirement specification);用于工程师和工程师沟通(design document),用于市场人员和工程师沟通(product definitionsystem specification);用于开发人员和测试工程师沟通(design document, requirement specification);用来培训新加入项目的人员;用于今后的维护。口头沟通是必不可少的,尽管理论上,文档在软件工程中的作用固然极端地重要,但是,正如刚才所说的,既没有一个一锤定音的文档,也没有一个严格完整的文档。实践上,口头沟通是文档的必要补充,既可以用于文档形成之前,也可以用于文档形成之后。

沟通的技巧也有很多。文字表达技巧、科技写作技巧和口头表达技巧都属于沟通技巧范围之内。不幸的是,软件工程师在这方面普遍呈现能力不足。

然而,技巧本身固然重要,但对本领域知识的理解和实践经验是沟通的基础。

更为重要的是,对所负责的软件开发工作的责任感。主动和上级、和同行、和下属沟通是职业化所必须的。软件工程的实践中发现,往往由于个别人缺乏主动沟通,导致整个团队的技术方案出现偏差,整个进度受到影响。

 

三、技能

在中国,一线的软件工程师都很年轻。这些年轻的工程师往往担心自己的编程技能能否达到一定的水准。他们认为只要会写这样那样的程序,就认为自己在这个单位立住了脚,心里就踏实了,至于这些程序的文档写没写,代码的质量好和坏,能否被用户欢迎和接受,能否符合公司的商业利益,他们并不关心,认为那些不重要,即便重要,也是能随时就能补上的。他们还认为,不写文档或者代码质量的优化没有优化,不影响他们在公司的地位和跳槽的能力,不影响他们的职业发展。

IEEE的职业化认证要求,一个职业化的软件工程师不仅要掌握必要的专业知识和技能,如编译原理、操作系统原理、数据结构、数据库、编程语言和算法,IEEE更强调以下几个方面:需求的引导和分析、软件设计、软件构造、软件测试、软件维护、配置管理、软件工程管理、软件过程管理、软件工具和方法以及软件质量保证等。

在对比中美两国软件工程师在职业化水平上的差别时,我们发现,其差别具体体现在软件工程师对自身的约束程度上、对客户的负责态度上、对软件开发过程的坚持上、对标准和规范的遵从性上、思考问题和做事的方式方法上。很有意思的一个结论是,大量的事实说明,从编程技术上讲,中美两国的软件工程师并无明显差别。所以相比较而言,自律、沟通比技能更为重要。

 

结语

人们经常会问,为什么软件产品大量地从美国生产,而不是从我们国家?原因当然是复杂多样的,有抗风险的意识、机制和能力差别,有资金投入的差别,有管理水平上的差别,但更为重要的是软件从业人员的职业化的水平上的差别。以上是我对职业化软件工程师的一些理解和看法。

著名的数学家和IT教育专家袁传宽教授,在认真比较了中美两国的软件工程师之间的差别之后,认为中国目前最紧迫需要的是占整个软件工程师队伍的35%的高级软件工程师,袁教授对我国目前的软件人才队伍表示担忧。基于这样的认识和担忧,2002年,担任中关村创新研修学院院长的袁教授和IEEE达成一致,在中国推广CSDPCertified Software Development Professional),学员将系统地接受SWEBOK(Software Engineering Body of Knowledge)训练。这是迄今为止软件工程师通往职业化的最佳路径。

 

参考文献

1.Ethical code of Software Engineer, IEEE/ACM

2.Software Enginneering, Summivalue

shangyi 发表于 2008/2/24 14:25:00 | 阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志

发表评论:

    昵称:
    密码:
    主页:
    标题:
我的博客 OBLOG4.0