记住这几句话,学无止境。(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.)

原文链接

Fatherly Advice To New Programmers

关于作者

Chuck Jazdzewski曾在Borland公司担任Delphi首席架构师、首席科学家,与Delphi兼.NET之父Anders Hejlsberg并肩作战。于2004年从Borland公司离职,加入微软。

译者杂谈

Chuck写下这些忠告时多大岁数?

起初,本以为这根本不是问题,用维基百科查下便知。可是没成想,维基百科的查询结果竟是查无此人。

尽管Chuck的成就有目共睹,不过他是个很低调的人。当用Google图片搜索Chuck的照片时会发现,搜索结果可真是少得可怜,而且结果中还有许多是他的老战友Anders的照片。

言归正传,终于用Google搜到一篇有关Chuck的摘要信息,其中透露了一些细节:

Chuck joined Borland right out of college and has worked at the company for nearly 13 years.He lives with his wife, Kristin, and three children, Jonathan, Joseph, and Rebekah, in Soquel, California.

Chuck大学一毕业就加入了Borland公司,而且已在公司工作了将近13年。他与妻子Kristin,还有三个娃Jonathan(男孩)、Joseph(男孩)及Rebekah(女孩)一起生活在加利福尼亚州的索克尔。

此外,以上内容出自2002年Borland公司大会上对演讲者Chuck Jazdzewski的简介。

由此便可推断,Chuck是在1989年加入的Borland公司,**假设**Chuck大学毕业时22岁,那么Chuck的出生年份大约是1967年。而文本发布于2006年,这时Chuck大概39岁,正值不惑之年。

狗尾续貂

Chuck的6点忠告可谓字字箴言,不仅是他十几年编程人生的精华,而且为后来者指明了方向。正所谓“知易行难”,路是自己一步一个脚印走出来的,祝大家一路走好……

致诸位新程序员:来自Chuck Jazdzewski慈父般的忠告的更多相关文章

  1. 致Java星球程序员兄弟们的一封信

    致Java星球程序员兄弟们的一封信 亲爱的Java星球的程序员兄弟们: 你们好!我是来自地球的一名Java程序员,首先我代表地球人对贵星球的高司令来到地球传授Java语言,造福了全人类,造福了整个地球 ...

  2. 编程大牛 Bruce Eckel 对新程序员的忠告

    简评:作者 Bruce Eckel 是编程界的大牛,著有大名鼎鼎的<Thinking in C++>和<Thinking in Java>.本文是他对程序员(尤其是新手)的忠告 ...

  3. 程序员"青春饭"问题之我见

      程序员"青春饭"问题之我见 声明:转载请注明出处.http://www.cnblogs.com/hzg1981/ 1. 问题描述 问题1: 什么是程序员? 在本文中程序员的定义 ...

  4. PHP程序员遇到职业问题时,是离职?还是坚持?

    PHP程序员遇到职业问题时,是离职?还是坚持? 初级php程序员最担心在公司里遇到原本其他程序员开发的项目,他们“跑路”以后的工作就由新程序员完成.而新员工也不懂内部的逻辑,酱紫让程序员很难处理后续的 ...

  5. 【转】程序员"青春饭"问题之我见

    1. 问题描述问题1: 什么是程序员?在本文中程序员的定义为: 拥有编程技能,在IT.互联网公司打工的IT从业人员.程序员与很多行业最大的不同是该行业的形成时间短:1954年第一台计算机才诞生,而中医 ...

  6. 《Hey程序员 你适合加入创业公司吗?》再补充

    笔者经过多年的走访发现,不是所有优秀的程序员都能在创业公司如鱼得水.根据笔者的经验,具备下面几点优秀品质的程序员会更容易适应创业公司的环境. 1.娴熟的调试技巧可以说,程序员的大部分时间都花在调试程序 ...

  7. [翻译]成为顶尖程序员应当学什么?Python、C还是Ruby?

    原文地址(墙外):https://medium.com/life-tips/should-you-learn-python-c-or-ruby-to-be-a-top-coder-infographi ...

  8. 阿里P8架构师讲述:3—5年程序员的发展和出路在哪里?

    工作3—5年后,程序员们的成长将迈入一个全新阶段.这既是程序员们的黄金时期同时又是最迷茫的时期,因为大家必须要要思考一下今后的职业方向. 3—5年程序员的发展和出路在哪里? 是继续做技术人,还是向管理 ...

  9. 玩转 ”hello word“,Python程序员大多数都没有实现过

    很多人学习Python很长时间,对于'hello word' 的认知,很多已经从事Python多年的程序员的认知也就只有: print(hello wrod) 但是有没有让hello word 变得不 ...

随机推荐

  1. WPF 界面控件遍历和后台行为绑定写法

    InvokeCommandAction ic = new InvokeCommandAction(); ic.Command = tree.SelectedItemCommand;//绑定的命令 ic ...

  2. 查看leapmotion的frame信息

    leapmotion的SDK里有个c#实例,很详细,其中的frame类已经把这些封装的很完善了.可惜是控制台的,运行时很难去找那些动作对应的哪些数据.我今天做的就是把它们在窗体控件里分别显示出来,这样 ...

  3. 菜鸟学习Struts——简易计算器

    这是学习Struts的一个简单的例子文件结构如下: 1.配置Struts环境 2.新建input.jsp,success.jsp,error.jsp input.jsp代码如下: <%@ pag ...

  4. ERROR 1005 (HY000): Can't create table'matrix.system_log' (errno: 150)

    CREATE TABLE `user` (`id` bigint(32) NOT NULL AUTO_INCREMENT ,`name` varchar(32) CHARACTER SET utf8 ...

  5. docker 感性体验

    Docker 1.0正式发布!1.0 版本包含很多新特性,这也是 Docker 的首个产品级的版本.从今天开始,你将会一直听到一个新的概念 —— Docker as a platform ,其组件包括 ...

  6. CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2

    说明: 操作系统:CentOS 6.2 32位 系统安装教程:CentOS 6.2安装(超级详细图解教程): http://www.osyunwei.com/archives/1537.html 准备 ...

  7. 注册微信小程序

    注册微信小程序 小程序是一种新的开放能力,可以在微信内被便捷地获取和传播,同时具有出色的使用体验.开发者可以根据平台提供的能力,快速地开发一个小程序. 开放内容包括: 开放注册范围:企业.政府.媒体. ...

  8. Eclipse 项目管理控制软件svn

    ^_^太开心了,之前以为eclipse只有tortoiseSVN而没有类似Visual Studio 2010里面的cvs的版本控制软件,不是我讨厌tortoiseSVN,而是我实在不习惯使用这个软件 ...

  9. Android Studio:Gradle常用命令

    Android Studio中自带Terminal,可以直接使用gradle命令,不必另开命令窗口,相当方便,下面总结一下常用的命令: 1.查看Gradle版本号      ./gradlew -v  ...

  10. C#WinForm中播放背景音乐(亲测可用)

    using System.Runtime.InteropServices; public static uint SND_ASYNC = 0x0001; public static uint SND_ ...