编程语言王国的唯一王者
在撰写本文前,我搜索了“我应该学习哪种编程语言”这个词条,发现会产生5.17亿个结果。而每个页面都在滔滔不绝地介绍某种语言相对于其他语言的优势,其中90%会推荐Python或JavaScript。
恕我直言,我并不认同这5.17亿个搜索结果,并建议你最应该学习的第一种编程语言——逻辑。
知道如何编写代码已经不再是一种优势了。市场上充斥着各种培训机构、学习班培训出来的人员,“初级软件开发人员”的职位已经不复存在。要想在今天的市场上取得成功,你不但需要知道如何编码,并且还需要学会运用逻辑思维模式。
1.我的第一节计算机科学课
我第一次接触“计算机科学”是在我十年级的选修课。上课第一天,我欣喜地看到我面前有各种各样的冰淇淋和各种圣代配料。在我们都坐下之后,我的老师宣布:
“今天,我们要制作圣代。有一个条件:你必须写一份关于如何准备圣代的具体说明,然后我就会照着做。”
当然没问题,我想,这简直是一件轻而易举的事儿。然后在不到一分钟的时间里,我就草草记下了一套“完美”的圣代制作指南:
然后,我的“老师”(嗯,我愿意用这个可爱的比喻称呼我电脑)做出了我所见过的最准确的讽刺表演——她开始恶狠狠地戳冰淇淋盒盖,但无法穿透它坚硬的外表。
“好吧,首先取下盖子,”我说,仿佛急切地想要享受一顿美食。
“你没有向我提供那些指示,所以,很不幸,没能给你做一个圣代,下一个!”
2.快进到#2号尝试
这次我确信我有打开盒盖这个条件了。我甚至在添加每个项目到我的杰作前,就已经确保它们都被打开了。
她打开盖子,舀了三勺黑莓冰淇淋,把它们放进碗里。从这一步看,起码我的新生圣代开始诞生了。
紧接着,她打开热巧克力,把两个汤匙放入我的碗里。不是两汤匙的热巧克力,请注意——是两个现实中的汤匙,没有热巧克力。
看起来我又一次没做到给予足够具体的指令!
当全部都完成之后,我得到了一碗冰淇淋,上面放着两个金属勺子、一坨鲜奶油和大约300片糖屑。
到这个时候,我终于明白了:计算机是一个纯粹的逻辑实体。它没有上下文,也没有假设。它对一组非常具体的指令做出响应,并最终在Terminal中运行。
我最终制定的冗长却必要的圣代制作指南:
最后一个步骤非常重要,因为如果没有这个步骤她将会开始吃掉我的圣代。
这就是计算机编程的现实情景。请为计算机提供密集的详细指令集。本质上来说,这就是所有编程语言分解成的指令。
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上,然后查看该问题的顶级解决方案,看看其他人是如何解决的。这就引出了我的最后一点建议:
查看其他人的代码
在软件开发过程中,您可能犯的最大错误就是单独行动。软件开发在很大程度上是一项众包工作。我们一起建立标准,一起犯错误,并随着时间的推移(通过多次失败)来学习什么是有效的。花时间阅读熟练的开发人员的代码总是有回报的。只要确保它是好的代码。
==============================================================
我能给你留下的最好建议就是永远不要为你所知道的事情感到羞耻。正如我所提到的,这个行业规模庞大,有着庞大到可怕的语言,内容密集。需要花费大量的时间和精力来进行理解和学习。获得熟练则需要更多的努力,并且需要花费更多的精力来达到精通。
当我到达那里时,我会告诉你的。
==============================================================
扫码关注京东云开发者社区,每天都有精彩行业信息哦!
欢迎点击“京东云”了解更多精彩内容。
编程语言王国的唯一王者相关推荐
- GO、Java、C/C++、Python,这些编程语言谁才是王者?
最近我加入了一个使用Go语言的项目组.由于此前对Go语言的了解还停留在理论认识的阶段,没有大型项目的经验,加入这个项目组让我算是真正体验了一把Go语言,职业技能树也更加丰富了起来. Go语言的很多语言 ...
- DXOMark公布最新相机综合评分:华为P30 Pro不再是唯一王者
[TechWeb]前不久,华为陆续在国外和国内推出了全新一代P系列旗舰,该系列中最受关注的自然是其强大的拍照能力,尤其P30 Pro的相机在DXOMark排行榜中以112分的高分取代前辈Mate20 ...
- 为什么说选择正确的编程语言很重要,以及如何正确的选择
几个月前,一个同事问我,应该如何选择编程语言,或者有没有什么固定的选择模式,当时我便打算写点什么.上周在硅谷开会,这我是第一次跟"hack3rs"的创业狂以及技术狂们打交道.我学会 ...
- 中国自由软件推广先锋的自述,心潮澎湃的一往无前,一定要看!作者:洪峰...
一定要看,原文地址是: http://www.cppblog.com/toMyself/archive/2010/08/29/125217.html 本文内容经过了我(Shane Loo Li)少许修 ...
- 计算机科学讨论,第七章计算机科学讨论报告
计算机科学基础讨论报告 -- 数据库查询语言的SQL的基本特点与作用 SQL的全称是结构化查询语言,已经成为关系型数据库的标准语言. 通过定义可以知道SQL语言的几项基本属性.它的本质是语言,作用是数 ...
- 什么是Scheme?原来还可以这样应用!
Scheme定义 Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成.它是现代两大Lisp方言 ...
- JS_01_变量_数据类型
简介: JavaScript 是世界上最流行的脚本语言,也是世界上第2难的语言. JavaScript 是属于 web 的语言,它适用于 PC.笔记本电脑.平板电脑和移动携带. JavaScript ...
- 是否想快速学习Java? 刻录所有Java教程书籍
每天,Java编程世界中充斥着渴望学习Java语言的初学者. 您也一样并不奇怪. 用这种语言进行编码的好处几乎是无穷的. 作为世界上最受欢迎和最受欢迎的语言之一,您当然不能学习Java并且失业! 但是 ...
- CSDN著名技术专家Visual C++2010开发体验心得——从Visual C++6 0到Visual C++201
IT业是一个创造奇迹的行业,IT业也是一个年轻的行业,IT业更是一个不断更新的行业.在2009年,微软已经连续推出Visual Studio2010 beta1 与 Visual Studio2010 ...
最新文章
- 使用boost解析域名服务
- LeetCode Guess Number Higher or Lower II(动态规划)
- 7号团队-团队任务3:每日例会(2018-12-05)
- 人人可以理解的区块链100问
- Node.js 博客实例(一)简单博客
- 6.0系统设备Xposed框架激活教程
- 数据分析案例:亚洲国家人口数据计算
- python selenium模拟键盘_Python+Selenium自动化篇-7-模拟键盘操作
- PYNQ实战笔记(一)————常用的代码使用及配置技巧-持续更新
- CCNP-冗余链路中的广播风暴、多帧复制、地址表的不稳定
- 任务态fMRI的实验设计方法及注意事项有哪些?—重温经典文章的点滴思考
- 服务器的上行带宽和下行带宽是什么意思
- 键盘调节台式计算机声音,台式电脑如何用键盘控制声音开关
- 苞米豆mybatis-plus generator代码生成器3.5.1版本 Freemarker引擎
- 解决 WKWebView goback执行无效的bug
- 一维数组新老数据对比修改字段
- 【线性DP】跳格子问题 + 光签题(取石子游戏)
- WebRTC Trickle ICE 策略
- --Dom4j解析xml--
- GPL LGPL M.