专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
程序员的那些事  ·  OpenAI ... ·  14 小时前  
OSC开源社区  ·  升级到Svelte ... ·  3 天前  
程序猿  ·  “未来 3 年内,Python 在 AI ... ·  3 天前  
程序员的那些事  ·  惊!小偷“零元购”后竟向 DeepSeek ... ·  2 天前  
程序员小灰  ·  DeepSeek做AI代写,彻底爆了! ·  4 天前  
51好读  ›  专栏  ›  SegmentFault思否

如何学习一门新的语言?

SegmentFault思否  · 公众号  · 程序员  · 2019-11-18 12:21

正文

本文于 2018 年发布于思否社区
作者 SegmentFault CTO 祁宁



首先要说,这并不是一篇教你如何学习的文章,因为到今天为止我也没有找到一种通用的方法来解决如何学习的问题。 但是在探索的道路上,我确实产生过一些思路,我想把这些思考的过程分享出来让大家探讨。 如果这对你有帮助的话,那我会非常高兴。

我最近在学习 Rust ,这是一门很酷但是相对冷门的语言 (学习冷门语言可能是我的一大爱好,比如我就非常喜欢 CoffeeScript ,这是 JavaScript 的一门方言) 自从在某些语言的舒适区待久之后,经常会产生自己无所不能的错觉,这也是我不断想学习新语言的一大动力。

而我的学习过程跟大多数人类似,就是先在网上找文档然后自学。 而在看文档的过程中,我就发现了一些问题。




手册的作用



“去看文档喽。 ”这是老鸟在面对新手时最喜欢扔的一句话,我通常也是这么扔给自己的。 但当你打开一门语言的手册,你会发现它除了教你语法外,几乎没有教你什么其它东西。 于是你会陷入这样一个境地:

“背下来了么?
“背不下来,太难懂了。
“再看一遍,给我背下来。

“背下来了么?
“大部分背下来了。
“给我写个程序,实现个XX功能。
“不会。
“。

在一个高级开发者眼里,你会了语法理所当然就应该会写程序了,但实际情况并非如此。这让我想起前段时间跟一个朋友关于目前编程教育市场的一个讨论。我出于自己的经验提出一个想法: 让大牛开发者来教新手入门。

在我的设想中,大牛开发者拥有强大的实战经验,以及丰富的专业知识,更是自带光环,这不比现在市场上那些半吊子的讲师好多了。 在我为自己“伟大”的想法得意的时候,朋友给我浇了一盆冷水。 他告诉我这样根本行不通,大牛根本不知道菜鸟需要什么知识,你可能以为基础语法讲清楚就好了,人家却连编辑器是什么都不清楚。

设想一下,让一个大学教授去教一群小学生,这对两者来说都是一种灾难吧。

这些语言的创造者,或者文档的作者,无疑都是一些大神。 它们在撰写一个语言手册的过程中,只能尽量负责地把这个语言的全貌准确地有组织地展现给你。 然而这种全面的展现,对于一个没有任何引导的初学者来说并不完全是一件好事。

简单来说就是, 你会在一些次要的事情上浪费太多时间,而一些主要的概念又没有理解透彻。



关于看真实代码



当觉得文档满足不了你的时候,老鸟们往往会扔给你第二招: 看代码。 看什么代码呢? 那还用说,当然是被业界奉为经典的,在 GitHub 上至少有一万颗星的知名开源项目代码啦。

当你怀着崇敬的心情,打开扔给你的网址,看着满屏幕的代码时,你会对自己问出那三个经典的哲学问题。 这是什么东西? 它是怎么做到的? 为什么要这么写? 搞不好某些人还会因为惊吓过度,从而失去了学习下去的信心。

那么让我们一起来看看这些代码里有什么鬼东西,会吓得新手信心不足。

大段的注释


说一件事你们不要笑,在我还是个萌新的时候,我曾经对这些穿插在代码中的神秘文字产生了深深的困惑,我还以为它们对代码有某种加成作用,以至于我还试验过把注释去掉会对代码执行产生什么影响。 而现实中好的代码会让后面的维护者方便很多,但不好的甚至错误的注释会让人迷惑不已。

语法糖


语法糖是个好东西,它大大简化了我们的编程过程,高手用起语法糖写起代码来简直不要太爽,所以越强大的项目这玩意儿越多。 但是对于初学者来说,语法糖隐藏了一些细节,而且让语法看起来很怪异。 有些代码如果你用标准语法来写是很好懂的,但如果用语法糖来写的话很难让人一下子明白。

初学者为了弄懂这些语法往往要花大量时间,但其实这些时间在这个阶段是没必要的浪费。 你看不懂它觉得它是一个很重要的东西,其实它只是一个做工精巧的小玩意儿,离开了它这些代码照样能工作。 而随着你的经验丰富,也可以随时随地用起来,用的方法可能也不尽相同。

代码里的重点


对于一个开源项目来说,往往 50% 的代码可能都是在适配各种不同的运行环境,将系统的 API 抽象成项目里通用的接口,这部分代码除非你自己要做类似的项目,要不然的话对初学者来说参考意义不大。更何况, 为了适配某些系统奇葩的运行环境,开发者往往会大开脑洞,创造出一些非常奇怪的代码。 这些旁门左道充满了玄学和不确定性,初学者看多了可能会发生如武侠小说里练功出差错的结果:走火入魔。

剩下的代码里 20% 是项目内部的接口抽象和定义,最后 30% 才是真正值得看的东西,它们往往散落在各个地方,但又为了一个设计核心服务。 让初学者识别出这些代码来,未免太强人所难。




野文档



这是我自己的一个定义,我把一切非官方的开发文档都称为野文档。初学者会在搜索引擎里得到大量的相关文档, 他们很多是学习心得,很多人在写这篇文章时水平可能比你也高不了多少。

这就造成了这些文档的水平参差不齐,所面向的重点也不同,也许你花了大把时间弄懂的是一个错误的或者过时的知识。 而大部分号称教你入门的文章,可能也就是告诉了你如何搭建一个运行环境,这门语言的精髓和重点作者自己估计也没弄明白。

而如果你碰到一篇被奉为经典的好的入门文章,那你真的要好好感谢作者。 因为这意味着作者付出了大量的深入思考,深入浅出这四个字说起来简单,做起来可是需要相当的功底的。



相对较好的做法



在这么多语言的学习过程中,我也总结了一些相对比较好的学习方法。 我认为看代码是非常有必要的,因为光死记语法是无法掌握好这门语言的。






请到「今天看啥」查看全文