软件开发必读





诚实
编程生涯成熟的部分标志是不折不挠地坚持诚实,诚实通常表现在以下几个方面:
不假装你是一个编程能手
乐于承认自己的错误
力图理解编译器警告信息而不是对其置之不理
对你的程序有一个清晰的了解,而不是进行编译看其是否有错
提供实际状态报告 提供实际方案评估,在你的上司面前坚持自己的意见
前二个方面——承认你不知道一些事情或承认你犯了一个错误是你谦虚的反映。如果你不懂装懂你又怎么能指望学到新东西呢?你最好是假装自己知之甚少,听别人的解释,向他们学习新的东西,并评估他们是否真正了解其正在谈论的东西。
你应对自己的能力作某种程度的估计,如果你对自己的评价很完美,这可是一个不妙的信号。
拒绝承认错误是一个令人讨厌的习惯,如果Sally拒绝承认错误,她看起来相信自己没有错,可能会使其它人相信她确实是无辜的,但是事实证明Sally出错误了,这样,每个人都知道她犯了错误。错误正如潮流一样是一种复杂的活动,如果她在过去没有发生过错误,谁也不会将错误归咎于她。
如果她拒绝承认错误,到头来她只能自食其果。其他人都知道他们在同一个不诚实的人工作。这比仅犯一个错误更令人反感。如果你犯了一个错误,你应迅速主动地承认错误。
对编译器错误信息不懂装懂是另外一个常见错误。如果你不理解某一编译警告信息或你认为时间太紧迫来不及检查,你想想这是不是真正浪费时间?编译器将问题明白无误地向你展示出来,而你却不试图解决问题,我碰到过不少人在调试过程中请求帮助的事,我问他们是否有一个完好的编译器,他们回答是。于是开始解释问题的症状,我说:“这看起来像是未对指针进行初始比。但是编译器应对此给出了警告信息。”他们就说:“哦,编译器确实给出了警告信息,我们以为它是指其它事情。”你自己所出的错误难以蒙蔽别人,也更难以愚弄计算机,所以你用不着浪费时间这样做。
另外一种疏忽是当你并不完全了解程序时,你“编译它看是否能运行”。在这种条件下,其实并不意味着程序能运行,因为连你自己都不清楚程序的有关情况。请记住,测试仅能发现错误的存在,而不能保证一定不存在某种错误。如果你不理解程序,你就不能进行深入的测试,你如果觉得应编译一下程序以便了解程序的运算情况的话,这可是一个不妙的信号,这可能意味着你不清楚在干些什么。在将你的程序编译之前你应对其有一个深刻的理解。
状态报告也同样是一个令人反感的领域。如果程序员在最后50%的项目时说,程序中90%是完整可靠的,他们将声名狼藉。问题在于你对自己的进度缺乏了解,你应对你的工作加强了解。但是,你为了迎奉上司而不愿说出真实情况的话,可就不同了。一般来说上司都愿意听到对项目状态的真实报告,即使不是他们所希望听到的,如果你的观察和见解是中肯的,你应客观地将其说出来,上司需要有准确的信息以便协调各种开发活动,而充分的合作是必需的。
和不准确的状态报告有关的一个问题是不正确的估计。典型的情况是这样:上司问Bert要花多少时间才能开发出一个新的数据库产品。Bert和一些程序员交谈了一下,讨论了一些问题,最后认为需8个程序员和6个月的时间,但是他的上司说:“这并不是我们所需要的,你能不能使用较少的程序员在短时间内完成工作?”Bert考虑了一段时间,并认为可以通过削减培训时间和假期以及让每个人的工作时间稍微延长一点来达到上司的要求。他于是作出了需6个程序员和4个月时间的估计,他的上司说:“这就行了。这是一个相对较为低优先级的项目。你应及时完成它,因为预算不允许你超时。”Bert所犯错误在于,他没有认识到评估是不可商量的,他可以将估计作得更为准确,但是他和老板的商量结果并不能改变开发一个项目所需的时间。IBM公司的Bill Weimer说;“我们发现技术人员一般都能准确地估计项目。问题在于他们能否坚持自己的决定;他们需要学会坚持自己的意见。”Bert许诺在4个月里交付产品而实际上6个月才交付产品,肯定会使他的老板不高兴的。时间一长,他可能会因妥协而失去信任的。否则,他会因坚持自己的估计而得到尊敬的。
如果上司施加压力要改变你的估计,你应认识到决定要怎样作是上司职权范围内的事。你可以说:“看,这是项目的开销,我无法说此开支对本公司是否值得——这是你的工作。我不能和你‘商量”项目所花的时间,这正如我们不能协商确定一里究竟有多少英尺一样——这是不可变更的。你不能商定自然界的规律,我们只能商定本项目中影响进度的各方面,然后重新评估。我们能减少一些特征,降低性能,分阶段开发项目。或者是使用更少的人但时间延长一点,或者是使用稍多的人,而相应地减少一些时间。”
我曾在一次软件开发管理讨论会上听到一个奇怪的说法。主讲者是一本销售很好的软件工程管理书籍的作者。一个听众问:“你的上司让你评估某一项目,你知道当你得出准确的评估时你的上司可能认为代价太高而放弃项目开发。这时你认为应怎么办?”主讲者回答说,当你说服你的上司做出开发项目的决定时,他们就对整个情况了如指掌了。
这是一个错误的回答。你的上司是负责整个公司的运转的。如果开发某一软件需10O000美元而你的估计是200000美元,你的公司就不会开发软件。这是要由上司做出决定的。上面这位主讲者对项目的开支说假话,告诉上司将比实际的要少,他这是在损害上司的权威,如果你认为项目是有前途的,它能为公司带来新的重大突破,或能提供有价值的培训,你应将其说出来。你的上司也会考虑这些因素的。你哄骗上司做出错误的决定将会使公司蒙受损失。如果你失去了你的工作,你将会明白你最终得到了什么。


