致诸位程序员:来自Chuck Jazdzewski慈父般的忠告 转自:http://www.ituring.com.cn/article/18838
记住这几句话,学无止境。(Never stop learning.)沟通至关重要。(Communication is critical.)履行承诺,胜过交付。(Under promise, over deliver.)“我错了。”("I was wrong.")要是代码未经测试,那它就无法正常运行。(If it is not tested it doesn't work.)编程不是你的工作,发布产品才是。(Programming isn't your job, shipping is.)
原文发布时间:2006年09月19日上午09点43分
看起来我的儿女们都不适合做程序员。为了不让这份原本为我的新程序员儿子或女儿准备的慈父般的忠告功亏一篑,我打算把这份忠告强加于你。要是你刚踏上成为一名程序员的旅途,这里的建议也许你的父亲告诉过你,如果他也是程序员的话。这是一些我历经艰辛才习得的东西。
不断学习:阅读。参加会议。订阅期刊。上课。无论做什么都是为了让你不断学习,要充分重视学习。了解你可以找到的每种语言。尽你所能去花时间了解任何新的框架、算法、技术、模型、范式。每当往你的工具箱中多添一件工具,都会有助于你更轻松地解决接下来的编程问题。去拜师,即比你强得多的人,然后学会他们可以传授给你的一切。学无止境。
学会沟通:我经常开玩笑说,作为程序员你能学到的最重要的技能是,如何在白板上画长方形。沟通对于程序员的工作可谓至关重要。与买家、客户、用户、同事、老板、副总裁、首席执行官、董事会成员、风险投资人等各种各样的人沟通,这些沟通在你职业生涯中的某些时候会变得很重要。学会如何在公共场合下讲话。学会如何用英文写作。学会如何与他人有效沟通。学会如何心平气和地说服他人,而不要大喊大叫、火冒三丈、抑或惊慌失措。学会如何在演说时不讲行话。这样有助于别人明白你在做什么。学会把事物分解为简单明了的片断。学会借助比喻及象征去沟通。学会沟通。
做到可预测:要弄清楚你能以多快的速度惬意编程。要一直等到你明白了某项任务,然后才能预测出你会用多久完成此任务。要将意想不到的情况计算在内。要为假期及休息时间作安排。学会适应你的预测。我会把某项任务分解成若干子任务,并且每个子任务耗时不超过3天(通常都不足1天),而在此之前我不会认为自己对此问题有了充分认识,因此也就不去预测完成任务会用多久。请遵照这条规则生活,履行承诺,胜过交付。最好是只用10天就交付你承诺需15天完成的工作,而不是用10天才交付你承诺仅需5天的工作。人们依赖于你的预测,而进度安排及计划也会围绕着你的预测去组织。尽你所能把预测做到最好,并确保你可以惬意地完成它们,否则你会被要求去履行那些令你难受的预测。你起初并不善于此道;就要请更有经验的前辈与你一起去弥补、核实你的预测。学着变得更好。做到可预测;因为别人在指望着你。
承认自己的错误:你会犯许多错。你如何处理自己所犯的错正是他人如何评价你的依据。学会如何说“我错了。”要是你低估了自己完成某事所用时长,一旦你清楚了这一点就及时告诉大家。要是你弄坏了某个版本,就修复它。要是你弄出了bug,就搞定它。不要否认错误,不要为错误找借口,不要琢磨如何隐藏错误,不要把错误归咎于别人,为改正错误做点儿实事儿。要为自己的错误负责,否则你将重蹈覆辙。
决不让烂代码从你的办公桌上溜走:作为程序员,你的工作就是编写可工作的代码,因此当你不确定代码符合此标准时,决不让代码从你的办公桌上溜走。一旦让问题代码从你的办公桌上溜走,与溜走之前相比,那样做不仅会令你难堪,而且要找出问题也会更昂贵、更困难。学会爱上单元测试。学会爱上代码覆盖率。学会测试自己的代码胜过付钱给别人去测试代码。在你签入代码后又找到了bug,应该为此觉得难为情。要是买家找到了bug,应该觉得特别难为情。不要指望别人为你找出bug,要靠你自己去找出并修复bug。不要期盼代码能正常运行。要测试代码。不要估计代码能正常运行。要测试代码。不要抱有任何侥幸心理。就是要测试代码。如果你尚未测试代码,那么代码就无法正常运行;对此你可能心知肚明。不过,即使你用心测试,有些bug还是会从你眼皮底下溜走。虽然你还会犯错,但是要尽你所能不犯错。
尽管编程很有趣,不过发布产品才是你的工作:编程很有趣。那是探索的喜悦。那是创造的喜悦。那是成就的喜悦。那是学习的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有同事为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。可是,发布产品并无乐趣可言。我经常说起,发布一款产品感觉不错,就像某人不再打你时的那种感觉。你的工作就是完成产品,修复bug,然后发布。要是需要改bug,就改bug。要是需要写文档,就写文档。要是需要测试代码,就测试代码。所有这一切都是发布产品的一部分。编程不会给你带来报酬,唯有发布产品才会给你带来报酬。把你的活儿干漂亮。
记住这几句话,
- 学无止境。(Never stop learning.)
- 沟通至关重要。(Communication is critical.)
- 履行承诺,胜过交付。(Under promise, over deliver.)
- “我错了。”("I was wrong.")
- 要是代码未经测试,那它就无法正常运行。(If it is not tested it doesn't work.)
- 编程不是你的工作,发布产品才是。(Programming isn't your job, shipping is.)