每天写代码

去年秋天,我想到了做业余项目:我没有取得足够的进步,如果我不牺牲我在Khan Academy上高效工作的投入,我将找不到能更多进步的方法。

我在如何从事业余项目上有一些主要问题。我主要在周末做,有时候在周末的晚上。事实证明,这个策略对我不太好使。我为了试着在周末完成尽可能高质量的工作而承受着难以置信的巨大压力(如果我不能承受,它就失败了)。这是一个问题,因为无法保证每个周末都是自由的,我也不想在这两天全部用来写程序(失去任何放松或做有趣的事情的机会)。

还有一个问题,一周写这些代码的时间间隔长,非常容易忘记你要做什么或你在什么地方停下来的(即使你做笔记了)。更不要说如果你失去了一周,你最终会造成一个两周的缺口。大量的多周情景切换很要命(我的很多业余项目多是由于缺乏专注而死去的)。

我受到了Jennifer Dewalt的鼓舞,她在去年完成了令人难以相信的成就,在180天内通过建立180个网站来自学编程,我强迫自己尝试类似方法:每天都做业余项目。

SsevWYY

我决定给自己制定一些规则:

  1. 我必须每天都要写代码。我能够写文档、或博文,或其它东东,但必须是除了我要写代码之外的事情。

  2. ...

我怎样写D语言的

将Walter Bright带往写一门语言、现在排在前20名的道路是从好奇开始的------也有侮辱。

我喜欢弄清楚事情是如何运作的,并从非常早期的阶段设计它们(我爱Tom Swift系列的书【注1】)。早期,我知道我自己在设计火车头或施耐德杯赛车。我的学位是机械工程。但是机械工程让我沮丧,因为建造任何东西都有昂贵的代价,以及我的糟糕至极的建造水平。

在另一方面,编程,我可以建造能想象到的最错综复杂的机器,零成本,只需要计算机访问。和很多程序员一样,我开始开发游戏。开发游戏的动机是某种上帝情节——你能够创造完整的、奴隶般地遵守你规则的一个世界。在游戏《Empire》里,我不仅仅创造了这样的世界,而且花了无数小时规划如何让计算机更好地操作敌方军队。甚至到了今天,我仍然在考虑优化的方法。

然而,问题在于计算机策略对计算机性能的渴求远远超过了可用机器的能力,因此我对编译器如何优化代码产生了兴趣。编译器好像喜欢彻底的、充满魔力的设备,它把源代码转化成机器码。这个魔术究竟如何实现的?在《BYTE》杂志把源代码发布到Tiny Pascal之前,这是宇宙中非常神秘的东西。我研究了程序的每一行代码;在掌握之后,我觉得我拿到了通往圣殿的口令。

过了几年。在80年代早期,我发现我自己成为了面向MS-DOS开发软件的开发小组成员。我们都用C,因为它是唯一的高级语言,我们发现它事实上能够在PC上运行。其它语言实现令人难以置信地糟糕。甚至C编译器也是让人讨厌的,但至少它们是可用的。它们产生的代码非常可怕,不存在优化。我产生了一个想法,我自己能够写一个更好的C编译器。

我向一个同事透漏了这个想法,他建议我和他,还有一个当地C的大牛一起吃午餐,该大牛将给我如何开展的一些建议。我们过去了,我的朋友向这位大牛介绍了我的宏大目标。他鄙视我的回答一直刻在我的脑子里,“你到底算老几,你居然认为你能写一个C编译器?”

现在想想我不得不感谢他,因为我发现 向他炫耀的欲望成为了最有力的动机。我开始实现C编译器,也就是广为人知的Datalight C。感谢我在优化上的兴趣,它成为PC上第一个拥有数据流(data-flow)的优化编译器。这样一个概念当时太新了,以致于在PC杂志基准陷入了麻烦,因为编译器认为基准什么也没有做而删除了所有的废弃代码——记者误认为我的编译器有问题,或作假,Datalight C得到了一个负面评论。(当然,这使我更加疯狂,那个年代还没有随处可用的互联网,我无法发表辩驳文章。)

后来被转化为Zortech C。那时候,PC上已经有很多其他的C编译器了(我想那时候有30个)。我调查一番找到了竞争优势,在书店发现了Bjarne Stroustrup的书。我想,“嗯,加一堆新的关键词,数月之内,我将有一个C++编译器!”可能是看轻了那个编程的世纪。如果我知道我面临什么,或许我会相信那个说我做不到的人。

不管如何,80年代末很多人正工作在C的继任者上。

你甚至在那时的新闻组里找到引用叫做“D”的项目。由于各种原因,包括Zortech的一款便宜的C++编译器准备登陆最流行的平台,C++埋葬了其它的语言,并统治了90年代的编程;我深受鼓舞。

随着时间的推移(那时候是90年代),我也写了生成原生代码的Java编译器和一个JavaScript编译器/解释器。这些产品不够成功。我注意到,忙于我需要的东西...

足够了

我最近听到一个朋友的朋友的故事,他从事体面的咨询方面的工作。他没有强化技能去赚尽可能多的钱,而是选择了不同的方式。

每年1月份他接受咨询项目,他的技能是欢迎的,因此他能够得到长期合同,收费每小时100美元,每周差不多40小时。到了这个阶段他好像有了一个标准的咨询工作。

但是每到五或六月份,一些不同的事情会发生。他停止了工作。

一个有魔力的数字

你知道,他脑子里有个数字,足够今年消费的数字。一旦他完成了这个数字,他就停止工作。他全力投入现有项目,不再接新客户,并最终停止工作。

每年剩下的时间,他去旅游、忙一些有趣的项目,做义工,实践爱好。

他没有试着赚尽可能多的钱、增长业务以及每年收益翻番,而是决定多少钱足够花,一旦达到目标就停下来。

我对此相当钦佩。

我的计划

今年前3个月我工作十分辛苦。我从所有的电子书获取了较高收益,发布了《Photoshop for Interface Design》和《Mastering Product Launches》两本书,还有完善的ConvertKit。真的很忙,不过我获得了较好的回报。

如果我继续这样走下去,我想我能够得到去年收入的两倍。

可是现在,已经足够了。

我努力工作了三个月,现在我计划休息两个月。我的第二个儿子还有一个月就要降临了(五月八号!),我的大儿子今年就三岁了。我想多陪陪他们,工作上投入少些,这样就有更多的时间去做任何其他事情。

...