代码之髓读后感——如何高效的学习语言


title: 代码之髓读后感——如何高效的学习语言
date: 2017-07-08 17:17:00
categories: 技术
tags: 读后感


王垠:如何掌握程序语言

《代码之髓》这本书里提出了三种学习语言的方法—— 如何高效的学习语言?

  1. 在比较中学习

  2. 在历史中学习

  3. 在实践中学习

在比较中学习

通过比较多种语言,总结出某种语言的独有特点,以及多种语言的共有特点。

借用王垠的一些话——

重视语言特性,而不是语言。
何一种“语言”,都是各种“语言特性”的组合。
每一种语言里面必然有一套“通用”的特性。比如变量,函数,整数和浮点数运算,等等。这些是每个通用程序语言里面都必须有的,一个都不能少。你只要通过“某种语言”学会了这些特性,掌握这些特性的根本概念,就能随时把这些知识应用到任何其它语言。
掌握了通用的语言特性,剩下的就只剩某些语言“特有”的特性了。研究语言的人都知道,要设计出新的,好的,无害的特性,是非常困难的。所以一般说来,一种好的语言,它所特有的新特性,终究不会超过一两种。如果有个语言号称自己有超过 5 种新特性,那你就得小心了,因为它们带来的和可能不是优势,而是灾难!

各种语言之中,都有着共性,这是基本,而个性只是部分点。

在比较中学习,可以帮助我们更清楚地意识到:

哪些点是共性——就是上面王垠所谓的“语言特性”,因为这才是语言的基本。掌握了这些共性,对于我们的语言学习有着极大的帮助。这通常确定着一门语言的基本架构方式,大致的代码雏形,以及基本流程。这会告诉我们如何去站立,如何去行走。

哪些点是个性——这个是需要我们深入使用时需要考虑的点。因为一般这些东西,都是一些在当前特定的条件下的,“如此做更为方便”的方法。有时候这些东西可能不是必要的考量,但是掌握他们,对于此门语言使用往往会起到提升整体质量的作用。甚至促使我们对于解决适当的问题有着更为灵活多选的方式。这会告诉我们如何在现在的路上奔跑,跳跃。因为这时候更加关注了这条路上的细节,哪里有坑,哪里有捷径...

因为掌握了语言特性的人都知道,自己需要的特性,在任何语言里面一定有对应的表达方式。

借用在当下的语境中,重视在对比中学习,体会到更多的语言特性,会帮助我们对于语言的学习变得更加有一种直观的感受。我们的思维中,解决问题变得自然而然。编程就是把思维映射到机器中的途径而已。我们已经知道什么样的想法可以用怎样的工具来实现,那实现想法也不就是一段段思路的拼接的过程么?

我们有时会发现,编程其实并不难,似乎就是需要了解下这门语言中有着哪些工具可供我们利用,我们需要做的就是熟悉这样一套系统,一台大型设备的各种功能。但是我们最后会发现,也只有那些其他工具也具有的功能,才是我们最起码要知道的。那些高精尖的技巧,也不过是在特殊环境下的应对方式。

感觉学起来好像很容易,但是实际上我们在学习中总是会迷失在各种细节中,最典型的就是类似于C中关于输出的格式的翻炒——

举个夸张点的例子。我发现很多编程培训班和野鸡大学的编程入门课,往往一来就教学生如何使用 printf 打印“Hello World!”,进而要他们记忆 printf 的各种“格式字符”的意义,要他们实现各种复杂格式的打印输出,甚至要求打印到文本文件里,然后再读出来……

对于掌握编程的核心概念来说,这些其实都是次要的。

总而言之,通过对比学习,你会更容易发现真正的语言特性究竟是什么。学习编程到底要学习什么。

在历史中学习

通过追溯语言的发展历史,了解语言是如何产生,变化,消失的,探寻语言发展演变的轨迹。

有时候,我们在学习中,对于一些功能的学习,往往会不明所以,这其实是因为,对于这种功能,你自己从内在其实并没有觉得理所当然,就像是为什么要有类这一类的问题其实潜在的就在你的心头萦绕着,这使得你的学习,会变得茫然,就像我们最初学习线性代数,上来就整一堆定义,先把你整晕,再来一堆定理,往往不明所以,直接就迷失了,到头来脑袋空空,真正的实际应用中,什么也变不出来。所以我到现在对于线性代数还是充满了敬畏。

在历史中学习,能帮助我们更加清晰地了解那些被掩埋的细节。回看语言设计者为了解决何种问题而创造出这样一种语言,阅读其发展变迁的历史,那些功能的缘由就会变得清晰,你也就会更加认同其中所蕴含的现实意义。

而从历史中学习,也是有助于我们更容易了解到语言的特性,那些非特性的部分为什么被创造出来,是为了解决一种什么样的具体问题。这些都有助于加深我们对于语言的理解。

在实践中学习

亲自进行程序设计,边实践边思考如何编程,才能深入了解设计者的意图,同时也能发现自己原先理解的不到位之处。

这是这行的至上真理。


三种学习的方式,实际上是为了满足我们学习语言的三种情绪:希望快速掌握的迫切,对于未知事物的求真以及对于自我认知的测验

你可能感兴趣的:(代码之髓读后感——如何高效的学习语言)