作为踩过无数坑,纯自学入门的人,站在新手角度,我认为难点主要有三个:
编程容错率低,容易让新手恐慌。
传统学习路径正反馈太慢,没有多少成就感。
技术更新快,教材容易过期,学习阻力大。
下面展开来说一下。
1.容错率低
任何语言学习初期,新手都会犯错。
但英语这种外语,不会因为一个错误就无法继续学习。你不会主谓一致,也能继续学习定语从句,因为语言的接收方是人类,有自动修正功能。
但编程中,哪怕一个小错误,都可以让你寸步难行,机器可不会自动修正。
我曾经在入门阶段,因为一个错误,整整折腾了将近半年。
当时我按照教程操作,结果出现了错误。根据错误提示,去网上找解决方法,发现解决方法千差万别。
在Stack Overflow(国外的一个编程互助平台)搜索问题,会发现即便是同样的错误,具体情况也差别很多。
对于新手,我只能用最笨的方法:一个个试错。
运气好时,能够试到正解,运气不好,就会引入新错误,进而陷入到“问题—>找方法—>方法带来新问题—>找更新的方法.....”这种恶性循环中。
这个循环进行到第三轮,你已经不知道最初的问题是什么了。
就像上网购物时,看到了下面的推荐商品,一路点下去,就忘记最初要买啥了。
我曾经遇到过一个最奇葩的问题:安装编程语言时,死活都过不去。结果搬家之后,这个问题居然解决了。
原因是:原先的wifi速度太慢。然而并没有人解释过这个可能性。
学习过程中,这种鸡毛蒜皮的小事会把你打败。
所以对于新手来说,如果想要入门,最好找一些步骤比较少的教程,尽量能快速跑通,然后再考虑如何改进。
每多一个步骤,就多了一次出错的地方。
2.反馈太慢
下决心学编程的人,都会有一个感受:学了半天,还是只会打印“Hello World”。
就像背了半天单词,最终还是只能记住“abandon”一样,让人沮丧。
我尝试学习过几种不同的编程语言(JavaScript,Ruby,Python)发现虽然语言不同,但学习的路径都差不多:从变量到函数,从条件到循环。而且,第一课永远是“Hello World”。
基础内容确实要学习,但这类教材最大的问题是:没告诉学生,为啥要学,学了之后能咋用。
我学编程的原因很简单:让计算机帮我搞定一些重复性工作(批量修改文件,爬取网站内容等)
我愿意学习基础内容,但前提是你得跟我说,这和我的需求有什么关系,否则太容易“从入门到放弃”了。
这就好比,我学英语是为了撩妹,你可以让我背单词学语法,但得跟我说这些知识最终是如何应用到我和外国美女聊天上的,不然我真的没有动力啊。
踩过很多坑之后,发现了一本“拯救”我的编程书:《Automate the Boring Stuff with Python》
这本书也讲基础,但里面有几个章节,马上让我知道了,为啥要学习这些,以及我可以如何运用。
学完之后,我就写了个程序,读取所有的word文档,把带有某个关键词的句子摘下来,整理到了一个txt文件中。
如果你和我一样,学了半天还只会打“Hello World”,我推荐这本书。
当然,更好的方法是直接根据自己的需求,在网上寻找特定代码,然后再反过来学习基础。
就好比你想看《哈利波特》的原著,然后边查词典边看,这样起码保证每个单词,你学着都是有用的。
比如我有个需求就是:批量重命名文件。
那我就搜索“python rename file”,相应的简单教程有很多,步骤也简单,我能更快地获得正面反馈。
这样的学习过程,比传统路径更能给我带来成就感,我也就不容易半途而废了。
3.更新太快
技术更新的速度,远比教材更新的快,这也导致了大家只能教一些基础内容,因为到了应用层面,任何一个微小的改动,都会让教材失效。
比如我之前在网上买了一个网课,学习elasticsearch(一个自建的搜索引擎,可以帮你搭建自己的搜索系统)。
结果没多长时间,就发现人家的版本更新,原来的一个模块改名字了。
如果是没有多少经验的新人,就很难根据具体情况“随机应变”,只能按照老版本来运行。
这就好比你想用微信给人家发红包,结果新版本的红包按钮换地方了,你又不知道去哪里找,如果想发就得换成老版本,市面上的教程也都是教你如何在老版本上发红包。
最好的教程,当然是官方的文档(相当于这个技术的说明书)。但多数人因为语言限制(多数都是英语)或者基础薄弱(人家只说重点)或者没有耐心,操作起来还是有困难。
水果有当季的,教材也有它的保质期,能否找到“未过期”的教程,是初学者面临的另一个难题。
从这点来看,比起视频教材,其实文字类的教程可能更好。因为制作和修改的成本都比较低,可以紧随技术的变化。
以上是我作为一个“不忘初心”的入门者能想到的三个编程的难点。
当然,这里的难点针对的还是新手入门阶段,并且不以“成为程序员”为目标,只是想要利用编程,提升工作效率,增加生活品质的朋友。
如果你也想要学习编程, 或者也有类似的“从入门到放弃”的过程,欢迎留言交流。