博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
掌握代码背后的这种语言,让你一招通吃天下!
阅读量:2108 次
发布时间:2019-04-29

本文共 3770 字,大约阅读时间需要 12 分钟。

全文共3471字,预计学习时长7分钟

在这里插入图片描述
图片来源:
在撰写本文时,搜索引擎中“应该学习哪种编程语言”这一问题已有5.17亿个搜索结果。每一网页都会阐述某种语言相对于其他语言的优势,其中90%的网页最终会推荐Python或JavaScript。

但其实,最应该首先学习的编程语言是逻辑。

学会如何编写代码已不再够用了。现在到处都是从培训班出来的毕业生,这一市场已经饱和,“初级软件开发工程师”这一职位已不复存在。在今天,要想取得成功,不仅要学会该如何编码,还要有逻辑思维的助力。

在这里插入图片描述
第一节计算机科学课
在这里插入图片描述
图片来源:David Calavera / Unsplash

笔者第一次接触计算机科学是在十年级的选修课上。第一天上课时,看到面前有各式各样的冰淇淋和圣代配料,真的好开心。在大家坐好后,老师说:

“今天要做圣代。但有一个条件:每个人都要写一个清单,详细写出准备圣代所需的指令,老师会按照这些指令来做圣代。”

“没问题,简直小事一桩。”我花了不到一分钟就草草写出了一套完美的圣代制作指令:

Scoop three scoops of blackraspberry ice cream into a bowl

Pour two tablespoons of hot fudge into said bowl

Put whipped cream into the bowl

Place sprinkles and a cherry on top of the sundae

然后,这位幽默地把自己比作电脑的老师,精确地按照指令,开始用最匪夷所思的方式制作圣代。她狠狠地戳冰淇淋盒,但盒盖完好无损,无法戳透坚硬的外盒。

“好了,先把盖子打开呀。”我说,想要赶紧吃到冰激凌。

“你没有写出这些指令,所以,很可惜,制作圣代失败,下一个!”

快进到第二次尝试

Open the black raspberry ice cream by removing the lid

Scoop three scoops of black raspberry ice cream into a bowl

Open the hot fudge and pour two tablespoons into the bowl

Open the whipped cream and add some to the bowl

Place sprinkles and a cherry on top of the sundae

这一次,肯定会成功。在把这些指令添加到清单前,我甚至上前去确认每个盒子都被打开了。

老师打开盖子,舀了三汤匙冰激凌,把它放进碗里。圣代终于开始成形了。然后她打开热软糖,放了两把汤匙在碗里。注意了,这可不是两汤匙热软糖,而是两把实实在在的汤匙,没有写上热软糖,我这次又没写清楚。按照指令完成制作后,我收到一碗冰淇淋,上面放着两个金属汤匙、满满一罐生奶油和大约300片糖屑。

这时,一切终于明白了:计算机是完全遵循逻辑的东西。它不会联系上下文,也不会自行假设,只对一套非常具体的指令做出回应,并严格按照这些指令行动。

终极版的圣代制作指令简直是灾难,啰里啰嗦,但只能如此:

If they are not already, open each of the following: Black Raspberry Ice Cream, Hot Fudge, Sprinkles, and Whipped Cream

Aquire a bowl from the stack and place it in front of you

Grab the ice cream scoop and, one at a time, scoop three scoops of black raspberry ice cream into the bowl. Place the scoop down when done

Aquire the hot fudge spoon if not already in your possession, then fetch two tablespoons of hot fudge and place them into the bowl, one at a time, and put down the hot fudge when done

Turn the whipped cream upside down, press your finger against the nozzle over the bowl for 3 seconds, and return the bottle to its resting position

Sprinkle approximately 40 sprinkles over the bowl and return the shaker to its upright position when done

Fetch a single cherry from the cherry jar and place it delicately on top of the sundae

Hand the sundae to the student along with a spoon

最后一步非常重要,因为如果不这样写,老师就开始吃我的圣代了。

这就是计算机编程的现实状况,需要提供很多套详细的指令。本质上来说,把编程语言分解来看就是——许多条指令。

在这里插入图片描述
软件开发的职业道路

现在,软件开发已经不能作为一个行业来讨论了,太宽泛了,就像软件开发工程师一样,这个职称涵盖的范围太广。就算两名软件开发工程师的技能组合完全不同,他们却都同样具有市场竞争力,这意味着对软件开发领域的职业来说,需要的不仅仅是编码的能力。除了编程外,熟练的软件开发工程师都有一个共通的特性——富有逻辑。