交流和合作
真正优秀的程序员应学会怎样和别人工作和娱乐,编写可读代码是对程序员作为组中一员的要求之一。
计算机也就同其它人一样能读懂你的代码,但是它要比其它人更能阅读质量差的代码。作为可读性原则,你应将修改你的代码的人时刻记在心上。开发程序首先应同程序员交流,其次则是和计算机交流。
绝大多数高水平程序员喜欢使自己程序的可读性强,并抽出充足的时间这样作。虽然只有一些人能坚持到底,而且其中一些人还是高水平的代码编写者,对开发中程序员级别的了解,有助于解释什么地方适合于此原则:
级别1:初学者初学者是能使用一种语言基本能力的程序员,这样的人能够使用子程序、循环、条件语句和其它许多语言特征。
级别2:中间者中间级程序员有使用多种语言的能力,并且至少非常熟悉某一种语言。
级别3:专家编程专家对其语言或环境或对这二者有着很深的造诣,这种级别的程序员对公司有价值的,而且有些程序员往往就停留在这个水平上。
级别4:大师大师有着专家那样的专业知识,并能意识到编程只是15%和计算机交流,其余85%是和人打交道。一般程序员只有30%的时间甚至更少。大师所编写的代码与其说是给计算机看倒不如说是给人看的。真正的大师级程序员所编写的代码是十分清晰易懂的,而且他们注意建立有关文档。他们也不想浪费其精力去重建本来用一句注释就能说清楚的代码段的逻辑结构。 一位不强调可读性的高水平代码者可能停留在级别3的水平上,但是问题还不止如此。依作者本人的经验,人们编写不可读代码的主要原因在于他们所编代码质量较差。他们并不是自言自语地说:“我所编代码不好,所以我要使其难以读懂”,而是他们并不能完整地理解自己的代码以致于不能使其是可读的,这就使他们只能停留在1或2级的水平上。我所见的最差的代码是由一个任何人看了她的程序后都会望而生畏的人所编写的。最终,她的上司威胁说如她再不改正就要解雇她。她的代码是不作注释的,并且其程序中充满了如x,xx,xxx,xx1和xx2这样的全局变量。她的代码给了她大量的机会显示她的改错能力。
你不必为自己是初学者或中间者而内疚,你同样不必为自己是专家而不是大师自愧,在你知道怎样提高自己的水平后,你倒是应为自己停留在初学者或专家的水平上有多长时间而内疚。


懒惰

