本篇关于一个码了四十年代码的程序员的故事!


到 2024 年,我将成为 40 年的程序员。这与开发软件赚最多钱或创办软件公司不同。我确实赚了很多钱。但这不是这一切的目的。

我认为你可能想长期担任软件开发人员,就像有些人长期担任音乐家、艺术家或修理工一样。如果没有,你可以在浏览器中点击“返回”。很酷,没有伤害也没有犯规。但我想也许你想成为一名工龄 20 年、40 年或更长时间的程序员。

我不会告诉你要学习什么语言或框架。如果你擅长基础知识,你可以学到任何你想学的东西。在那之前,你可以随心所欲地做坏事。无论如何,我就是这么做的。

相反,我会谈论刚写代码时对我来说没有意义的事情,现在它们是我天空中的北斗星。这意味着它与特定技术无关。技术来来去去。语言来来去去。他们不可能是你的天空。

让我们从这个开始:软件开发还很年轻。

软件开发还很年轻

计算机语言 Fortran 的历史可以追溯到 1957 年。同时期还有其他语言(LISP 和 Algol:1958 年,COBOL:1959 年)和一些更古老的奇怪编程语言(Konrad Zuse 的 Plankalkül,1942 年左右)。

假设大约从 1957 年开始就有程序员。65 年了。自 1998 年(24 年)以来,我一直是一名全职付费程序员,自 1984 年(38 年)以来,我一直是一名程序员。我非常有经验。Alan Kay-Smalltalk 编程语言的发明者,大约从 1963 年开始-(当时他59 岁)。他是我发现的最活跃的人之一。

相比之下,马友友(世界著名的大提琴家)今年 66 岁,从 4.5 岁起就开始拉大提琴。他离世界上演奏时间最长的音乐大师还差得很远。吉尼斯世界纪录称 Kasper “Stranger” Malone 连续八年发行了专业音乐剧。那只是专业的音乐家和卖钱的歌曲。它不包括现场表演或其他他们不收费的任何演出。因此,假设一位真正有经验的音乐家的工作时间比我们整个学科存在的时间长 15 年。

我们的领域还很年轻。

你不必从小就开始

所以,如果我 8 点开始,马友友 4 ½ 开始,对你来说太晚了吗?不。

大约一年前,我 45 岁开始认真弹钢琴。我想我真的来了。如果我能坚持下去,到 60 岁时我会非常棒。我已经可以像样地演奏一些歌曲了。当你已经有了一些背景和一些观点时,你就会变得更快,你知道吗?你已经练习技能几十年了,或者不止几年。

假设你今年 50 岁。作为软件开发人员,你可能有 30 年的美好时光,无论付出多少。如果你从 50 岁开始,十年后你 60 岁时的表现会比我 18 岁时、十年后的情况要好得多。好多了。

我遇到过 20 岁、30 岁甚至 40 岁开始的优秀程序员。我不知道有什么理由不能在 50 岁或 60 岁开始。编程仅需要时间和投入。但你不必年轻。

这是否意味着你不会那么好?有点儿。我弹钢琴不如马友友拉大提琴。我不会像 Alan Kay 那样擅长编程,即使我开始的时间更早。你知道还有谁不如马友友吗?基本上所有其他拉大提琴的人都不如他。但是他们不会被这阻碍。无论如何,他们中的很多人都擅长大提琴。我喜欢弹钢琴,即使我从未进入世界前十。

我仍然喜欢编码。我成为下一个 Alan Kay 的几率基本上为零。他在我这个年纪就已经写过 Smalltalk。如果你从事软件工作,“不要成为Alan Kay”是必要的。既不是年轻的 Alan Kay 也不是现在的 Alan Kay。他必须接受这一点。

顺序不是关键

如果你想要一个长期的编程生涯,而你才刚刚开始,我经常说“只要写一些软件,任何软件,什么都没有关系。” 你需要学习很多不同的东西。你按照什么顺序学习它们并不是什么大不了的事。

40 年来,许多趋势来来去去。桌面应用程序?完成了。移动的?写好了。操作系统和系统?是的。网络编程?也对。你自己的列表会有所不同,但它会涵盖多种编程。只要你尝试不同的事情,执行它们的顺序并不重要。

