硬件学院 | 网络学院 | 游戏秘籍 | 求职技巧 | 企业管理 | 软件资讯 | IT导购 | 软件下载 | 源码下载
软件学院 | 安全资讯 | 图形图象 | 网络营销 | 电子商务 | 硬件资讯 | IT生活 | 教程下载 | 电影娱乐
网站首页 个人求职 单位招聘 高校联盟 猎头服务 培训服务 资讯中心 IT论坛
让每一个热爱IT的人都找到一份满意的工作!
文章搜索:
您的位置首页->-> IT生活-> 程序人生-> 一个老程序员的自白
一个老程序员的自白
作者:未知 来源:转载 加入时间:2006-3-21 www.cnitrc.com
我是一个有12年软件开发经验的老程序员,不敢妄称真正的程序员,现在虽然混到了技术管理岗位,但是,一直没有脱离一线的开发工作,比较崇尚‘活到老学到老’的至理名言。”   中国的程序员大多数似乎具备很强的纵向“能力”,这些程序英雄可以从需求分析、设计、编码、测试,一直作到发布,全部是一个人搞定。如果这些程序英雄作了领导,那么,他所影响的下属也必然是一些像他那样的程序英雄,那么,他所负责的项目管理、流程控制、配置管理、文档管理、质量管理、标准管理等等也必然具有了一定的英雄主义色彩。这种带有英雄主义色彩的管理风格也必然是感性大于理性,感情大于规则的。在感性的、不遵守规则的环境下“锻炼”出来的程序员们,他们写程序、做项目的过程也就像是一篇“英雄史诗”。   国外的程序员的在专业分工上更倾向于“横向分工”,这是依赖于一系列新技术而实现的,这些技术归结为一点——文档技术的革命促进了沟通的效率的革命。   人脑是又局限的,当一个人面队一个复杂的逻辑时,他最先想到的是进行分解和抽象。分解是为了切分出小逻辑,降低大逻辑的复杂度的适用范围;抽象的目的是为了以更容易理解的形式反映用语言和文字难以表示的逻辑。   在软件逻辑复杂度比较小的时候(10年前),一个人可以做一个“很大的”项目,而不需要与别人进行合作。现在,软件项目一般都很大,单个程序员不可能一个人做项目,这就带来了沟通的问题。沟通问题的解决是靠软件工程实现的。实际上,软件工程的所有成果都是用来解决人脑极限和软件逻辑复杂度之间的矛盾的。软件工程实际上是个文档工程,这些文档是用来促进软件开发团队成员的沟通的,这些沟通又可以细分为:   * 与现在的同组成员的沟通,比如接口设计文档;   * 与其他阶段的开发成员的沟通,比如需求文档是用来促进需求分析人员和设计人员的;   * 与未来的自我沟通,比如,将自己写的设计文档进行提炼,总结出一些有重用价值的设计模式,将来就可以直接使用,常此以往,设计水平必然会有较大的提高。又比如,组织良好的代码注释,会为自己在将来的软件升级中带来莫大的帮助。   * 与未来的其他人的沟通,比如:你的代码或设计文档在公司内部不断被人重用,甚至流传到行业领域,被其他人利用。如果能达到这样的境界,你的代码或设计文档必然是很容易被看懂、比较健壮、风格优美、各个方面考虑很周全的。   中国有大多数程序员,通过自学也写过不少代码,他们有的代码写的很漂亮,一些技术细节的处理也相当出众,同时钻研精神也是一流的。但是他们常常被一些错误的观点所左右,缺乏对系统,对整体效率,行为模式的理解能力。这些同道压根没有资格称为程序员,但是据我所知,不少小网络公司的这种同道, 拿着高工资,做着真正项目,项目的结局通常比较低级。   在我看来,作一个真正合格的程序员,应该具有的的基本素质是:   1、团队精神   把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把真正的程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的开发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。   有团队精神的人写出的文档是利他的,是为了让别人看了舒服,让别人看了文档后再不来找他的问“这是什么意思”之类的问题来打扰他。   2、文档习惯   说真正的程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规开发流程中非常重要的环节,是促进沟通,增进效率的最佳方式。作为程序员,30%的工作时间写技术文档是很正常的,而作为真正的程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。   3、遵守代码标准   一些外国知名软件公司的代码标准中,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。   而那些同道们却叫嚣别人写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。   再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的开发协作是绝对不可想象的。   4、需求理解能力   程序员需要理解一个模块的需求,那些同道写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目开发和跟踪经验才有可能有心得。   5、复用性,模块化思维能力   经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。   复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个项目组能够在每一次开发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。   一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。   6、对他人负责   对于一些商业化、正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件开发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。   测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到需求理解能力。   7、总结的能力   程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。   善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,那些同道们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提高。   善于总结,也是学习能力的一种体现,每次完成一个开发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。   一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候马上就到了。具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一个态度问题。
相关文章:
程序人生
职场生涯
白领物语
程序人生
本类阅读TOP10
关于我们 | 服务声明 | 使用帮助 | 广告合作 | 网站地图 | 友情链接 | 加盟合作 | 联系我们
Copyright ? 2006 cnitrc.com Inc. All Rights Reserved. 浙ICP备05074295号
中国IT人才网 版权所有 网络实名:中国IT人才
未经书面授权严禁转载和复制本站的任何招聘信息和文章