懒惰表面形式有以下几种:
拖延自己讨厌的工作
迅速地将自己讨厌的任务做完以摆脱任务
编写一个工具来完成自己讨厌的工作以解脱自己
当然,有一些懒惰形式要比其它方式好一些。第一种方式是没有任何益处的。你可能有这样的体会:你常常花费几小时来做一些没必要作的工作,而不愿面对自己所无法避免的次要的工作,我讨厌数据输入,但是许多程序需要少量的数据输入。别人都知道我已拖延了数天的工作仅因为为了拖延无法摆脱的用手工输入几个数据的任务,这种习惯是“真正的懒惰”,你编译某一子程序以检查有关情况,这样你可以避免人工检查程序同样也是一种懒惰行为。
这些小任务并不像看起来那样令人反感,如果你养成马上完成这些任务的习惯你就能克服拖延这种懒惰。这种习惯叫“明懒惰”——懒惰的第二种方式,你仍然是懒惰,但是你是通过在自己所讨厌问题上花费尽量少的时间来避开问题的。
第三种选择是编写工具来做这令人讨厌的工作。这是“长期懒惰”。它无疑是懒惰中最有积极性的一种形式,只要你通过编写工具最终节省了时间,通过讨论可知,一定程度的懒惰是有益的。
当你不是透过玻璃看问题的时候,你就看到了懒惰的另一方面。“赶着做”或“努力”并不能发出炫目的光芒。赶着做是一种多余和没有必要的努力。它只是说明你的焦急而不是你进行工作的努力程度。在有效编程中最为重要的现象是人们在思考中往往显得并不忙。如果我和一位看起来一直很忙的程序员一起工作,我将认为他并不是一位好的程序员,因为他并不是在使用对他来说是最有价值的工具和自己的头脑。

习惯
好的习惯起作用是由于你为一个程序员所作的大部分事情是你在无意识中所完成的,例如,有时你可能会感到以前爱采用缩进循环,但是现在每当你编写一个新的循环时你不会这样想了。这种情况确实在建立程序格式时存在。你最后一次向自己提出这个问题是在什么时候?如果你已经有五年实际编程经验,你就存在较多的机会,如果你最后一次向自己提出疑问的时间在4年半之前,剩下的便是受习惯的支配时间了。
你在许多地方都存在习惯。例如,程序员往往爱仔细地检查循环变量而少检查赋值语句,这就使得发现赋值语句中的错误要比发现循环变量的错误困难一些。你能对别人的批评作出友好或不友好的反应。你一直在寻找使代码可读或编码速度更快的方法,也可能你无意寻找它们,如果你不得不在可读性和编码速度方面作出选择,你每次都会作出相同的选择,当然,你并不是在真正选择;你是在习惯性地作出反应。
成为某方面好的或差的程序员,主要是靠你自己的所作所为。建筑师要通过建筑而程序员要通过编程。你所作所为习惯,决定了你的编程品行。最终,你的习惯好坏决定了你是否能成为一位好的程序员。
微软公司的Bill Gates——董事会主席兼CEO——曾说过,任何好程序员在开始的几年都做得很好。从那以后,程序员的好坏便基本定型了。在你进行编程很长一段时间后,很难见到你突然说“我怎样才能依循环进行得更快呢? " 或“我怎样才能使代码更可读呢?”这些都是好的程序员一开始便养成的习惯。
当你开始学习某一件事时,你应按正确的方式学好它。当你开始学时,你已对其进行了思考,并且你可在正确或错误的途径间作出轻易的选择。在你作过一段时间后,你对你所作的不太注意,此时“习惯的力量”会开始起作用。确保起作用的习惯是你所希望的。
如果你没有养成最有效的习惯你应怎么办?对这些问题没有一个明确的答案,以下是对此问题的部分回答。你无法用没有习惯取代坏的习惯,这就是为什么突然停止抽烟或节食的人如果不用一些别的什么替代的话会存在很大困难的原因。用一种新习惯代替旧习惯比完全戒除旧习惯要容易一些,在编程中,应尽力养成良好的习惯。你应养成在编写代码之前编写PDL(流程图)和在编译之前阅读代码的习惯,你不必为失去坏习惯而多虑。在用新习惯取代后坏习惯会自然而然消失的。

小结
你的个人性格直接影响你编写计算机程序的能力。
最有明显作用的性格为:谦虚、好奇心、诚实、创造性和纪律,还有文明的“懒惰”。
高级程序员的发展和生成与天才并无多大联系,任何事情都和个人的发展有关。
令人吃惊的是,小聪明、经验、坚持和欲望既可帮助你也能妨碍你。
许多程序员不主动去吸收新信息和新技术,而是靠偶然地上获得一些新信息,如果你抽出少量时间学习别人的编程经验,过一段时间后,你将在你的同行中脱颖而出。
好的性格对养成良好习惯有很大影响。为了成为一位高水平的程序员,你应养成良好的习惯,其余的就会随之而来。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值