【译】哪个编程语言可以统治其他所有的编程语言?

语言: CN / TW / HK

原文链接:https://betterprogramming.pub/the-one-programming-language-to-rule-them-all-620366df2805

在我撰写本文的时候,Google搜索【我应该学习哪种编程语言】有5.17亿个搜索结果。每个页面都在讨论一种编程语言相对于其他语言的优势,其中90%的页面最终会推荐 Python 或 JavaScript。

我不是针对谁,我只想说我反对这5.17亿个文章的观点。并且我建议您应该学习的第一种编程语言是逻辑【logic】。

aa.jpeg

知道如何编写代码已经不再有竞争力了。市场上到处都是培训班出来的毕业生,【初级软件开发者】这个名号已经没有什么价值了。如果你想在今天成功,你不仅需要知道如何编写代码,还需要有一个逻辑思维的模型。

我的第一堂计算机科学课

我第一次接触计算机科学是在10年级的一次选修课上。第一天上课的时候,我惊喜的发现教室里摆满了冰淇淋和各种圣代。

11.jpeg

在我们就座后,我们的老师宣布:

“今天我们要制作圣代。有一个条件: 你必须写一份关于如何制作圣代的具体指令,然后我会照着这些指令做。”

没问题!我认为这将是一件轻而易举的事。

于是在不到一分钟的时间里,我快速地写下了一套我认为完美的圣代制作指令: ``` 将三勺黑莓冰淇淋舀入碗中

将两汤匙热软糖倒入碗中

将生奶油放入碗中

在圣代上撒上糖屑和樱桃 ```

然后我的老师开始精确的执行了我的指令:她开始恶毒地捅着冰淇淋盒,即使盒盖是完好无损的。

“好吧。老师您应该先把冰淇淋盒子的盖子打开”,我不得不补充道。

“但是你的指令中并没有告诉我应该打开盖子,所以很不幸,我无法为你制作圣代。抬走,下一位!”

123.jpeg

第二次尝试

后来我有了第二次尝试的机会,然后我就编写了这些指令:

取下盖子打开黑覆盆子冰淇淋 将三勺黑莓冰淇淋舀入碗中 打开热软糖,将两汤匙倒入碗中 打开鲜奶油,在碗中加入一些 在圣代上撒上糖屑和樱桃

这一次我确信我写了正确的指令。甚至为了保险起见,我提前打开了每一件物品,以确保不会出现上次那样的讽刺画面。

然后我的老师开始执行我的指令。

她打开盖子,舀了三勺,放进碗里。然后她打开热巧克力软糖,在我的碗里放了两汤匙。

注意,执行到这个步骤的时候,老师在我碗里放置的是两个真正的勺子,而不是两大汤匙的热软糖。

完了,这一次我又说得不够准确。最终我拿到的是一碗装着两个金属勺子的冰淇淋,而不是我想要的圣代。

到这里我终于想明白一个道理了:计算机是一个纯粹的逻辑实体。它没有上下文,也没有假设。它只能对一组具体的指令做出反应,然后按照指令来执行。

最后,我重新了一个非常冗长的制作圣代的步骤。看起来很繁琐,但是很有必要:

``` 如果尚未打开,请打开以下各项:黑莓冰淇淋、热软糖、洒布和生奶油

从堆栈中取出一个碗并将其放在您面前

拿起冰淇淋勺,一次一个,舀三勺黑覆盆子冰淇淋到碗里。 完成后将勺子放下

如果您还没有热软糖勺,请获取热软糖勺,然后取两汤匙热软糖并将它们放入碗中,一次一个,完成后放下热软糖

将搅打好的奶油倒置,将手指按在碗上方的喷嘴上 3 秒钟,然后将瓶子放回静止位置

在碗上撒上大约 40 次洒水,完成后将振动筛恢复到直立位置

从樱桃罐中取出一颗樱桃,小心地放在圣代上

用勺子把圣代递给学生 ```

最后一步非常重要。如果没有这个指令,老师会直接吃了这份圣代而不是给我。😁

这就是计算机编程的现实。我们需要为计算机提供大量详细的指令集。本质上,所有的编程语言编写的代码都会被转化为指令集。

软件开发的职业道路

【软件开发】现在的问题是:作为一个单一的行业来讨论它过于宽泛,就像【软件开发人员】是一个过于宽泛的职位头衔一样。两个技术栈不同的开发人员可能有同样的市场需求。这意味着开发者的职业生涯中不能只有编码的能力,有一个技能是所有开发者通用的,那就是:逻辑(logic)。

最好的开发人员是批判性思维方面的专家。这是必不可少的,因为大多数软件项目都是没有文档的、混乱的屎山。他们需要一个批判性的思考者把信息拼凑起来,并在需要的时候填补空白。而比较差的开发人员就做不到这一点。

基于这一切,我们可以大胆地得出一个结论:计算机科学的基础是,并将永远是,编码的能力(coding ability)。(而不是某个的编程语言)

流行语言随着潮流来来去去,旧的框架会被抛弃,新的框架会得到人们的赞扬。而软件公司也会随着需求来改变自己的技术栈。但是那些最基础的东西是不会变的。

如何提高自己的逻辑思维【logical Thinking】

对于那些不擅长深度思考的程序员来说,可以通过下面的方式提到自己的批判性思维。

了解程序的时间复杂度

也称为 Big-O,程序的运行时复杂度可以表示为任何实例上采取的步骤数与输入大小的关系(n)。编程的第一步是永远关注程序的运行时间。

了解程序的数据结构

数据结构是每个复杂程序的核心。知道在什么情况下使用什么结构是一门独立的艺术。数据结构直接与时间复杂性联系在一起,选择错误的数据结构可能会使程序陷入停顿。

在数组中搜索一个值是的时间复杂度是o (n) ,这意味着随着数组的大小的增加,搜索数组中的元素的开销会增加。而在哈希表中查找一个元素的时间复杂度是 O(1) ,因此不管所说的哈希表中键的数目如何多,查找一个元素需要花费的时间将是常量。

阅读/观看/听

像 Udemy、 Pluralsight 和 codeacademy 这样的网站是学习新编程语言的绝佳资源。对于基础知识,请阅读有关一般工程概念、最佳实践和编码风格的书籍。对于工程师来说,最受推荐的书籍是《设计模式》、《重构》、《干净的代码》等等。最后,为了安全起见,每个工程师都应该在自己的办公桌上放一本《算法导论》。

练习

如果你不过分地拉小提琴,你就不可能成为一个优秀的小提琴家。像 hackerank、 CodeWars、 CoderByte、 TopCoder 和 LeetCode 这样的网站有成千上万的挑战性问题,旨在测试你对数据结构和算法的了解。我发现使用这些网站的最好方法就是自己尝试解决这个问题,把你的解决方案放在 Github 上,然后看看这个问题的最佳解决方案,看看其他人是怎么解决的。这就引出了我的最后一点:

查看别人的代码

您在软件开发过程中可能犯的最大错误就是单干。软件开发在很大程度上是一种众包式的努力。我们一起建立标准,一起犯错误,并且随着时间的推移学习什么是有效的(通过多次失败)。花时间阅读熟练开发人员的代码总是会有回报的。只要确保代码是好的就行了。

总结

我能给你的最好的建议就是永远不要为你不知道的事情感到羞愧。正如我所提到的,这个行业规模庞大,语言数量极多,内容密集。建立理解需要花费大量的时间和精力,获得熟练程度需要更多的时间和精力,获得掌握程度需要更多的时间和精力。我到了会告诉你的。