能把一件事坚持 40 年的人并不多,我们今天要介绍的这位就是其中一员。他叫 Noah Gibbs,从事编程工作快满 40 年了,最近他用博客的形式分享了自己总结的一些经验。
Noah Gibbs
再过两年,也就是 2024 年,我将成为一名拥有 40 年编程经验的工程师。在此期间,我也获得了丰厚的回报。我该从哪里介绍我的经验呢?就从软件开发说起吧。
软件开发还是「年轻」的
就拿编程语言来说,Fortran 可以追溯到 1957 年,同时期出现的还有 LISP 、Algol 等。设想一下,假如从 1957 年开始就有人从事编程工作,到今天也已经有 65 年的经验了。
至于我,自 1998 年以来,我一直是一名全职程序员,时间跨度达 24 年。不过严格说来,我从 1984 年就开始干程序员这一行了,这样算下来已有 38 年从业经验。
至于其他行业,例如文艺界大提琴演奏者马友友(Yo Yo Ma)从 4 岁半就开始拉大提琴,演艺生涯超过 63 年,但他还不是世界上演奏时间最长的音乐大师。根据吉尼斯世界纪录,有位音乐人在过去 80 年里连续发行了多个音乐作品,这还不包括现场表演或其他活动。
因此相比其他领域来说,我们(编程)的领域还很年轻。
年龄不是问题
其实,不管从什么时候开始都不会太晚。大约一年前,45 岁的我开始学习钢琴。如果我能坚持下去,在我 60 岁时,我相信自己会成为一名非常优秀的钢琴家。
我遇到过很多优秀的程序员,他们从 20 岁、30 岁甚至 40 岁才开始。我不明白我们为什么不能从 50 岁或 60 岁开始学习一项新的东西。年龄不是问题。
尝试不同的事情
如果你想从事一段漫长而又无趣的编程生涯,而现在又刚刚开始。不用担心你刚起步,我经常会鼓励别人「只要开始着手写一些软件,任何软件都无所谓,只要去行动就足够了。」在此过程中,你会学习很多不同的东西,学习顺序并不重要,重要的是你学到了什么。
以我个人为例,在我 40 年的职业生涯中,会遇到很多编程要求,如桌面应用、操作系统、Web 程序等等。只要你尝试不同的事情,不必在意先学哪个,后学哪个,边用边学。如果你太拘泥于学习而忽视实践,可能会失败。
学习的东西暂时没用?等等看
假如你担心自己学的东西没用怎么办?其实没用是相对的。比如我,我把多年业余时间投入到一种名为 DGD 的 旧 MUD 编程语言中。这门语言于我而言用处不大,然而学习过程却教会我很多。它教会我后来 Ruby on Rails(一个使用 Ruby 语言写的开源 Web 应用框架) 使用的东西,它教会我关于使用数据库编程的知识,即使它没有使用数据库!
总之,这一学习过程在我后来学到的五六种不同的语言中都很有用。
有趣的是,多年后我凭借 DGD 找到了一份咨询的工作。本来世界上就没有多少这种工作,但我就是其中之一!这比学过许多实用的语言更实用。
我也经常对自己说「现在还早」,我的意思是,我才 46 岁,不是 96 岁老的快走不动了。我至少还有 20 年,也许 50 年的时间用来学习。
不管怎样,最重要的是持续不断地工作。要想成为一名拥有 20 年、40 年或 70 年经验的程序员,需要付出很多努力。学习一些有趣或有用的东西,10 年、20 年或 30 年后回过头来看你收获了什么。
谈到工作,我认为工作是一种很好的学习方式。不过我也喜欢做一些与工作无关的事情。无论与工作有关与否,我都会编写一些代码。我喜欢写一些其他程序员可以使用的东西,这样才有意义。假如说,你不喜欢现在的工作了,你要想办法改变你的观点,让自己适应工作;假如真的无法坚持,你应该采取措施,比如休假或者辞职。
要脚踏实地
做决定很容易,比如你要成为一名计算机程序员,然后制定了一堆计划、无数个要点、分成几大部分来实现这一目标。但是我想说的是,不要把计划看得太认真。
学习编程并不是一项你计划好的任务,当你开始动手时,你就是一个程序员。如果你还没开始,建议你去一个在线代码学习网站编写你的第一个程序,它应该不会超过 20 分钟。
当你积累到一定程度,开始写一些规模较大的软件时,可能会面临程序臃肿等问题,这时你就需要学习一些模块化和封装的知识。想让程序运行得更好,还需要掌握一些数学知识。所有这些都可以在网上找到,如果你想深入学习,还能找到参考书籍和课程。
你也可以培养一些爱好,而不是把所有精力投入到软件编程里。保持继续工作,它会让你变得更好,不要害怕那些看起来不切实际的工作。就像我不知道我要怎么用音乐来帮助我的软件编写。但未来是非常遥远的,没有人可以预测 20 年后会发生什么。
让自己变得更优秀
早期的职业培训(编程学校、博客文章、大学课程、书籍)有点像装配线,会学习到一些非常基础的技能,例如编写函数、调试等,这种学习方式试图确保你能掌握基本编程能力。
如果你想在一众人中展露锋芒,你必须非常擅长某件事,而这件事必须是受欢迎的、有利可图的、缺你不可的那种。如果你打算在软件领域赚到比尔 · 盖茨那样的财富,而你却写了 Haskell(复杂、深奥、广受好评,但没那么赚钱),那么这将是一个巨大的失败,反之亦然。
从基础中学习深层次原则
不要一开始就去学习软件设计的深层原理,假如没有实践经验的话,这个过程会很痛苦。你可以先从构建简单的软件开始,至于用哪种语言也不用纠结,关键是动手实践。然后找出这一过程遇到的错误,查资料、从原理上进行解决。
假如同样的过程循环 20 年,构建、查错、学习理论、纠错,你会收获很多。在这个行业,技术变化相当快,你也可以从其他领域学到很多东西。
不要害怕,直接去做就好了。至于我,四十年的时间不知不觉就过去了。无论如何,只要坚持下去,就算成功了。