编程是为数不多的一种既能满足个人爱好,又能赚钱的职业之一。烹饪是另一个这样的例子。在一般情况下,大多数职业要么不可能让你待在家里(例如医生和电工),要么你没有兴趣在家里做(例如清洁)。同样的,大多数好玩的活动是没人愿意付你钱的。

软件开发则横跨两个阵营:对有些人来说这是一个令人愉快的职业生涯,对其他人来说,这是一个激动人心的兴趣爱好。前者是我所谓的“职业程序员”,后者则是“创造型程序员”,当然这并不是说,前者缺乏创造力,而后者不赚钱。这么解释吧,你也可以分别称他们为“代码优先”的程序员以及“问题优先”的程序员,因为前者喜欢用代码解决问题,而后者更倾向于使用代码作为他们的工具来创建具体的东西。

还有第三类程序员,这一类很容易成为最沮丧的群体:既以编程为职业,又有强烈的创作冲动来制作软件。如果你愿意的话,不妨称呼他们为“创造型职业程序员”(虽然很没有创意)。职业程序员可以在工作中解决令他们感兴趣的问题,然后回家去做其他重要的事情;而来自于另一个领域的业余程序员可以享受编码作为晚上的业余爱好。创造型职业程序员白天的时间都在编码,去创造一个他自己也不甚在意的产品(换言之主要是为了钱钱,而且没有冒犯女程序员的意思),然后当他回到家之后,就没有时间和精力去创造那些他真正热爱的东西。

拿到CS学位,他以为他将会收获一份梦寐以求的工作。从一开始编码就令他激动不已:只要一台电脑和一些诀窍,就可以创建游戏来愉悦和挑战别人,创建工具来帮助他人和改变世界,以及创建完全不同于之前已经存的应用程序。为了能有一份高薪的工作,仅仅如此似乎太过异想天开了。

在进入这一行业几年之后,不幸的乌云开始慢慢拢聚。这并不是说他对工作不感兴趣了,也不是产品没有意义,只是因为……他手头有十几个项目像线团一样缠绕在着他,以致于他没有足够的时间来完成所有这些项目,即使他将一整天的时间都放在工作上。这感觉像是一个世界难题,但是从另一个角度,人们看到的是这样的:他热爱编程,并且有一笔可观的收入支付给他让他编程,他有充足的个人时间用于锻炼、与朋友建立联系和实现自己的兴趣爱好,他过着一种令人倾羡不已的美好生活。

上面这些片面化的观点会群起而攻之,在编程社区中出现沮丧的声音时。因为有太多的压力,所以你很难在自己的时间继续对编程工作保持激情:在工作时编程,然后累成狗一样地回家。你需要平衡你的生活,培养一些编程以外的其他爱好。你可以兼职其他公司,赚多一点钱,也可以做任何你喜欢做的事情,只赚取很少一点钱或根本不赚钱:然后抱怨和牢骚随之而来。

关键要说明的是,所有这些言论都没错:只是都没有戳中关键点。我认为,没有那么多的程序员在工作之外编码是出于他们想更有竞争力这个原因。同样的,我认为大多数程序员也不会相信为了保持竞争力你应该每天投入10小时以上到编程上的观点。

这类程序员的无奈之处在于,他每天只能投入有限的合理编码时间,然而他花费了大部分时间去创造的一些东西,最终对他而言是没有意义的。关键不在于编程,而在于创造。他不是那种脑袋钻到钱眼里的生意人,下班之后狂热地带着工作回家:他是一个绘画艺术家,将整天的时间都用在设计公交车车身广告,但当他回家的时候,却不能携带走任何风景片段。这是艺术家中已经有着几个世纪历史的冲突:这不是一个新的问题。和以往不同的是,据我所知,没有一种创造性的努力像软件开发一样有着很好地伪装、易于分享和有着极高的利润。

你还能想出其他的技能,既能创造和管理价值数十亿美元股票交易一样的利润,又能如创造游戏,例如GAME OF THE YEAR 420BLAZEIT,那样有趣又荒诞,并且还能将结果通过互联网分享到世界各地吗?这真的令人难以置信。编程是一种艺术形式,而且是一个强大的工具:可以理解的是,它对于不同的人意味着不同的东西。

这使得那些有着强大创作意愿,并将这些创作意愿置之于软件开发职业之上的程序员处于两难的境地。他能在工作中和家里都花费10+小时编码吗?他会放弃这一行,另谋职业,这样回家的时候就可以致力于自己的项目吗?或者他宁愿过着一种穷困潦倒的艺术家生活,完全献身于他的项目(例如软件世界里的Tarn Adams),省吃俭用希望能从中赚到足够的钱?还是说他只是像牙膏一样地挤时间,或者采取灵活的合同工作,虽然酬劳少了,但可以有更多的时间投入到编程中去?亦或是他依靠他的配偶提供财政支持,俗称吃软饭的?

我认为,这里的关键在于,这些不是支付账单的人提出的问题:这些是艺术家提出的问题。虽然尚在苦苦挣扎中的艺术家总是不能得到很多尊重,而且在我的印象中,创造型程序员得到的嘲讽甚至更多,这可能是因为他们原本完全可以轻易地利用他们的技能去赚钱,但却选择了一条艰难的道路。如果,因为艺术家他们渴望创造的强烈欲望而嘲笑他们是一种残酷,那么出于同样的原因而嘲笑程序员是否是另一种残酷呢?

我认为自己也是创造型职业程序员中的一员。虽然我在一个很有意思的领域有一份很好的工作,但我的大脑中有一百万个点子在爆炸:我想开发自己的游戏到能真正让人去玩的程度;我想建立一个基于标签的文件系统,用于标签和搜索媒体,类似gif动画和个人照片;我想制作一个移动app,让大家能够轻松输入数据(例如在你吃棒棒糖,或头痛的时候),然后展示相关性以便于你进行调查;我想构建一些不平凡的东西用来知道从属类型能有(或不能)多实用。

直到最近,我才想明白如何平衡生活中的编码,于是,现在的我是这样的:平时大概业余编码2小时,然后周末会有4到6小时的编码时间。这和我心里想要制作的东西相比,绝对是蜗牛速度,但因为接下来我会有一笔很大的开支,所以我需要保证一定的工作时间,而如果我妥协生活中的其他部分(人际交往、运动、休闲时间、家务琐事等)用于写代码,那么我的整体情况就会变糟。

这是一种牺牲,但我并没有觉得对不起自己,没有丝毫遗憾:毕竟每个人都需要有所牺牲,有所取舍。当然,如果能在和别人谈论时,别人不认为我的问题是将业余项目放在首位就好了。我认识一个厨师,他不喜欢累得一塌糊涂地回到家里,以致于没有精力去做一顿豪华大餐,他对此矛盾不已,但没有人为他指出,他真正问题在于对食物寄予了太多的激情。

如果我们能够认识到,创建东西这个愿望对于某些程序员而言是一种基本的动力,那么我们不仅可以通过,消除对那些不喜欢在家编码的程序员的蔑视,来帮助职业程序员,我们还可以帮助创造型程序员找到适合他们的生活方式。让我们一起来试一试吧。