“尝试不同的东西”当然是关键。与编写网络套接字服务器持续写 40 年相比,你在四个不同领域的每个领域中学习 10 年会好很多。并不是说40年的深度没有价值。深度绝对有价值。所以你不应该一年做四十件不同的事情。

但是你必须小心不要变得僵硬。事实证明,几乎任何学科都能教给你一些东西。如果你太僵硬而无法学习它,你就会失败。

尝试不同类型的编程。以任何顺序尝试它们。但你应该努力去做一些事情并且变得更好。

现在还早

学的东西没用怎么办?嗯,没用是相对的。我将多年的空闲时间投入到一种名为 DGD 的古老 MUD 编程语言中。这当然不是为了实用价值。几乎所有关于它的东西都是奇怪的和非标准的,而且很少有真正实用的。然而它教会了我很多东西,因为它很奇怪。它教会了我后来使用 Ruby on Rails 的东西,它教会了我关于使用数据库编程的东西,即使它没有使用数据库!它教会了我一些对我后来学习的五六种不同语言有用的东西。它给了我一个又一个小时的战争故事。

有趣的是,多年后我在 DGD 获得了一份咨询工作。世界上从来没有很多 DGD 工作。但我有其中之一!这比我学过的许多“实用”语言更实用。你永远不会知道。

假设马友友 15 岁,这是已经是他音乐生涯第十年了。假设他正在对你大惊小怪,不知道他是应该演奏一段复杂的古典音乐,还是应该玩一些流行的爵士乐。你可以检查一下优点:古典音乐会提高他的技巧,流行的爵士乐会增加他的广度,等等。

但真正的答案更简单:两者都有价值,所以选择一些东西并用它来运行。如果你再坚持 30 年,那么你选择哪一个就不是那么重要了。两者都可以让你变得更好。重要的是工作。将实际工作投入其中,这将是宝贵的经验。试着不假思索地“溜走”,任何一个都不值得你花时间。

这就是年轻的马友友的答案。这也是给你的答案。

我经常对自己说“现在还早”。我的意思是,我 46 岁。我不是 96 岁就完了。我至少还有二十年,也许五十年。所以如果我做一些奇怪的、离奇的事情并且它教会了我有趣的东西,那真的很好。如果我做一些实际的事情,这让我度过了短期,那也很好。

但重要的是:继续工作。作为一名程序员,要活到 20 年、40 年或 70 年,需要做很多工作。如果两件作品很难在两者之间做出选择……可能它们都不错,而且哪个都是不错的选择。否则它们都不好,你应该找到一些有价值的东西。

现在还早。研究一些有趣或有用的东西。给它时间来等待成长,然后你去猜测十年、二十年或三十年后的它带来的回报。不要总是选择十八个月后最好的东西。你无法真正看到未来会怎样。

工作很好

你开始编写软件是因为它有一些吸引你的地方。它的某些部分是好的,或者你不会打扰。

试着弄清楚那是什么。你喜欢什么?是什么吸引了你?这有什么好处?每个人都不一样。

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

你的理由会有所不同。好的。找到他们。

工作很好。如果它不再好,你也会停止。如果它不再好,那就是紧急情况:你需要休假,或者重新连接你喜欢的东西,或者其他什么。如果你的工作不再让你感觉良好,你很快就会筋疲力尽。

工作很好。如果不是,请更改您的工作。

这些都不一定意味着工作很好,或者换工作。但是你的工作需要足够的好才能让你继续前进。不管怎样,继续前进是一种要求。所以这也可能影响你的工作。

这不是短跑或马拉松,而是日记 很容易做出决定,“我要成为一名计算机程序员”,并制定一个包含 8 个部分的计划,其中包含 56 个要点来说明你将如何去做。我不会告诉你不要激动。如果你不能振作起来,何必呢?

但我会说:不要把计划看得太重。

