聊聊自学编程

背景

经常某乎都会推送如何学习编程?如何零基础学习Java?等之类的问题,虽然我是科班出生,本科学习的是网络工程,硕士读的是软件工程,但是大部分内容都是自学的,面对大学老师有口无心的念着PPT和超大300人的教室,很早就醒悟过来自学才是王道,而且就算在古代老师也就是起到一个引导作用,更多还是要靠自己领悟,所谓师傅领进门,修行在个人大抵就是如此,这可能就是高中和大学最大的不同了吧,不会再有人追着你学习了。这一路走来磕磕绊绊,马上就要入职某厂了,也算不负当初,就此机会回望来路,聊一聊我对编程的看法,希望曾经迷茫的我走过的路可以帮助到正在迷茫的你。

编程是一棵树

现在的我看来编程的世界是一棵树,它包含了根和主干、分支和树叶。绝大多数人进入编程的世界是从一个个分枝开始的,这里的分支就是各种编程语言,每种语言就如同不同的分支一样有着各自适用的领域,例如Python适合于爬虫、数据分析等领域,C++/C则是用于一些高性能编程的场景,JAVA则在服务端开发和Android客户端开发领域扮演着重要角色。对于第一个编程语言的选择根据实际的情况也不相同,自学编程大多可以分为两类,一类是毕业没多久想转行或者即将毕业,这种情况会面对较大的就业压力,时间比较短,但是目标明确。这一类推荐Java就业面广,岗位多,从客户端到后端,再到大数据分析都有用武之地。另一类是刚高中毕业还没上大学,或者刚上大学,有很充裕的时间去打基础。这一类推荐C或C++,为什么推荐C/C++呢?那是因为我觉得在C/C++身上最能体现出编程的魅力和思想,初代程序员智慧的结晶,历经四十年经久不衰,那它身上可以感觉到岁月的质感,以及后来这些语言或多或少都可以找到C语言的影子。


其实对于语言的学习都差不多,尤其当你学会一门语言之后再去学习一门新的语言可以很快入门。这是因为绝大多数编程语言的内容都大同小异,比如基本数据类型、控制结构和函数等基本变化不大。只有很小一部分是该语言所特有,可能也正是这一小部分的差异决定了它的应用场景。

第一门编程语言

对于自己第一门编程语言的学习推荐结合视频和书一起看,视频可能会讲得更仔细和形象,只看书会很枯燥容易放弃,至于视频B站上就有很多编程语言的入门视频,有些从环境配置到IDE的下载都介绍的很仔细,可以轻松入门。这一阶段没有什么技巧,唯一需要做的就是坚持,然后就是享受编程的快乐,这一点很重要,不然以后你会很痛苦到最后坚持不下去。虽然可能有些人会说这话说的太假太空,但是我还是要说少一点功利,多一点热爱,因为热爱所以坚持,这才能让你在编程的路上走的更远,这也是最最最重要的,可是却被很多人忽略。等你跟着视频学完第一门编程语言,可以说你已经一只脚走进了编程的世界,那么接下来又该如何呢?

王道or霸道

当你学完第一门编程语言将会有两条路,不同的人将会选择不同的道路,第一条路为霸道,何谓霸道?霸者,横扫六合,睥睨天下。如果说编程是一棵树,那么霸道就是从分支走向树叶之路,树叶是什么?树叶就是各种实际场景下的各种框架,与实际工作紧密联系。如果你是学JAVA这时候你就要选择未来的工作方向了,如果你想写后端就去学Spring、Spring Boot等各种后端框架,如果是想写客户端,就去看Android,如果想去做大数据开发就去看Hadoop等。这时候你会非常的需要全球最大的同性交友平台Github,从这上面会有很多开源的项目,找一个你所学内容的项目,下载下来好好看别人的源码,从别人的源码中可以学到很多的东西,比如良好的编程习惯,好的设计提升自己的基本素养。这时候的你可能已经具备了一定的项目能力,这时候就是要准备面试了,牛客网等这些网站看别人的面经,我之前写过一篇实习面试的总结可以参考下。入职过后则就是在项目中学习,在和同事的交流中学习,看一些进阶视频学习,看框架源码学习。

