很多业余编程者,学编程的方式不对。 我本人是个业余编程爱好者,自学过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#、http://VB.net都可以,Java没有窗体界面,其实不太适合小白入门编程。QT这种框架,真心也不适合小白。 2.强调动手、弱化理论 编程的目的是解决实际问题,学开车就为了把车开走。 学编程也是一样的,你一定要找寻出一个学习编程的目的来,当然这个目的千奇百怪,但就算你的目的再奇怪,你也要找出一个来。 我学习编程的目的是做自媒体,给我的课程引流。 很多人学习编程的目的奇奇怪怪,我见过大量为了做外贸学Python前端的人,也见过纯为了装逼学习编程的人(我之前也是这个目的) 只有有一个明确的目标,你学习编程才会又快又好。有目标的学习,才会倒逼你不停的寻找解决问题的方法,而不是死磕科目一的理论。 我学习编程的目标很单纯,现在是把200道力扣算法题用VB做出来录成讲课视频,再免费教会2000个人。 请问你学习编程的目的是什么? 3.实操为王、不断训练 为什么大家学完开车就不会忘记?因为开车被教练分解成了无数的步骤,我们经过了很多次的练习,大脑形成了记忆,并且这些分解练习会不断的成功,给我们大脑足够的奖励,会将这种成功的练习方法深深的刻入我们的大脑。 学编程我是经常忘记代码怎么写的,哪怕一些很入门的代码,要用的时候,我是经常大脑一片空白的。 原因无外乎我的基础不扎实,为什么不扎实? 再对比一下学开车,我学习编写代码,没有经过不停的分解训练,也没有哪本教程像驾校一样,把一段代码拆解成简单重复动作让我去深入练习。 更没有一个陪练在我旁边不停的絮絮叨叨、不停地纠正我的错误动作。 我翻阅了绝大多数的编程教材,代码练习都是把一堆代码扔给你让你自己去练,有几个注释都算是良心的了。 这就好比你学开车,副驾驶没坐陪练老师,而是放了一本书。。哪里不会,你停下车自己去翻阅答案。 这种学习方法,有效率才见了鬼。 总而言之,写代码的本质和学开车一样,只要你遵循了自然规律和客观规律,你的效果就会很好,你不遵守规律,效果自然不好。 当然学习编程和学习开车,毕竟还有区别。 区别在于,编程还需要修车和造车,在编程领域,而编程的修车和造车,跟开车的界限往往很模糊。 因为编程这辆破车,是要经常出问题的,你得时不时下来检查一下,哪里又出了Bug报错了~ 但这并不妨碍编程入门的目的是要把车开走,哪怕这辆车是你刚造的,你不能把他放那里,你需要上车,测试它的性能。 但是我仍然要强调一点,编程的第一天就要去练习,像学开车一样,不停的练习,不停的试错,把基础代码练明白。做一个闭环的,能看得见摸得着的,属于你的桌面程序。 哪怕你上路磕磕绊绊,但是方法是对的,熟能生巧只是时间问题。 千万不要把科目一当成编程的重点,你的重点永远都是上路。 你回忆一下,你家里囤了多少科目一的教材?而你花在上路练习的时间又有多少? 是不是本末倒置了很久了?兄弟? 对于绝大多数代码从业者来说,开车和修车才是常态,真正的造车,属于一小撮很厉害的人。 可是上来就搞C语言,掌握计算机底层原理,这对于入门小白来说,是不是相当于去驾校学习汽车组成原理? 你仔细琢磨琢磨,是不是这个道理? 我是宇哥,专门研究Access数据库的,全网学习办公软件的女同学,可以说没有不认识我的。
|