如何成为一个具备系统知识与技能体系的计算机专业学生?
我分为八个方面来叙述这个问题,包含计算机专业能力提升路线,能力锻炼和价值提升,目标在于提升自己成为一个具备扎实技术功底,有足够丰富实践及方向明确的计算机行业从业者。
大学期间对于技术学习大概分为两个类别:
这两部分,前者属于计算机学科的基石,基本所有的编程,乃至计算机技术都是围绕前者建立的,想要在计算机方向深入,必不可少,接下来先就学科知识展开来讲
学科知识的学习可以重点放在大一大二,练好内功,才能融会贯通更多招式。
计算机组成原理作为专业基础课的第一课
第一点:杂
组成原理的内容多,且杂乱无章。概念及其广,并且每个概念的信息量也非常大。
第二:晦涩
课程推荐:
https://www.icourse163.org/course/UESTC-1001543002
https://www.icourse163.org/course/HIT-309001#/info
https://www.icourse163.org/course/HIT-1001527001#/info
书:《计算机组成》《计算机科学导论》
? 学习汇编能脱离编译器甚至编程语言的限制,对于语法总结,对于了解编程语言本质,对于解决问题的能力帮助都很大。汇编语言的作用有很多,我们站在高级语言的角度来说,如果我们懂汇编,可以看懂每一行代码编译器生成的汇编代码,我们就知道这行代码计算机在做什么事情,就可以从本质上了解编程。
C++
、Java
),因为高级语言更贴近人,当我们在学习汇编遇到问题的时候,可以跳出汇编从高语言的角度看问题,不会被局限起来课程推荐:
https://www.icourse163.org/course/UESTC-1002047009
书:《编译原理》(龙书)
计算机分为硬件系统和软件系统,操作系统是软件系统及其重要的一部分。而学好这门课程也为我们的未来提供了更多的可能性和上升空间。操作系统庞大且全面,我们可以在其中领会到各种数据结构的巧妙应用,各种解决问题的奇思妙想,他为许多的工程问题提供了非常经典并且极其有效的解决思路。学好这门课程,毫无疑问裨益非凡。学习操作系统也能够对程序运行和资源调配更清楚。
操作系统也是一个极其抽象的东西,重在理解。不行就先背过。先理清楚操作系统有哪些模块,每个模块都是干什么的,每个知识点,都去好好了解一下他的背景和意义。系统是人设计的,里面每一个设计的背后都有当时设计者的思考,所以你遇到的每一个设计细节都有为什么这么设计的理由。要注意看书和做题并应用。
课程推荐:
https://www.icourse163.org/course/NJTU-1003245001
书:《鸟哥的 Linux 私房菜》《现代操作系统》
互联网时代,所有的流量,传输都是依靠网络,无论是应用开发还是网络安全,都需要了解网络。
作为一个编程语言学习者,当我们在学习一门编程语言的时候,可能学到一些基本语法,面向对象等等。这个时候我们总感觉计算机网络完成不重要,反正我写代码也不设计网络传输,平时的工作也只是 CRUD
,没什么用武之地。当我们接触到一些具体网络技术时,例如 Nginx
,或者docker
等等我们就会发现网络基础的重要性。想要深入学习编程,计算机网络还是比较重要的一环。
计算机网络实质上是关于网络知识的导论,正因为是导论,所以会显得内容非常杂乱,那么建议在学习中注意以下几点:
1、理解计算机网络的组成
2、学习网络协议
3、了解网络分类的重要性
4、一定要学好 TCP
/IP
协议(重点)
课程:
https://www.icourse163.org/course/HIT-154005
实验:
https://www.icourse163.org/course/BUAA-1002744004
书:《图解 HTTP》《图解 TCP/TP》《计算机网络:自顶向下方法》
可能有一些初学者或者程序员会问:我不可能自己去写一门新的语言,有必要学习编译原理么?
课程:
https://www.icourse163.org/course/UESTC-1002047009
书:《编译原理》(龙书)
所有业务的实现都是算法,所有数据的存储都有结构。程序=算法+数据结构,某种意义上来说,这是最粗略区分码农和程序员的一门课。
同一个项目、或者框架,架构差不多,设计思路差不多,实现的功能差不多。为什么有的人做出来的框架 Bug 也多,性能也一般,可扩展和可玩性也不好, 只能在自己的公司仅有的几个项目里面用一下。而有的人做出来的就可以开源出来给很多人用,甚至被 Apache 收录。这么大的差距形成的原因,就是因为细节。这个细节就包括,你的内存是否节省,你的数据存取是不是足够的高效,你的算法是不是足够优化,等等等等,这些结合起来决定了一个框架是否足够优秀。如果你不懂数据结构与算法,不懂复杂度分析,那就只能写“凑合能用”的代码。
1、至少要掌握一门编程语言,以此为基础进行学习
2、要理解透彻数据结构的思想,然后一定要能够独立完成代码的实现。
3、多刷一些题目,通过一些难题去领会到数据结构的魅力。
4、做好规划,把每种结构的基本原理和应用列清楚
5、简单点说,动手多练。
6、再提一句,一定要勤奋刷题
刷题:牛客;力扣
书(电子档):《大话数据结构》《数据结构与算法分析》
课:https://www.icourse163.org/course/XMU-1206002801
ACM 题目解析:(https://www.nowcoder.com/ta/acm-solutions)
总结:
以上学科内容为“内功”,内功不一定能让你多拿多少工资,但是能够帮助建议对于计算机学科比较全面的认知。我们学的不是编程语言也不不是编程,是整个计算机学科。同时能够打造个人的适配性和稀缺性。 如果对技术深入兴趣不是太大, 或只是想以技术入行再找适合自己的定位的话,以上内容除数据结构和基础网络知识外,其他的都可以忽略
C语言
:可以说作为当今所有流行程序语言的老祖宗,对老祖宗有所了解,对于学习他的子孙后代等其他语言(C#
,Java
,PHP
….)等等来说都有很大的帮助。而且又了这个基础,我们就有了选择的机会,是沿着老祖宗的道路继续发扬光大,还是根据自己的兴趣或者适应社会的各个需求灵活的进入技术领域。Java
:一开始设计之初是在 C 的基础上做一个扩展,当 Java 的使用者越来越多的时候,才越来越偏向新手。发展到现在,相对 C++,他是更贴近新手的一门语言。C++
:可以将C++
看作是 C语言的加强。他完全兼容 C语言的特性。但是就难度来说,他的学期周期会更长。高等数学是基础,虽然说,一般的程序是很难用上高等数学的。但是如果你进入算法、数据库或者其他很专业的东西。它的基础作用就很明显了。个人认为高等数学的目的:1、培养思维(另外还有一门学科叫数学分析,对于数学逻辑的建立也有一定的帮助) 2、算法分析 3、程序本身(如果做图像处理,高数就尤为重要)。
本科阶段离散数学四大块:逻辑学、集合论、图论、代数结构。计算机科学中普遍采用了离散数学中的一些基本概念、基本思想、基本方法,使得计算机科学趋于完善和成熟。他在计算机体系结构、数据结构、数据库、编译原理、人工智能中都有着很广泛的应用。
矩阵计算在计算机科学中也有着独一无二的地位,在游戏开发、计算机图形学、计算机视觉、机器学习等方面都有着巨大的作用。最著名的用途之一就是谷歌的Pagerank
算法
一些领域会涉及到一起物理概念,这要具体和某一个东西相关联,比如机器人就需要人体力学等物理相关概念,在学习相应领域知识时简单了解即可