很多业余编程者,学编程的方式不对。
我本人是个业余编程爱好者,自学过Java、C#、VB,等等。
我虽然水平不高、学习程度不深,但正因为如此,我对编程技术的高深莫测,才有深刻的理解,对初学者的迷茫和无助,才有切身的体会。
我今天就谈一谈,究竟什么方法最适合上班族纯小白入门编程。
(当然,你学编程如果是为了找工作,那另当别论,不用看这篇文章。我分享的心得只针对学编程为了提升个人能力、解决当前工作问题的学习者。)
我先给出我的答案:
业余选手入门学习编程的正确方法,是端正态度,找对目标,把编程当成开车来学,千万别把编程当成修车和造车来学。
我们只要把学编程当成学开车,一切就都豁然开朗。
因为学编程和学开车,作为一项应用技能是高度类似的。
既然学编程和学开车高度类似,我们不妨先回忆一下,我们当年是怎么学开车的?
我讲讲我的学开车经历,权当抛砖引玉:
第一步,先熬18年,等年满18岁有资格考驾照。18岁生日那天,管家里要1600元钱去驾校报名。
报完名之后,老师会给你发张练习表,上面有很详细的学习步骤。我由于报的是“提高班”,还给我发了一本教材,教材名字忘记了。
正式学习前,驾校报名老师会给你讲解了一下大概的学习计划,签一份合同,并给你指定一名陪练。
下面是正式学习过程:
第一天,了解驾驶室构造,认油门和离合器,然后直接就进教练车,闭火拿教练车实操,练习手脚眼配合,
第二天,复习前一天的知识,熟练的话,就开始在院子里练习车辆启停。
然后开始慢慢的上路转圈练习,教练不停的提示你、纠正你。
然后上公路,再往后上高速路,总之就是不断的练习上路、练习入库,不断地磨炼驾驶员的技术和胆量。
最后等驾驶能力慢慢培养出来并且熟练之后,参加考试。
我学车比较早,我当时的学习路径就是这个,现在可能有更多的要求。
当然想要取得驾照,还需要通过理论考试,100道题会90道算及格。
我当年背交规背了好几天,但是说句实在话,除了红灯停绿灯行、礼让行人之外,其余的交通规则我基本都忘了,尤其是扣多少分那部分,我十几年驾龄了,也没搞清楚什么情况扣3分、什么时候扣2分。
最终,不出意外的,我也就这样波澜不惊的成为一名有驾照的合法司机。
这段经历乏善可陈,但我要强调的重点内容是:驾校培训驾驶员的体系非常的简单且高效~非常值得编程学习者思考借鉴~
你发现没有,去驾校学习开车,学会驾驶并通过考试拿到驾照的比例是90%以上。至少在我的朋友圈子里,同龄人不会开车的,我还真没遇见几个。
我可以负责任地讲,去驾校学习开车,是一件成功率极高、学习结果非常有保障的事情。
很多人一定要说:因为汽车驾驶简单嘛~
也许是吧,但是再简单,你也不可能生下来就会开车,没有教练跟着,几乎没有哪个正常人,第一天摸车就敢自己开车上路。
因此开车是一定需要学习和训练的,那么为什么学开车的效果这么好呢?这要从主流的汽车驾校培养体系说起。
我们回顾一下我们学习汽车驾驶的历史,我发现在驾校学开车的过程有3个特点:
首先,学开车高度重视动手能力
当然也包括动脚、动眼睛的能力,理论知识聊胜于无。
你理论学得再多再花,上不了路白搭。给我发的教材,除了考理论课前突击学了一下,里面说的什么,我早早就忘记了。
我没听说哪个人去驾校目的是混个什么学分、了解一下汽车构成之类的,背考题什么的。
你理论背的再滚瓜烂熟,坡道起步溜了车,教练也得骂你。
甭管你是博士还是本科,在驾校一视同仁,动手能力强者为王。一个清华博士不会因为自己是博士,就比别人学得快,或者自认为比别人学得快。
还有值得编程圈子思考的是:学汽车驾驶更没有一些奇奇怪怪的鄙视链,比如C2看不起C1,B2看不起C1什么的。
第二,学开车目的性特别强。
驾校必须得让你通过考试,你自己也得敢单独上路不用人陪,而且得具备足够的胆量和技术,才敢在北京这种城市上路驾驶。
去驾校的目的就是多快好省的拿到驾照,能够驾驶汽车上路。没有其余的目的。
你看这种学习的目的性多强、多接地气:我能自己开上路还能开回来,考驾照能通过。
目的性强、学习接地气还有一个好处,那就是学了之后不会忘。
我从来没听说身边哪个人,因为三年没摸过车,就不会开车了。
因为在驾校学的东西,你动手重复了很多次,已经深深扎根于你的小脑,形成了回路闭环,导致你忘不掉。
我不由得回想起报名时老师发的那本破教材,里面讲的东西我全忘记了,但是怎么启停挂档,我真是从来没忘记过。哪怕是十几年没开过手动档车,手动挡还是没忘记怎么开。
第三,驾校不玩虚的、循序渐进。
驾校学习,特别讲究流程和方法。
开车都是先闭火练习油门和离合,然后开火练习启停,然后慢慢上小路、上大路、最后上高速路。
然后再练习高速公路缴费不用下车。
开车的学习方法也是足够贴心,一环套一环,没有哪个教练第一天就让你上高速公路,都是慢慢来。
上一步不熟练,教练会让你反复练习,不会贸然让你进入下一步更难的训练。
你发现没有,驾校学习流程,简直就是教育培训的模板流程,有木有,真正体现了“没有笨学生、只有笨老师”的有教无类的教育终极理念。
你仔细想想,你学开车的过程,是不是一段值得回忆的美好时光。
很少有哪门学科像汽车驾驶一样,学习过程非常平和、瓜熟蒂落的感觉。
而且很多初学开车的人,还特别喜欢开车,因为很有乐趣。
这种乐趣想必很多人都有切身体会。学开车,除了教练有的凶一点,绝大多数人能够实实在在的感受到自己的进步,感受自己一点一滴的成长,每天每小时都在给你不断的正反馈。
说到这里,我们不妨总结一下驾校教学的成功经验,其实没有什么特殊的,无非是一些很基础的教育规律:
- 循序渐进、重视基础。
- 强调动手、弱化理论
3.实操为王、不断训练
讲完了学习开车的经历,我们现在切入正题:
业余选手怎么学习编程
跟学习开车相比,学习编程的过程就不那么美妙,至少对我来说是这样的。
很多人学编程目的性不强,导致学习路径有大问题,学习没有目的性,自然不能主动去思考、去试图掌握正确的学习方法。
于是越学越迷茫、越学越痛苦。
我不禁要问自己:学习编程怎么就变成一件这么痛苦、让人摸不到头脑的一件事情呢?
别跟我杠,如果你不以找工作为目的学习编程,请问有多少业余学习者能够独立完成力扣算法50道题?
别说独立完成力扣题了,恐怕很多人连用窗体自动生成HelloWorld都难以做到,就半途而废了。
别跟我杠,控制台写HelloWorld还真不算难,但窗体生成HelloWorld能妥妥卡住一大片人。
因为业余选手没有一个驾校似的教育体系让你去学习,如果完全靠个人摸索,成本很高、代价很大。
编程学习还非常的个人化,适合自己的学习路径,往往最终要靠自己摸索,还真不是钱能解决的事儿,可能你还没摸到门,耐心和兴趣就已经消磨殆尽。
很多人学了很久,恐怕连合适自己的IDE都找不到。
但我要强调一点:学习编程其实路径并不复杂,尤其是入门这一块,编程本身是一个入门容易学精难的技术,入门还真没多难。
那么为什么很多人编程学了一堆忘了一堆,我觉得最大的问题在于编程没有学以致用、没有尽早形成解决问题的习惯和能力。
拿前面讲的开车类比一下,就是你进了驾校学习,但是从来没能上过路。。只会背驾校老师发给你的那本破教程。
我们再回顾一下我们学习开车的成功经验,看看这些经验能不能套在编程上?
我学习编程的过程,这些成功经验一条都不沾:
- 循序渐进、重视基础。
多少人是从C语言C++开始学习编程的请举手?把手放下。
宇哥这种编程烂人,特别佩服能用C语言入门编程的神人。你们的起点太高了,高到宇哥都自愧不如的程度。
我再强调一遍,循序渐进、循序渐进,什么叫循序?就是简单的先做、难的后做,顺序不能乱,什么叫渐进?就是简单的先做、难的后做,一步一步来。
C语言的地位,不是本文讨论的重点,本文重点是讨论编程二傻子怎么开始学习编程还不弃坑。
我强调一下,C语言是门修车和造车的技能,很重要,但一定要放在入门之后学习。
新手学习C语言,无异于进了驾校开始学习汽车组成原理,汽车组成原理重不重要?重要,学习有错吗?没错。
但是汽车组成原理这门课,它就是不适合在驾校学习,同意吗?
你恐怕很难不同意。
初学编程找一个新手友好的框架,一定要自带窗体界面的,C#、VB.net都可以,Java没有窗体界面,其实不太适合小白入门编程。QT这种框架,真心也不适合小白。
2.强调动手、弱化理论
编程的目的是解决实际问题,学开车就为了把车开走。
学编程也是一样的,你一定要找寻出一个学习编程的目的来,当然这个目的千奇百怪,但就算你的目的再奇怪,你也要找出一个来。
我学习编程的目的是做自媒体,给我的课程引流。
很多人学习编程的目的奇奇怪怪,我见过大量为了做外贸学Python前端的人,也见过纯为了装逼学习编程的人(我之前也是这个目的)
只有有一个明确的目标,你学习编程才会又快又好。有目标的学习,才会倒逼你不停的寻找解决问题的方法,而不是死磕科目一的理论。
我学习编程的目标很单纯,现在是把200道力扣算法题用VB做出来录成讲课视频,再免费教会2000个人。
请问你学习编程的目的是什么?
3.实操为王、不断训练
为什么大家学完开车就不会忘记?因为开车被教练分解成了无数的步骤,我们经过了很多次的练习,大脑形成了记忆,并且这些分解练习会不断的成功,给我们大脑足够的奖励,会将这种成功的练习方法深深的刻入我们的大脑。
学编程我是经常忘记代码怎么写的,哪怕一些很入门的代码,要用的时候,我是经常大脑一片空白的。
原因无外乎我的基础不扎实,为什么不扎实?
再对比一下学开车,我学习编写代码,没有经过不停的分解训练,也没有哪本教程像驾校一样,把一段代码拆解成简单重复动作让我去深入练习。
更没有一个陪练在我旁边不停的絮絮叨叨、不停地纠正我的错误动作。
我翻阅了绝大多数的编程教材,代码练习都是把一堆代码扔给你让你自己去练,有几个注释都算是良心的了。
这就好比你学开车,副驾驶没坐陪练老师,而是放了一本书。。哪里不会,你停下车自己去翻阅答案。
这种学习方法,有效率才见了鬼。
总而言之,写代码的本质和学开车一样,只要你遵循了自然规律和客观规律,你的效果就会很好,你不遵守规律,效果自然不好。
当然学习编程和学习开车,毕竟还有区别。
区别在于,编程还需要修车和造车,在编程领域,而编程的修车和造车,跟开车的界限往往很模糊。
因为编程这辆破车,是要经常出问题的,你得时不时下来检查一下,哪里又出了Bug报错了~
但这并不妨碍编程入门的目的是要把车开走,哪怕这辆车是你刚造的,你不能把他放那里,你需要上车,测试它的性能。
但是我仍然要强调一点,编程的第一天就要去练习,像学开车一样,不停的练习,不停的试错,把基础代码练明白。做一个闭环的,能看得见摸得着的,属于你的桌面程序。
哪怕你上路磕磕绊绊,但是方法是对的,熟能生巧只是时间问题。
千万不要把科目一当成编程的重点,你的重点永远都是上路。
你回忆一下,你家里囤了多少科目一的教材?而你花在上路练习的时间又有多少?
是不是本末倒置了很久了?兄弟?
对于绝大多数代码从业者来说,开车和修车才是常态,真正的造车,属于一小撮很厉害的人。
可是上来就搞C语言,掌握计算机底层原理,这对于入门小白来说,是不是相当于去驾校学习汽车组成原理?
你仔细琢磨琢磨,是不是这个道理?