老程序员应该记住的 5 件事
如果你甘于现状,并且已经在计划着怎么用退休金了,那么你不是这个帖子的主角。当然还是要恭喜你,已经快熬出头了。但是,如果你同我一样,尽管发现自己在变老,但却依然无法抵挡编码和构建东西的欲望,那么请继续往下看。
我曾是一个系统软件工程师,但在我快40岁的时候,我被创业撞了一下腰。我认为创建自己的公司是一件很酷的事情。我建立了风险投资,在一些非常小的饥饿创业公司得到了一些花哨的头衔。我很自信我会成为一个好的CEO,一个不算坏的管理者,而且即便我不再编码,我也可以聘请一些优秀的程序员和管理人员——以求高品质和创新。
我顺从自己的内心,并尽了最大的努力去奋斗。然后,我54岁了,年纪大了,开始有点力不从心。记忆力也下降了。我已经没法像以前那样学习得既快又多了。
我的这些负面的想法因为我所看到的种种新生生物而一点一滴地强大起来。这么多的新技术,像潮水一般汹涌而来。我讨厌node.js,我认为Web开发框架是可怕的,并且对一些我认为神圣不可侵犯却堕落成为陈词滥调的敏捷和极限编程等名词表示哀悼。我渴望曾经那些大家规范行为,认真仔细编码和测试的美好时光。
然后有一天晚上,当我正在看一部毫无新意的老电影《星际迷航》时,里面的James T. Kirk感叹,他感觉自己正在衰老,就像蜡烛一点一点在燃烧。Spock毫不犹豫地以他惯有的自信和逻辑风格说:
请恕我直言,如果你接受晋升的话,绝对是一个错误。指挥飞船是你首选的最好命运:其他的你根本就发挥不出作用。——Spock
我是不是也做了同样错误的选择?转去管理层(去做一些勉强擅长的事情),而不是坚持做我真正擅长的事情,是否是一个错误呢?
但是,幸运的是,我很快就意识到,这个问题的答案是“yes”。我忘了成为一个软件工程师是我首选的最好命运,这些年来,我的编码能力并没有任何进步。第一家基于我写的一个软件而成功的公司,至今为止仍在使用大部分代码。
因此,在历经一年时间的彻底反省之后,我开始学习新的语言,开始迎风破浪地向前冲。我真的很幸运,到57的时候,我甚至还为一家小型的本地创业公司设计和创建了迄今为止我写的最好的软件之一。
如果你和我同病相怜,都一样正在逐渐走向老程序员的“死胡同”,那么欢迎阅读我总结提炼出的一些建议,希望能对你有用。
第一件事:不忘初衷
随着年纪一点一点地变大,我们会渐渐厌倦处理事情。我们会厌倦于花大量时间去做一些收效甚微的事情。我们会厌倦于看到一遍又一遍地犯同样的错误。我们开始感叹“逝者如斯夫 不舍昼夜”。而面对那些快要退休的朋友,我们开始羡慕他们,羡慕他们安全,可靠,有时略显无聊的工作,羡慕他们快要拿到退休金,可以过舒坦的日子了。
从头开始创业,用20年时间去经历另一种不一样的人生,听上去很荒唐,而且老实说,我的妻子到现在还在絮絮叨叨这一点。
但是,当我再次回到这一领域的时候,感觉就像又是第一次写软件,一种小别胜新婚的兴奋之情油然而生。日新月异的技术。如此多有待解决的问题。层出不穷的新发明和再创造。软件成为了一个全新的领域,到处都是新的思路和机遇。
对于我们这个群体中的许多人来说,处于最前沿是最令人兴奋的工作。它像磁铁一样的吸引着我们。而且,我们可以做到!我们这些老程序员拥有更丰富的经验,经历过更多的失败,更多的成功,对于计算机如何工作比业内大多数人士了解得更为透彻。
当然仅仅这些还不够,为了保持相关性,你还得付出一番努力。你需要去学习,去学习新的语言,如Swift,Python和Go。是的,这可能需要几年的时间!并且可能会让你犯以前从来没有犯过的错误。你会停滞不前,你需要知道哪些工具包是相关的。你会看到年轻的程序员将你甩在身后,但不是因为他们更聪明或更敏捷,而是因为他们没有任何顾忌地一门心思往前冲。这正是你需要做的。就像你刚开始进入这个领域一样一往无前。
不要忘记你的初衷,如果你真的想做一些贡献,那么请捆住内心担心年纪变大和畏惧流言蜚语的魔鬼。不要禁锢自己的思想,生活不会你的老去而结束,只要你想飞翔,那么每时每刻都是一个新的开始。
第二件事:不要畏惧混乱
有一句老话叫,“事情变的越多,不变的也越多(the more things change, the more they stay the same)”。事实上,很多东西发生的变化比我们预期的要更小。我们以为现在的程序员能够完全理解编程过程。但其实不是。我们以为当年bug和错误频出的日子已经不复存在了。但它们依然横行肆虐。我们预计花在实验和改张易弦上面的时间会变少。但其实亦不然。
但从另一个角度看,今天的事情与以往却又是全然不同的。
我刚开始是在惠普科学计算器上编程,我唯一见过的程序员还是在电视上面,他们穿着实验工作服,彼时Unix还只是6岁大的稚儿,内核只由两万行代码组成。即使到了80年代中期,软件开发依然是一项独立的活动。家用电脑,虽然功能上已经满足真正的编程,但却并不提供一般人要想高效学会编码所需的工具集和知识。
我不知道在我涉及这一行的1980年有多少程序员存在,但真的不多。因为直到1988年,美国劳动统计局才开始计算这个数值。那时,美国大约有10万个专业的程序员。其中,高级程序员不超过7000人。
而今天,最新的IDC调查估计,全世界大约有1800万个开发人员,而且近一半还是非专业人士。Linux内核GitHub代码库包含980万行代码,有近6000个贡献者。而且,Linux内核还只是github的1千万个代码库中的一个。光是谷歌的企业代码库就有超过20亿行代码。
每时每刻都有很多代码问世。
很多很多。
如今的软件更像是一种极限运动。任何人都可以加入进来。你最好能够习惯这种现状,因为编码已经成为了一种新兴的首要素养。当这个星球上的每所学校让10岁的小孩子都开始学习编程的时候,我们已经无法计算将会有多少开发人员进入到这个行业中。
我们这些,说好听点是有经验的程序员,需要的是接受当今社会这种一窝蜂学编程的现状。就像跑步,很多很多人跑步,但大多数人都是业余的,只有少部分晋升为专业的,而真正够资格参加奥运会的只有凤毛麟角。要想取得成功,那么你需要摒弃你大脑中有关软件的已经先入为主的观念,接受这种混乱的状态。
因为这种混乱的现状,所以软件世界不可谓不鱼龙混杂。人们已经再创造出了我们多年前就知道如何去做的事情。他们正在创造貌似多余的库。他们正在创造新的技术。可能不一定更好,但会比以前的办法更容易。
这是软件增长和发明的黄金时代,工具变得唾手可得。
为了不被这个行业踢出局,你需要重振旗鼓,和其他人竞争,哪怕他们比我们年轻30岁。我们这些老程序员也应该感谢年轻一代的程序员,是他们将我们的智慧,经验和知识添加到这些新的代码库和团队中,从而减少了混乱,并提升了新方向成功的机会。
因此,不要畏惧你看到新的流行词,也不要害怕明显的模仿发明,要学会透过现象看本质。学习强者的态度,学习他们的经验和学习方式。
第三件事:不要留下芝麻丢了西瓜
我最喜欢的编程格言是,“改进软件更多的是通过删除代码而不是添加代码”。这应该成为每个程序员的至理名言。你需要学习的东西,比你想象得还要多。任何可能会妨碍你学习的事情——无论是你应该遗弃的旧程序,还是老观念——都会阻止你进步。
作为一个资深的程序员,我们的工具包包含了许多可靠的技术,这是我们技能的基础。这可以一种祝福,也是一种诅咒。
通常情况下,比起导入一个预先写好的包,我可以更快地编写好一个解析例程。在我编写之前,我通常需要确保包是“正确的”(即:我的做事方式)。我逐渐意识到,我的这种直觉本能过时了。我得尝试导入开源包。如果发现我的这种方式是“不正确的”,那么我应该找出优秀的,可重用的代码,而不是再创造。
在大多数情况下,经验是创新的敌人。进步的真正唯一办法是怀疑一切。只有当你尝试了新的途径,并测试过它知道是更好还是更坏之后,你才能决定采用什么样的做事方式。这就像一个过滤器一样,只接收通过亲身体验的方法思路,过滤掉了只通过检查审核就得出的思维方法。
通常情况下,这种方式很耗费时间,所以你要抵住回到旧习惯的诱惑。毕竟最后的收获是你自己的,所以一定要坚持这种方法道路。就像我说的第一件事,不要忘记你的初衷。随着时间的积累,慢慢的,你会习惯于发现自己的工具箱多了一个很棒的新工具系列,就去逐个检查这些技术是否是有价值的,是否是值得保留的。
如何做好这些抉择也是最重要的技能之一,并且直觉起了关键的作用。幸运的是,你有几十年的经验,比大多数人的直觉更敏锐。只是不要让你的偏见影响到你正确的思考。
第四件事:犹未老矣
假设你今年二十岁,刚从大学毕业的第二年,你发现你不仅热爱写软件,而且也擅长于此。而你周围的人,你的同龄人也在朝自己的方向努力着。有的通过创建应用程序或探索在线产品理念,启动了一家小得不能再小的软件公司。有些甚至更早就开始创业。John Meyer在他19岁的时候,他的app公司TapMedia就已经在苹果App Store上近40个的app了!
灰心,丧气了?担心自己老了?现在开始,犹未老矣。
什么是20岁的人有的,而你没有的?没错,他们拥有着:一往无前的冲劲以及无穷无尽的热情。但是,你所拥有的比这些更重要:经验,知识,以及经历过的失败能让你避开更多的障碍。
如果一个20岁刚毕业的黄毛小子到他们25岁的时候才能成功创建公司,那么你肯定用不了这么多时间!因为你不需要经历那么多的失败和挫折。更何况,你掌握的技能繁多,如健全的管理和正确的期望,这些真正成熟的技能能让你做得更好。
不管你多大年纪,只要能下定决心朝着目标执行,那么用不了几年你就能取得下一个软件的成功。不要在踌躇和犹豫中浪费生命。每个人都会老去,没有人能阻止岁月的流逝。那么,为什么不能在变老的同时有所建树呢?相信自己。
成就并不是年轻人的专利。Arthur Rubenstein,世界上最伟大的钢琴家之一,80年来凭借其出色的演奏赢得了听众广泛的认可。Julia Child,著名厨师,是在她年届40的时候才开始学习烹饪的。Roget,尽管在他年轻的时候发明了对数计算尺,但是谁都没有想到,他在73岁的时候,居然创作了《Roget’s Thesaurus》!
所以,不要再认为创建公司以及编写新软件只有年轻人才可以,你也能行。尽管如此,但随着你的年纪增大,有一些事情是你不能忽视的。这就是下面我要说的……
第五件事:健康是革命的本钱
还记得以前为了尽快发布下一个版本通宵达旦工作,却依然感觉精力充沛的日子吗?戴上耳机,沉浸在代码的海洋中。房间中只有屏幕发出的暖光,和旁边满是可乐罐的垃圾桶,以及乱七八糟的比萨饼盒子相映成趣。
那样的日子已经一去不复返了。当你一把年纪的时候,如果你要搞新项目,那么你就不能再采取这样的做事方式。因为你的身体条件已经不允许了。你现在的身体更像是一个生意上的合作伙伴,合作的好就能协助你工作,合作的不好,就会拖你的后腿。
别不承认。你敢说,你现在的肌肉不会偶尔疼痛吗?你现在没有大腹便便吗?想必医生经常会告诫你要减肥,要多锻炼了吧。验光师甚至开始建议你佩戴“远近双用眼镜”了吧。……
总之,你需要改变生活和工作的方式。可以通过锻炼和改变一些生活方式的来克服这方面的生理问题。健康的身体能让你在应对挑战的时候也不会力不从心,能够让你老骥伏枥,志在千里,从容地应对风险和责任。
改变不会自行发生,它需要你的管理和约束。但是这往往却是我们再次启程的拦路虎。因为我们身边有着太多的责任。家庭,孩子,以及需要承担的家庭财政义务。大多数人会随着年纪的增长越来越重视这些。而冒风险以及再次学习技术往往会让人觉得是不负责任的。
将自己接下来的人生继续定义为程序员,可能意味着你永远不要想退休了。因为一不留神随时随地就会遇到新事物。正是这种不可抗拒的学习心态推动着你的职业生涯的进步。
希望我上面提到的这五件事能够成为你的精神食粮。并且我还要再次提醒你,无论什么时候开始,都不算太晚。不管你是什么背景,总有可以继续完成的重要工作。如果你是一个商业程序员,那么整个商业世界还处在软件中断的阵痛中。如果你是一个网页设计师,那么我想说的是,web 8.0还没有大放光彩。
当然如果你是一个iOS程序员,那么建议你写一个优秀的电子邮件app,不知道你行不?
打赏