新闻资讯
软件工程在大一有什么科目?
985 CS科班,对于计算机专业课程非常了解,这个回答看完能帮你清晰的知道CS课程学习顺序~
首先来看下,计算机科班的课程体系:
我们学校上课的顺序基本和上面第二张图一样。
大一的时候主要是:
计算机导论、C语言编程、高数、线代、面向对象程序设计(Java)等。
那么我推荐的自学方式就是:
- 初学看视频
- 提高看经典书 + 源码
- 提高编码能力靠多写
- 多做国外硬核的Lab
说说我自己的自学编程经历吧。
985 CS 科班出身,即便是所谓的科班,但任然认为自己是”自学编程“。
为什么这么说呢?
因为我想了下,很多东西、编程知识都是我自学的,而学校上的CS基础课也仅仅是满足考试而已。
大一上完C语言课,我的水平几乎停留在做课后习题,自己对于内存、指针都是看似懂了,实际没有领悟到精髓。
而后我依靠看大量C语言和系统底层方面的书籍,比如《CSAPP》、《汇编语言》《程序员自我修养》、《C和指针》、《深入理解C指针》等,才勉强说对于内存、指针这些彻底搞懂了。
所以我说认为自己是「自学编程的科班生」,相信这样的同学还不在少数。
过去几个月,我微信、知乎收到很多学弟学妹私信,问通信、电子、机械这些专业的同学转码要怎么学?是不是很难追上科班?如何才能减少和科班的差距?
那么如何追上计算机科班学生呢?
那当然是他们学什么,你就去补齐什么呀!你把操作系统、组成原理、系统编程这些学了,认认真真的把计算机基础打扎实了,那你其实就是一个「计算机科班学生了」
接下来说下我认为对一个「计算机知识体系完整的毕业生」最重要的课程,你至少得把下面这些课 都学了:
1、 编程语言:C/C++ (学好了这两门,基本其它编程语言一周就上手了)
2、《系统级编程》(我们教材是CSAPP,这是我本科上过最值的课!System Programing)
3、《数据结构与算法》
4、《组成原理和体系结构》
5、《操作系统》
6、《编译原理》
7、《计算机网络》
8、《数学课》:线代、离散、高数
计算机科班刚毕业一年,大学如果知道这些,我可能会少走很多弯路!
在我相册翻到了一张曾经的成绩单,这是其中一学期的:
可以看到除了一些《形式与政策》这种“水课”,其它都是CS基础课。 送大家一句话吧:
万丈高楼平地起,勿在浮沙筑高台。
所以一定要在大学期间把基础打牢固,整扎实,这是科班的核心竞争力!
而且非科班同学学完这些课,也可以说是科班了!
那么怎么学?
看书 + 看视频 + 实践
接下来推荐一些我觉得特别好的资料,尽量保持精简:
(PS: 哭了,大家只收藏不点赞,记得双击屏幕点个赞呀~~
一、编程语言:C/C++
没有比C语言更适合用来理解计算机系统了, 科班学生一定要学好 C语言。
推荐:《C程序设计语言》、《C与指针》、《C++ Primer》、《C++对象模型》、《Effective C++ 》
具体参考:
二、系统级编程
不用说肯定推荐《深入理解计算机系统》
其实它的简介和第一章《计算机系统漫游》已经写得非常清楚了:
从一个简单的hello world程序在计算机上的执行过程:
预处理->编译->汇编->链接->可执行文件->装载->数据流->屏幕输出显示
汇总成一句:信息 = 位+上下文。
另外还有一本就是《程序员自我修养》+ 《Unix环境编程》
(PS:双击屏幕可以点赞收藏,记得帮我点个赞哟~
具体参考:
三、数据结构与算法
《算法第四版》、《算法导论》、《剑指offer》
刷完基本面试找工作笔试面试都不怕了。
找工作的话,还需要刷大量的题,至少200道leetcode吧,在这里也送大家一本帮助我拿到BAT 等一线大厂 offer 的算法笔记,是一位阿里大神写的,对于算法薄弱或者需要提高的同学都十分受用,算法一定是计算机学习的重中之重:
BAT面试官编写的leetcode刷题笔记,看完秒杀80%的题目
具体参考:如何学习数据结构?
四、组成原理与体系结构
《计算机组成与设计:软硬件接口》、《编码》、《CSAPP》
五、操作系统
操作系统我推荐 看书 + 做lab的方式,比如 MIT6.828 xv6
书可以看《现代操作系统》,如果你想学个os,可以看《操作系统真象还原》
我当时应该是看了不少网课,然后自己跟着教程”抄了“一个 mini os。
学习操作系统一定不要去死看书,最好跟着那种有配套实验完成一个os的课程或者书。
就像这种:
具体参考:
六、计算机网络
推荐《计算机网络自顶向下》、《TCP/IP详解》
七、编译原理
直接看龙书就好了,想写脚本可以看看《自制脚本语言》
说实话,把上面这几门课学好了,国内大厂offer几乎随便拿了。
但是很多人忽视了基础,往往在大学最该打基础的时候去追求所谓的新技术。
所以不如谈谈到底「如何才能成为一个计算机知识体系完整的毕业生」吧?
在这里,我粗浅的把计算机编程领域的知识分为三个部分:
- 基础知识
- 特定领域知识
- 框架和开发技能
具体可以看下这个回答:
我推荐大家花在「基础 : 领域知识 : 技能」 接近 7 : 2 : 1。
这也是我推荐你在大学期间分配学习时间的比例,至少学习基础知识的时间不少于 50%,当然,这些东西你都学完了那可以去找找感兴趣的方向专研一下。
不要大一、大二一上来就扎进 Java Web、Python 爬虫这种东西,这些可以学,但不是重点。
这篇文章也没写到具体该如何去学,有哪些好的资料,由于篇幅限制,我准备把这个单独再写一个 《How 篇》,持续关注我哟~
那么如何检验学得如何呢?
想必你一定听说这个计网面试题:
“从 URL 输入到页面展现到底发生什么?“
这个问题换个表达就是「一个数据包是如何发送到另外一台电脑的」,如果你能完整的说出整个过程,那么计网你一定是学懂了!这就是为啥面试这么喜欢问这个问题的原因。
那么我们依葫芦画瓢提一个问题
“从代码被写下到程序运行起来到底发生了什么?”
这个问题回答得越详细越好,基本上能说清,你就理解了编译原理、操作系统、组成原理这三座大三。
如果觉得写得不错的话,记得帮我
点个赞哟回复列表