程序员的职业发展一直是让人困惑的问题,多看些前辈的心得也许会有所启发。
英语水平有限,翻译的生硬,推荐看英文原文链接(评论必看)
http://www.bennorthrop.com/Essays/2016/reflections-of-an-old-programmer.php
这是星期六的早晨,我在一个技术会议,我的孩子们和我美丽的妻子(who is pulling my weight on the domestic front)都在家。这是个关于React Native的会议,主持人正在说服我们为什么移动设备的发展真的是“下一个大事件”。对我来说,它有点类似15年前的在表示代码里有所有逻辑的JSPs,但我“老”了,所以我假设我只是没有“意识到”。
主持人扫过一些幻灯片,一些令人印象深刻的生动的代码让我们眩目,让后他开始了陈述里“name dropping”的部分,他飞快的说出大约半打我从来没听说过的支持工具,诸如Pepperoni的一些东西(说真的),和一些最近才知道一点点的东西,一切都让我感觉心灰意冷。“又来了”,我想。
当然我不是真的惊讶。在过去的20年,我坐过不计其数的乐队马车,并享受这样的骑行。编程中一个新的“中断”伴随的嗡嗡声令人兴奋。感觉和一个技术开拓者背离,支持一些东西会让事情变得更简单,更快捷,更干净,更好。它可能很有趣,但在这个特别的早晨,在这40岁的尖端,我不得不承认我感觉有点精力耗尽。我知道这是工作的一部分,如果我想保持目标明确(并且收入不错),我知道我需要时常赶出一些我曾经尽职汲取的知识,并为下一段旅程做好准备。就是这样。
不过我想想,我编程事业的常规惯例对其他专业人员来说似乎不是一种生活方式。40岁的医生似乎不会担心发现他所有的血管系统知识即将蒸发以利于一些新形成的理论。同样的情况出现在律师,水管工,会计,英语老师身上。当然这些职业也有没有吸引力的方面。很有把握的说,,职业生涯的中期,他们积累的知识相对稳定,为他们提供了一些尊重和补偿增长的措施。但在编程上,20年的经验似乎不能提供这些优势。
当然我们的职业并不是都这么凄凉,作为一个程序员有很多事情去热爱,但不是在对“坚持”永无休止的挣扎这方面,这是个在我们的领域似乎或多或少独特的有趣的特点。我说的对吗?编程真的在这方面不同?如果是这样,又是为什么?这对我们的事业轨迹意味着什么?我愿意试着从两个方面回答所有这些问题。
第一是知识衰减。我们知道的所有东西,不只是编程,都有一个终结期,即它不再有用的节点。当我16岁时我学会了开车,大多数时候,这知识仍然对我有用。这块只是可以说有一个很长的半衰期。对很多专业来说,他们的主要知识同样有一个相对长的半衰期。当然,医学的新发现会取代一些已有的规程,但我们对生物学的理解,很可能不会有一个重要的彻底的修改。当终结期如此长,知识能有效的认为是可积累的。医生会比他去年更有知识,因为他过去12个月学到的所有东西建立在他以前的知识基础上。
在编程方面,我断言这是并非完全如此,不管是好是坏。我敢打赌说:10年后程序员的知识一半会变得无用。
这可能有很大差距(当然这儿有很多警告-继续读下去) 但它对我视乎是对的。如果我从这里开始什么都不学,我打赌到2026年,我仍能用的知识只有大约一半了(SQL万岁!),另外一半可能会没用了(React Native, perhaps?)。现在我当然会获得新知识来取代这些消亡的东西,但这足够吗?到2026年我会获得比现在更多(有用)的知识吗?
这让我有了第二个概念,知识积累率-我们增加新东西到我们的知识库的速率。在每个领域,知识有某一个临界值必须满足来“被证实”(或至少可雇佣),在事业的早期通常专指获取知识。但在编程上,由于知识衰退快,似乎我们从来没有越过“学生”时代。我们知道我们必须一直学习,这让我们的事业阶段有一点非典型。
如果我要绘制程序员事业路线的平均知识图,考虑知识的衰退和积累率,我想它可能看起来像如下:
在事业的开端,我们可以称为热切的学徒的阶段,累计知识相对容易。所有的东西都是新的,每个经历都是获得更多知识的运输工具。此外,由于我们很年轻,我们常常只有恨少的困难的职责,所以我们可能不介意花几个夜晚和周末学习新的语言和框架。最后,很重要的一点,我们的老板对我们的期望值较低。所有人知道我们是新手,我们比同事更容易抽取工作时间来填补知识漏洞。这是一个有趣的阶段,但会有我们不知道的太多的持续感受。
在某些节点虽然我们结束了作为一个新手,把自己建立成一个多产的自给自足的开发者。我们和同事之间的差距第一次看上去没那么大(即使比我们资深10年)。这让我们充满活力,所以这是冉冉升起新星的阶段。我们之前在学习上做的投资初见成效,我们知道的所有东西都是有用的,我们的知识没有明显衰退的。伴随存满相关知识,我们开始获得客户,同龄人和经理的尊重,同时有来自头衔,薪水和机遇的尊重。虽然在这个时候我们不一定能看到,这也是一个重要的拐点。
在这个节点有两个事情发生。第一,提升为上司伴随更多的东西到来,不只是钱,更高的期望。老板需要他的明星程序员成为领导者-帮助新开发人员,代码评审,进行面试,参加更多会议,在很多情况下帮助维护之前建立的复杂遗留软件。所有这些明显有道理,但这以花费我们知识的积累速率为代价。我们过去阅读技术博客的时间没有了。第二,同样在这个节点我们第一次经历(或者意识到)一点知识衰退。我们事业早期学习的知识有一些过时了。我们花来学习GWT的所有时间?消失了!本质上,知识衰退和知识积累速率这两种力量开始对抗我们。
在我们进入第三也是最后一个阶段的节点,沉着老手的潮起潮落。我们富有知识并且高效,是的,但我们也知道我可能真的比我们事业早期阶段知道少些的有用东西了。并不是微不足道的数量的知识消退了,同时我们可能没有时间积累足够的新知识来弥补。这让人沮丧,我想这是为什么在这个节点很多人bail for其他牧场-管理,销售,测试,或者种田(我的梦想)。我们意识到这会需要很努力来保持我们的熟练程度,如果不努力,我们可能在工作的5年后变得更糟。这儿没有海岸线。
这是我在的地方。我仍然爱学习,我领会到没有某些艰辛的努力,我可能会总是保持在一个徘徊在“专家”的下边缘的平衡状态。我对这些感到还行,比起想成为下一个Martin Fowler我更享受我的个人生活(虽然我打赌Martin也有精彩的个人生活-那家伙太让人吃惊了)。不过以知识消退和积累的形式思考我的事业改变了一点我的观点。
首先,我试着放远目光。对过度征税期望和少量新奇经历的机会,我是谨慎的角色。我看到很多同事在某个老板那领着更高的薪水,这些地方很少有机会学习新的东西。5年后,他们意识到很多有价值的知识蒸发了,他们的收入和他们实际的价值不一致了。某些时候,我觉得短期内少挣钱(在一个不错的老板那)也许会在一个长的职业生涯里收益更多的钱(也稳定)
第二,考虑到时间是有限的,我试着投入更多的时间到有持久性的知识里。我的精力最好花在积累有长生命周期的知识里-算法,应用程序安全性,性能优化,架构。在这些地方有所开拓,我希望,会更好的保护我的职业生涯,而不是学习最新的昙花一现的JavaScript 库。
最后,也许我还没有在这儿真正锻造新天地,但以下面两种形式思考我的职业生涯是有用的:知识衰退和知识积累。我很愿意听听你们的任何想法!
发表评论(对文章涉及的知识点还有疑问,可以在这里留言,老高看到后会及时回复的。)