本节书摘来异步社区《高效能程序员的修炼》一书中的第1章,作者: 【美】Jeff Atwood 译者: 陆其明 , 张健 责编: 陈冀康, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
程序员的八种境界
高效能程序员的修炼
在求职的时候,相信很多人都被问过这样的问题:“你对自己未来5年的职业是怎样规划的?”每当我被问及这个问题的时候,我的脑海里总是会浮现出Twisted Sister1乐队在1984年拍摄的一段视频里的这个场景:一位老师对着他的学生大喊,“我想要你告诉我,不,是告诉全班同学,你究竟想过怎样的生活?”
你自然会想:我要变得很牛!至少也得成为一个很牛的程序员。尽管这个问题看起来并不像其他一些同样老掉牙的问题那么严肃(如“你觉得你最大的弱点是什么?”),但很可能你还是觉得难以回答。也许有时候你表现得太牛了,不屑于回答这样的问题。但要小心了,你可能会冒犯别人。
在我看来,这个问题同样是一个相当严肃的问题,值得好好思考一番。不是为了应付面试官,而是为了你自己。
对于这个问题,大部分人都会选择一个不痛不痒的回答来敷衍面试官。但它也确实引出了一个更为深层次的问题:一个软件开发人员究竟该有怎样的职业生涯?当然,我们选择这一行是因为我们喜欢这一行,并且幸运地得到了老天的眷顾,让我们干上了这一行。但你能在50岁的时候依然坐在电脑前敲代码吗?60岁呢?所以,我们得趁年轻的时候好好思考一下这个问题:作为一个程序员,最完美的职业生涯应该是什么样的?
那我就来告诉你吧:世界上的程序员大致有8种境界。
1.不朽的程序员
这是最高境界!虽然人已经离开这个世界,但是他的代码却依然活着。他成为计算机博物馆中的一个永久收藏。其他为数众多的程序员都在学习他的作品。他在生前可能获得过图灵奖,或者发表了大量有影响力的论文,或者发明了一些影响到计算机专业课程设置的基础技术。他已经不仅仅拥有一个维基百科的条目;事实上,有很多专门的网站都在讲述他的作品以及他的生平事迹。
在有生之年能够达到这一境界的程序员屈指可数。
代表人物:Dijkstra,Knuth,Kay。2
2.成功的程序员
成功的程序员不仅拥有广泛的知名度,同时还运营着一个不错的公司,甚至控制了整个产业链。他们拥有绝对的自由,可以做任何自己想做的事情。他们同时还拥有把“自由”带给广大程序员同胞的梦想。
这一境界的程序员最受人羡慕。要达到这一境界,更多的是需要商业上的才能,而不是编程能力。
代表人物:比尔·盖茨,Carmack,DHH。3
3.知名程序员
达到这一境界的程序员也不错,当然,前提是你得有一份不错的工作。
这个境界的程序员虽然在圈子里很有名,但是成为名人并不意味着可以靠这个赚取收入并且养活自己。出名固然不错,但成功更为关键。你可能在一家非常知名的大型技术公司工作,也可能在一家很有影响力的小公司或者是在一个很有希望的创业团队工作。不管怎么样,其他的程序员都或多或少地听说过你,并且你对自己所在的领域有着积极的影响。
4.胜任的程序员
作为一名软件工程师你非常成功,你的能力使你在工作中游刃有余。你从来不会为得到一份满意的工作而发愁。你的同事也非常尊敬你。每一家你曾经工作过的公司都因为你的加盟而在某些方面得到了提升。
但问题是:接下来你将何去何从?
5.普通程序员
这个境界的程序员基本上能够应付一般的编程工作。他们自己也很清楚,由于天资所限,他们很难成为杰出的程序员。
其实,天赋跟成功的关系并不大。如果你有敏锐的商业嗅觉和不错的人际交往能力,你依然可以变得很成功。如果你是一个普通的程序员,但你还能靠这一行当过上不错的生活,这已经说明你是很有才的,只是你不必非得干程序员这一行。
人贵有自知之名。通常你的能力都会比你自认为的要低。缺乏天赋并不是什么大不了的事情。要勇敢一点,发掘自己的特长,并且充分加以发挥。
6.业余程序员
业余程序员通常都热衷于编码。他们可能是一些很有前途的学生或实习生,也可能正在参与某些开源项目,或者利用个人闲暇时间开发一些“好玩的”应用程序或网站。从他们的代码和创意可以看出,他们是一群很有想法、充满激情的人。
成为一名业余程序员是件好事。这个境界的程序员可以通过自我提升,迅速地胜任程序员这个职业。
7.低调的程序员
还有一些坊间流传的比较有个性的程序员,如Joe Coder,很有能力但是没什么令世人瞩目的成就。他们可能服务于某家大型公司。对于这些人来说,写代码仅仅是份工作而已,并非他们生活的全部。这没什么错,挺好的!
8.烂程序员
这个级别的程序员技能极其匮乏(已无境界可言),他们通常是阴差阳错地干上这一行的。他们所做的任何事情都会给他们的同事带来痛苦和灾难—当然可能也有一个例外,就是他们的同事也是一帮差劲的程序员,差到连身边全是一帮烂程序员都意识不到。
如果要给烂程序员下一个定义的话,那就是:没有金刚钻,却偏偏揽了瓷器活。
应该承认,以上所有的这些境界定义得并不严谨。事实上,并不是所有的程序员在他们的职业生涯中都渴望相同的东西。思考一个程序员在10年、20年、30年甚至一生的时间里所能取得的成就,是非常有意义的!想一想,你最崇拜哪个程序员?到底是他的什么成就,使得你对他如此地崇拜?
总之,你究竟想要过怎样的生活?