寒冬、裁员、降薪、996、秃头、最近几年这些词汇不断在各位码农的周围盘旋。
很多程序员对自己目前的状态干到困惑和焦虑,而且这好像是国内外程序们都会遇到的问题。
最近,在Reddit上,一位干了40年程序员的网友发表了对这一问题的看法,还总结了自己从业40年的经验,整理成13条建议,希望能给码农们提供一些建议或帮助。
Noah Gibbs,曾在英伟达、AppFolio Inc、DAQRI等公司写代码,2021年5月加入了Shopify。
这是他的个人博客,一直在坚持输出一些技术性的文章与视频,特别是关于Ruby的,还写过一本关于Ruby的书,文章的封面图是粉笔画,很有个性。
Noah Gibbs没有告诉大家要学习什么语言或框架,这些知识和技能是不断变化的,而且没有尽头,比技术更重要的是对工作的一些看法。
原文是英文,以下根据Noah Gibbs的文章与视频翻译整理。
1、软件开发职业还很年轻
计算机语言 Fortran 的历史可以追溯到 1957 年。1958 年,LISP 和 Algol出现,1959 年,COBOL出现,一些更古老的Plankalkül出现在1942年左右。
假设从 1957 年开始就有程序员,也不过65年。Alan Kay,Smalltalk 编程语言的发明者,大约从 1963 年开始——59 岁,他是我发现的从业时间最长的人之一。
马友友今年 66 岁,即时从 4岁半起就开始拉大提琴。他离世界上演奏时间最长的音乐大师还差得很远。相比之下,程序员真的非常年轻。
2、只要喜欢,几岁开始都不晚
大约一年前,也就是45岁时,我才开始学习弹钢琴。这一年我觉得自己一直在进步,我相信如果坚持下去,到60岁时我一定会非常棒。学习编程也是一样,当你已经有了一些其他领域的经验和知识时,你学习编程就会变得很快。
我遇到过很多优秀的程序员,他们都是在20岁、30岁甚至40岁才入行,所以我不知道你为什么不能从50、60岁开始。这一行需要时间和工作,但你不必非得年轻。
假如你觉得自己不能成为行业专家或大师的话,也不必气馁,这个世界上大部分的人都不能成为马友友,或者Alan Kay ,你得接受这一点。
3、多尝试不同类型的编程
建议大家要多写一些软件,各种类型的软件。尝试使用不同类型的编程语言,这样可以开拓你的视野,提升思维能力,每一种语言都可以从中获取一些灵感。40年来,编程语言与方式一直在变化,我们需要去适应它。
4、不要怕回报慢
不要觉得自己正在学习的东西是没用的,因为没用是相对的。
我曾经把多年的业余时间投入到一种叫做DGD的旧的MUD编程语言中。当然不是为了实用价值,因为几乎所有关于它的东西都是奇怪的和不标准的,很少有真正能应用的。
但它教会了我很多,它教会了我Ruby on RAIls后来应用的东西,它教会了我如何使用数据库编程,它还教会了我一些在后来学的五六种语言中都能用上的东西。
有趣的是,多年后我在DGD找到了一份咨询工作。这世界上还没有多少DGD的工作,但我有一个!这比我学过的许多“实用”语言更实用。
多学习一些有趣或有用的东西,即使现在看来没有什么用,说不定哪一天就会派上用场,而且让你大吃一惊。
5、找到工作中最感兴趣的部分
最开始写代码可能是生活需要,或者是机缘巧合,但你想要一直干到退休,你就需要找到你的兴趣点,只有这样才能长期坚持下去。对于我来说,写代码让我感到成就感和愉悦感。
6、不要把计划看得太重
很多人经常会列很多计划,往往很多没有完成,其实没必要太在意,因为你不可能通过计算和计划来完成所有的事情。这不是失败,也不是放弃。
你无法预测什么是有价值的,即可能去学习所有的东西。你活得越久,工作得越好,你就越能意识到每件事都能教给你有用的东西。
7、不要混淆工作和事业
不要把工作和事业混为一谈,它们不是一回事。区分它们的最好办法就是,你会不会因为钱放弃。
对于我来说,写代码是一份非常棒的工作,但只是一个还行或者可以更好的事业。对于很对音乐家来说,它们并没有获得很高的报酬,但音乐是他们一身的事业。
8、规范不重要
在刚入门的时候,你往往会得到关于首先学习什么语言或技术的不同建议,但这其实不重要。
没有什么规范或套路是一定要遵守的,规范是用来打破的,最重要的是花时间去学习,去研究和改进。
9、你越优秀,就越和别人不一样
不要按照招聘需求里的要求去学习和改进自己的的能力,这样做只会变成一个工具人。找到自己的真正擅长的东西,比如团队管理、设计营销、写作或者创业,与众不同才是你最有价值的部分。
10、从实践中学习
对于初学者来说,首先要学会用一些实际的语言构建一个可用的软件。不管是哪一种语言,只有犯一些真正的错误,才能在错误中解决问题。然后就可以这样循环:实践,犯错,学习理论,修正错误。
11、学习各种技术和各种非技术技能
如果你想在程序员这一行做上几十年,你不仅要学习各种各样的技术,还要学习各种各样的非技术技能。
举个例子,“学习至少一种函数式编程语言”,就像钢琴家“学习演奏莫扎特的钢琴曲”一样是必须的,但同时,学习一些编程时所涉及的边缘技术,会为你培养额外的洞察力。
12、向其他领域学习
你可以从其他领域学到很多东西。我曾经写了一本关于如何偷学艺术家练习方法的书,正是因为艺术和音乐都是古老的学科,它们已经领先计算机发展几千年了。
所以,如果你遇到了一个问题,你可以考虑一下其他领域的人们会如何处理这个问题。例如,阿图尔·葛文德(Atul Gawande)的《清单宣言(Checklist Manifesto)》中就讲述了飞行员、摩天大楼建造者和医生处理问题的截然不同的方式,这些都是很好的方法。
13、不要重复造轮子
在程序员中有一个说法是“不要重复造轮子”,我们的工作正是想办法让电脑完成所有的重复工作,这样我们就可以只做新的工作。
你可以尝试重新发明轮子、可以故意用“糟糕”的方式编写代码,看看会发生什么。总而言之,你需要真正擅长一些不同寻常的事情。
14、对效率保持谨慎
我们经常会提到效率一词,有时他们会带来巨大的收益。通常他们什么都不给。有时他们对你的伤害多于帮助。
效率是如何改进已经到位且运行良好的策略,如果你期望每年持续 20% 的改进,每月复合,这会让人感觉很糟糕。提高某一部分的效率通常要以降低另外一部分的效率为代价。
15、只管去做
如果你真的想干一辈子程序员,其实最重要就是坚持下去,只管去写,无论如何,只要你愿意,你就可以一直做一个程序员。
很多人觉得国内35岁就要失业,怎么可能干到退休呢。确实要考虑国内国外的情况不一样,但换一个角度想,国内也一些程序员确实干了四五十年了,而且还在干,每个职业都有它的局限性和劣势,我个人最认同的是第五条和第七条,最重要的还是找到自己的兴趣点,坚持下去。