干了 40 年程序员,是一种什么体验?
一位从 1984 年就开始当程序员的老哥出来“现身说法”了。
他总结了自己从业近 40 年的经验,汇集成 13 条建议,希望能给想长期做程序员的新手们提供一些帮助。
文章一发布,就在 reddit、推特上引发讨论,许多程序员也纷纷跟帖附议,有网友就表示:不能同意更多!
赶紧来看看,他都分享了哪些干货吧。
来自近 40 年码农的经验分享
这位老哥叫 Noah Gibbs,曾供职于英伟达、AppFolio Inc、DAQRI 等多家公司,目前就职于 Shopify。
作为一名资深的软件开发者,他一直活跃在开发一线。
但与想象中不同,这次他并没有介绍要学习什么语言或框架,而是指出了一些他认为比技术更重要的事。
(以下是作者 Noah Gibbs 的口吻叙述)
大约一年前,也就是 45 岁时,我才开始学习弹钢琴。这一年我觉得自己一直在进步,我相信如果坚持下去,到 60 岁时我一定会非常棒。
学习编程也是一样,当你已经有了一些其他领域的背景时,你学习编程就会变得很快。
相信我,如果你从 50 岁开始做程序员,10 年后,也就是你 60 岁时,肯定会比我 18 岁的水平好得多。
我遇到过很多优秀的程序员,他们都是在 20 岁、30 岁甚至 40 岁才入行,所以我不知道你为什么不能从 50、60 岁开始。这一行需要时间和工作,但你不必非得年轻。
如果你刚刚入行,并且想长期从事编程行业,我的建议是:要多写一些软件,任何软件、写什么都无所谓。
在我干程序员的 40 年里,很多潮流来来去去。可以说,让自己多尝试不同的类型的编程很重要。
这可以使你思想不会变僵硬,而且事实证明,几乎任何一种规则都能教会你一些东西。
如果你太拘泥于某一项单独的任务,就很可能会失败。
不要觉得自己正在学习的东西是无用的,因为无用只是相对的。
我曾经把多年的业余时间投入到一种叫做 DGD 的旧 MUD 编程语言中。这当然不是为了实用价值,因为几乎所有关于它的东西都是奇怪的和不标准的,很少有真正能应用的。
但它教会了我很多,它教会了我 Ruby on Rails 后来应用的东西,它教会了我如何使用数据库编程,它还教会了我一些在后来学的 5、6 种语言中都能用上的东西。
有趣的是,多年后我在 DGD 找到了一份咨询工作。这世界上还没有多少 DGD 的工作,但我有一个!这比我学过的许多“实用”语言更实用。
就像我经常对自己说的:“现在还早。”你可以多学习一些有趣或有用的东西,即使可能十年、二十或三十年后才有回报。
不要总是选择 18 个月后就会变好的东西,因为你无法预见未来会发生什么。
你开始写代码一定是因为它的某些方面吸引了你,你要做的是试着弄清楚那是什么。
这个答案每一个人都不一样,对于我来说,我喜欢写代码给我带来的成就感和聪明的感觉。
只有在工作中找到足够吸引你的点,才能长期坚持下去。
如果你感觉不到任何被吸引的点,那你可能需要休个假,或重新寻找你喜欢的东西,因为这样的工作只会让你精疲力竭。
如果你是个新手,很可能在下定决心“我要成为一名程序员”后,列出一个详细的计划,计划中可能包含 8 个大点、56 个小点等等。
我不会告诉你不要这么激动,但我要说:不要把这个计划太当真。因为你不可能通过计算和计划来完成所有的事情。
在某些时候,你并没有“脱离你设定的任务”,你只是“过着自己的生活”。这不是失败,也不是放弃。
你无法预测什么是有价值的,所以你应该学习所有的东西。我的经验就是:你活得越久,工作得越好,你就越能意识到每件事 (每个人) 都能教给你有用的东西。
你不是在跑短跑或马拉松。相反,这就像是在写日记。
十年后,你会翻看这本日记,然后说,“哇,我做了一些很酷的事情”或者“嗯,我是个很有趣的人”,但我想你应该不会在日记上写“我非常擅长 Java”。
不要把工作和职业混为一谈,它们不是一回事。
对于我来说,编写软件是一项非常棒的工作,但只是一个还行或者可以更好的职业。
在接受别人的建议时,也要注意对方提到的是关于工作的建议,还是关于这份职业的建议,如果你把两者混淆,这个建议就没有多大意义了。
在刚入门的时候,你往往会得到关于首先学习什么语言或技术的不同建议,但这其实不重要。
如果你没有按老规矩走,而是开创了自己的道路,那并不意味着你没有做好基础工作,也不意味着你就很糟糕。
因为如果某件事真的很重要,你迟早都会发现,并重新去学它。
早期的程序员职业培训(例如博客文章、大学课程、书籍)就像流水线,试图培养你在每一个方面的基本能力。
而且新手很容易误认为,一个首席工程师需要点满很多技能、每个技能水平也必须很高,但事实并非如此。
你可以通过编写一段相当简单的代码并详细地描述它,就像 Patrick McKenzie 在《Bingo Card Creator》中做的那样,也可以通过写一些真正有利可图的东西来获得尊重。
除了基本的能力之外,这些道路几乎没有任何共同之处。
这也是为什么当你求职时问这样的问题是很蠢的:“我是一名有 15 年工作经验的软件工程师,通常的薪水是多少?”
15 年是如此之久,以至于你应该形成了与其他人不同的优势之处。你写过书吗?从事过赚钱的大型项目吗?整合过一个有趣的开源项目吗?这 15 年你做了什么?
当然,这也不仅仅是工资的问题。你可以问:“我是一个有 15 年经验的软件工程师,这意味着我有能力领导这个项目,对吗?”答案当然是“可能”。接下来的问题是“那在 15 年里你做了什么?”
我不会建议人们一开始就去学习软件设计的深层原理,这是因为如果你试图把它们当作纯理论来学习,那么几乎肯定会做错。
对于初学者来说,首先要学会用一些实际的语言构建一个可用的软件。不管是哪一种语言,只有犯一些真正的错误,才能在错误中解决问题。
然后就可以这样循环:实践,犯错,学习理论,修正错误。
当然,这也并不意味着如果你先学习了理论,你就会永远变差,只不过是需要一段时间才能正确使用你所学的知识。
如果你想在程序员这一行做上几十年,那么你不仅要学习各种各样的技术,还要学习各种各样的非技术技能。
举个例子,“学习至少一种函数式编程语言”,就像钢琴家“学习演奏莫扎特的钢琴曲”一样是必须的,但同时,学习一些编程时所涉及的边缘技术,会为你培养额外的洞察力。
如果我们的行业还很年轻,这意味着什么? 这意味着我们还在研究基本原理。
你可以从其他领域学到很多东西。我曾经写了一本关于如何偷学艺术家练习方法的书,正是因为艺术和音乐都是古老的学科,它们已经领先计算机发展几千年了。
所以,如果你遇到了一个问题,你可以考虑一下其他领域的人们会如何处理这个问题。
例如,阿图尔・葛文德(Atul Gawande)的《清单宣言(Checklist Manifesto)》中就讲述了飞行员、摩天大楼建造者和医生处理问题的截然不同的方式,这些都是很好的方法。
众所周知,如果美术家重复画一个静物、音乐家反复练一首曲子,他们都会越来越熟练,但程序员不一样。
在程序员中有一个说法是“不要重复造轮子”,我们的工作正是想办法让电脑完成所有的重复工作,这样我们就可以只做新的工作。
你可以尝试重新发明轮子、可以故意用“糟糕”的方式编写代码,看看会发生什么。总而言之,你需要真正擅长一些不同寻常的事情。
我一直在向大家推荐非技术领域的建议,而不是那些充斥着技术宅们的论坛,那些论坛里充斥着最近才转行为程序员的人那种偏执的热情。
如果你写程序,你就是程序员,或者软件工程师,或者随便你怎么称呼它。
只要你坚持写下去,你就可以一直做一个程序员,不管多少年。无论如何,如果你坚持下去,你就有资格,这才是最重要的。
怎么样,看完以后,你对程序员行业有没有新的认知?
除了文字版本,作者还在 YouTube 上上传了视频版,链接放在评论,感兴趣的小伙伴们可以自取~
文章链接:
https://codefol.io/posts/the-forty-year-programmer/#disqus_thread
视频链接:
https://www.youtube.com/watch?v=UPkJGU7Itb0
参考链接:
https://www.linkedin.cn/incareer/in/noahgibbs