记住这几句话,学无止境。(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. linux命令详解之useradd命令

    useradd命令使用方法,还包括用户账号的添加.删除与修改.用户口令的管理.用户组的管理方法. Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申 ...

  2. [JS进阶] 编写可维护性代码 (1)

    今天的web应用大至成千上万行的javascript代码,执行各种复杂的过程,这种演化让我们开发者必须得对可维护性有一定的认识!编写可维护性代码很重要,很多情况下我们是以他人的工作成果为基础,确保代码 ...

  3. PHP获取上个月、下个月、本月的日期(strtotime(),date())

    今天写程序的时候,突然发现了很早以前写的获取月份天数的函数,经典的switch版,但是获得上月天数的时候,我只是把月份-1了,估计当时太困了吧,再看到有种毛骨悚然的感觉,本来是想再处理一下的,但是一想 ...

  4. nignx+php-fpm环境下 phpmyadmin打开空白的原因探究

    打开phpmyadmin一直是空白的,发现是js的问题,原因是pma的js/get_script_js.php读取js不完整 很容易的将问题原因想到了php的输出缓存大小上,我把php.ini里的ou ...

  5. Android之“Unfortunately,xxx has stopped!”

    初学Android遇到Unfortunately,xxx has stopped!真是一件让人头疼的事情,下面就遇到的两种可能情况给出解决方案.通常遇到的情况在于由一个Activity跳转至另一个Ac ...

  6. AJAX异步同步

    为了更好的用户体验,AJAX的异步同步技术给了我们一个很好的用户体验下面是我做的一个例子. 1.客户端处理 UserId.HTML <!DOCTYPE html PUBLIC "-// ...

  7. C++中的struct和class的区别

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...

  8. python之类定义

    <python基础教程>第7章说python中的类定义: 1. 要么声明__metaclass__=type 2. 要么继承object. 但是直接定义下类, 也没报错: >> ...

  9. Mac OS X 安装 brew 工具!

    最早的ports管理就是BSD那种,后来出现强大的Debian,弄了个dpkg+apt! Mac OS X 最早使用比较多的工具是 MacPorts,但是现在来看这个工具有点老,不是很稳定,那我们推荐 ...

  10. iOS 进阶 第十二天(0413)

    0413 - Quartz2D 使用Quartz2D画图形步骤:(drawRect: 方法 是 在view第一次显示到屏幕上的时候会调用一次.是系统主动去掉用的,不能直接调用.那么问题来了,比如我要通 ...