恰恰相反,计算机专业的范畴虽然广泛,但并不算很杂。相比,某些内容组织的乱七八糟的专业,更容易学精。而且大学课程的设置就已经为学生学精指了一条明路,不像某些专业如何学精简直就是一门玄学。
计算机专业的主干课程,就是如何写代码及代码如何在计算机上运行的这件事。
计算机专业的大学课程就已经指出了学习的方向:
1. 一般大一学C语言,大概掌握面向过程的程序设计思路。大多数非科班工科专业的计算机课程基本都停留在这阶段,无论用多少年MATLAB也不会改观(我用了8年matlab,我现在依然黑)。大多数脚本语言也都是这样,按着顺序把思路写下来,让计算机一步一步执行。
2. 理解OOP(面向对象编程)是水平提升的一大飞跃。掌握继承、多态、封装之后是一个aha moment,原来代码还能这么写,真牛X!现在大多数的大型系统基本都是基于OOP思想设计的,OOP是你掌握编程和控制系统复杂度的一个利器。
3. 学会算法与数据结构,也是代码提升的一大步。当你像洋葱一样拨开数据结构的层层外壳时,你对编程的理解就进入了一个新的阶段。什么时候用链表、什么时候用顺序表、什么时候用图、什么时候用树。什么是B数、B+树、红黑树?为什么数据库要用B+树,为什么有些场景要用红黑树。
4. 学会操作系统原理,也是代码提升的一大步。当程序设计到一定阶段,想要继续提升和优化,你就必须要深挖程序所在的平台 - 操作系统了。明白操作系统底层的运作机理,你才会明白,如何调度程序能够让代码更高效,如何并行、如何多进程,如何多线程。
5. 再往下深挖编译器,深刻理解编程语言是如何转化为机器语言的,其中涉及到深刻的语言学知识(乔姆斯基那套,牛逼的飞起来)。这并不是杂,而是在面对真正的问题时,即语言之间的转化,该如何解决?这也体现出计算机领域的博采众长,是人类知识的宝库。
6. 然后是计算机组成原理,更近一步深入挖掘计算机代码与硬件之间的关系,理解代码是如何在硬件上运行的,提供给学生压榨CPU性能、压榨GPU性能的能力。这不叫学精,什么叫学精?
7. 还有很多很多分支,计算机网络,分布式系统,并行计算,计算机图形学,密码学,生物信息学,计算机视觉,语音识别,自然语言处理等等,这可能让学生觉得有点杂。这恰恰是计算机丰富性的体现。而这些分支,也从来不要求学生全部掌握,学生只需要选择其中一个领域深入进去,学深学精即可。
说这么多,cs核心技术栈(算法与数据结构、操作系统、计算机网络、计算机组成原理四大基础) + 深入某子方向才是计算机的正确学习方法。