在你学习编程的过程中,是否有过以下经历,或正在面临类似的局面:
- 网上找了很多资料,不知道从哪里看起
- 买了本书,过了很久也没有看完第一章
- 开始还能跟着写几行代码,后来突然就看不懂了
- 也看了些教程和视频,似乎明白了,但还是没法自己写代码
- 入门了很多次,每次过两个月就又全忘了
对于初学者,尤其是自学者,太多问题可能成为你编程之路上的坎,一不小心就从入门到放弃了。
我在知乎上有个超过万赞的回答:你是如何自学 Python 的?
(https://www.zhihu.com/question/20702054/answer/19022301没点过赞的赶紧去点个赞支持一下)回答里面分享了零基础自学 Python 的一些经验。在原答案的基础上,今天再展开来谈一谈。
你需要一个明确的学习目标
很多人会说,我有目标啊,就是要学会编程,然后还要找份高薪的程序员工作。这是一种目标,但不是明确的、具体的、可执行的学习目标。这就好比说“我要幸福”、“我要做自己想做的事”但没有具体标准一样,对你的行动没有任何指导意义。
你要学编程,是为了去写一个自动脚本抢票抢优惠券,还是平常处理大量文件时候可以自动化?是为了验证你股票上的交易策略是否可靠,还是做一个网页推广自己的品牌?如果你的目标是为了找工作,那是想做开发游戏还是桌面软件,是数据处理还是网站,前端还是后端?编程是一个很广泛的概念,明确你的目的,学习时才能有方向,也更能坚持下去。
也许有不少人觉得,我也不清楚,只是想多学个技能,总归会有好处吧。而且我都还没学呢,怎么知道之后要做什么?这个出发点可以理解,但我仍然建议:必须给自己定一个小目标。哪怕你开脑洞随便想一个需求也是好的。不然这种先学了再说的状态很难让你坚持下去。
你不必担心定错了目标就走上了弯路,它总比没有目标要好多了。它只是你学习初期的一个里程碑,等你能顺利完成它,后面还有更多的目标供你选择。
先建立整体的认知
在软件开发领域有这样一句话:
过早的优化是万恶之源。
在编程学习里同样有效。很多人会追求某种一步到位的终极路线,表现出来就是:
- 希望别人推荐一套最佳教程
- 先理论后实践
- 钻入细节的牛角尖
似乎看起来没什么不对,明确路线、打好基础、按部就班,很符合一贯的教育理念啊。就好像你执意要优化你的代码一样,如果我说你这么做是错的,倒显得我有问题。
但事情是分时机的,正确的事情在不合适的时间去做,就会导致错误的结果。过早地陷入局部细节,追求理论基础,很容易让初学者困惑,以至于在某个点上卡壳,无法继续学习下去。浅显易懂和专业性强本来就是很难调和的两个维度,很多教程之所以优秀,是因为它内容体系完善,但对于你来说真的合适吗?
对于早期学习者,尤其是非专业的自学者来说,囫囵吞枣、不求甚解才是更合理的打开方式。
借用网上的这张图,编程与之很类似。如果说图上的点是编程相关的各种概念和技术,学习的过程就好比绘制这张图:你通过学习,了解了这些技能点,并将其连接起来。
一种绘制方法就是先画好一个点的细节,再从这个点出发精确画出通往下一个点的线,依次一个个画下去。这是种看似稳妥,实际上却低效且很容易出错的方式。更合理的方法是:先确定纸上点的大体分布,画出他们的轮廓,然后画好关键位置上的点,连接关键点,之后再逐步完善分支和细节。
学习编程是一个反复迂回、不断迭代的过程,而不是一路到底的单行道。
在刚接触编程的时候,你根本无须在意太多细节,而是更应该对编程有个直观的印象,知道技术能够实现什么,体会编程的乐趣。这和上一点是相辅相成的:当你有了一个目标,就可以去了解达到目标需要哪些知识点、怎样的学习路径,以此来确立自己要学习的内容;而当你对编程的有一个整体的认知,又会更清楚自己学了编程可以做什么,让自己的目标更明确。
选择合适的起点和路线
在有了明确的目标,建立了整体的认知之后,接下来的事情就很自然了:选择一个合适你的起点,朝着通往目标的方向,开始你的学习,点亮技能图谱上的点,并将其连接起来。否则,盲目地从一个不恰当的地方开始,比如选了一本起点较高的书,或是上手就去折腾某个框架,就会事倍功半,效率很低,甚至导致放弃。所谓“欲速则不达”,就是这个道理。
如果你做了上一点,有些基本的整体认知,自然就会明白那些“21天精通XX”、“两个月成为数据分析师”的宣传语有多荒唐。
以上三点,通俗来说就是,你要弄清楚:
- 学了干嘛
- 学哪些内容
- 从哪学起
你去随便找一款目前市面上流行的手机游戏,会发现它们的新手引导也是类似的套路:
- 向你说明游戏的胜利条件,引导你取得一场胜利(明确目标)
- 让你体验一套高级别高配置的阵容(整体的认知)
- 指导你游戏基本操作和初期的升级(起点和路线)
这些游戏经过精心设计,力求让玩家成瘾。对于学习也是如此,让自己尽快“上瘾”,才能深入下去。
以上只是学习编程的一个开端,针对上手之后的建议,我还有几点重要提示,会在接下来的文章中继续分享。关于学习编程的经验,欢迎大家留言讨论。