编程语言王国的惟一王者

clipboard.png

clipboard.png

在撰写本文前,我搜索了“我应该学习哪一种编程语言”这个词条,发现会产生5.17亿个结果。而每一个页面都在口若悬河地介绍某种语言相对于其余语言的优点,其中90%会推荐Python或JavaScript。算法

恕我直言,我并不认同这5.17亿个搜索结果,并建议你最应该学习的第一种编程语言——逻辑。编程

知道如何编写代码已经再也不是一种优点了。市场上充斥着各类培训机构、学习班培训出来的人员,“初级软件开发人员”的职位已经不复存在。要想在今天的市场上取得成功,你不但须要知道如何编码,而且还须要学会运用逻辑思惟模式。数组

1.个人第一节计算机科学课

我第一次接触“计算机科学”是在我十年级的选修课。上课第一天,我欣喜地看到我面前有各类各样的冰淇淋和各类圣代配料。在咱们都坐下以后,个人老师宣布:数据结构

“今天,咱们要制做圣代。有一个条件:你必须写一份关于如何准备圣代的具体说明,而后我就会照着作。”框架

固然没问题,我想,这简直是一件垂手可得的事儿。而后在不到一分钟的时间里,我就草草记下了一套“完美”的圣代制做指南:数据结构和算法

clipboard.png

而后,个人“老师”(嗯,我愿意用这个可爱的比喻称呼我电脑)作出了我所见过的最准确的讽刺表演——她开始恶狠狠地戳冰淇淋盒盖,但没法穿透它坚硬的外表。编程语言

“好吧,首先取下盖子,”我说,仿佛急切地想要享受一顿美食。工具

“你没有向我提供那些指示,因此,很不幸,没能给你作一个圣代,下一个!”学习

2.快进到#2号尝试

clipboard.png

此次我确信我有打开盒盖这个条件了。我甚至在添加每一个项目到个人杰做前,就已经确保它们都被打开了。测试

她打开盖子,舀了三勺黑莓冰淇淋,把它们放进碗里。从这一步看,起码个人新生圣代开始诞生了。

紧接着,她打开热巧克力,把两个汤勺放入个人碗里。不是两汤勺的热巧克力,请注意——是两个现实中的汤勺,没有热巧克力。

看起来我又一次没作到给予足够具体的指令!

当所有都完成以后,我获得了一碗冰淇淋,上面放着两个金属勺子、一坨鲜奶油和大约300片糖屑。

到这个时候,我终于明白了:计算机是一个纯粹的逻辑实体。它没有上下文,也没有假设。它对一组很是具体的指令作出响应,并最终在Terminal中运行

我最终制定的冗长却必要的圣代制做指南:

clipboard.png

最后一个步骤很是重要,由于若是没有这个步骤她将会开始吃掉个人圣代。

这就是计算机编程的现实情景。请为计算机提供密集的详细指令集。本质上来讲,这就是全部编程语言分解成的指令。

3.软件开发职业道路

软件开发如今已经到了不能做为一个单独的行业来讨论的地步,就像“软件开发人员”这个职位名称太宽泛同样。两名开发人员在拥有不连贯的技能集的状况下能够看做是具备相同市场竞争力,这意味着在开发中,职业生涯不只仅是取决于编码的能力。熟练的开发人员拥有一种与编程无关的通用属性——逻辑。

最好的开发者是批判性思惟的专家。这是相当重要的,由于大多数软件项目都是没有文档记录的、支离破碎的灾难。它们须要一个批判性的思考者来拼凑信息,并在须要的时候填补空白。落后的开发者是那些不能将这些点链接起来的开发人员。

全部这一切都归结于另外一个大胆的声明: 计算机科学的基本原理对于编码能力是相当重要的,并且将永远是相当重要的。

流行语言随潮流而变化。框架变得过期,企业经过混合技术来应对不断变化的需求。惟一不变的是什么?基本原理——这就是他们的定义!

4.如何提升逻辑思惟

对于那些没法深刻思考的人来讲,请考虑使用这些工具来提升您的编程批判性思惟:

了解您的运行时间复杂度

程序的运行时间复杂度也称为Big-O ,能够表示为在任何实例上执行的与输入大小(n)相关的步骤的数量。首先,请始终监视您的程序的运行时间。

了解您的数据结构

数据结构是每一个复杂程序的核心。知道在什么场景中使用哪一种结构自己就是一门艺术。数据结构与运行时间复杂度直接相关,由于选择错误的结构会使程序陷入停顿。数组查找是 O(n) ,这意味着随着输入的大小增长,使用数组的开销也会增长。散列查找O(1),所以不管所述散列中的键数是多少,散列键的查找时间都将是恒定的。

我曾经有一些候选人认为数组的搜索时间比散列更快。这就是一个警告我不要雇佣他们的直接信号——所以,请了解你的数据结构。

读/看/听

像Udemy,Pluralsight和CodeAcademy等网站是学习一门新的编程语言的绝佳资源。要了解基础知识,请参阅有关通用工程概念、最佳实践和编码风格的书籍。工程师们最强烈推荐的书籍是《Design Patterns》,《Refactoring, Code Complete, Clean Code》, 和 《The Pragmatic Programmer》等。最后,每一个工程师都应该在他们的办公桌上保留一份《Introduction to Algorithms》,并妥善保存。

实践!

未曾疯狂练习拉小提琴,就不可能成为一名小提琴大师。像HackerRank,CodeWars,CoderByte,TopCoder和LeetCode这样的网站上有成千上万个挑战问题,旨在测试您对数据结构和算法的了解。我发现使用这些网站的最佳方法是本身尝试解决问题,并将解决方案放在Github上,而后查看该问题的顶级解决方案,看看其余人是如何解决的。这就引出了个人最后一点建议:

查看其余人的代码

在软件开发过程当中,您可能犯的最大错误就是单独行动。软件开发在很大程度上是一项众包工做。咱们一块儿创建标准,一块儿犯错误,并随着时间的推移(经过屡次失败)来学习什么是有效的。花时间阅读熟练的开发人员的代码老是有回报的。只要确保它是好的代码。


我能给你留下的最好建议就是永远不要为你所知道的事情感到羞耻。正如我所提到的,这个行业规模庞大,有着庞大到可怕的语言,内容密集。须要花费大量的时间和精力来进行理解和学习。得到熟练则须要更多的努力,而且须要花费更多的精力来达到精通。

当我到达那里时,我会告诉你的。


扫码关注京东云开发者社区,天天都有精彩行业信息哦!

欢迎点击“京东云”了解更多精彩

图片描述
图片描述

相关文章
相关标签/搜索