上面说完了霸道,那么何谓王道?王者,内圣外王,就是进一步去修炼内功,如果说编程是一棵树,那么王道就是从分支走向主干和树根之路,那么主干和树根又是什么呢?主干和树根就是数据结构与算法、操作系统和计算机组成原理,所有的语言和框架都是从这些上面生长出来的。春去秋来,严寒酷暑,树叶落了又长,就如同各种框架横空出世,最后黯然离场。最后只有数据结构和算法、操作系统和计算机组成原理经久不衰。那么为什么他们那么重要呢?以数据结构为例,数据结构是语言无关的,是前人对于数据的一种抽象。计算机是用来干什么的?计算机是用来计算的,那么计算的是什么呢?就算的就是数据,数据结构规定了数据在计算机中的存储方式,那为什么衍生出那么多的数据结构呢?是为了应对复杂的应用场景,尽可能快地完成计算任务。例如经常查询数据的情况下,线性表相较于链表能提供更快的查询速度,而在需要删除和增加数据的场景下,链表则比线性表表现更好。由此也可以看出只有学好了这些树根和主干,你才能更好地理解计算机的运行规则,在面对复杂情况时做出最正确的选择。如果整天沉溺于框架之中,那么当框架黯然离场之日,也就是你程序猿35岁职业危机之时。

其实王道也好,霸道也罢,都是学习编程,其最后的结果自然是殊途同归,当时选择的差别只不过是特定场景下侧重不同而已。选择霸道的人,之后也要将数据结构和算法、操作系统和计算机组成原理补上。而选择王道的人就业之前也要很好的学习框架,培养自己的开发能力,才能更好地就业。

“术”与“法”

上面一节我们讲述了如何在不同的情况下去走进编程世界,然后一步步走下去,这就是“术”,针对不同的情况“术”有可能不同。而“法”没有明确的指示,更像圈定一种范围,在范围内可以自由发挥,是一种原则。如果说这种编程技巧是拳脚功夫,那么接下来说的“法”则更像内功心法,练地越久内功越深厚。

热爱编程

这是第一条也是最要的一条,还是那句话,因为热爱,所以坚持,如果你已经选择了这样一条路,何不选择让自己开心点。改变不了世界,那就改变自己。而且只要你真的静下心来试着去了解,你绝对会被编程的魅力所折服。

贵以恒

今天很残酷,明天很残酷,后天很美好。如果下定决心就请坚持到底,其实从小到大道理我们都懂,课前预习,课后复习,难的是坚持。贵以恒,作为成年人你应该更懂得坚持的意义。

纸上得来终觉浅

书上的,视频里的每一道程序都尽可能全部敲出来,运行一遍。不要觉得那么简单肯定会,不,其实你不会,见过太多初学者因为中文字符半天找不出错误,没有自己打出来运行成功就不叫会,切记眼高手低,切记切记。

输出和输入同样重要

最好的学习方式就是教会别人,从开始学习就要注重总结和归纳,可以通过写博客的方式,一边写一边思考,这样能更好的理解问题,而且这也是在构建自己的知识体系,以后方便回顾,如果还能帮到其他人,这不是一件皆大欢喜的事么。

read fucking source code

阅读源码,阅读源码、阅读源码,重要的事情说三遍,无论是项目源码还是框架源码,学习良好的编码习惯,多想想为什么这么写,如果是你你会怎么写,怎么写比较好,有没有运用什么设计模式,阅读源码是提升自己编程技术最快的方式,没有之一。

多与人交流

现在通信如此发达,多与其他人交流,尤其是比你厉害的人,不要闭门造车,可能别人的一句话就会让你茅塞顿开。

营造沉浸式的环境

其实这一条与上一条有重合,给自己营造一个学习编程的环境,就像学英语最好就是在一个说英语的环境中。多看看别人的技术博客比如掘金、CSDN等,开始可能看不懂没关系,要坚持看,有一天你突然发现你能看懂了,说明你就入门了。有问题就直接提出来,一般有时间都会回答,多交流。

最后

有兴趣可以关注公众号QStack,会定期发布一些文章和学习资料。

你可能感兴趣的:(聊聊自学编程)