`

转载:从程序员到工程师

阅读更多

从程序员升级到工程师大多数象我这样对软件有浓厚兴趣的人,毕业后义无反顾地走进了企业,开始了程序员的生涯。那时,我们迷恋“大全”、“秘籍”一类的书籍,心中只有代码。当我看到一行行枯燥的代码变成了能够打电话的设备,变成了屏幕上漂亮的表格,变成了动听的音乐,成就感油然而生。我觉得自己也是一个出色的程序员了。在用户的机房中苦熬三昼夜解决软件的bug,也成了一种可以夸耀的资历。五年前的某一天,我把曾经让我兴奋自豪的大量代码和少得可怜的文档移交之后,来到了华为。这里有更多的年轻人,我如鱼得水,可以充分发挥自己的想象力。依然是代码,依然是匆匆地在纸上记下稍纵即逝的灵感(我们把它称作文档),依然是无休止地和bug作斗争。当有一天,一个新来的同事拿着署着我的大名的文档,小心翼翼地来问我时,我发现自己好象有点不认识它了。我心里有点沮丧,再看看代码,发现文档上记录的一些灵感已面目全非。我当时不知道那位新来的同事感受如何,但我从那时起,好象意识到什么。现在来看,那时的很多事情都是事倍功半。

      我也见到了我的项目经理,一个个子较高,瘦瘦的年轻人,据说刚从美国回来,已工作了五、六年。我听了心里很高兴,这回要一招一式地学两手。需求分析的时间是一个月,项目经理和我们(实际上代表客户)讨论了proposal中的内容,确定每一项都是需要的。然后他把模块大致划分了一下,开始进入计划中的学习阶段。每个人在学习阶段要写出功能描述的胶片,给其他人讲解,不知不觉中,项目组的所有人对项目有了整体的了解。

      他还安排了一些培训,如他们公司的软件开发模型、项目组中各角色的定义,以后及时的培训不断,只要项目组中有需求,他总是把QA或相关的人请来,培训很专业。需求分析完成后提交了一份四十多页的文档,当我看到这份英文文档中我写的部分整整齐齐地列在其中时,我的感觉很复杂,有些喜悦,但更多的是苦涩,我以前怎么就从来没有这样做过需求分析呢。

      在我写文档的过程中,QA给我们培训过srs的写作模板,后来我还是不放心,让他们一个有经验的工程师写了一段,我们再琢磨着照着写。这份srs虽然是多个人合写,但风格一致,内容详实。更为可贵的是,一直到最后,这份需求分析的内容都没有改过,以至于我们没有机会走一下他们的需求更改流程。

      需求分析是项目的第一阶段,第二阶段的开发时间要根据需求分析的结果来确定。当对方的首席技术官(相当于我们业务部的总体组长)来和我们讨论计划时,他们已列出了对每个 模块的代码行数的预测,可能存在的风险。根据他们公司的生产率--300行/人月,他得出了项目第二阶段需要多少周。

      我们当时就提出了异议:1)公司对该项目需求很急;2)每月300行是否太少;3)我们还有下载的源代码参考。他解释说,300行/人月是使得项目能达到他们质量标准的经验数据,考虑到有源代码参考,生产率最多不能超过350行/人月。

      当他问我们公司的生产率时,我脑袋里转了三个圈,没敢多说,大概六、七百行吧。他沉默了一会儿,然后坚定地说,我们这个计划是建立在确保质量的基础上的,我想你们到印度来开发软件,首先看中的应该是我们印度公司的质量保证。我知道你们不缺乏软件开发人员,你们为什么不选择下载的软件呢。几句话说到了我的痛处,现在国内的弟兄们还在为使用下载软件移植的产品四处奔波呢!

      随后的开发活动有条不紊,我们老老实实地跟着做。系统测试计划、用例,概要设计,集成测试计划、用例,详细设计,单元测试计划、用例,编码,单元测试,集成测试,系统测试。一个完整的v模型开发过程,其中每个过程都有review。当我们对一些设计的方法不太明白时,项目经理给我们发来了相关的资料,我不知道他当时是怎么想的,一些基本的分析、设计方法是十年,甚至二十年前的软件工程书中就讲到的,印度每个计算机专业的人员都是必修这些内容的。而我们除了对一些具体协议的代码很熟之外,对这些常用的方法似乎一无所知。我感到一些羞愧,进城直奔书店,把他给我开列的书找了出来,晚上躺在床上,仔细研读,我仿佛突然又遇到了能给我指点迷津的良师益友。现在印度所已形成了强烈的学习风气。我回来后也推销了700多本书,这些书教我们如何用工程化的方法开发软件,是成为一个软件工程师必读的资料。

      我们的项目经理的计划控制能力很强,当有什么影响到项目计划的事情发生时,如人员辞职、实验室搬家、某一模块预测不准(该模块是我们预测的),他总是采取必要的措施,减少延期,调整计划。刚开始,我们对他们每天上午11点,下午4点下楼喝咖啡还有点意见,后来也跟着喝去了,原来,喝咖啡时的交流非常丰富,从项目管理到设计方法,从技术发展到风土人情,无所不包,对我们互相之间的理解,对团队的气氛很有帮助。我们项目的QA也在适当的时候出现在我们的面前,我们对她的工作只有一些感性认识。她每次参加会议时,手里时常拿着一个check list,项目经理准备相应的资料,回答一些问题,她打着勾,或写着项目经理的解释。她给我们做培训时也很耐心,体现出很好的职业素养,我至今还在怀念她给我们的帮助。


      我从事软件开发已有九个年头了,可我现在仍然不能说自己是个合格的软件工程师,更不用谈什么合格的管理者。我看到一份报道说,瑞士洛桑一权威机构把中国的科技综合竞争力从原来的第十三位调到二十多位,原因是他们调整了一些评估标准,其中有一条是中国合格工程师的可获得性非常低 。想着弟兄们熬红的双眼,四处奔波升级的疲惫身影,我有一个强烈的愿望:快把我们自己升级成合格的工程师吧!

 

 

 

分享到:
评论

相关推荐

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    ### Java程序员面试试题详解 #### CORBA的理解与应用 CORBA,全称为Common Object Request Broker Architecture,即公共对象请求代理体系结构,是由Object Management Group(OMG)制定的一项标准。其核心目标在于...

    程序员简历模板

    对于程序员而言,一份好的简历能够直接从999+的简历邮件箱中脱颖而出,收到hr邀请面试的电话。但为什么有人的简历投出去就像是石沉大海,了无音讯了?因为问题出在了简历上,对于不善于言辞的程序员来说。 作者:祈...

    Java工程师新人入门书籍推荐

    Java工程师新人入门通常需要经历一个从基础到进阶的过程,以下是一些推荐的书籍和学习路径,帮助初学者系统地掌握Java技术。 1. **新手入门打基础**: - 《Java 语言程序设计》:这本书适合初学者快速学习Java语法...

    [RPA之家转载]从小白到大神UiBot基础课程

    其中包括RPA开发工程师、售前工程师、业务分析师、架构师、运维工程师、项目管理、项目负责人、企业高管、HR等多种角色。社区提供了各种丰富的教程、资讯、文章、问答、招聘、活动、项目等供大家一起交流和成长。 ...

    Java-Tutorial:【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,如果对你有帮助,给个star告诉我吧,谢谢!

    我靠着这些内容进行复习,拿到了BAT等大厂的offer,这个仓库也已经帮助了很多的Java学习者,如果对你有用,希望能给个star支持我,谢谢!为了更好地讲清楚每个知识模块,我们也参考了很多网上的优质博文,力求不漏掉...

    dreaming in code

    4. **项目管理的难题**:从项目计划、进度控制到风险管理,软件项目管理面临着多重挑战。本书通过具体项目的经验教训提供了宝贵的见解。 5. **追求卓越的愿景**:尽管面临重重困难,本书中的团队成员依然保持着对...

    changgou完整无bug源码.7z

    属于B2C电商模式,运营商将自己的产品发布到网站上,会员注册后,在网站上将商品添加到购物车,并且下单,完成线上支付,用户还可以参与秒杀抢购。 前后端分离 网站后台的部分采用前后端分离方式。 以前的JavaWeb...

    LabvIEW做的关于耐氏曲线(转载)

    LabVIEW提供了丰富的函数和工具,使得非程序员也能轻松地构建复杂的信号处理算法。 耐氏曲线的绘制通常涉及到以下步骤: 1. **频率变换**:首先,将时域信号通过傅立叶变换转换为频域信号,这一步在LabVIEW中可以...

    VC 视频教程1

    北京维新科学技术培训中心最大的优势就是拥有专职的软件开发和网络工程教师,能够深刻的体会到一名优秀的程序员和网络工程师是怎样成才的,中心对计算机技术培训有过深入的研究,走出了一条非常符合实际需求的教学...

    取色工具- colorcop

    你在设计网页,或者用软件编制图片的时候,经常会对颜色进行转换操作,Color Cop 就是转换你的 RGB 颜色到 HTML 的颜色值,它是一款适合网页设计师、程序员使用的多用途的颜色采取器。 Color Cop 包含多种功能特性...

    展现C#世界[转载]

    - C#内置了内存管理,通过垃圾收集器自动管理内存,减轻了程序员的负担。 3. **面向对象**: - C#支持所有主要的面向对象概念,如封装、继承、多态和抽象类。 - 通过接口,C#实现了多态性,允许类实现多个接口,...

    十佳最受欢迎的编程语言 你擅长几个?

    保持领先是任何软件工程师面临的最大挑战之一。那么哪种编程语言的需求最经久不衰? 我们统计了一些在2014年仍能保持竞争力的编程语言,下面按照排名一一道来。 10. ASP.NET ASP.NET是服务器端的Web应用程序框架语言...

    PLC编程入门-个人总结-转载.doc

    制作逻辑关系图是一种有效的组织思路的方法,它可以帮助程序员与客户共同确认需求,确保程序逻辑准确无误。此外,通过与客户的沟通交流,还可以进一步细化和完善逻辑设计,从而提高程序的质量和效率。 #### 四、...

    unix 编程应用问答中文版

    这一时期的创新不仅推动了计算机科学的发展,也为后来的软件工程师们留下了一笔宝贵的文化遗产。Unix以其强大的功能、灵活性以及开源共享的精神,吸引了全球众多程序员的参与,形成了一个充满活力的共享传统文化圈。...

    反调试技术实例_VC版

    它涉及到程序员使用的技术来防止或检测他们的程序在调试器下运行,以保护代码的安全性和知识产权。"反调试技术实例_VC版"是针对Visual C++(VC)平台的一个示例集合,可能包含了多种反调试策略的实现。 1. **调试器...

    毕业设计电商网站源码-front-end-interview-questions:史上最全最新前端开发面试题

    想成为优秀的前端工程师,首先在专业技能领域必不可少,其次在团队贡献、业务思索、价值判断上也有要求。这三方面能决定你的专业技能能够为公司产出多大的价值。 我觉得程序员最核心的竞争力是学习力和责任。 学习...

    毕业设计电商网站源码-front-end-interview:总结前端的种种知识点

    欢迎star,仅限个人学习和交流,禁止转载 职业规划 首先应该是一个优秀的程序员 其次是努力使自己成为某一领域的技术专家 通过技术更好的服务于团队和业务 提高沟通能力,团队协作,发现问题,解决问题,总结问题...

Global site tag (gtag.js) - Google Analytics