虽然十多年过去了,但回想起大一时候的光景,仍然历历在目。
由于计算机专业是学校新开的专业,所以老师们也没有多少教学经验,于是我们第一学期就直接开搞 Java 这门编程语言了,教材用的是大名鼎鼎的《Java 编程思想》和《Java 开发宝典》。
由于没有一丁点编程基础,所以上课的时候完全听不懂,看书就像是看天书一般,心里很慌,但也没什么好办法。
和我类似情况的同学还有不少,能在下半学期转到其他专业的都转了;不能转的,就和我一样瞎胡混着。
现在想想,这有点小庆幸呀,要是当时我学习成绩再好点,转了专业,说不定真的后悔一辈子,哈哈哈。
不知道大家有没有类似的经历哈,包括玩游戏耽误课程,最后自暴自弃,甚至有些小伙伴毕业的时候毕业证都没能顺利拿到,特别耽误事。
作为“侥幸”走出来的“过来人”,给大家提几点个人建议吧。
上高中的时候,老师天天给我们灌输这样一种理念:“同学们,好好学呀,等你们上了大学就可以彻底放松了,那时候再也没有人管你们,想怎么浪随你们的便。”
实际情况呢,如果大学真的彻底放纵了,之前多少年的努力都可能化为乌有。
之前就有几个小伙伴给我倾诉心声,说自己大学没有好好学,毕业后找不到工作,又害怕进培训班被坑,后悔的要命。
确实呀,大学同样需要自律。我们班就有这么三四个同学,比如说我提到的石磊同学,他上大学的时候就有自己的规划,所以编程功底一直都很好。
还有一个叫海洋的同学,现在在苏州,已经做到技术总监的位置。大学的时候,他经常把自己锁在机房,独自学习编程。
我呢,经常是拿着笔记本电脑打单机游戏,日子过得一塌糊涂。
这里叮嘱大家一句哈,大学千万不要贪图享乐,每个学期都应该给自己提前规划好,比如说要刷撒币算法题,要学习数据结构,要吃透 CSAPP。
要像一块海绵一样,疯狂地吸收知识,也只有这样,才能找到满意的工作。
可以少参加一些社群,多泡泡图书馆,多读一些计算机经典书籍,比如说《代码整洁之道》、《浪潮之巅》等等,还有各种黑皮书。
我是大二下半学期才开始意识到危机的,因为当时汇编和计算机网络都挂科了。再这么下去,拿毕业证都成问题,这简直对我打击太大了。
于是就下定决心,一定要弥补一下。
当时也没有很好的学习路线,网上的资源也没有现在这么丰富,手头上有的一份视频资料就是李兴华老师的讲课视频。讲 Java 的,很激情。
我去,刚刚去搜了一下,竟然还能搜得到李老师讲课的视频!关键是,智能ABC输入法还在!
一开始,还是挺难的,因为基础太差,很多听不懂。没办法,我只好一遍听不懂,就再听一遍,前前后后一套视频看了有三遍吧。
当然了,编程是看不会的,也听不会的,只能练,我不仅照抄李老师的代码,自己还把谷歌拼音输入法给卸载了,切换成了智能 ABC。以至于我现在打字仍然是最多只敲两个字,除非是成语。
我是先看李老师在讲义上的代码,然后暂停,自己去理解,理解不了就去背,然后脑子里有点东西的时候就下手去敲。卡壳的时候,就重复之前的动作,直到代码的完整逻辑全部都吸收到了脑子里。
两个月时间过去后,就有了点编程基础,然后就尝试自己主动去修修改改,看是不是还能跑的通。
等到大三的时候,也许是努力得到了老天的眷顾,就拿到了一家外企的实习offer。
我在实习的时候,有主动去看 C++ 的书,就是那本《C++ Primer》,第四版的,现在那本书以及习题册还在家里摆着,算是陪伴了快十年的时间了吧。
没有丢掉它,因为前辈有给我说,以后有机会,还是要学习一下 C++ 的,这门编程语言实在是太经典了。前辈的话,让我对 C++ 充满敬畏。
但时间过去了这么多年,仍然没有机会和时间去学习 C++,因为一入 Java 深似海啊!
前几天我画了一张思维导图,重新梳理了 Java 后端工程师的学习路线图(参照自我的偶像程序羊),发现 Java 这个海是真的大呀~
之前有小伙伴问我,学 Java 太难了,要不要转前端?
有一说一,经过这么多年的发展,其实前端要学习的东西也不少!
我们一定要认清现实,学编程并非一朝一夕的事情。不能说 Java 难就转前端,前端难就转测试,到最后可能什么都没学好。
大二下半学期认真补了一把 Java 后,虽然时间短,很多东西只学到了皮毛,比如说并发编程、Java 虚拟机,但经过这半年的刻苦努力,确实入门了。
有了这个基础,实习的时候虽然做的都是比较简单的任务,但基本上能独立完成任务了。
能独立完成任务后,整个人的精气神就完全不一样了,学习的欲望和动力就有了,整个人经常能进入一种沉浸的状态,疯狂地吸收,人也越来越自信,之前的那种颓丧的感觉终于一扫而光了。
虽然我们学习的是计算机科学与技术,要学习计算机组成原理、操作系统、数据结构与算法,但大多数情况下,我们还是应该把编程语言给学好了,只有这件事做好了,你才能在学习编程的这条道路上走得更远。
所以大家在大一的时候尽量就确认好自己要学习哪一门编程语言,尽量不要来回切换,虽然编程思想是相通的,但语法上的切换仍然是需要花费时间和精力的。
我的建议是,大一上半学期尽量选择 C 语言来打基础,有了 C 语言作为基础,大一下半学期就可以无缝切换到 Java 语言上来。
如果真的很有天赋,在学完 C 语言后可以尝试实现一个自己的编程语言,可以参照下面这个项目路线,一个 1000 行左右代码的简单 Lisp:
https://www.shiyanlou.com/courses/670
当然了,如果遇到困难,比如说 C 语言的指针实在是吃不透,也没关系的,完全可以直接跳过,开搞 Java。
Java 语言的好处就不用我多吹了,我只说一点,Java 后端开发岗的薪资是真的挺香的,另外就是工作岗位是真的挺多的。
卷并快乐着~
选择 Java,就意味着工作岗位就稳了,这是最实际的考虑。
零基础学习 Java 的话,首推二哥连载的《教妹学Java》专栏,风趣幽默,通俗易懂:
https://github.com/itwanger/jmx-java
通俗易懂,风趣幽默,已更新到第 51 篇,喜欢这个专栏的可以帮二哥多多宣传一下,GitHub 上虽然只有 99 个 star,但二哥有信心把它推到 1000 个 star,嘿嘿嘿。
(强烈暗示了哈)
学习从来无捷径,循序渐进登高峰。
很长一段时间内,我都是一名偏应用型的选手,就是公司给我安排的任务,我就是能解决(哈哈,主要靠搜索引擎),但是要我讲理论知识,真的是抓瞎。
一般来说,学编程的人分两种。
一种从理论基础开始;一种从应用实战开始。
大学科班一般走的是第一种,培训班出身或者自学的,一般走的是第二种。
这两种学习方式我认为都没有问题,没有孰轻孰重。
因为每个人的潜力不同,只要是奔着一个目的(把编程学好)去的,都没有捷径,必须得身经百战,才能成为一名合格的工程师。
唯一我认为可以投机取巧的一点就是,趁早搞清楚自己要去哪一家公司,要应聘哪一个岗位。
去招聘网站上,去公司主页上,去校园信息网上,找到岗位职责和技能清单。比如京东上的 Java 高级工程师。
大学阶段,尽量不要把精力放到新技术和新框架上,不要说 RabbitMQ 很火,就去学 RabbitMQ,不要说 Kafka 很火,就去学 Kafka,而是要有的放矢。
你想要去的岗位要求什么,就去学什么,那些新技术和新框架,完全可以放到工作以后,有需要的时候再去学,把有限的时间投放到最能表现出你个人价值的地方。
学习,一定要选一门好的教程,无论是一本书,还是一个视频,还是在线的网课。如果不知道怎么选,就听二哥的,保准靠谱。
选对了,就可以少走很多弯路。
有一说一,如果我大一的时候就看的是李兴华老师的视频课程,而不是跟着学校老师走,也许我就不会在大一的时候对编程失去了兴趣。
我的学习建议是,大一上半学期从 C 语言开始,大一下半学期从 Java 语言开始,而不是一上来就把重心放到操作系统、计算机网络、计算机组成原理这些课上,因为如果兴趣没有培养起来的话,可能就直接被劝退了。
计算机专业的课,并没有想象中那么简单。
我们需要先培养兴趣,比如说学了 C 语言,学了 Java 语言,做个小游戏,做个计算器,做个聊天室、做个在线商城、做个图书管理系统;等有了一定的编程基础后,大二的时候,就可以配合数据结构与算法、计算机组成原理这些基础课开始学,把自己打造成一名“六边形”战士。
从大一开始,就按照招聘要求上的来,等到校招的时候,基本上你就超过了 95% 以上的同学了。
不付出比他人更努力的代价,是不可能脱颖而出的。
顺势而为,跟着学习欲望走,不要轻易中断,一旦你进入沉浸式的学习状态中,就可以在很短的时间内取得令人刮目相看的成绩。