01、从循规蹈矩到自寻出路
几年前,当我决心从零开始学凯发游戏入口官网的时候,我制定了一个「每天编程1小时」的计划。
和大多数人一样,我想系统的、有体系的去学习,跟着教程从基础学起。那时候还在印象笔记建了一个笔记本叫《每天编程1小时》,收集一些好的教程,根据知识点试着去列一套成体系的学习路径。
但是开始跟着教程学的时候,问题来了。看了几章之后,突然就会出现看不懂的概念,知识就断层了,就跟上数学课捡了根笔之后发现后面的就听不懂了,但我也没错过什么啊。我又试着跟着示例代码敲,敲完也不知道这段代码是怎么运作的,自己只要一拓展就会出错,后来敲烦了就直接复制粘贴,感觉学的特别迷茫。
实在学不下去的时候,就换一本教程,基本都是从第一章开始觉得会了,但实际上又不知道学的这个要怎么去使,这种感觉就一直在我的脑子里嗡嗡的转。到后来那一个概念我都看了六遍了,谁讲都那样,但还是不会使。
这时候开始对系统学习的方法有点怀疑了,大家都说要从底层学起、看大量书单,但会不会这种系统学习的方式不适合我这个非科班出身的新手?
毕竟,我已经没有4年时间来学编程了啊,我每天只有1小时能用来学习,再这样继续看各种琐碎的语法细节,我就要失去耐心了。
我想,不如先写点小项目练练手。于是我开始从一些简单的程序写起,写一个汇率转换的公式、写一个随机生成姓名的小脚本、写一个把桌面文件自动归类的小脚本、写一个煎蛋的小爬虫。
所以,开始动手写练手项目,是我学习编程的一个重大转折点,让我开始把编程用起来了。
02、从报错恐惧症到巧解难题
迈过第一个坎之后,我开始尝试一些更大的项目,试着用 django 框架搭建一个网站,结果很受挫。敲了代码之后,不光没运行,结果还特么报错,这么来回几次之后,真的有种想要砸电脑的感觉。
有一次一个报错卡了好几天都没解决,我觉得这样下去不行了,于是找了一个国外的 code mentor 去有偿请教他,我们 skype 讨论了一个小时,最后虽然解决了,但那是用他的思路去实现的,而我期望的是沿着我的思路去解决这个问题。
经历过这次求助之后,我发现,如果我不能清楚准确的描述问题,我就没办法解决这个问题。而问题一旦被清楚准确的描述了,也就变得很容易解决了。
探索了一段时间之后,我甚至形成了一个自己的解决问题方法论:
▍第一步:提出假设
假设阶段是最重要的,如果你对一个事情没有假设,说明你没有思考。有时候之所以会痛苦,就是因为发现事实和你认为最正确的假设是不一样的。
在假设阶段,我会从我的角度对这个问题做几个推断。报了一个错之后,我脑子里会有若干个假设,是环境错误导致的,还是语法错误导致的,还是网站的什么问题导致的?
▍第二步:搜索与修正
在这个阶段,我把所有假设转换成不同的形式进行搜索。拆分假设,重组语言,领域分类,转换形态…用这些方法挨着个搜索一圈,会排除掉一些东西,但如果还是不行,我会往回退一步,搜一下我做的这个事情有没有人在做,或者找一个相关视频跟着敲。这样下来,几乎没有什么问题是解决不了的。
通过这样大量信息的检索与对比之后,往往我会认识到自己思路上的一些根本性错误,有一些假设是不成立的。
在初学时会犯很多这种假设上的错误,我通过几轮会修正自己的常识,等到稳固了之后,再在常识上进行一些创新。
▍第三步:回归问题
在经历了前两个阶段之后这时候问题本身就已经变得清晰了很多,这时候只需要做的就是,将你认为最有信心的凯发游戏入口官网的解决方案大胆的实践。如果成功那么问题就迎刃而解,如果不幸失败,那就洗把脸振作一下,重新回到第一步。
在反复经历这些阶段之后,我发现在解决新问题的时候,可以进行一个准确的假设了,因为我已经积累了足够多的编程常识。后来读到《解决问题心理学》这本书,发现里面提出的方法和我自己总结的还挺像的,有一种欣慰的感觉,知道了自己解决问题的方法是经过科学理论验证的。
03、成长的唯一办法就是写更多代码
虽然能做的事情比以前多了,但有些时候总会有一种不安、甚至是自卑感。就像是拼好了几大块拼图,却没有把这些都连起来拼成一个完整的知识网络。于是就想,是不是还是应该系统学习、从底层老老实实的学起?
于是报名了一个美国的线下培训班,没想到最后签证没过,后来才知道应该选旅游签证,而不是商务签证。
参加培训受阻之后,我打算自己构建一个知识体系,拆分了几百个知识点、构建了一条全面系统的学习路径。但这些知识点都列出来之后,我又有了一种迷茫的感觉,面对着这么浩大的任务不知道该怎么进行下去。那段时间感觉很无助、失去了方向,每天胡乱找些视频来看。
无意中看到了 gnu 大神、emacs 的作者 richard stallman 的一个演讲视频,他鼓励大家从做中去学,他说,
programming is not a science. programming is a craft. 编程不是一门科学,编程是一门手艺。
听到这句话之后我大受触动,我觉得这种级别的大神都这么确凿的认为,除了动手做没其他办法学编程,那我已经没啥好辩驳的了。
于是我又回到了最初的项目驱动的学习方式,任由自己去折腾一些感兴趣的项目,写点自己工作用得上的插件,尝试用最近流行的库做点东西。
有一次试用 micro-django 那个库,怎么弄都运行不成功,我就急了,就去看看他的源码是怎么调用 django 那个接口的,发现丫还有一组参数没传进去,我改了下他的源码,然后就成功了。这是我第一次看源码,实际上他的源码也就200多行,读起来挺轻松的,我能理解他的思路,也能找到问题所在,还挺有成就感的。
从那时候起,我就有了看源码的习惯。在阅读别人代码的过程中,我看到了更多的可能性。书里或者教程里教的知识,我并不清楚怎么在实际项目中运用。但在源码中能看到不同人以不同形式去解决同一个问题,有的简单有的复杂、有的长有的短,这让我大开眼界。
我觉得对于技术上的学习让我知道了技术的可能性并抱有警惕之心,在最关键的时刻派上用场。尤其是创业的时候,更需要在无路可走的情况下,找到凯发游戏入口官网的解决方案。
刚开始学编程的时候,以为看完大佬给开的书单就是技术圈的人生赢家了。但后来发现,选择了学习编程,就是选择了持续自学。隔段时间就会出现一些新技术、新框架刷新我的眼界。
最后,对于自学能力相对差的同学来说,如果觉得自个儿学习累,想找些引路人,报名it培训班也是一个不错的选择。