程序员特有的9个坏习惯

如果你是一个程序员, 或者你就读计算机相关专业, 那么你应该能理解下面这些诡异的小习惯是怎么养成的, 或者你本身就有着其中的某些习惯:

0. 程序员数数会从0开始数起.

例: 程序员吵 架的时候会说: “我数三下, 你再不闭嘴我就不客气了! 零! 一! 二!” 或者列清单的时候编号会从0.开始写.

因: array[0]是数组的第一个元素.

评: 这个习惯的养成是一个艰难的过程. 多少次的越界, 多少次的循环次数错误让我们深深的记住了从0开始.

1. 程序员用肯定和否定 回答选择性的问题.

例: 问 “您想喝咖啡还是喝茶?” 程序员答: “嗯.”

因: 当条件或||有一个子句值为真, 则整个语句值为真.

评: 这个习惯夸张了一点, 但这的确是程序员思维方式的通病, 用计算机的处理逻辑处理人类问题. 当然这样的回答显然是存在编程错误的, 因为对于这个问题他错误的返回了布尔型的值. 虽然高度怀疑有没有人关心这种回答的结果是怎样, 还是给出一个答案. 如果真的在程序的世界里, 服务员会优先考虑给你咖啡, 如果没有咖啡了, 才会端茶给你.

2. 程序员普遍患有或曾经患有分号结尾综合症;

例: 比如这几行;

因: 大部分程序, 特别是多数程序员的启蒙编程语言C语言是用分号结尾语句的;

评: 换行之前习惯用分号结尾, 这是程序员专属的坏习惯. 还记得编译报的各种诡异的错最后原因总是少了那一个小小的”;”吗? 这就是这个坏习惯的成因. 据说分号结尾是有典故的, 因为键盘上的分号正好在右手小拇指的位置, 比起句号之类有着得天独厚的地理优势. 当然也有不需要分号结尾的编程语言(比如Ruby还有Python), 刚用起来会因为没有分号结尾而格外纠结.

3. 程序员对”语言”的概念和普通人有差.

例: 问: “你都会哪些语言?” 普通人: “我会汉语和英语, 还会一点点法语.” 程序员: “我会C语言, C++ 和 Java, 还会一点点Ruby.”

因: 程序员的世界里没有母语和外语, 只有编程语言.

评: 说真的, 程序语言的语法学起来比外语更容易, 拿到一个用没学过的语言写的程序, 你多少可以看懂部分程序. 程序语言没有国界, 是各国程序员交流最好的桥梁.

4. 程序员格格外外的厌恶括号/引号不配对的情形.

