共计 2631 个字符,预计需要花费 7 分钟才能阅读完成。
导读 | 计算机相关专业学生在大学期间更应该学习什么?毫无疑问,为了毕业后找个好工作,在大学期间应该学一些应用层的技能,掌握一门应用广泛的语言及其框架。最好做过实际的项目,有过实习的经验,这些都是简历中能看得到的加分项,是脱颖而出的重要砝码。 |
最近有不少还在读书的同学来问我大学期间到底应该学什么,学了 Java,看了 JS, HTML,CSS, 尝试了一下 SSH 以后似乎就迷茫了,这其中还有不少是计算机系的同学。
毫无疑问,为了毕业后找个好工作,在大学期间应该学一些应用层的技能,掌握一门应用广泛的语言及其框架。最好做过实际的项目,有过实习的经验,这些都是简历中能看得到的加分项,是脱颖而出的重要砝码。
但是这些东西都是一颗大树的枝叶和花朵,在大学期间更应该学习的是看不见的根,也就是基础知识,对于科班出身的人更是如此。
原因很简单,基础知识虽然可以在工作以后再补,但是再也找不到这么多大块的时间,这么安静的环境,让你心无旁骛的钻研了。
你不用考虑着第二天怎么去应对客户的脸色,也不用去想着怎么去给领导解释昨晚的严重 Bug 不是我们的问题,你只需要单纯的学习就好,看到有这么多同学把美好的时光都花在打游戏上,实在是令我扼腕叹息,要是把这些时间给我就好了!
我现在只能利用一些碎片时间补一下基础的知识,如果时光倒流,让我再坐到图书馆中去静静地看书该多好!
同学甲说:基础,又是基础,老刘你说了多少遍了!我耳朵都听出茧子来了!
抱歉,基础就是这么很重要,我还是要像祥林嫂一样继续啰嗦。
我认为大学期间应该搞定的基础知识应该包括(不限于)这些:
大学期间不要忙着去学 Java , Python 等高级语言,你应该先去搞定 C 语言(不是 C ++ 啊),因为这门语言太贴近机器了,能帮助你理解计算机的运行原理,不信你看看《深入理解计算机系统》,通篇都是 C 语言,它怎么不用 Java,Python 去描述啊?因为他们太高级了,太抽象了,描述不了底层啊。
学会 C 语言,才能给其他基础知识打下基础,因为大部分基础软件、系统软件都是 C 语言写的,你看不懂 C 程序那怎么行?
不要像我当年一样,看到别人已经能做网页了,自己还在命令行的小黑窗口中折腾,头脑一热就把 C 语言给扔了,后来又花了很多时间来弥补。
要记住你学会了 C 这门贴近硬件的,简单而又复杂的语言以后,再去学别的语言,几乎不费吹灰之力,他们都太简单了!
如果你是科班的,老老实实地把《计算机组成原理》和《数字电路》这两门课学了,把那些实验内容(如门电路,半加器,全加器,触发器等)兢兢业业地做好。
你应该定个目标:自己折腾一个简单的 CPU,简单的就是进行数值运算,复杂一点儿的可以实现指令,如果觉得教材实在枯燥,可以结合《编码》或者《穿越计算机的迷雾》来学习,如果实在喜欢玩游戏,可以到《我的世界》游戏中去制造 CPU 啊,已经有大牛这么做了。
操作系统太重要了,对操作系统的理解决定了你以后工作中能达到的深度,这里边藏着太多极为重要的概念,例如进程,线程的概念,锁、调度,IO 模型,虚拟存储等等,他们会在你以后做高性能,高并发系统这一块儿起到重要作用。
即使你先学会了 Java , SSH/SSM, 随着你能力的提升,最后你还是得走入这些基础知识的世界。为什么不在大学期间把他们都搞定呢?
有人可能觉得 OS 太枯燥了,实在是看不下去,其实 OS 是一门动手实践课,你可以去看看早期 Linux 内核的源码(要求 C 语言啊),书籍文章多如牛毛;也可以自己动手自制简单的操作系统,视频书籍也不少,就看你愿不愿意把玩游戏的时间花在上面了。
举个例子:哈工大的 VOID 同学就在本科期间从零开始做了一个类似于 Linux 0.11 的操作系统出来,他拿到了阿里的 Special Offer , 目前在阿里就职。他录制的《从零开始编写操作系统》视频可以在 B 站看到:https://www.bilibili.com/video/av12169693/
同学乙要问了:“人家是大牛,还有一个好学校,我一个三本的渣渣怎么可能做得出来?你这不是给我设置了一个不可能完成的任务吗?”
确实是这样,天才永远只有少数,不可能每个人都成为天才,也不可能每个人都做出天才的成果。
但是我们也要在天才铺好的道路上坚持往前走走,也许有一天就会发现,哦,我已经超越了这么多人了啊!
要坚持使用 Linux 而不是 Windows,立志在后端做开发的更是要如此,别像我大学时安装个双系统,结果整天宠幸 Windows , 从来不翻 Linux 的牌子。
把这三者合到一起,是我个人觉得他们的重要性没有前面的高。
对于网络,需要理解网络分层模型,可靠性传输原理,TCP/IP 协议,Socket 编程,和操作系统结合起来可以考虑写一个 Web 服务器。
数据库的话首先理解 SQL、关系模型、事务、索引,要想深入学习的话可以看看查询是怎么实现的,事务是怎么实现的,如果确实感兴趣一定要看看 sqlite 的源码。
学编译最好的方式就是自制一个编程语言了,搞出来以后会对编程语言有个极为透彻的理解。
这个重要性就不用再强调了,经常看码农翻身的可能都要烦了,可以看看之前的文章《学习数据结构有什么用?》
学习的过程中除了看书理解各种算法和数据结构外,更重要的就是做题、做题、做题!
同学丙说:“老刘,你说的不都是计算机的专业课吗?”
是的,就是计算机的专业课,一般来说,工作个几年以后你才会体会到他们的珍贵,更会痛惜大学时为什么不好好学,就像我现在这样。
不要局限于学校发的教材,现在网上的视频资源异常丰富,世界级大学的课程我们也可以看到,千万不要浪费。
同学丁说:老刘你别瞎 BB 了,你让我学 Java,做项目,现在又让我造 CPU,写操作系统,数据库,服务器 …… 我都没时间和女朋友约会了。
恭喜你,已经有女朋友了,超越了大部分同学了,在大学谈一场恋爱,享受一下青春也是非常重要的事情。
但是我想说的是,你不可能把所有的都学会,你能做的就是集中火力突击一个方向,那就是你最感兴趣的方向。只有那些经得住寂寞,耐得住诱惑的才最有可能成功,如果再和自己的兴趣结合起来,那简直肯定成功。
总而言之,计算机的基础知识让你和别人区分开来,让你有着比别人更快的加速度。
但是老刘瞎 BB 这么多估计也没太大用处,因为你不行动我也没有办法。
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)