小时候,我住在一个我讨厌的破烂小镇外 4.2 英里处,那里的每个人也都讨厌我。出于充分的理由,公平地说——我是一个可怜的小混蛋。他们没有错过。卡内基梅隆大学的学位让我离开了那里。在我第一次见到电脑之前,电脑似乎很神奇,而当我开始摆弄一台旧的 Apple IIe 时,它就变得很神奇。在 CMU,我经常在计算机实验室闲逛,因为计算机很棒,而我没有任何社交技能。

所以:我采取了一种非常直接的方式来编写软件。我很早就开始了,我一直在努力。

但即使是像我这样的人也不能仅靠软件来生死存亡。最终我找到了朋友并想留住他们。最终我厌倦了很难说话。最终我想要并找到了一个妻子。最终我有了孩子,并试图和他们一起过得很好。最终我发现,即使有一份好工作,情绪的僵化和压抑也只能让你走到这一步。

在某些时候,你会停止计算,因为你不能通过计算和计划来做每一件事。在某些时候,你并没有“下班”,你只是在“过你的生活”。

因此,如果您因为做的不是软件的事情而责备自己……也许不要。为什么我在这里谈论这么多音乐?因为我也在学习这一点,而不仅仅是将所有东西都放入软件中。艺术也是如此:我做了一个演讲并写了一本关于从艺术家那里窃取软件实践方法的书,并且我正在说明越来越多的我自己的东西。显然我也会说和写。我的兴趣每年都在扩大。

这不是失败。这不是放弃。你无法预测什么会有价值,所以你应该学习所有的东西。关于您应该编写哪种软件,这与我所说的相同,但范围更广。这就是教训:你活得越久,工作越好,你就越能意识到每件事(和每个人)都有一些有用的东西可以教给你。

继续工作。

学习编写软件不是你计划好的任务:完成这些要点,你就是一名程序员。一旦编写了第一个程序,你就是一名程序员。如果你正在阅读本文,很可能你已经是一名程序员。如果没有,请在在线代码学习网站上编写你的第一个程序——它应该会花费不到 20 分钟的时间。

有时你会特别想在某些方面进行改进:你的程序在变大时会纠结在一起,因此你需要学习一些模块化和封装。如果你正在尝试以良好的性能处理数千种组合,因此你可能会选择一些离散数学。所有这些东西都可以在线获得,如果你想深入了解,通常会参考书籍和课程。

学习非软件的东西也是一样的。编写游戏 Chicory 的人将屏幕上的声音与他编写的那部分游戏音乐的调子协调起来:你会得到和谐的音符,因为它播放的铃声略有不同,具体取决于背景中的歌曲。这有多酷?我意识到我对它的了解还不够多,甚至无法欣赏它。去年它帮助我走向音乐。

继续工作。有无限有趣的工作可以让你变得更好。不要害怕看起来不切实际的工作。我不知道我我学习音乐对我的软件工作有什么用。也许什么用都没有。也许代表一切。未来很遥远,我不擅长预测二十年后会有什么帮助。

我们都不是。

你不是在跑短跑或跑马拉松。相反,你在写日记。十年后,你会翻页并说,“哇,我做了一些很酷的东西吗?” 或者“嗯,我是一个很有趣的人?” 我猜你可以写一本日记,上面写着“我非常擅长 Java 语法”。

不要混淆工作和事业 我不想在某个时候退休吗?那样就好了。但我不会停止工作。我会为了钱停止做我不喜欢的工作,尤其是如果它不能教给我任何很棒的东西。我目前在 YJIT 的工作免费编写了很多代码……但如果我没有得到报酬,我永远不会接触费用报告,也很少写状态更新。他们会得到更少的系统管理员工作或 Git 历史修剪。不要把工作和你的事业混为一谈。它们不是一回事。他们只是勉强相关。编写软件是一项不可思议的工作。这是一个还可以或更好的职业。

这是我一直谈论音乐家的另一个原因。有些人通过创作和演奏音乐获得报酬。但是许多(大多数?)音乐家从未得到报酬,但仍然这样做。这项工作很有趣,功能强大且令人满意。如果你能为此得到报酬,那可能会为你腾出更多时间来工作。但工作就是工作,工作就是为你的工作扫清道路。对我来说,编写软件就是这样。也许也适合你?