最好的软件开发工程师都是批判性思维方面的专家。这很重要,因为大部分的软件项目都没有文档记录,零零散散的一团糟。这就需要一个批判性的思考者整合碎片信息,并在需要的时候补齐信息。那些稍显落后的软件开发工程师正是无法连接这些信息点的工程师。

所有这些都可以用另一句冒昧的话来概括:计算机科学的基本原理,不管是现在还是将来,对编程能力而言都是非常重要的。

流行的编程语言乘势而来,顺势而去。框架结构被弃用,而公司通过混合技术来 应对 瞬息万变的需求。那什么永远不会变呢?基本原理——这就是计算机科学的定义本身!

在这里插入图片描述
如何提高逻辑思维
在这里插入图片描述
图片来源:Cristofer Jeschke / Unsplash
对于那些无法深入思考的人来说,可以考虑使用以下工具来提高编程的批判性思维:

了解时间复杂度

也称为Big-O,程序的时间复杂度可以表示为:为解决一个规模为 n 的问题所花费的时间(或者所需步骤的数目)。第一步是在程序运行时保持永久选项卡。

了解数据结构

数据结构是每个复杂程序的核心。知道该在什么场景中使用哪种结构,这本身就是一门艺术。数据结构与时间复杂度直接相关,因为选错了结构可以使程序陷入停顿。阵列查找法是O(n),这意味着如果使用阵列查找法,随着问题规模的扩大,需要花费更多时间来解决问题。散列查找法(哈希函数)是O(1),所以不管哈希函数中有多少个关键字,查找哈希关键字的时间是不变的。

我曾经面试过一些候选人,他们认为阵列的查找时间比散列更快。我就不会录用这样的人,因为了解数据结构是很必要的。

读/看/听

像Udemy、Pluralsight和CodeAcademy这些网站,都是学习新编程语言的好资源。要了解基本原理,请参阅有关一般工程概念、最佳实践和编码风格的书籍。要强烈推荐给工程师们的书有《设计模式》、《重构》、《代码整洁之道》和《程序员修炼之道》,这只是几个例子。最后,每个工程师都应该有一本《算法导论》放在书桌里妥善保存。

练习!

没有大量练习,是无法成为专家的。

像HackerRank、CodeWars、CoderByte、TopCoder和LeetCode这样的网站里面有成千上万道挑战题目,用来测试对数据结构和算法的了解程度。我发现使用这些网站的最佳方法是自己动手解决问题,将解决方案放在Github上,然后查看该问题的最佳解决方案,看看其他人是如何解决的。这就引出了最后一点:

参考别人的代码

在软件开发过程中,最大的错误就是单干。软件开发在很大程度上是一项众包工作。我们一起建立标准,一起犯错,并随着时间的推移(通过多次失败)学习到什么才是有效的。花时间看看资深软件开发工程师的代码会大有裨益。但要确保参阅的代码是好的。

最好的建议就是要不耻下问。上文提到,软件开发是个非常庞大的行业,语言数量众多,内容密集。想要弄懂这些语言需要花费大量的时间和精力,想要精通则要耗费更多,若想成为大师更得为此付出千百倍的时间和精力。

在这里插入图片描述
留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
在这里插入图片描述
(添加小编微信:dxsxbb,加入圈子,一起讨论最新鲜的人工智能科技哦~)

转载地址:http://oeyef.baihongyu.com/

你可能感兴趣的文章
HTTP高并发测试
查看>>
数据重生:让神经机器翻译中的不活跃样本“复活”
查看>>
【Java】【28】提高List的removeAll方法的效率
查看>>
【JS】【31】读取json文件
查看>>
OpenSSL源代码学习[转]
查看>>
Spring下载地址
查看>>
google app api相关(商用)
查看>>
linux放音乐cd
查看>>
GridView+存储过程实现'真分页'
查看>>
flask_migrate
查看>>
解决activemq多消费者并发处理
查看>>
UDP连接和TCP连接的异同
查看>>
hibernate 时间段查询
查看>>
java操作cookie 实现两周内自动登录
查看>>
Tomcat 7优化前及优化后的性能对比
查看>>
Java Guava中的函数式编程讲解
查看>>
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>