“8 岁学编程,做了近 40 年程序员,我总结了 15 条经验宝典”

软件开发很年轻

计算机语言Fortran的历史可以追溯到1957年。还有其他一些语言也差不多是在同一时期出现的(LISP和Algol:1958年,COBOL语言:1959年)和一些奇怪的年老竞争者(Konrad Zuse的Plankalkül,1942年左右。)

假设从1957年开始就有程序员了,那一共有65年历史。我从1998年(24年经验)开始成为一名全职程序员,从1984年(38年经验)开始做一名程序员,可以说非常有经验了。此外,Smalltalk编程语言的发明者Alan Kay,从1963年左右开始成为程序员(59年经验),他是我发现的活跃时间最长的人之一。

相比之下,天才大提琴家马友友今年66岁,他从4岁半开始就一直在拉大提琴,但他远不是世界上演奏时间最长的音乐大师。《吉尼斯世界纪录大全》记载,Kasper “Stranger”Malone连续80年都有专业的音乐作品发布。因此,一个真正有经验的音乐家的工作时间,甚至比我们整个学科存在的时间还要长15年。所以,我们的领域还很年轻。

顺序不是决定性的

如果你刚刚开始编程生涯并且想长期做下去,我经常说“只要写一些软件,任何软件都可以”。你需要学习很多不同的东西,以什么顺序学习它们并不是什么大问题。

40年来,很多趋势来来去去。桌面应用、移动应用、操作系统和系统、 络编程,我都学习过。当然,你所学的列表会有所不同,但它将涵盖多种编程。只要你尝试不同的东西,你做它们的顺序并不重要。

当然,“尝试不同的东西”是关键。你在四个不同的领域各花十年的时间,会比你花40年的时间写 络套接字服务器要好得多。并不是说40年的深度没有价值。深度绝对有价值,所以你也不应该在四十个不同的领域各做一年。

但你要注意别太刻板。事实证明,几乎任何学科都可以教给你一些东西。如果你不知变通学不来,那你就失去了机会。

尝试不同类型的编程,用任何顺序都可以,但同时你应该在某些方面下功夫并变得更好。

确保工作是好的

你开始编写软件一定是因为它吸引到了你。它的某些部分是好的,否则你也不会费心费力了。

试着弄清楚那是什么。你喜欢什么什么吸引了你有什么好的地方对每个人来说都是不一样的。

我喜欢有成就感和聪明的感觉。这不是我工作中最好的做法,但我在家里经常这样做。我不需要每个人都看到它,我可以只靠自己的聪明才智做好工作。我也喜欢做一些和自己工作不同的事情,即使我在两个地方都写代码。我还喜欢写一些其他程序员可以使用和欣赏的东西。

你的理由也许和我不一样,但我想说的是,工作很好,如果它不好你也做不下去。如果它不再好,那就是紧急情况:你需要休假,或重新找到你喜欢的东西等。因为如果你的工作不再让你感觉良好,你会很快精疲力竭。

工作是好的,如果不是,那就改变工作。这些都不一定意味着这份工作是好的,或者换工作,但是你需要在你的工作中获得足够的好处让自己继续下去。不管怎样,坚持下去是一种要求,所以这可能也会影响你的工作。

不要混淆工作和职业

虽然我也期待着能够退休,但我不会停止工作,我也不会为了钱去做我不喜欢的工作,特别是如果它不能教给我什么了不起的东西。

我目前在YJIT(用于Ruby的JIT编译器)上的工作充满了我愿意免费写的代码,但如果我没有得到 酬,我就永远不会碰费用 告,也很少写状态更新。他们会少做很多系统管理员的工作或Git历史修剪。

所以,不要把工作和你的事业混为一谈。它们不是一回事。编写软件是一项了不起的工作,它也是一个不错的职业。就像我经常谈论的音乐家,有些人通过写作和演奏音乐获得 酬,但很多音乐家从来没得到 酬还一直在坚持。如果你能得到 酬,那你可能会在工作上花更多时间。但工作就是工作,而职业则是为你的工作扫清道路。对我来说,编写软件就是我的职业。

不过,最重要的是,要分辨出你在任何时间得到的是哪种建议。你会得到关于工作的建议、你也会得到关于职业的建议。如果你把两者混淆,那么这些建议就没有什么意义了。

你变得越好,你就越与众不同

职业生涯早期的培训(代码学校、博客文章、大学课程、书籍)往往感觉有点像一条流水线。有一堆真正的基本技能,例如写函数、调试、估算、与团队交谈,他们试图确保你在每一个方面都具备基本的能力。这让人们很容易以为,比如对于一个首席工程师来说,有一个你需要的技能清单,但清单上有更多的技能而且水平必须更高。但事实并非如此。这不仅仅是工作水平,它也是开源中的“水平”,尊重的水平。

你可以通过把一段相当简单的代码,写出(用英语,给人类)大量的细节而备受尊重,就像Patrick McKenzie写的Bingo Card Creator一样;你可以通过写一些真正有利可图的东西来获得尊重,就像一个公司的创始人;或者写一些深奥复杂的东西,比如一种晦涩的语言(Haskell)。除了基本能力之外,这些途径几乎没有任何共同之处。

