2021年,不要学习新的编程语言

2021-01-19 02:07:40

从2021年开始,您将看到大量的新帖子,建议您学习最新,最热门的编程语言。十多年来,我一直在积极开发软件以谋生,我已经看到了这种趋势。每年一月都会有大量的秘密广告,要求您学习在新年学习的“ Top 10 / Top 5”编程语言。不要误会我的意思;我不是要你放弃学习。问题是我们只得到了如此多的关注。一方面,一项晦涩的技术的投资回报很小,另一方面,又不想错过先发优势。

作为我职业生涯初期的新手软件工程师,我曾遇到过同样的困境。我做了我所知道的能做的事-投入了更多的时间,希望有一天的努力能得到回报。并付诸实践,只有很小的一部分。作为软件工程师,或者说,对于任何从业人员来说,都是不断的变化,然后是破坏性的变化,这些变化可以使您的工作方式变得更好十倍。我承认像Haskell和Prolog这样的语言可以扩大您的视野,但是我希望抽象的东西对我的日常工作很有用。我现在看到,软件工程实践有两个方面,并且我相信这足以在其他地方应用。这两个方面是-心理模型和现象学。

Shane Parrish最近推广了“心理模型”炒作。对我来说,艾伦·凯(Alan Kay)在谈到一个价值80智商的观点时就提出了这个想法。这个想法很简单-遇到不适合您的问题时,您需要不同的思维方式。 “在巷子里”是指您在日常生活中无法解决的问题。如果从构建软件中获取示例,那么一个示例就是编写SQL与编写面向对象的代码所需要的思维方式不同。这种“思维方式”是一种心理模型。 Shane Parrish概括了这个概念。例如,我最喜欢的曲目中的一种心理模型是Occam的Razor。原理很简单-简单的解释比复杂的解释更好。很多时候,调试时都会遇到红鲱鱼。 Occam的Razor是一种心理模型,它会问-您是否使东西过于复杂?

哪种心理模型适合编写软件?我们看到新的编程语言和新的框架一直在弹出。学习它们是有价值的,但正如我之前所说,我们只有很多时间。如果有人会开始为软件工程编译思维模型,那将意味着什么?我的理解是,将会有很多编程语言,Web框架,系统的编程,设计等清单。我一直在博客文章和书籍中看到它们。如果还有更多(可以这么说)健脑模型库呢?

开始时,我不是阅读规范和RFC的人。事实证明,阅读并理解它们比尝试将您的头放在随机网站和博客中的解释上要好。我已经看到阅读过Java规范(特别是其内存模型)的人可以更好地理解Java内存问题。 Internet RFC也是如此。例如,了解DNS的RFC可为您提供有关DNS及其发展的不同观点。通过阅读Sun Microsystems的出色文档,我开始阅读规格。我工作场所的一位前辈建议我通过他们。这是我得到的最好的建议之一。

让我们开始吧。阅读和理解RFC和规范是很好的,但是如果您可以制定自己的规范并对其进行验证,该怎么办。我会为您做得更好-如果计算机自动完成验证该怎么办。在过去的几年中,形式方法已经独立出现。形式方法是个很棒的主意。如果您明年真的要学习一种新语言,我是否建议您尝试学习一种正式方法语言?您知道视频游戏的第一个级别中有一种武器,直到您在最后一个级别(Boss Fight)中转回到另一种武器时,它才变得非常容易。是的正式方法就是这样。

形式化方法在硬件开发方面有着悠久而有趣的历史。近年来,诸如TLA +之类的工具也被软件开发社区所采用。由Leslie Lamport创建的TLA +是用于模拟任何离散事件模拟系统的属性的工具。事实证明,离散事件仿真非常适合对软件系统和分布式系统进行建模。我已经关注希勒尔·韦恩一段时间了。 Wayne在软件开发过程中使用TLA +和Alloy进行普及已经有一段时间了。

我承认我在使用现象学这个词。当我说现象学时,我指的是完成与编程相关的任务的肌肉记忆。包括Python在内的大多数现代编程语言都已经达到了一种实现多种方式的阶段。为常见的编程任务更新代码段清单是了解编程语言变化的好方法。

我最喜欢的书之一是“ Python Cookbook”。它是按以下主题组织的食谱的集合:字符串食谱,网络食谱等。每个食谱后面都有关于代码段的深入讨论。许多人推荐一本基于编程语言语义或诸如“ Fluent Python”之类的语法的书。我的推荐一直是“ Python食谱”。

当我想煮一道新菜时,我通常会在网上搜索菜谱。通过阅读“盐,脂肪,酸,热”来深入了解烹饪的复杂性和细微之处可能很有价值,但这是和平时期的活动。

最后,如果我们想将现象学和心理模型与记忆模型进行比较,那么我想说,如果形式方法是声明性记忆,那么菜谱就是程序上的对应物。就像“正式方法”可以帮助解决“需要做什么”一样,食谱可以帮助实现细节。面对现实吧-细节在于魔鬼。如果您正在考虑最后一句话的明显性,请让我提醒您,我见过那些非常关注细节以至于忘记了自己正在建造的人们。如果您了解分离的模块化,那么您将更有可能建立稳固性。

哲学家以赛亚·柏林(Isaiah Berlin)提出了针对学习者的分类-狐狸和刺猬。这个想法是,狐狸知道很多事情,而刺猬知道一件重要的事情。我在这里建议的是一个混合袋-嵌合体,蹲伏的狐狸隐藏的刺猬,或蹲伏的刺猬,隐藏的狐狸,如果这使您喜欢。对领域有深入的了解是有价值的,但获取一级元数据则具有更多的价值。