不过,最重要的是告诉你在任何给定时间得到的是哪种建议。你会得到关于工作的建议。你会得到关于这份工作的建议。如果你将其中一个误认为另一个,那么该建议就没有多大意义。更让人恼火的是,人们会互换使用“工作”、和“职业”等词。所以只听正确的词不会告诉你哪个是哪个。

没有定义的级别

如果你学习的顺序无关紧要,那么实际上就没有“一级”或“二级”这样的东西。或任何其他级别。你会得到关于首先学习什么语言或技术的不同建议,这很好。但是,如果你开辟了自己的道路,那并不意味着你没有做基础并且很烂。最终,如果某件事很重要,你会发现你需要它,然后会回到它。或者你不会。但大多数情况下,你会的。

年复一年,你会听到一些可怕的故事,说有人忽视了一些基本的东西,而且表现得很糟糕。那发生了。就像,你可以编写 15 年的可怕的意大利面条代码,其中每个模块都进入每个其他模块以直接设置彼此的变量。如果你继续尝试,你要么会弄清楚为什么这很糟糕,要么你会发明一种新的风格,用新的方法解决这个问题,然后擅长一些奇怪的事情。一个程序员的“新范式”总是另一个程序员的“奇怪的东西”。

问题是当你不继续努力变得更好时。如果你不断犯新的错误,你就会学到有用的、美丽的或奇怪的东西。如果你继续做同样的事情而不尝试改进,那么可以肯定的是,你将继续保持原地踏步。

即使你按顺序通过某人预先设计的关卡也是如此。

李小龙说:“练过万次腿的人,我不怕。但练一脚一万次的人,我怕他。”

诀窍是关心和改进。如果你坚持足够长的时间,你可以在专注于一件事、十件事甚至一百件事的同时做到这一点。你可能无法管理一万件事。但如果你真的足够努力,你就能证明我错了。你必须做一些奇怪的事情。

哪个好。新范式——被称为“奇怪的东西”——是我们共同擅长新事物的方式。如果“每周二做一些全新的事情”是你的唯一目标,那就继续努力吧。你会发现它很糟糕,或者你会变得非常擅长。

你做得越好,你就越不像其他人

早期职业培训(代码学校、博客文章、大学课程、书籍)通常感觉有点像流水线。有很多非常基本的技能——例如编写函数、调试、估计、与你的团队交谈——他们试图确保你在每一个方面都有基本的能力水平。

很容易认为这意味着对于首席工程师来说,有一份你需要的技能列表,但列表中的技能更多,技能水平必须更高。但事实并非如此。一点也不。

这不仅仅是工作水平。它也是开源中的“级别”,尊重级别。

你可以通过编写一段相当简单的代码并(用英语,向人类)详细地编写它来获得广泛的尊重,比如 Patrick McKenzie 和 Bingo Card Creator。你可以通过写一些真正有利可图的东西来受到尊重,比如公司创始人。或者写一些深刻而复杂的东西,比如一种晦涩难懂的语言(Haskell,有人吗这样做吗?)这些路径除了基本能力之外几乎没有任何共同点。

你需要真正擅长某件事,并且某件事需要受欢迎或有利可图,或者以其他方式“做大”。这听起来应该很模糊,因为它确实如此。这也是主观的。如果你打算用 Bill-Gates 级别的软件赚钱,但最终却编写了 Haskell(复杂、深刻、广受好评,但利润不高),那你将是一个巨大的失败,反之亦然。并且相关技能完全不同。

这就是为什么问这样的问题是愚蠢的,“我是一名有 15 年经验的软件工程师,通常薪水是多少?” 十五年的经验太多了,你应该几乎完全不像站在你身边的工程师也有十五年的经验。你写了一本书吗?从事一个赚钱的大型项目?组建一个有趣的开源项目?这十五年,你做了什么?这就像在说,“我是一个有 20 年经验的音乐家,我应该按小时收费多少?” 这个问题没有简单的答案,也不应该有。

这也不只是关于薪水。你可能会问,“我是一名拥有 15 年经验的软件工程师,这意味着我有能力领导这个项目,对吧?” 答案当然是“也许”。后续问题是“你在那十五年里做了什么?”

