查看原文
其他

在大学期间更应该学习什么?

2017-11-08 刘欣 码农翻身
1前言

最近有不少还在读书的同学来问我大学期间到底应该学什么,学了Java,看了JS, HTML,CSS,  尝试了一下SSH以后似乎就迷茫了, 这其中还有不少是计算机系的同学。


毫无疑问,为了毕业后找个好工作,在大学期间应该学一些应用层的技能,掌握一门应用广泛的语言及其框架。最好做过实际的项目,有过实习的经验, 这些都是简历中能看得到的加分项,是脱颖而出的重要砝码。


但是这些东西都是一颗大树的枝叶和花朵, 在大学期间更应该学习的是看不见的根,也就是基础知识, 对于科班出身的人更是如此。


原因很简单,基础知识虽然可以在工作以后再补,但是再也找不到这么多大块的时间,这么安静的环境,让你心无旁骛的钻研了。 


你不用考虑着第二天怎么去应对客户的脸色,也不用去想着怎么去给领导解释昨晚的严重Bug不是我们的问题, 你只需要单纯的学习就好,看到有这么多同学把美好的时光都花在打游戏上,实在是令我扼腕叹息,要是把这些时间给我就好了!


我现在只能利用一些碎片时间补一下基础的知识,如果时光倒流,让我再坐到图书馆中去静静地看书该多好!


同学甲说: 基础,又是基础,老刘你说了多少遍了!我耳朵都听出茧子来了!


抱歉,基础就是这么很重要,我还是要像祥林嫂一样继续啰嗦。


我认为大学期间应该搞定的基础知识应该包括(不限于)这些:


2C语言


大学期间不要忙着去学Java , Python等高级语言,  你应该先去搞定C语言(不是C++啊),因为这门语言太贴近机器了, 能帮助你理解计算机的运行原理,不信你看看《深入理解计算机系统》, 通篇都是C语言,它怎么不用Java,Python去描述啊?  因为他们太高级了,太抽象了,描述不了底层啊。  


学会C语言,才能给其他基础知识打下基础,因为大部分基础软件、系统软件都是C语言写的,你看不懂C程序那怎么行? 


不要像我当年一样,看到别人已经能做网页了,自己还在命令行的小黑窗口中折腾,头脑一热就把C语言给扔了,后来又花了很多时间来弥补。 


要记住你学会了C这门贴近硬件的,简单而又复杂的语言以后,再去学别的语言,几乎不费吹灰之力, 他们都太简单了!


3理解计算机的组成原理

如果你是科班的,老老实实地把《计算机组成原理》和《数字电路》这两门课学了,把那些实验内容(如门电路,半加器,全加器,触发器等)兢兢业业地做好。


你应该定个目标: 自己折腾一个简单的CPU,简单的就是进行数值运算,复杂一点儿的可以实现指令, 如果觉得教材实在枯燥,可以结合《编码》或者《穿越计算机的迷雾》 来学习,  如果实在喜欢玩游戏,可以到《我的世界》游戏中去制造CPU啊,已经有大牛这么做了。


4理解操作系系统原理

操作系统太重要了, 对操作系统的理解决定了你以后工作中能达到的深度,这里边藏着太多极为重要的概念, 例如进程,线程的概念,锁、调度,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的牌子。 


4 网络, 数据库, 编译原理


把这三者合到一起, 是我个人觉得他们的重要性没有前面的高。


对于网络,需要理解网络分层模型,可靠性传输原理,TCP/IP协议,Socket编程,和操作系统结合起来可以考虑写一个Web服务器。


数据库的话首先理解SQL、关系模型、事务、索引, 要想深入学习的话可以看看查询是怎么实现的,事务是怎么实现的, 如果确实感兴趣一定要看看sqlite的源码。 


学编译最好的方式就是自制一个编程语言了, 搞出来以后会对编程语言有个极为透彻的理解。


5数据结构和算法


这个重要性就不用再强调了,经常看码农翻身的可能都要烦了,可以看看之前的文章《学习数据结构有什么用?


学习的过程中除了看书理解各种算法和数据结构外,更重要的就是做题、做题、做题!


同学丙说: “老刘,你说的不都是计算机的专业课吗?”


是的,就是计算机的专业课,一般来说,工作个几年以后你才会体会到他们的珍贵,更会痛惜大学时为什么不好好学,就像我现在这样。 


不要局限于学校发的教材,现在网上的视频资源异常丰富,世界级大学的课程我们也可以看到,千万不要浪费。 


同学丁说:老刘你别瞎BB了,你让我学Java,做项目,现在又让我造CPU,写操作系统,数据库,服务器......  我都没时间和女朋友约会了。


恭喜你,已经有女朋友了,超越了大部分同学了,在大学谈一场恋爱,享受一下青春也是非常重要的事情。


但是我想说的是,你不可能把所有的都学会,你能做的就是集中火力突击一个方向,那就是你最感兴趣的方向。 只有那些经得住寂寞,耐得住诱惑的才最有可能成功,如果再和自己的兴趣结合起来,那简直肯定成功。


总而言之,计算机的基础知识让你和别人区分开来,让你有着比别人更快的加速度。  


但是老刘瞎BB这么多估计也没太大用处,因为你不行动我也没有办法。


你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017上半年文章精华




优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。


100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。


扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存