我2016年硕士毕业后,从一个纯机械学生开始转行做软件开发,其中少不了要自学编程,这其中经历的到现在看来还历历在目。
我曾经写过一些关于我转行做软件开发经历的文章,如果你感兴趣,可以点击这里的链接(我机械的,转行成功了)看一下,这里就不再赘述了。
在链接文章的最后,我写了一段话,很多朋友反馈特别有共鸣:
只有亲历过的人才知道,别听网上谁说转行很容易,那都是骗人的。
除非你能力出众到,面对一个全新的领域,别人一说你就懂。
隔行如隔山,但你是个天才。
否则,没有做好完全的心理准备,没有准备好的退路,没有足够的勇气,不建议贸然转行。
转行是这样,自学编程其实也是一样的,因为都是一个全新的领域,隔行如隔山,历来如此。
这里想谈谈一个问题:自学编程真的难吗,为什么这么难?
这件事其实因人而异,如果把编程难易度用分数来衡量。我见过一个朋友也是转行重新学习编程的,他貌似有点编程的天才体质,很多东西一学就会,一点就通,据他反馈编程的难度估计也就40分。
而我当初自学编程时,感觉难度大概有70分。
而很多人在自学编程时,难度甚至可以达到120分甚至更高,确实因人而异,体质变化量真的非常大。
我不讨论那些天才,以及觉得难度在70分以下的人的感受,只说一说以我的感觉,难度在 70 分以上的感受:难在哪?
第一,难在编程思维的锻炼
很多新手去学编程,可以打印一句 Hello World 就觉的编程好容易,可以把一些书上或课程中给的示例代码复制下来,跑通了也觉的编程好容易。
甚至现在 AI 非常牛,有一些想法让 AI 帮忙做一下编程,代码可以跑通也觉得编程很容易。
实则不然。
真正的编程绝不是以上的场景。真正的编程是你在面对一些真实问题时,可以习惯用编程思维解决问题,但是在日常生活中养成编程思维其实是有些困难的。
先说一个真实的例子。
我带过一个同学学习 python。他因为刚上班,总是弄不清自己的税前工资以及税后到手工资的关系,总觉的到手工资和自己预想的不一样,于是和我讨论之后,他觉得自己写一个程序用来计算自己的到手工资。
因为每个月交的五险一金的比例以及自己的补贴+基本工资都是知道的,他觉得可以根据这个来精确的计算出自己每月的工资。
因为现在的工资计算都是梯度扣税,为了完成这件“大事”,他还把梯度计税制、速算扣除数等概念搞得清清楚楚,然后写完代码之后和我讲了一遍,关键是我也听懂了(顺便也把计税规则了解了一下)。
随后他每个月便用自己写的那段 python 程序来计算自己当月到手工资情况,非常的准确。
上图是他完成的计算扣税的程序部分截图。
这是一个例子,学习编程要学以致用,这样学的才快。当然了,因为编程时他刚接触 python 没多久,出现了很多bug和他无法自己单独实现的情况,好几次是我和他一起解决的问题。
下图是运行他的程序后,打印出来的结果(以每月10000税前收入,共12个月为例):最后 Summary 部分给出了一年五险一金共缴纳了多少,税后到手工资多少等等信息。
这虽然是一个很简单的例子,但是编程完成后,他的成就感非常强。我只能说他的这种编程思维是有的,确实非常棒。
后来这位朋友说:“等 python 学扎实了,希望可以用它来开发一些更复杂的功能,来管理自己的收入支出等等”。
所以,如果你觉得难,你先回想一下,自己是否有过类似的经历,在学习编程过程中用所需的知识解决一些实际用到的问题,以此来锻炼自己的编程思维呢?
第二,难在编程基础的理解
当然你有了编程思维那是第一步。“我整天想着自己开发一个软件来解决我的一些问题,但是不会编写代码也是徒劳”。
想独自完成代码的编写,需要对编程的基础有非常深刻的理解才好。
不论你是学 python/C++/JAVA 还是其他任何语言,很多计算机基础的内容是想通的。
比如内存、数据结构、算法等等,这些可以认为是构建“编程世界”的积木,你只有把这些基础概念掌握透彻,才能用他们搭出非常复杂且精妙的软件程序出来。
我在机械硕士毕业那年,第一次接触编程是 C/C++ 语言。
C/C++语言我认为要比很多高级编程语言难学很多,为什么呢?
因为当我将 C++ 学到我自认非常熟练的程度后,后来工作中会大量用到 python时,很多 python 语法和基础一看就明白了,甚至可以说,没有专门去学过 python,用到了就百度一下。
到目前为止,用 python 开发过很多大型软件(AI编译器前端很多都是 python 代码,比如 TVM)。这都是当初花了大量的时间去学习 C++ 以及计算机体系结构和数据结构以及算法带来的好处。
这里说一下当初自学 C++ 是怎么学的。
我当时C++基础有些薄弱,就买了一个399的C++课程,一个百度资深工程师的录播课。
我每天上下班路上坚持看。
从家里到公司坐地铁刚好半小时,每天上下班看一个小时,坚持了 3 个月,将课程视频来回看了 6 遍,然后到公司一有闲暇时间就练习课程中的技术,3个月下来,C++就真的是很熟练了。
以至于后来的面试,我甚至可以和面试官探讨很多C++模板的底层实现。
一旦学会了C++,再去学python或者用 python 就真的非常容易。
总结下来就是:看不懂很正常,一遍不懂就看两遍,两遍不懂就看三遍,我当时看了六遍,以至于现在都能复述出很多课程中讲师对于一些概念的讲解。
如果你也能做到这一点,我相信你也可以做到对一门编程语言非常熟练。
当然,光看课是不行的,要在看课学习的过程中自己去实战,说白了要自己去写代码。
编程这个行业很奇怪,很多东西你再懂,但是不会写代码也没用,这也是为什么很多公司招人都要有笔试或者编程题的原因。
说句题外话:现在很多大学生或者初学者热衷于考计算机的一些认证证书,以此来强调自己的编程或者计算机水平有多高。
说句冒犯的话:以考证为目的我觉得这样意义不大,除了在考证过程中自己可以学习一些知识以外,如果没有将技能练到手,那些证书并不会对你有太大帮助。如果是评级、评职称那另当别论。
因为很多时候你见到一些真正的编程大佬,他们从来不会吹嘘自己一个有证的程序员,相反只会吹嘘自己开源的那些代码在 github 获得了多少星标。
所以,基础很重要,实战更重要,技能学到手才对呀。
剩下的就是在工作中不断地打磨自己对编程的理解,不断的精进自己的水平。
最后,再回答一下上面那个同学的问题。
编程学习入门确实很难,但说起来其实也没那么难 ——
学习加实践,再加一条坚持。
初学确实很多东西看起来都不懂,但是一点点啃下来之后,就会发现难点正在就一点点消失,这其中最怕的就是半途而废。
码字不易,点个赞呗。
我是一名 AI 攻城狮,如果你也想学习 AI ,欢迎来添加我的私人微信(ddcsggcs),可以咨询也可以围观朋友圈呀。
也欢迎你点击下方关注我的公众号,会有很多好玩的AI技术分享~