编程语言江湖的统一之道是什么?

发表时间: 2020-07-15 10:29

作者 | Eric Girouard

译者 | 弯月,责编 | 屠敏

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

以下为译文:

在撰写本文的时候,我搜索了一下:“我应该学习哪种编程语言”,结果得到了5.17亿个搜索结果。每个结果都介绍了某种语言战胜其他语言的优势,其中90%的结果最终都推荐了Python或JavaScript。

可能我有点太大胆了,我不太赞同这5.17亿个结果,我建议你应该学习的第一门编程语言是逻辑。

如今只知道如何编程已经行不通了。市场已经被速成班渗透,“初级软件开发人员”的职位已经消失殆尽。今时今日为了取得成功,你不仅需要知道如何编程,还需要建立逻辑思维。

我的第一门计算机科学课程

我第一次接触计算机科学是10年级的一门选修课。上课的第一天,我的眼前摆满了各式各样的冰淇淋和制作圣代的原料。大家坐好以后,老师宣布说:

“今天,我们来制作圣代。首先你需要编写一份有关如何制作圣代的具体说明,然后由我根据你的说明来制作。”

我心想,没问题,这很简单啊。不到一分钟的时间,我就写下了一份完美的圣代制作说明:

盛三勺黑树莓冰淇淋放到碗里;

放两勺热巧克力到碗里;

放鲜奶油到碗里;

在圣代上撒上少许彩色糖粒和一颗樱桃。

然后,我的老师(这台可爱的模拟计算机)就上演了一幕准确无误又充满讽刺的表演。她开始狠狠地扎冰淇淋的盒子,由于盖子还没有打开,所以她根本无法穿透盒子坚硬的外表。

“好吧,先取下盖子。”我迫不及待地想吃冰激凌。

“但你的说明里没有提到这些,因此,很遗憾,我没办法为你制作圣代,下一位!”

第二次尝试

取下盖子,打开黑树莓冰淇淋;

盛三勺黑树莓冰淇淋放到碗里;

打开热巧克力,然后放两勺到碗里;

打开鲜奶油,然后放一些到碗里;

在圣代上撒上少许彩色糖粒和一颗樱桃。

这次我确定我的说明没问题。在放到圣代上之前,我提前检查了一下每样东西是否都打开了。

于是,我的老师打开盖子,盛了三勺冰淇淋放到了碗里。终于,我的圣代就要做好了。然后,她打开热巧克力,放了两个勺子到我的碗里。请注意,不是两勺热巧克力,而是两个勺子,根本没放热巧克力。我说的还是不够具体。最后,老师按照我说的全部做完了,我拿到了一碗冰淇淋,两把金属汤匙,一个鲜奶油罐,还有大约300个彩色糖粒。

我想说到这里大家都明白了,计算机是一个纯粹的逻辑实体。它没有上下文,也没有任何假设。它会严格遵循一组非常具体的指令。

最后我的圣代制作说明是一场非常繁琐但很有必要的灾难:

如果下列各项尚未打开,则请打开:黑莓冰淇淋、热巧克力、彩色糖粒和鲜奶油;

从一摞碗中拿一个,然后放到你面前;

拿起冰淇淋勺,盛三勺黑树莓冰淇淋放入碗中,一次放一勺。完成后请放下勺子;

如果还没有加热巧克力,则请拿一个盛热巧克力的勺子,然后盛两勺巧克力放入碗中,一次放一勺。完成后请放下热巧克力;

将鲜奶油倒过来,用手指按住喷嘴在碗上方喷3秒钟,然后把瓶子放回原位;

在碗上洒约40颗彩色糖粒,完成后将瓶子放回原位;

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

将圣代和一把勺子一起交给学生。

最后一项非常重要,因为如果没有这句话,老师就会吃掉我的圣代。

这就是真实的计算机编程。你需要向计算机提供大量详细的指令集。从本质上讲,所有编程语言都会分解成指令。

软件开发职业发展

如今软件开发这个职位的范围非常广泛,可以作为一个单独的行业来探讨,而“软件开发人员”也是一个过于宽泛的职位头衔。两名在市场上同样枪手的开发人员拥有的技能可能完全不同,这表明开发工作不仅仅是单纯的编程能力。除了编程以外,熟练的开发人员还有一个通用的属性:逻辑。

优秀的开发人员都是批判性思维方面的专家。这一点至关重要,因为大多数软件项目都没有文档,七零八碎,简直就是灾难。这样的项目需要拥有批判性思维的开发人员将信息拼凑起来,并在需要时填补空白。凡是无法将所有线索联系到一起的人都会落伍。

因此,我可以得出另一个大胆的声明:计算机科学的基础知识对编程能力至关重要,而且永远如此。

流行的编程语言起起落落。很多框架都过时了,各个公司都希望通过混合技术栈来应对不断变化的需求。什么才是一成不变的东西?基本原理!

如何改善逻辑思维

对于那些无法深入思考的人,请考虑使用以下工具来提高批判性思维:

了解运行时的复杂性

程序的运行时复杂度又称大O(Big O),可以表示为相对于输入大小(n)执行的步骤数。永远把关注点放在运行时间上,这是学习编程的第一步。

了解数据结构

数据结构是每个复杂程序的核心。掌握在什么情况下使用哪种结构本身就是一门艺术。数据结构直接关系到运行的时间复杂度,因为选择错误的结构会导致程序停滞不前。搜索数组中的某个值的复杂度为O(n),也就是说随着输入大小的增加,使用数组的代价也会提高。哈希查找的复杂度为O(1),因此哈希密钥的查找时间将是恒定的,与哈希中密钥的数量无关。

我曾经面试过一个候选人,他坚持认为数组的搜索时间比哈希表要快。这种人在招聘时就不要考虑了。

多读/多看/多听

Udemy,Pluralsight和Codecademy等网站为学习新编程语言提供了优秀的资源。为了学习基础知识,你需要阅读软件工程通用概念、最佳实践以及编程风格之类的书籍。工程师首推的书包括《设计模式》、《重构》、《代码大全》、《代码整洁之道》以及《程序员修炼之道》等。最后,每个工程师都应在自己的办公桌上放一边《算法导论》。

实践!

不经过千锤百炼就不可能成为小提琴大师。HackerRank、CodeWars、CoderByte、TopCoder和LeetCode等网站提供了成千上万道编程考题,旨在测试你对数据结构和算法的掌握程度。我发现这些网站的最佳利用方法是动手解决问题,将解决方案上传到Github上,然后再看看最佳解决方案,以了解其他人如何解决该问题。因此,引出我的最后一点:

多读其他人的代码

在从事软件开发的过程中,你可能犯的最大错误就是独来独往。软件开发是需要集体的努力。我们一起建立标准,一起犯错误,并随着时间的流逝学习有效的方法(从大量失败中吸取教训)。花时间阅读其他开发人员的代码,会让你受益良多。

我可以给你的最好建议是,不要为自己的无知而感到羞愧。这个行业规模巨大,语言数量众多,内容密集。学好编程需要大量的时间和精力,而熟练掌握编程所需的时间则更多。

原文:
https://medium.com/better-programming/the-one-programming-language-to-rule-them-all-620366df2805

本文为 CSDN 翻译,转载请注明来源出处。