20年来我得到的20条编程经验
来源:译言 时间:2010-05-26 13:44:00
我从11岁开始编程,并且一直都很喜欢技术和编程。这些是我一直以来获得的经验教训。作为一个程序员,你可能需要这样的忠告。我更希望每个人在获取这些忠告的同时能够学到更多。
我将会不间断地更新这里,我可能会有更多的要写,但是就我这20年来看,我认为没有什么更多的需要加在这个清单下了。:-)
这就是至今为止我印象最深的一些教训。
1、解决问题时估算你所需要的时间。C'mon,admit it! 我曾见过一些程序员为了解决一个特殊的问题而连续坐在显示器前面8小时,我会像下一个会成为这样的程序员一样感到内疚。为自己定一个时间表吧,每1小时,30分钟,甚至15分钟。如果在这期间你不能找出问题的解决办法, 那么就去寻求别人的帮助,或者在网络上去找答案,而不是尝试去做super-coder.
2、编程语言是一种语言,也只不过是一种语言。随着时间的增长,只要你理解了一种语言是怎么工作的,你就会发现各种不同语言之间有相似之处。你所选择的语言应该让你觉得舒服,并且能够写出有效(而且简洁)的代码。总重要的,让语言本身适合这个项目,反之亦然。
3、不要过头-写“设计模式”的程序。 有时候,写一个简单的算法要比把某种模式引进来容易的多。多数情况下,应该写易懂的代码,做到哪怕清洁工也得读懂。 :-)
4、经常备份代码。在我年轻的时候就有过硬盘坏掉了而丢了许多代码的经历,这让人感到相当烦躁。一次你没有备份你的数据,那就仿佛一次客户有着严格的期限明天就需要他们的东西。(The one time you don't back up your data may be the one time where you have a strict deadline with a client and they need it tomorrow. )这时源码/版本控制程序就可以帮你。
5、接受一个事实,你并不是最牛的程序员。我常常想我已经对编程了解的够多了,但是也经常会发现有人明显比我强。所以,向他们学习吧。
6、学习再学习 。像第五条说的,我经常会在手里拿一本计算机或编程相关的书、杂志(我的朋友们可以作证)。真的,你可以从中学到不少技术,这样也可以让你在工作上不会落后。当然如果你有一个更好的方式来接触你需要的新技术,那么你应该每天都学习它。
7、变化是会经常发生的。 你对编程技术的熟悉就好像你对待一支股票一样:是变化的。不要对一门特定的技术感觉良好。如果这种技术或者语言已经得不到足够的支持了,你最好马上开始更新你的简历、开始接受培训吧。我分别的主要的原则就是看这项技术能否让我继续下去。至少了解两到三种语言,这样一旦一种不行了,你还可以在学习新技术的时候依赖另一种。
8、给予新手帮助。 协助并且培养新手/初级的开发者,让他们具有良好的编程技巧。你或许从未意识到...这样你会使很多人成长,并且在培养他们为下一个位置做准备时你也会感到很开心。
9、让算法简单化。代码就像朋友一样,你完成编码以后,应该从头再看一遍并且优化它。代码上这里或者那里一点点的改进,会让后来长期维护的人轻松很多。
10、给代码加注释。 -不管是在注释一个WEB服务的API还是在注释一个简单的类,你尽管做就是。我曾经因过度的代码注释而被人指责过,而这却又是我最引以为豪的事。为三行的代码加一行注释仅仅需要你几秒钟的时间。如果是一个比较难理解的技巧,千万别担心过度的注释。你做你该做的,这就是架构师,编码助理、支撑组都最不会抱怨的地方。
11、测试,测试,测试 我是黑盒测试的拥蹙。当你完成编码的时候,你“被认证”的时候就开始了。如果你们有质量保证部门,那么相对于项目经理对你错误的评论而言,他们会评论得更多。如果你完全不测试你的代码,那么恐怕你开发的就不仅仅是代码了,可能还有你糟糕的名声。
12、为每一个成功庆祝。 我遇到过的许多程序员在解决完一个编程技术的头痛问题时,常常和他们的同伴握手、击掌、甚至手舞足蹈。每个人在生活中都会碰到“豁然开朗”时候。一个程序员高兴地跑来叫你去看他独创的代码,以你的经历或许你已经看过这样的代码100遍了,但也应该为了这个伙计来第101次庆祝这个成功吧。
13、经常检查你的代码。 无论是项目还是个人,在公司里你应该常常检查你的代码,不要把别人的指责当作打击,而是把它们看作是有建设性的批评。对个人来说,常常检查你的代码并且自问 “我怎样才能让它更好呢” 这会让你更快地成长,使你成为一个更好的程序员。
14、回顾你过去的代码。 看到自己以前的代码的时大家经常会有两种表述:“难以至信,我居然写过样的代码”和“难以至信,我居然写过样的代码”。第一种表述经常是带着厌恶的语气。想想如何去改进它,当你让这些超老的代码重新复苏,成为更好的、正常的程序甚至完整的产品时,你会感到惊喜的。第二种表述常常带着惊奇和成就感。开发者应该完成一两个经得起考验、经得起讨论的工程代码。另外,你可以利用这些代码或者工程把他们作成一个更好的产品或者想法,这就要看你优秀的代码能力了。
15、幽默感是必须的。 我20年的开发生涯中,我从来没有碰到过一个程序员没有相当的幽默感的。确切地说,在我们这个行业,这是必须的。
16、当心那些无所不知的人,不愿分享的人,和经验不足的人。当你遇到这几种程序员时首先你自己要谦虚。那些无所不知的人更想作一个英雄而不是一个团队成员,保守的人则是在编写着他们不愿意分享的代码。而那些经验不足的程序员会每十分钟就来问你一下,当他完成开发时,那代码已经是你的而不是他们的了。
17、没有项目是从来就是简单的。我曾被朋友、家人、同事要求忽忙地做一些事情,匆忙地写一个程序或者网站。应该计划能够完成两方都会满意的东西。开始时可能他只是需要一个使用Microsoft Access 的有3个页面的网站,但是随后就可能变成一个有15个页面的网站且使用SQL Server、一个论坛、一个自定义的CMS(内容管理系统)
18、任何时候不要想当然。假如你接手一个简单的项目,你可能会认为某些部分很容易完成。千万不要这样认为,除非你有一个类、组件、或者一段已经写好的代码并且已经测试通过。
19、没有软件是已经完成的。一个程序员有次告诉我没有软件是已经完成的,它们只是暂时完成了。这是明智的忠告。如果客户还在使用你写的程序,已经忍过了测试的那段时间。还有可能就是你仍在更新它,这并不是什么坏事,它可以让你不断地工作。:-)
20、有耐心是一种长处。 当客户、朋友、或者家庭成员用电脑的时候,他们可能会受挫、想砸掉电脑以至于暴走。我告诉他们,“是你在控制电脑而不是电脑在控制你。”对待用于编程的电脑,你需要有一定的耐心。只要程序员明白他们的问题所在了,他们就又从电脑的角度来看问题了,还说“呃,不就是这样嘛。”
我希望这一摞经验能够启发一些人,又或者让你轻轻一笑。