首先,这不是一篇教你如何学习的文章,因为直到今天我还没有找到一个通用的方法来解决如何学习的问题。但是在探索的路上,我确实有过一些想法,也想把这些思考过程分享给大家一起讨论。如果这对您有帮助,我将非常高兴。我目前正在学习Rust,这是一门很酷但相对晦涩的语言(学习晦涩的语言可以成为我的一种爱好,例如,我非常喜欢CoffeeScript,它是JavaScript的一种方言)。由于长期停留在某些语言的舒适区,我常常有一种无所不能的错觉,这也是我不断想学习新语言的一个很大的动力。而我的学习过程和大部分人都差不多,就是先在网上找资料,然后自学。在阅读文档的过程中,我发现了一些问题。手册的功能是“转到文档”。这是老手面对新手时喜欢抛出的一句话,我一般都是抛给自己。但是当你翻开一本语言手册时,你会发现它除了语法之外几乎没有教给你任何东西。所以你会陷入这样的境地:“你背了吗?”“我记不住,太难懂了。”..“你记住了吗?”“大部分都记下来了。”“给我写个程序,实现一个XX功能。”“不会……”“……”在高级开发人员眼里,你会语法,你应该会写程序,但事实并非如此。这让我想起了前段时间和一个朋友讨论现在的编程教育市场。我结合自己的经验提出了一个想法:让大牛开发者教新手入门。在我的印象中,大牛开发者实践经验强,专业知识丰富,自带光环,不比现在市面上那些半吊子的讲师。当我为自己的“伟大”想法而得意时,朋友却给我泼了一盆冷水。他告诉我这根本不起作用。丹尼尔不知道菜鸟需要什么知识。你可能认为把基本语法解释清楚就好了,但人们连编辑器是什么都不知道。想象一位大学教授正在教一群??小学生。这对双方来说都是一场灾难。这些语言的创造者,或者说文档的作者,无疑都是一些大神。在编写语言手册的过程中,他们只能尽力准确、有条理地向您展示该语言的全貌。然而,这种全面的展示对于没有任何指导的初学者来说并不完全是一件好事。简单的说,你会在一些小事上浪费太多的时间,而一些大的概念却没有完全理解。关于看真实代码当你觉得文档不能满足你的时候,老手往往会抛给你第二招:看代码。你看到了什么代码?当然不用说了,被业界奉为经典,是GitHub上至少10000星的知名开源项目的代码。当你怀着崇敬的心情打开扔给你的网站,看着屏幕上的代码时,你会问自己三个经典的哲学问题。这是什么?它是怎么做到的?你为什么这样写?也许有些人会因为过度的恐惧而失去学习的信心。那么我们就来看看这些代码到底是个什么鬼,会把新手吓得没自信。大评论说一件事,别笑。初出茅庐的我,对这些穿插在代码中的神秘文字深感困惑。我认为他们对代码进行了某种补充。如此之多以至于我还试验了删除注释将如何影响代码执行。实际上,好的代码会让以后的维护者更方便,但糟糕甚至错误的注释会让人迷惑。语法糖语法糖是个好东西。大大简化了我们的编程过程。高手用语法糖来写代码也不算爽,越厉害的项目东西越多。但对于初学者来说,语法糖隐藏了一些细节并使语法看起来很奇怪。有些代码,如果用标准的语法写,很容易看懂,但如果用语法糖写,就很难让人一下子看懂。初学者常常为了理解这些语法而花费大量的时间,但实际上,这些时间在现阶段是无谓的浪费。你不能理解它,认为它是一件很重要的事情。其实它只是一个精致的小玩意儿,这些代码没有它照样可以工作。并且以你丰富的经验,随时随地都可以使用,而且使用的方法可能会有所不同。代码中的关键点对于一个开源项目,往往50%的代码可能会适配各种运行环境,将系统的API抽象成项目中的通用接口。除非你自己做了类似这部分代码的事情,否则对初学者来说参考价值不大。更有什者,为了适应一些系统奇特的运行环境,开发者往往脑洞大开,创造出??一些非常奇特的代码。这些外道充满了玄学和不确定性,初学者读多了可能会出现武侠小说失误的结果:走火入魔。剩下20%的代码是项目内部的接口抽象和定义,最后30%真的很值得一看。它们往往分散在各个地方,但它们是为一个核心服务而设计的。初学者要认识这些代码太难了。野文档这是我自己的定义,我把所有非官方的开发文档都称为野文档。初学者在搜索引擎中会得到很多相关的文档,其中很多都是学习经验,很多人写这篇文章的时候可能并不比你高多少。这就造成了这些文件的层次参差不齐,侧重点也不一样。也许你花了很多时间去理解一个错误的或过时的知识。而大多数号称教你入门的文章,可能只是告诉你如何搭建运行环境。作者本人可能并不了解这种语言的本质和重点。而如果你遇到一篇被奉为经典的好入门文章,那你真的要感谢作者。因为这说明作者是下了很多深思熟虑的,这四个字说起来容易,做起来却需要相当的知识量。比较好的做法在学习这么多语言的过程中,我也总结了一些比较好的学习方法。我觉得看代码是很有必要的,因为死记硬背语法是掌握不了语言的。但是看一些大型项目代码的缺点,我上面也说了,怎么办?建议新手可以看看官方的Step-By-Step代码学习。这种代码一般可以在官方文档页面找到。它具有以下优点:由浅入深,层次丰富。这些代码之后通常是深入的文档,慢慢展开语法细节。不会一下子给你看太多,让你切不入正题。每一段代码都会有一个关键的特性来表达,所以一目了然。有质量保证。这些代码的编写一般都是官方人员负责,可以在很大程度上保证准确性。及时更新。我们知道很多语言的细节会随着版本升级而变化,网上很多第三方文档往往缺乏维护,但是官方文档一般都是同步更新的。我建议大家边看手册边看代码,这样印象会更深刻。亲眼所见,我觉得我们应该尽快找到一些好的例子来实践,而不需要一上来就搞更复杂的大型项目。哪里可以找到这种练手的项目?很多语言的教程部分就是为了这个目的。一些成熟的甚至提供在线教学体验环境。你应该好好利用它。最后写的讨论学习方法的文章引发了我一些额外的想法。我经常在开发者社区看到老手和新手大打出手。写这篇文章的过程也让我理性地思考了这些矛盾产生的原因。一般来说,是一些信息不对称造成的。老手认为这个问题根本不是问题。在网上查了一大堆,他不想多说,甚至冷笑。但是初学者觉得这些信息根本看不懂,老手的嘲讽就是一种屈辱。我觉得打破这种不对称需要双方都有耐心,而且这种耐心是相互的,付出的越多,得到的就越多。而最先迈出这一步给予的应该是初学者,毕竟按道理说你让别人做事。而你需要付出的是把你的问题说清楚,说出你的思考过程,并附上必要的信息。好学的人不会惹人讨厌,但前提是你得用不惹人厌的姿态表现出来。