您通过做基础知识来学习深层原理

我不会告诉人们首先要出去学习软件设计的深层原理。那是因为如果你试图将它们作为理论来学习,而没有实践经验,你几乎肯定会做错。首先学习用某种实际语言构建一个可用的软件。我真的不在乎是哪一个。在你的腰带下犯一些真正的错误。然后我们可以讨论存在哪些理论来解决您个人遇到的问题。

如果事实证明您非常擅长模块化,那就太好了!我们可以讨论你确实遇到的其他问题。为我工作。如果你没有问题,但结果仍然简单平淡……那么你确实有问题,我们可以谈谈。如果没有自己关心的问题,那就意味着你暂时可以构建相同级别的软件。由你决定。当你开始觉得自己变得陈旧时,那么你确实遇到了问题,因此你可以寻找解决方案。在那之前,做对你有用的事。

然后,做同样的循环二十多年。建造,犯错,学习一些理论,改正你的错误。我不太关心你按什么顺序做这一切。

这是否意味着如果你先学习理论,你就会“腐蚀”自己并永远变坏?不。但是你需要一段时间才能正确使用你学到的东西。所以这不是构建好软件的最快方法。从长远来看,一切都很好。现在还早,对吧?

您使用的技术很重要

我花了很多时间告诉你,你以什么顺序学习什么技术并不重要。

什么时候重要?

学习一些变化很重要。如果你总是做一件事,你不知道自己养成了什么坏习惯。如果总是只在一台机器上进行编码,那么你不知道从未学过多少网络知识。但是网络知识是很重要。如果你只在网络服务器上工作,从不在移动或应用程序代码上工作,你永远不会明白为什么“在我的机器上工作”如此糟糕。你可以做一件事很长一段时间——五年?十年?但是如果你要活到四十岁,你需要了解你的软件在边缘接触到的许多其他技术。你需要一些不一样的知识。

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

这意味着需要学习各种技术和各种非技术技能。

使用何种技术很重要的另一个原因是,某些语言或库会让你更擅长特定技能。你“应该至少学习一种函数式编程语言”,就像你“应该学习弹奏莫扎特的钢琴曲”一样。它会教给你一些有趣的东西,让你变得更好。如果你想在编程领域工作 40 年,你将需要扎实的基础技能。

不能从任何技术中学习扎实的基础知识,而不仅仅是奇怪的硬技术吗?当然。如果您做到了这一点,那么学习相当于莫扎特钢琴曲的软件对您来说就不难了。莫扎特没有什么神奇之处。他倾向于写硬音乐,你必须快速准确地移动手指。Haskell 没有什么神奇之处。它需要你对模块化和依赖性保持谨慎和准确。如果你已经很擅长这些,你会做得很好。

但如果你自欺欺人地说自己太棒了,你会发现自己在撒谎。

我轻松愉快的“做任何感觉良好的事情”学习软件的方法最好的一点是,无论你在做什么,你基本上都可以继续做下去。最糟糕的是我不会让你为你的失误负责。我只是假设你会处理的。

那可能很棒,这可能很糟糕。你可以选择。我不是你的母亲或你的导师。

我们大多数人都需要偶尔踢一下屁股才能注意到我们的问题。我当然知道。我自己努力的一种方法是学习一些严格而准确的东西,如果我犯了错误,我会注意到它。

向其他领域看,向其他领域学习

如果我们的行业很年轻,那意味着什么?这意味着我们仍在弄清楚基础知识。

在我上大学的时候,从 1993 年到 1998 年,测试先行和测试驱动开发并不是真正的东西。敏捷不是真正的东西。这些方法是存在的,但并不流行或广为人知或发展良好。源代码控制存在但效果不佳且未被广泛使用。开源是存在的,但人们普遍认为开源意味着劣质软件。一些狂热者可能相信 Linux 曾经是或可能永远是最好的服务器操作系统的想法是一件奇怪的事情。对于速度密集型应用程序,C 的速度足以取代汇编语言这一点并没有得到很好的解决。“GOTO”最终被认为是不好的,我们应该避免使用它。网络刚刚起步,在我上学的中途,它开始支持网页上的图片。

