很多程序员,包括计算机专业出身的程序员,也包括通过自学成为程序员的非科班同学,在工作一两年后甚至更久后,基本上都会碰到技术瓶颈,由此可能产生很长一段时间的迷茫期。
本文的题目是计算机专业学生一定要学好这几门课,并不一定指的是计算机专业的学生才要学习、掌握这些内容,我认为任何程序员都有必要学习和掌握这些内容。
计算机组成原理
不管是写程序做软件还是搞科研发论文,不对底层有一个清晰的认识,你的整个前进道路都是模糊不清的。
而只对体系结构的了解是远远不够的,深挖才是归途,为什么现在很多解析内存CPU技术的博文博客火呢?是因为大家都忽略,也因为大家都知道这是多么有用。
如果不做底层的分析,就无法精准的定位问题,也就自然写不出切合真实计算逻辑的简单而又高效的优秀代码。
知乎有个观点——读优秀的代码,从OS开始。读这些就是你学习认知底层的过程,就是在站在巨人肩膀上远眺的历程。
计算机操作系统
无论你学习什么编程语言,都避免不了和操作系统打交道,比如你学习Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的;
比如你学习到内存分配的知识,c++里可以直接分配一段内存,此时实际上是调用操作系统提供的API进行内存分配。
如果不懂操作系统,你在未来学习编程语言的高级特效,涉及到线程进程调度,内存分配,或者是学习Linux相关的知识时,都会一头雾水,所以,只有学会了操作系统,才能够更好地学习其他语言和技术。
数据结构与算法
程序=数据结构+算法,对于初学者可能还不能完全地理解这句话,不过对于已经工作两三年的小伙伴相信对这句话是深信不疑的。
对于数据结构与算法的学习,分为三个步骤:
首先先大致了解什么是算法,可以通过一些科普读物来入门,这个过程称之为入门阶段;
接着可以尝试实现一些比较容易的数据结构和算法,这样可以更加深对数据结构和算法的了解,这个过程称之为实践阶段;
最后去了解数据结构与算法背后的相关数学原理等,这个过程称之为原理阶段。
以上这些课程的学习并不是一朝一夕能够搞定的,也不是在大学期间就能够完全学懂的,不过如果有可能,还是尽自己全力能掌握多少就掌握多少,剩下的不是特别明白的,需要在以后的工作中慢慢体会、慢慢理解。