想要成为一名合格的软件工程师,需要学习的计算机方面的很多知识和理论,这里给大家通俗的说下需要知道的基础理论知识体系有哪些。
以某大学的计算机相关专业的四年课程举例:
Java语言、C语言、Python语言这些都是高级编程语言,学会一门编程语言,其他的都能触类旁通。上图中将主流的几个语言都有涉及C++、C#在大二也都开设了,其实只需要专攻某一个语言即可,贪多嚼不烂。
计算机理论的几门课程《计算机专业导论》、《计算机组成原理》、 《数据结构》、《操作系统》、《计算机 络》和《编译原理》。这几门课是你以后做任何方向的基础。
有很多大学的计算机相关专业都会开设这几门课程,有很多的同学可能觉得这几门课中的某几门没有什么鸟用,理论枯燥不说,要记得内容太多。然而事实上在任何一个方向中深入以后都会和这几门课的内容纠缠在一起。而且这几门课中所表述的思想以及解决问题所使用的模式和方法论可以说涵盖了整个计算机知识体系的精华。有时候虽然是完全不相干的领域,但是解决问题的思路却和某几门课中的方法惊人的相似。
其中《计算机专业导论》讲解的主要内容核心就是如何将现实世界的问题搬到计算机中去完成,使用那些手段和方法去做,是一门先导性的理论课程。
其中《计算机组成原理》这门课程讲的是计算机硬件组成,毕竟写代码其实和硬件打交道的机会不多。但是整个计算机运行的流程一定要搞清楚,例如缓存、内存、寄存器、CPU是如何执行指令的,IO设备是怎么输出的;清楚的知道比懵懂无知的要强很多。
其中《数据结构》是所有课程的基础,重要性就不用提了,计算机需要运算就必须有数据,而有数据就必然要用各种数据组成各类结构(有各类结构的数据就必然涉及操作这些结构数据的方式方法);没有数据结构基本上没法写代码,不了解或不清楚数据结构基本上也写不出好的算法代码。
《操作系统》理论上来讲你所有写到的程序都是运行在操作系统上的。文件系统、内存管理、进程管理、I/O 这都是写一个程序必不可少的内容。缺了这一门你可能就会出现写多线程程序却不知道怎么加锁之类的低级错误。如何进行进程间的通信?如何使用系统调用?如何处理文件?等等…
《计算机 络》这一部分其实和《操作系统》有一小部分重叠。作为一个合格的程序员,至少要能闭着眼睛说出来TCP/IP五层协议栈是什么每层的主要功能是什么。不过在实践中一般重点把握传输层HTTP协议、TCP协议,自上而下掌握到 IP 层就可以了。对于编写 络程序来说是必不可少的内容。
《编译原理》很多人觉得我又不发明编程语言,《编译原理》没什么用。其实不然,你看web里常用的模板引擎不就是用编译原理的知识写的么。那帮搞前端的程序员搞到最后哪个不是在搞编译(笑)。掌握这门课一来可以让你在处理程序错误的时候更加的熟练,另一方面可以利用编译的知识写一些小工具,能够大大提高工作效率。在这里推荐一本书《编程语言实现模式》代替大部头学院派的《编译原理》来看真的是非常棒,作为基础知识肯定够用了。
而其中在图中我们可以看到有大量的数学课程《高等数学》、《离散数学基础》、《概率论与数理统计》、《线性代数》、《近世代数》等等;很多有经验的前辈都会告诉你数学其实没有什么用处,基本上平时做业务之类的根本用不上。这话没有问题,毕竟你做做 GUI 什么的是不需要微积分的。而且工作中大量的内容也是业务相关的,但是作为你选择某一方面精研之前的通识知识还是非常有必要掌握它的。不然你的路只会越走越窄。有相当一部分领域知识其实是需要数学基础的,比如图形学、机器学习、游戏里的物理模拟等等。主要内容就是三门课 微积分、线性代数、概率论与数理统计。个人感觉常用程度上来说应该是 线性代数 -> 概率论与数理统计 -> 微积分的。
而其中又有很多其他杂七杂八的课程《软件工程》、《软件测试》、《软件安全》、《信息安全》等等,这些都和软件编程相关但有不太会被人所关注,毕竟这几门课都可以再单独设立一个独立的知识体系来讲,软件工程是在开发软件时项目经理关注的重点,软件测试就是软件测试工程师需要具体学习的体系,软件安全和信息安全就是信息安全工程师需要关注的领域了。但作为合格的软件工程师这些知道一些比不知道要强一些。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!