我们行业的情况变化相当快。换句话说,我们在基础方面仍然不称职。

你可以从其他领域学到很多东西。我写了一本关于如何窃取艺术家实践方法的书。我一直在这里谈论音乐家。艺术和音乐是古老的学科。我们已经教了他们很长时间了。艺术和音乐老师比计算机科学教授更好。他们有几千年的领先优势。

因此,如果你遇到问题并开始学习计算机程序员处理问题的最佳方法……你可能已经大大限制了你的选择。最好考虑一下任何人是如何处理这个问题的。Atul Gawande 的清单宣言谈到了飞行员、摩天大楼建造者和医生处理清单的不同方式。它们都是很好的方法。在软件方面,我们才刚刚开始窃取他们的一些技巧。因此,如果你向软件工程师学习,您就已经跳过了学习处理大多数检查表形式问题的最佳方法。

清单在这里并不是唯一的。爵士音乐家在程序员只能羡慕的水平上合作。认真的视觉设计师会产生数据科学家可以尝试模仿的结果,但我们并不擅长。当我看到受过烹饪学校培训的团队和他们的工作空间组织时,我的下巴都要掉下来了。在图书馆员组织的数据空间中工作几年,你就会明白我们将文档拼凑得多么糟糕。

如果你想成为最优秀的程序员,那你就是在严重低估自己。

我相信你已经注意到,当涉及到建议时,程序员往往会以一种自豪的方式忽略非程序员。“单纯”的 QA 人员和运维人员往往被视为二等公民,我们常常表现得好像他们没有什么可以教我们的。这太愚蠢了。如果你很聪明,你会弄清楚他们擅长什么以及为什么它很重要。

如果你认为答案是“他们什么都不擅长,这无关紧要”,那么你永远不会像他们所做的那样出色。

很难从截然不同的学科中汲取技能。学习足够多的艺术来窃取他们的练习方式是很困难的。这可能需要数年时间。但是与编程非常相似的学科——比如数据库管理或 DevOps——非常接近,值得尝试去理解它们。

这也意味着,如果你有木工、舞蹈或空手道方面的爱好,或许应该考虑一下可以给你带来哪些技能的提升。另一个程序员将不得不花费数年时间来学习它,但你已经做到了。我希望它教会了你一些可转移的技能。我不知道是哪一个,因为我不做木工,也不(主要)跳舞或空手道。这就是为什么我在这里谈论艺术和音乐,我确实知道一点。

程序员是相反的

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

例如,艺术家、音乐家和作家都知道,如果你一遍又一遍地重复同样的活动,你就会做得很好。重写是一回事。反复练习同一首音乐是一回事。一遍又一遍地画人物和画静物是一回事。

我们在软件中也给它起了个名字:“重新发明轮子”。它被视为一件坏事,我们可耻地私下做这件事。我们寻找让计算机完成所有重复的方法,以便我们只能做新的工作。

事实上,说你一遍又一遍地做同样的事情是一种在公共场合丢脸的快速方法。它会花费你的声誉。以奇怪的方式做事通常会损害你的声誉。当然,声誉也与头衔和金钱等因素相关。

这就是为什么我们大多数人都不擅长开始新项目的原因。这就是为什么我们大多数人不能谈论何时使用一种或另一种句法结构,以及为什么我们表现得好像有一个应该由机器强制执行的开闭式缩进规则,就好像有一个简单、正确的缩进方法来做到这一点。因为你建立这些技能的方式是重复,随着时间的推移变得更好,相信表现力,并与其他人交流。作为一个行业,我们污名化的事情。

这是否意味着你个人在这些事情上做得不好?一点也不。

你不会说服程序员以其他方式思考。也许有几个,单独的。但答案并不是要让每个人都变得更好。这将需要数十年或更长时间。你没有那种时间。你想变得更好,更快。

但你个人可以做一些“不好的做法”,但实际上会让你变得更好。

你可以重新发明轮子。你可以重复写同样的东西。还可以以“糟糕”的方式编写代码,看看会发生什么。

注意最佳实践。它们就像其他形式的建议:它们意味着其他人已经完成了思考并变得更聪明的工作,而你只是在使用他们想出的最简单的东西。

