我的CSDN和公众号的读者里面有绝大部分都是在校学生,有本科的,也有专科的,我在微信里收到很多读者的提问,大部分问题都跟如何学习编程有关,有换专业自学的、有迷茫不知道如何学习的、有报培训班没啥效果的等等,我能感受到他们的诚意和焦虑,所以我觉得我很有必要写下这篇文章。
1. 本科的脚踏实地
高考之后填志愿,那时候其实我也不懂,就觉得电子信息工程好像还不错,于是就填了。在大学四年,除了学校学了C语言之外,我没有学习任何第二门编程语言,而且C语言也只是初级的水平。我在大学都干了啥?
我在大一,就决定读研,所以我一直在努力学习,高等数学、线性代数、概率论、大学物理、还有一些数电、模电、信号与系统、通信原理等等专业课。老实说,我非常认真,一部分是因为自己的学习习惯,另一部分也是因为自己要读研,所以我每一步都走的很踏实。在我的同龄人里,执行力和毅力能跟我比的,没几个,这点我不吹牛逼。
大学没少拿奖学金,最起码可以抵消我四年的学费,单片机也玩了不少,51、52到后面的ARM9都玩过,当时还买了好几块板子,写程序跑,那时候对嵌入式还蛮感兴趣的。
但是毕业后,我有点后悔。为什么呢?我没怎么学编程啊!除了会写一些简单的C代码,其他编程技能为零。
2. 研究生的觉悟
考入同济之后,我的专业是电子与通信工程。从研一开始,我很明确我自己想要什么,研究生也是要上课的,基础课、专业课等等。研究生也有课题,需要看各种论文,需要写论文,其实还是蛮忙的。
我研究生对自己的唯一要求就是提升自己的编程技能。一开始我在看C++,语法看完了之后,看了一点基于C++的数据结构和算法。我真正开始决定学Java是在研一下学期,当时在eBay跟一些大佬们聊了蛮多,倒不是学到了什么牛逼的技术,而是开拓了自己的视野,开始有了自己的一些想法。
后来我在实验室里闷头苦学了一年左右,从Java语法基础开始,到集合框架源码(那时候还是基于JDK1.7的)、到网络编程(基础)、到数据结构和算法,学完了这些基础知识后,开始学习Servlet/jsp(现在已经过时了)、再到Spring、Struts2、Hibernate(SSH框架,现在也过时了)、再到Spring、SpringMVC、Mybatis(SSM框架,这个现在还在用)、再到Java并发基础、再到一些组件等等,再到后面我开始学习微服务相关的东东,学习Spring Boot,Spring Cloud等等。这期间,我做了4个项目实战。我是如何自学的?
3. 我是如何自学Java的?
如果要说自学Java,我觉得我有资格说上几句。我一开始看了一个星期左右的书,然后我把书扔在了一边,看不进去啊!我自认为自己的脑袋瓜还算可以,但是我看不进去。这也是初学者的通病,有好多读者也跟我说:武哥,我书也看了,可是感觉还是不会。我TM也是这么过来的,哈哈。
所以我当时看了视频,我看的是毕向东的Java视频,现在已经有更加新的视频了。找一个好视频,从头到尾认认真真跟着学一遍,做好笔记,那也是我开始写博客的开始。为什么要记笔记?为什么要写博客?我在前面一篇文章中也提到了:为什么我在CSDN坚持写了3年多的博客?
人都有个尿性,如果你做一件事情,一直看不到明显的效果,你就会慢慢懈怠,慢慢怀疑自己到底对不对,适不适合。编程也一样,为什么我不建议初学者上来就抱着别人跟你推荐的所谓的经典书籍去啃?什么《Thinking in Java》、《Effective Java》等等,你啃的了吗?你啃不了是对的,否则你就是神了。你啃不了,你就会放弃。我就很讨厌那些贴吧论坛里一上来就给一些初学者推荐很多经典书籍的人,显得自己很博学很牛逼的样子,其实没啥卵用。
包括Java并发、SSH、SSM框架、组件等等,我全部看的视频。当然,一些源码我是自己啃的。当你有了基础,上路了,你再去看书,不仅仅就是看懂看不懂的问题了,那是真正的提升。
但是这些还不够,你学了这些东西不能派上用场。必须要项目实战,网上有很多免费的实战视频,但是我觉得不好,因为那时候我已经有基础了,我知道如何去选择我的学习资源了,我在这还是要强调一点,不要吝啬给自己投资,我当时也买了好几个项目实战视频跟着学习,提升很多实战经验。我在前面一篇文章:同样是程序员,为什么别人比你更优秀?中第一点就提到了这个。
当然了,我这边也有很多优质的视频资源,也许已经大家够用了,不用像我当初那样去花钱了,我那时候自学,就没有遇到像我这样懂得分享的人。所以缺视频资源的读者,可以找我要,我就是单纯的分享,为了帮助更多的朋友。
但是有很多人坚持不下来。我在文章的开头也说了,在同龄人里,执行力和毅力能和我比的没几个,我也是从小白一步步过来的,花了整整一年左右的时间去自学。我做了好几个项目,我敢说我在学校这一年学到的东西,不比别人在外面工作两年的能力差。所以有很多人觉得工作年限长就牛逼,见识多,但是在我看来,这不一定。
我曾经好几个月直接睡实验室里,每天除了看论文,完成导师的任务,其他时间全部用来学习,晚上搞到十一二点,否则一年时间不可能学那么多东西,而且我大部分还写成了博客,要知道,写博客是很花时间的。如果你能像我这样坚持,这样严格要求自己,我不相信学不会一个东西。你就算今天学不会,你一个月之后呢?一个月不行,你一年总行了吧?就像马云爸爸说的:今天很残酷,明天更残酷,后天很美好。但是很多人都坚持不过明天,他永远看不到美好。就像我考研一样,没有坚持付出,哪来的结果?
4. 遇到选择,我如何取舍?
我当初研究生刚毕业,是去了华为,我的岗位就是Java软件开发,结果进去之后做通信了。我就纳闷,我研究生读的是通信,我特地自己自学Java,结果又回到做通信,这就很尴尬了。
所以后来我还是走了,有些读者问我,你为何放弃华为的高薪?我说自己的兴趣不在通信,我有自己的打算,决定从华为离开的,肯定不是为了钱。最起码,我现在过的比在华为好,我相信以后也会。
职场遇到选择的时候,我个人觉得还是要结合自己的兴趣,人生最重要的几年可能就是刚毕业那几年,那几年也在绝大程度上决定我们以后从事的行业,所以在做选择的时候,需要结合自己的兴趣,综合各方面因素权衡好。
5. 总结一下
自学一门技术,首先要会用,要先建立兴趣,再想着去提升,去内化,否则,你坚持不下去。
自学一门技术,要有规划,最起码要知道你接下来要学哪些东西,不能走一步看一步。有了规划就得有计划,有了计划,就得有执行。
学习的过程中,永远不要吝啬投资自己,该花钱就花钱,现在是知识付费时代,像CSDN GitChat达人课、极客时间等,里面一些课程还是挺不错的,还有些培训机构的视频也不错。花钱提升自己,本来就没毛病。
做任何事,离开了坚持二字,那都是扯淡。如果随随便便就能成功的,就能做好的事情,是个人都可以的话,那你也没有什么竞争力。有句话说的好:小聪明不如傻坚持。
不懂就要多问,不管我们是什么样的人,不管问谁,不管别人比自己牛逼或者弱,都得放低自己的姿态,虚心一点。如果哪天我们有点影响力了,那么尽量以一个低姿态去多帮助那些初学者,帮助更多的人,因为我们也是那样过来的,比自己牛逼的人,满大街都是。人,不要膨胀,要懂得韬光养晦。
希望这篇文章能够给那些初学者,或者有自学困惑的人带来一点帮助,也希望我的读者能从我这里获得一些正能量。如果你在学习的过程中,缺少优质的学习资料,可以关注我的微信公众号,我特地准备了很多优质的视频资源给大家。
如果你在学习的道路上遇到了些困惑或者疑问,可以加我微信,也许我能帮助到你。