不知你有没有注意到,编程并没有非常好的自学书籍。当然,有很多片段的解释能从理论上指导各种编程语言。但是程序员们的实际行为方式呢?如果你追 Silicon Valley 这个(美国)电视节目,你就会知道,程序员也会像作家一样在工作中受到阻碍:理查德不再睡觉,穿着衣服走进一个游泳池。但一定会有更好的办法。
其实,作家知道程序员遇到障碍的秘密。如果你是一个程序员(无论新手还是专家),这十个写作提示将帮助你成为一个更有效率、更具创造性和更自信的程序员。
这些提示来自哪里?为了在教师访谈期间缓解我去年关于博士学位的内疚感,我读了很多关于飞机写作的书(参见末尾的阅读清单)。我发现许多书中,都有适用于编程的见解和方法。

当然,这个清单是从零开始的。


Tip 0:程序优先

把编程安排在重点位置,毕竟人们整天都很忙。具体该怎么做呢?我们早上时是最有创意的,所以让你每天早晨的第一个小时变得神圣不可侵犯。不安排会议,不要检查你的电子邮件或社交平台。如果你早晨在家,甚至不要刷牙。对我来说,喝杯咖啡很有必要。但此后,只需要让你自己坐在椅子上(有人说,作家最有用的工具是胶水)。
把这段时间像一个会议一样安排进你的日程表,并防止这段时间免受其他任何事件的影响。


Tip 1:不要害怕使用纸张

在打开电脑之前,先在脑海中勾画出你的想法,列一个列表并在记事本上注释。《在十五分钟内撰写论文》强调了达到零草稿的重要性,而概念模板早于初稿,你已经花了所有傍晚和晚上的时间去思考、产生想法,现在只需要将它们表现出来。
< Artist’s Way > 主张,自由的写作能帮你成为一个更好的程序员(或者雕塑家、投资银行家)。所以什么方式对你编程有效,就用什么方式。


Tip 2:建立编程计划

人类是具有“习惯性”的生物。因此,使编程成为你计划的一部分,为它设定合理的目标。这个理念来自于< Writing Down the Bones >。一段时间后当你形成习惯,如果某天没有编程,你就会觉得好像忘了什么事。


Tip 3:跟踪想法以及bug

建立一个记录想法和问题的日志,当你受到阻碍或想要寻找其他事的解决方法,可以返回查找。建立编程计划(Tip 2)是第一步。但创造力并不总是遵循着计划走,或者你可能正在忙于其他事情。所以,尽可能地记住你的灵光乍现。
有人说写作会鼓励人更多的去写作。所以编程越多,你就会对编程产生越多的想法。我平时总是随身携带一本笔记本,以随时记录自己的想法。


Tip 4:交朋友

保持责任心会让我们做得更好。在你设定目标的周期内保持每周自查,与大家讨论编程中遇到的问题,共享资源和策略。
例如,我在CMU做计算机视觉的朋友每个星期一早上都会在校园咖啡厅做15分钟的常规会议。这样的交流能亲自去现场参加最好,如果不能去,还可以用在线论坛。当你向人们请教代码问题,他们可能会迫不及待的和你分享。


Tip 5:借鉴他人

就像把事情分开一般往往是把事情放在一起,程序员可以通过阅读和修改他人代码来为代码开发一个“耳朵”。在< The Sense of Style >中,Stephen Pinker强调“好的作家是狂热的读者”。
与写作(借鉴被认为是抄袭)不同,程序员将已有的库和样本用来支撑自己的项目是非常被鼓励的。你可以参考这些代码的来源,但是当已有人弄清楚一个问题时,没有必要重新发明轮子。


Tip 6:认真沉思

创造的过程,就是将你脑海中的代码进行结构化,体现到实际中并用它们解决某个问题。想象一下,在办公室里有两个书桌,一个用于写作(此Tip),一个用于编辑(Tip 7)。从书桌能望向窗外,你可以异想天开、开放思考,像追逐蝴蝶一样追逐你脑海中的想法。
不要害怕散步,或者害怕尝试可能是,也可能不是最好的最终解决方案。我最有生产能力的实习生之一,当想弄清楚她代码下一步该怎样写,她喜欢在CMU的走廊上走路。编程就像写作一样,不仅仅是在屏幕上打字,更重要的是你脑中想的东西。就像在种植前,先为土壤施肥而庆祝,然后再浇水。


Tip 7:无情(但非卑鄙)

如果你处于编辑阶段,你经常会“杀死你的亲爱的”。这句话已经被许多作家,包括史蒂芬·金所推崇。这是关于消除多余的代码。
例如,你可能花了很多时间让一个代码块工作,但现在你有更好的方式来取代它。如果你真的不能忍受它,那就消除它。 Google 为员工提供了失败奖金,用于一些永远无法解决的项目(引自< How Google Works >)。所以,从你的代码存在的根本价值出发,而不是从自己的感情出发。


Tip 8:对知识局限性保持警惕

我们通常不会用汇编语言编程的原因之一是它不容易被人读取。较高级别的编程语言让我们觉得抽象,所以我们应该选择有意义的抽象语言。调用一些变量1和变量2对于任何其他使用你的代码的人(特别是你自己)会事倍功半,尤其是这些代码之后还会被删改。
写作最大的挑战之一是确保读者能顺利跟上。使用空格、评论你的代码、花时间去创造能被理解的抽象和结构。如果人们不能理解的话,你的文章(或者代码)有多么优秀并不重要。


Tip 9:停在一个向下的滑坡

每天早上应该从前一天开始,每天将最后10%的时间用于准备第二天的工作。你可以为下一个代码块的结构做注释,也可以做一个事项列表。
我曾驾驶一辆换乘车,通过并停在一个向下的斜坡上,我知道即使车的电池一夜之间耗完,我也能利用山的潜力来启动引擎。这就像在前一天晚上放好你的运动服。第二天,你只要直接走就好。
将以上10点视为程序员的自学列表。编程是一个创造性的过程,就像写作一样,我相信这10个提示可以让你更有创意、更有成就、更不容易陷入困境。


阅读清单:
  • Writing Your Dissertation in Fifteen Minutes a Day. Joan Bolker.

  • The Artist’s Way. Julia Cameron.

  • Writing Down the Bones. Natalie Goldberg.

  • On Writing: A Memoir of the Craft. Stephen King.

  • The Sense of Style. Steven Pinker.

  • How to Write a Lot: A Practical Guide to Productive Academic Writing. Paul J. Silvia.

  • If You Want to Write. Brenda Ueland.

  • On Writing Well: The Classic Guide to Writing Nonfiction. William Zinsser.