当专家感到无聊时,通才就诞生了
通才的第一语言
通才的第二语言
TDD 和学习周期
悲伤的五个阶段
过去经验的洞察力
通才还能保持专家地位吗?
通才选择更好的工具来完成工作
成为通才并不需要超人的能力
你有什么可失去的?
标题照片由RhondaK Native Florida Folk Artist在 Unsplash 上提供
我是一名全栈开发者,也就是说我是一名通才。我相信软件开发中的通才是一件好事。但许多开发者、工程经理甚至首席技术官都认为通才是一种风险,软件团队真正需要的是专家。
因为显然,通才不可能非常擅长自己的工作。毕竟,如今的软件系统过于复杂,任何一个人都不可能彻底“了解”他们的系统。对吧?而且,在瞬息万变的时代,通才又如何能跟上专家的步伐呢?他们难道不能指望保持与时俱进吗?通才在他们所了解的领域中,肯定不会比中级开发人员强。对吧?
这种谬误的逻辑正是为什么有些人更青睐专家而非通才。这导致团队会雇佣前端和后端开发人员,而不是普通的开发人员。因为——显然——只有专家才真正知道自己在做什么。
但事情是这样的:
通才曾经是专才。专才感到无聊时,通才就诞生了。
通才的第一语言
在他们的第一份工作中,通才并非通才。他们怎么可能成为通才?他们只是新手。然而,他们确实拥有一些与众不同的东西:渴望成为专家。
他们开始学习语言习语和模式。他们学习语言的性能特点、如何与外部系统通信,并探索其图书馆生态系统。他们阅读所有能找到的书籍,因为他们意识到,学习并没有因为大学毕业而停止。
就我而言,是 C#。我渴望成为一名专家,所以我的书桌上摆满了书。我为我的书架感到无比自豪!我尽可能多地阅读开源项目,甚至还为其中一两个项目做出了贡献。我花了整整七年的时间从事 C# 开发,是的——我想,我算是个专家了。
但是,促使我成为一名专业 C# 开发人员的学习心态也促使我成为其他开发人员。
每个专家都会在某个时刻感到厌倦。他们已经尽可能多地学习了这门语言及其框架。所以,为了满足他们的胃口,他们需要寻找一些新的东西。
在 .NET 生态系统中,作为一名拥有多年经验的开发人员,如果你想学习新事物,那么你基本上只能等着微软发布新版 Visual Studio,看看他们这次做了哪些改进。偶尔也会出现一些令人苦乐参半的时刻,比如微软会淘汰一些虽然完美但略显过时的框架,并用一些更现代、但功能稍逊一筹的框架来取代它。
当你只懂一种语言时,这种“保持知识更新”的循环就会变得有点乏味。
因此,这位想要成为通才的人会转向其他的事情。
通才的第二语言
对我来说,Ruby 就是最好的选择。哇……Ruby 真是太新鲜了!不用再受 Visual Studio 的摆布了!不用再被迫写完整的函数签名,包括返回类型和参数类型了!我可怜的手指终于可以休息一下了!动态类型……太棒了!一切都是表达式……太棒了!元编程……太不可思议了!枷锁终于被打破了!
我记得那一刻,感觉自己如释重负。虽然我很感激 C# 为我打下了坚实的面向对象设计基础,但我也意识到它是一门不必要的复杂语言。因此,我学会了热爱简单。
TDD 和学习周期
我来告诉你我学习新语言的秘密武器:TDD。如果你了解TDD和一些Katas,你几乎可以用同样的学习模式学习任何一门语言。只需编写几个Katas,你就能快速入门。就这么简单。
对我来说,我的第三门语言是 Clojure,它在语言方面堪称完美。Clojure 社区拥有与 .NET 社区相同的商业思维,同时又与 Ruby 社区一样追求简洁。
悲伤的五个阶段
令我惊恐的是,我的第四门语言最终却选择了 JavaScript。我其实并不特别喜欢 JavaScript。这门语言太乱了,在接触过 Clojure 和 ClojureScript 之后,我不得不放弃学习它。
通过 JavaScript,我经历了悲伤的五个阶段。
首先是否认。“这只是暂时的,然后我就可以回去学习真正的语言了。”
第二阶段是愤怒。“React……?!Facebook?!是什么让这些讨厌的开发人员有权践踏四十年来的 GUI 开发最佳实践?!”
然后,讨价还价。“嗯,我可以用普通函数编写 JavaScript,就像用 Clojure 一样……”
随后,我陷入了抑郁。“我的职业生涯结束了。我要离开,去开一家海滨小屋餐厅。”
终于,我接受了。“好吧,我错了。JavaScript 完全没问题。该更新我的 LinkedIn 个人资料了——我是一名 JavaScript 开发者!”
过去经验的洞察力
成为通才的乐趣之一就是你不再太在意“唯一正确的方法”。
如今我已经使用 JavaScript 好几年了,我可以坦诚地说,过去在 C#、Ruby 和 Clojure 上的经验让我成为了一名更优秀的 JavaScript 开发者。我明白这门语言为什么会是现在这个样子。我并不怀念“真正的”对象。我不需要类。原型继承很可爱,当然也不会让我“火冒三丈”。
我并不急于用 TypeScript 替换我所有的 JavaScript 代码,因为好处不明显。没有类型定义我也做得很好。
我对 JavaScript 的所有问题都感到很自在。它们不会困扰我。
老实说,我并不太在意双等号和三等号之间的区别,因为我知道如果我弄错了,我的测试就会发现我。
我不需要 linter 来告诉我是否使用分号,因为无论哪种选择我都满意。我不需要 linter 来告诉我函数必须返回一个值,因为如果可以避免,我宁愿不写额外的代码。Ruby 和 Clojure 让我对不可见的返回值非常熟悉。
JavaScript 开发者可能会对最新潮流感到兴奋,而我只是耸耸肩。我通常认为新库只是不必要的复杂性。
当新事物出现时,我会问自己“这个新工具|技术|库|框架能帮助我更快地编写更高质量的代码吗?”如果答案是否定的,而且通常都是否定的,那么我就不会兴奋。
通才还能保持专家地位吗?
为了论证,我们假设成为一门语言的专家需要 5 年时间。那么,拥有 15 年经验的人就有足够的时间掌握 3 门语言。
你可能会说,他们对前两种语言的了解已经严重过时了。如果他们不再在工作中使用它们,他们可能根本不知道自己在做什么。
如果他们完全停止使用那种语言或不再关注新闻,情况或许会如此。但我对通才的印象并非如此。他们时刻保持关注,紧跟潮流,而且往往会花上几个小时来体验最新、最棒的功能。
更重要的是,如果你有 5 年的编程语言使用经验,那么掌握最新的框架意味着你只需花一天时间就能构建一个玩具应用程序,而不需要一年的时间。编程语言和框架的变化都是循序渐进的。
通才选择更好的工具来完成工作
作为一名通才,你的特权在于你可以选择更适合工作的工具。(我不会说最好的工具,因为谁知道什么才是最好的呢?)
如果您唯一知道的工具是 React,那么您将获得 React 解决方案,即使“大规模 Web 应用程序”不是您的问题。
成为通才并不需要超人的能力
在我最近的项目中,我有机会真正掌握 Docker 和 Nginx。我不敢说自己是专家,但我可以说,在团队所有人中,我是最渴望学习它们的人。
作为一名通才,我的经验告诉我,尽管这些工具看起来很可怕、很困难、很复杂,但我知道掌握它们是可能的。
我发现,对于我的一些队友来说,学习这些工具似乎非常困难。这需要耗费大量的精力,而且他们可能会失败。
我和我的队友们能力上并没有什么差距。他们都很聪明,也很努力。区别在于,我通常不太害怕学习新技术。
你有什么可失去的?
在专长和通才之间做出选择是一种错误的二分法。如果你想专长,那就去做吧。但别忘了,除了专长,还有通才。
祝你编码愉快!
🙏🏻