有些人虽然不是计算机方面专业,但是因为自己的爱好,通过自己的努力学习也从事了相关工作。这样的人与经过了系统学习的CS科班毕业的有没有区别?有什么区别?
非科班缺少一些技术根基。例如:计算机网络,数据结构与算法分析,操作系统原理,数据库系统原理,编译原理等。体现就在于:科班生做东西知道原理,知道为什么这么做。还能利用一些数学工具去分析程序。例如:如何通过优化代码来让程序达到更高的效率,并且可以计算出一段代码的时间复杂度来评估其性能。还比如:科班生了解操作系统原理,他们知道为什么操作系统能同时运行多个程序,操作系统是怎么干的?他们知道操作系统是如何给进程分配各种资源,例如处理机,存储,IO资源等。在工作中,这些知识就为高并发的场景提供了理论依据,也就是说我们写的程序的最终目的是要把操作系统资源的利用率达到峰值,这样才能达到最高的吞吐量。还例如计算机网络让我们知道不同计算机之间的通信方式,例如Web开发中所使用到的HTTP协议,该协议数据报文的格式以及其中的各个字段的含义等。针对数据库系统原理等课程,也为我们提供了优化数据库性能的理论依据,例如:为什么数据库需要用主键?主键为什么能优化查找性能?当我们执行select语句检索的时候,数据库是怎么进行查找的,它所使用的查找策略是什么。编译原理则告述我们,当我们在编译程序的时候,编译器都干了些什么?以及如何设计一个编译器?
不过,非科班的也不用过于担心,这些东西都是可以通过学习获得。也不要高看科班生。就我上面说到的那几门课,真正掌握的,理解透彻的,并能在实际环境中运用的,只是极少数人。大部分人都是期末考试能及格的水平。大学教东西都教的很泛,这里教点,那里教点。相比之下,科班生也只是有点基础罢了。不过,对于培训机构培训出来的非科班生,连上面这些最基础的东西都不了解的话,只会调用API造轮子的话,技术这条路是走不长久的。
如果真的爱好而且努力,那么和绝大部分专业毕业的学生比是没有区别或者更优秀的。和少量学习刻苦的专业毕业学生比,差在计算机专业课和数学课上,这个差距,是可以通过工作当中的学习和磨练来逐步赶上的。