例: 看到这样的内容 (举个简单的例子(我知道你懂的), 你能表示”我很淡定我不抓狂吗?

因: 各种不配对问题会导致编译错误.

评: 扫视代码, 对不配对的情况异常敏感, 瞥一眼就能发现哪里少了个右括号. 这种症状在使用那些带自动补全功能的开发环境时变得更为纠结.

5. 程序员认为 千(k) == 1024.

例: 程序员换算表: 1km == 1024m, 1kg == 1024g.

因: 成因很曲折 计算机是二进制的世界 -> 1024是2的10次方 -> 英语里用kilo一词来表示 -> kilo翻译成中文是”千”, 比如千米, 千克.

评: 也许一般人会认为500, 1000是很整的数, 但程序员会觉得512, 1024是很整的数. 不要奇怪, 如果128, 256, 512这种形式看着不够整, 帮你转换成二进制: 10000000, 100000000, 1000000000…

6. 程序员惯用 == 来表示相等的意思.

例: 见5.

因: 在程序语言中, “=” 是赋值, “==” 才用来判断二者是否相等.

评: 单等和双等的区别是程序入门必修课, 也是老师爱考的考点. 如果在C语言if语句的判定条件里写了个单等, 编译能通过, 结果却往往不对, 够一个新手查上一阵子的. 当然目前的语言大都考虑到这一点, 防止了这类的误写, 但是单等和双等的差异已经深入每个程序员的 内心.

7. 程序员使用”//”表示”请无视这一行文字”.

例: 餐厅中. 程序员A: “我吃鱼香肉丝盖饭, 你吃什么?”

程序员B: “宫保鸡丁盖饭.”

程序员A 在点菜单写上:

鱼香肉丝盖饭 1

宫保鸡丁盖饭 1

程序员B: “我还是要牛肉面吧!”

程序员A 更正点菜单:

鱼香肉丝盖饭 1

// 宫保鸡丁盖饭 1

牛肉面 1

因: 程序中用”//”为代码加上注释, 程序运行时会无视掉”//”开头的代码行.

评: 如果和一伙程序员在一起时被冷落了, 可以抱怨一句”喂喂喂我是被注释掉了吗?” 相信一向以幽默感丰富又有爱心著称的程序员们会关注你的.

8. 程序员有 中文标点恐惧症.

例: 如果你注意到了, 这篇文章自始至终都在使用英文标点, 这就是最好的例子.

因: 程序中的全部符号都严格需要是英文半角标点.

评: 这个坏习惯是有中国特色的, 中国程序员特 有的. 任何一名优秀的我国程序员都应该可以作到区别中文标点和英文标点. 比如, 和,还有 ’和 ‘. 真的, 当年初学编程的时候, 诸如 “error C2018: unknown character ’0xa3′” 的错误看得还不够多吗!

就是这样一群人, 如果你慢吞吞的用电脑他们会急躁的抢过键盘熟练的使用各种快捷键, 他们会对着小孩子讲计算机的三原色是红绿蓝而不是红黄蓝, 他们描述大小距离更偏向于以像素作单位, 陪女朋友看电影看到电影院座位上稀稀落落的人就想做磁盘碎片整理…抱怨归抱怨, 这不也正是他们的可爱之处吗!

如何做一个合格的程序员

     程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立,到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大的贡献。
      中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比 也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性的重要工作。
      有很多朋友,他们18~22岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错 误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,正如一位网上的朋友说得很好,他们实际上只是一些 Coding Fans,压根没有资格称为程序员。

      作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。

      1、团队精神和协作能力
      把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如 Linux 这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为 Linux 写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。

      2、文档习惯
      说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。

      3、规范化、标准化的代码编写习惯
      作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
      有些 Coding Fans 叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。
      再看看整个 Linux 的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。

      4、需求理解能力
      程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境, 将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。

      5、复用性、模块化思维能力
      经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。
      复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这 个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在 每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
      一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。

      6、测试习惯
      作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
      测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该 模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到的需求理解能力。

      7、学习和总结的能力
      程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果
想安身立命,就必须不断跟进新的技术,学习新的技能。
      善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,一些小 Coding Fans 们,他们也津津乐道于他们的学习能力,一会学会了 ASP,一会儿学会了 PHP,一会儿学会了 JSP,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握了多少所谓的新语言,永远不会有质的提高。
      善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
      一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候马上就到了。

      具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由 IQ 决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。

中国程序员更难做

中国软件行业虽然发展快,但起步晚,不仅仅落后于印度、日本,更落后于软件业春秋鼎盛的欧美,而且中国软件行业的情况很特殊。
达内CEO韩少云拥有10多年软件开发与设计经验,他综合各种统计数据,认为对比技术最为发达的欧美地区,中国软件特点主要有如下三大不同:

  1. 开发工具中,欧美国家多使用正版的开发工具,如JBuilder,而中国使用开源和试用版本居多(说白了有时候是盗版),如 NetBeans等;
  2. 商用平台方面,欧美采用系统软件的公司居多,如WebLogic、WebSphere等,中国公司减少使用Java中间件产品,而多使用开源平台Tomcat、JBoss、Spring
  3. 欧美软件行业的发展已经非常专业和完善,形成了良好的行业标准,所以职业细分详尽,如Junior、Senior JAVA(初级、高级JAVA)工程师;中国则不然,软件开发专业分工较弱,难有行业确定的工程师分工与等级,对软件工程师所具备的技能要求多,不仅掌握开发语言与不同的开发工具,而且需要掌握测试、系统、数据库、网络等各方面的应用技术,要求全面而宽泛。韩少云认为比较起欧美的程序员,中国程序员更难做,不但待遇难与欧美水平同等,要求也更高。欧美使用正版开发工具及系统软件,同样也获得专业厂商的系统的技术培训与支持,而中国使用开源技术与平台则使程序员常处于“自己摸索”的状态;欧美程序员分工细致,多术业专攻,而中国的软件人才须一专多能,开源与商用兼顾,这无疑给中国程序员提出了更高的要求,也使得中国程序员的开发难度更高。

程序员35岁后的三条出路

     高薪的IT行业是众多年轻人的职业梦想,然而,一旦身入其中却发觉没有想像中那么美好。被称为IT蓝领的编程员,工作强度大,像个编码“机器”;技术更新换代快,饭碗不稳定。随着年龄的增长,IT编程员该何去何从?
      程序员的困惑:我该何去何从?
      32岁的Smith(化名)已算是IT行业的元老了。
      大学时代的他,有2/3的时间是在校园微机房里度过的,当时,他疯狂地迷上了电脑。大学毕业后,Smith早早地被一家IT业著名的跨国公司录用,担任程序员。
      刚进IT行业时,Smith有股火一般的热情,参与了不少项目,而且都成功了。公司对他也很器重,付给他的薪水在当时的同学中可算是天价。在后来的IT泡沫中,Smith的公司也还算稳定。
      一晃八年过去了。期间,Smith曾换了两家公司,虽说薪水越来越高,但他却越来越困惑。今年他已经32岁了,以前不觉得,但现在,他感觉程序员的工作强度太大,自己一直在超负荷运转,工作状态就一个字:累。况且,由于这一行的特殊性,从业者必须不断地学习。32岁的程序员虽然技术老到,但毕竟在学习能力、反应速度、工作效率上渐渐地开始和年轻人有了差距,Smith觉得后生可畏,感觉自己的竞争力在缩水。
      何况,现在IT业不比以往,面对大量“廉价”的职场新人,老板不仅可以挑肥拣瘦,还可以随时让薪水已涨到一定水平的老人“走人”。Smith的同事Tom(化名)就是这样被公司“请”走的。Smith担心:不知何时,这根裁员的大棒就要挥到自己的头上。目前,虽然自己薪水不低,但“天下没有白吃的午餐”,得到的多付出也就更多。而且业界还有这样的传统,过了35岁,IT编程员就有转岗的可能。未来该何去何从,Smith深感困惑。
      寻求职业发展的“第二春”
      Smith的处境代表了IT行业一个群体性的问题。有关职业规划师经过对Smith 的处境分析指出,IT人才市场的整体年龄状况趋于年轻化,22岁以下的择业者占总体比例的71%,而35岁以上的只占10%,年轻的人才给市场注入了活力,也使得IT行业的竞争更加白热化——人才流动性很大,岗位相对不够稳定。
      程序员是个属于年轻人的职业,“Smith们”如果没有在职业生涯最初的5年或8年时间里得到晋升或实现转型,随着年龄的增长,在技术更新的大潮中便面临竞争力衰减的残酷现实,需要重新定位和转型。“Smith们”与其咬着牙继续在编程队伍里打拼,还不如重新审核自己的职业兴趣、能力和性格,立足核心竞争力,寻求职业发展的第二春。
      因此,职业顾问建议热爱IT行业的Smith,可以借助丰富的技术经验和人脉关系寻求发展。

      三条出路可选择


      出路一:向IT培训师转型

      分析:IT企业在招聘新人后,一般都须经过培训才能上岗,这个培训有时是在岗位上进行的,由富有实践经验的“老人”负责。年轻人想要进入IT行业,必须接受这样的专业培训。如今IT培训市场蛋糕相当大,利润空间可观,行业发展前景看好。根据国际数据公司(IDC)统计数据显示,2004年中国IT培训市场共实现销售额24.4亿元,相比2003年增长了22.1%,2005年市场前景发展更为可观。Smith无论是在IT公司内部转型担任培训工作,还是到IT培训机构担任教师,都应该有发展空间。这样的工作不会有太大压力,且比较稳定,对年龄也没什么要求。更何况,这还没有脱离Smith所喜欢的IT行业。
      优势:在这个行业工作了8年,拥有丰富编程、项目经验,曾参与过许多成功案例,这都是Smith的优势。而8年积攒的行业人脉关系,还可以帮助他发展企业客户,顺便担任市场拓展工作。
      挑战:Smith在过去8年中一直埋头苦干,只是在公司培训新人时担任过培训工作,缺少培训工作经验。如果要向培训师转型,Smith需要接受一些专业训练,提高担任培训师的能力。

      出路二:向IT营销转型
      分析:IT与其它行业不同,由于技术性较强,营销人员一般也须有较强的技术背景,且最好有着丰富经验。互联网公司、电子商务公司、软件公司目前都需要有技术背景的营销人员;另外,电子商务的再度火爆,使得传统企业开始重视电子商务营销,也需要有技术背景的营销人员。这类工作薪水不低,加上提成应该可以拿到高于程序员的薪水,同时也比较稳定。
      优势:深厚的技术背景仍然是Smith的核心竞争力,在8年的从业经历中,Smith广泛涉猎了各种编程软件和工具,对IT行业也有相对深入的了解,这些都为他转向营销提供了平台。
      挑战:Smith过去的工作主要是跟机器打交道,而营销工作恰恰需要跟人打交道,这对Smith来说是最大的挑战,要求他彻底改变工作方式,加强沟通能力与人际交往能力;此外,营销工作会面临销售指标的压力,这些问题都是Smith转型前必须深入考虑的。

      出路三:向项目管理努力
      分析:如果说前面两条出路转型的成分多,那么项目管理可以说是Smith更为便捷的发展之路。目前,软件项目经理是人才市场上炙手可热的人才,有丰富经验、外语好的软件项目经理是抢手的香饽饽,供不应求,薪水自然也是水涨船高。在上海市劳动部门新发布的2005年软件行业薪资调查中,项目主管的薪水是同层次主管中最高的,年薪高位数达到211011元,平均年薪达109414元。最重要的是,一个优秀的项目经理可以在这个岗位上长久工作下去,并且有向高层进一步提升的可能。
      优势:对Smith这样有经验、有技术、有人脉、有能力、参与过多个软件开发、有一定经验的人,项目管理无疑是Smith发展的一个很好的方向。
      挑战:Smith以往参与过不少项目的开发,但一直是项目团队里的一分子,没担任过项目带头人。而很多公司在招聘项目经理时,都需要有带领团队进行项目开发的经验,这是Smith的一个劣势。建议他参加一些项目管理方面的培训课程,自学相关的知识,增长自己在流程管理、沟通协调等方面的能力,以便积累资本,逐步向项目管理岗位迈进。

程序员PK

五流程序员比技术和工具
  五流程序员关心的是用什么工具可以产生什么结果,追逐他听过最新、最好、最时髦的技术,沉浸于一些小练习,却很少走出象牙塔和客户或市场进行真正的沟通,甚至完成大型的真实案例。

四流程序员比整合和管理
  四流程序员比前者更关心在什么地方使用什么,他的心里放着集成各种技术的地图,而不偏向单一工具和技术,他在乎运作一场战役的风险,还有资金成本的考量,包含开发时间、维护难易、用户培训或是市场推广……

三流程序员比创意和设计
  三流程序员不仅要求把事情“做完”,同时要求自己把事情“做好”,他的作品里充满着感动和生命,即使好几年以后重新来过,你依然会觉得那些创意和设计,突破了时空限制,只能模仿无法取代。

二流程序员比沟通和性格
  二流程序员跳脱工具,比人际沟通,他知道怎样和老板沟通,怎样和同事沟通,也知道怎样和客户沟通。他有一个成熟并且稳定的性格,让任何人跟他在一起做事都有安全感,并且感到快乐。

一流程序员比态度和方法
  一流程序员比的是学习的态度和方法,包括号对自我控制的能力,也就是纪律,我们不看他做出来什么事,而是看他准备怎么去做,包含解决问题需要的时间,还是学习新事物的方法。
  只要他掌握了适合他自己的学习态度和方法,那么他可以从任何时刻开始新的学习,并且展现最好的结果,至于现在会不会,懂不懂都不重要,因为只要他想要,他就随时可以要,也能要得到。

超级程序员比思想和素质
  程序只是语言的表述,而语言则是思想的淬炼。
  超级程序员不仅改变我们的行为,也企图改变我们的思想。你不需要从超级程序员的代码判断他的素质,而是从他写的字、他说的话去感受他,因为没有那个思想到不了那个境界。