你需要真正擅长某件事,而这件事需要受欢迎或有利可图,或者以其他方式“成功”。这听起来应该很模糊,因为事实就是如此,这也是主观的。如果你打算赚比尔·盖茨级别的软件钱,结果你写了Haskell(复杂、深刻、广受好评,但没那么赚钱),那你就太失败了,反之亦然。

这就是为什么问“我是一个有15年经验的软件工程师,通常工资是多少这样的问题很愚蠢。15年的经验太多,所以你应该完全不同于其他同样有15年经验的工程师。你写书了吗做一个赚钱的大项目吗是创建了一个有趣的开源项目用这15年做了什么就像说“我是一个有二十年经验的音乐家,我每小时应该收费多少这个问题没有简单的答案,也不应该有。

这也不仅仅是薪水的问题。你可以问:“我是一个有15年经验的软件工程师,这意味着我有能力领导这个项目,对吗答案当然是“也许”,接下来的问题是“在那十五年里你做了什么

了解相关技术很重要

我已经说过很多遍,以什么顺序学习什么技术并不重要。重要的是,你要学习一些不同的东西。如果你总是做一件事,你不知道自己会养成什么坏习惯。

如果你总是在一台机器上编码,你就不知道自己有多少 络知识没有学到,而最终 络可能是重要的。如果你只在web服务器上工作,而从不在手机或应用程序代码上工作,你永远不会知道为什么“在我的机器上工作”是如此糟糕。你可以做一件事很长一段时间,五年年如果你想做到40年,你就需要了解自己软件所涉及的许多其他技术,要有一点洞察力。

洞察力就像其他深层原理一样,你通过工作和看到现实世界的问题来获得它。而你通过各种工作来获得它,这样你就能看到不止一个观点。当你说 “好吧,我的部分起作用了”,但整个系统因为其他人的部分不起作用而失败时,你会意识到自己的观点有问题。你学会关心比自己的代码更重要的事情,这就变成了软件架构,但也变成了观点和同理心。一个真正有用的软件系统有很多软件,同样也有很多人参与,你不能忽视这些人。

这意味着你要学习各种技术,以及各种非技术技能。你使用什么技术很重要的另一个原因是,一些语言或库会让你在特定的技能方面做得更好。如果你想在编程领域工作40年,你将需要扎实的基础技能。

程序员是逆反的

如果你从其他领域学习,它会让你变得很奇怪。虽然大多数情况下这是好事,但有时也会引起摩擦。

例如,艺术家、音乐家和作家都知道,如果你一遍又一遍地重复同样的活动,你会变得很擅长。我们在软件中也为它取了一个名字:“重新发明轮子”。这被视为一件坏事,我们羞于启齿,私下行事。我们想办法让计算机做所有的重复工作,这样我们就可以只做新的工作。

事实上,在公共场合说你一遍又一遍地做同样的事情非常尴尬,甚至还会损害你的名誉。这就是为什么我们大多数人都不擅长开始新项目、不能谈论何时使用一种或另一种句法结构,以及为什么我们表现得好像机器应该强制执行关于缩进的一目了然的规则,好像有一个简单、正确的方式来做到这一点。因为你建立这些技能的方式是重复,随着时间的推移变得更好,相信表达能力,并与其他人交流。作为一个行业,这些都是我们鄙视的东西。

这是否意味着你个人需要在这些事情上做的不好案是否定的。你没法让所有人都变得更好,但你个人可以做一些“不好的做法”,但实际上会让自己变得更好的事。你可以重新发明轮子,可以重复写同样的东西,也可以用“不好”的方式编写代码,看看会发生什么。

要注意的是,小心最佳实践。它们意味着别人做了工作来思考它,并变得更聪明,而你只是在使用他们想出的最简单的东西。这在开始时很好,但作为一种改进的方式,这很糟糕。

你要明白,如果你向艺术家、图书馆员和厨师学习,你就不能轻易地把软件世界的其他人也拉进来。仅仅因为你是对的,并不意味着你能说服他们。你的正确方法甚至可能需要他们不具备的技能。 

但是如果你不在乎周围人的想法,你会变得更好,你不必告诉别人自己是怎么做到的。出于同样的原因,要小心使用工具和执行。它们的设计是为了保持最低水平的能力,而不是为了让你真正擅长一些不寻常的事情而设计的,而你想在一些不寻常的事情上变得真正优秀。

坚持才是最重要的 

以上这些都是对我来说都是非常好的事情,大部分是为了让你消除疑虑,而不是改变你的方法。

如果你编写程序,你就是程序员,或者编码员,或者软件工程师,或者任何你喜欢的称呼。如果你坚持写程序,你可以成为一名多年的程序员。无论如何,只要你坚持不懈,管理自己的期望;当你犯错误时,你会注意到并纠正它们;你要注意别太刻板,试着享受这份工作。

剩下的就是时间,也许还有一点保持成熟。在你意识到之前,40年不知不觉就过去了。

参考链接:

  • https://codefol.io/posts/the-forty-year-programmer/

— 推荐阅读 —

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月7日
下一篇 2022年8月7日

相关推荐