开始就好了。但作为一种变得更好的方式,这很糟糕。

要明白,如果你向艺术家、图书管理员和副厨师长学习,你就不能轻易地把软件世界的其他人拖到一起。仅仅因为你是对的,并不意味着你可以说服他们。你正确做法甚至可能需要他们不具备的技能。

但是,如果你不太在乎周围人的想法,就可以变得更好。而且你不必告诉别人你是怎么做到的。

你做得越好,你就越不像其他人。包括,尤其是,真正擅长他们所做的“其他人”。

出于同样的原因,要小心使用工具和执行。它们旨在保持最低水平的能力。它们并不是为了让你真正擅长一些不寻常的事情而设计的。

你想真正擅长一些不寻常的事情。

小心一万小时定律

人们会告诉你,获得成功的诀窍是不断努力。我的意思是,到目前为止我已经告诉过你至少四五次了。他们会说诀窍是每天都变得更好一点,并让它倍增。

这是该建议中的陷阱:大多数时候,练习不会让你变得更好。时不时地,它会让你有一个巨大的飞跃。一些巨大的跳跃会让你在其他几件事上变得更糟。

如果你期望每年持续 20% 的改进,每月复合,这会让人感觉很糟糕。

效率只能让你到目前为止。许多这些过程效率极低且完全不可靠。有时他们会带来巨大的收益。通常他们什么都不给。有时他们对你的伤害多于帮助。

对于此特定任务,这就是成功的样子。

生产力和效率建议,整洁的那种,通常适用于你理解得很好的结构良好的任务。四十年的编程生涯不是那种任务。再说一遍:想想日记,而不是马拉松或短跑。试图为自己保留一个进度条会很糟糕。

随着时间的推移,你会学会小心任何过于整洁的东西。再次重申:建议是去除了所有最重要部分的专业知识。是的,这包括我现在所说的。

效率总是某种特定类型的效率。一种节省时间的方法可能是金钱效率低下的。其中一个可能需要比您目前拥有的孩子更少,或者需要一个更安静的地方。效率是指你如何改进已经到位且运行良好的策略。

效率小窍门我就不多说了。我不是在告诉你做这些事情的最快方法。最仔细优化的方法是脆弱的,基本上总是如此。效率还行。优化没问题。一旦你掌握了基础知识,它可以提供额外的帮助。

困难的部分是让基础知识发挥作用。这就是我要告诉你的大部分内容。事后保持高效就不那么重要了,也更容易了。

但说真的,大多数时候只是去做

这些对我来说都是非常好的事情。大部分是为了让你放心,而不是改变你的做法。我一直推荐来自你已经知道的非技术学科的建议并非巧合,而不是充满技术书呆子的论坛,这些技术书呆子充满了最近转变的不宽容的热情。

如果你写程序,你就是程序员。或编码员,或软件工程师,或任何你喜欢的称呼。

如果继续编写程序,那么你可以成为任何年限的程序员。没有人监管这些东西。或者至少,如果有人这样做,你知道可以完全忽略他们。我的意思是,有人会在这里评论,“他不是一个 40 年的程序员,他从事全职工作还不到 25 年!” 这很愚蠢,但我们在这里谈论的是互联网。有人会说的有时标题甚至不是自我描述的意思,但你必须按字面意思阅读第一句话才能理解。两句话,以获得完整的上下文。你知道, JoeRandom_420 不是由注意力构成的。

无论如何,如果你坚持下去,你就有资格。这不是一个任何人都可以把你赶出去的正式俱乐部。如果你做了一段时间的工作,你会说你做了一段时间的工作。

你如何做一段时间的工作?管理自己的期望。当你犯错并改正错误时,你会注意到。你尽量小心不要太死板并试着继续享受这份工作。

所有你刚刚看到的东西。

剩下的就是时间,也许还有一点保持柔和。

不知不觉四十年过去了。正如它在一棵橡树旁边,在我父亲的保险杠贴纸上所说:“你也一样,很快就会变老。”

————————-全文完——————————————————

如果你觉得受益欢迎赏杯咖啡,赞助点能量!感谢!