大一上:C/C++程序设计、高数1(初等微积分)、离散数学
大一下:数字逻辑、数据结构、汇编语言、面向对象编程(Java/C++)、高数2、线性代数
大二上:软件工程、数据库、Java/PythonWeb开发、组成原理
大二下:操作系统、计算机网络、系统级编程(CSAPP)
大三:软件测试、软件安全、课程设计、密码学、图形学等选修方向
大四:实践、毕设、实习
另外,还有最大的问题就是OS、网络、数据库等CS核心课程上成了文科!缺乏一些动手实践Lab,大部分都是写实验报告,就是不写代码。
为什么美帝在数据库、操作系统、各种工业软件工程能力如此强悍?
我觉得和他们CS强校的教育模式有关。
国外,尤其是美国,很多高校CS教育极其注重实践,国内也就清北复交浙等少数TOP学校有少量的实践教学,其它大部分是念PPT,课后作业就是做Word项目。
因为很多老师自己也不会编程....更没法设计那些硬核的实验和辅助教学平台,不会编程的人教你编程......这结果能好么。
就拿我自己来说,学校好歹也是个吧,我上了三周的Java课,愣是没听懂在讲啥,最后看了几个尚学堂高琪的视频几天就入门了....
再来说美国为什么有强大的基础软件能力吧,这得益于他们的高校在培养学生造轮子的能力。
比如国外是如何学习数据库的?
就拿MIT来说,6.DatabaseSystems:这是一门数据库系统的一门核心课程。前半部分比较基础的数据库的知识,后半段主要在讲DistributedDatabases的东西
他们的实验是什么?
是让你写个小型关系型数据库,比如lab1实现数据库基本的存储逻辑结构,具体包括:Tuple、TupleDesc、HeapPage、
HeapFile、SeqScan、BufferPool等。
国内数据库教什么?
教SQL怎么写,教数据库原理(这个还算好的)
更有甚者实验就是安排用Java使用JDBC连接MySQL写个应用。。。
国外是如何教计算机网络的?
手写TCP!
比如斯坦福CS,CSLabAssignments-手写TCP-LAB4
国内是怎么教的?
记住TCP三次握手、四次挥手、记住DNS使用UDP协议....
国内大作业是什么?
有些是Word写报告。。。有些是让你用一下socketapi写个网络程序。。。好吧,其实会用socket的也挺不错的,最关键是有些直接让你写个爬虫、HTTP服务,就算是使用了网络协议了。。。
这是计算机网络原理吗?
国外是如何教操作系统的?
比如MIT6.,现在改名了。
直接让你基于一个xv6去实现一些模块,比如文件系统、多线程。
国内是如何教的?
记住进程和线程区别、记住虚拟内存的各种组关联....
当然也有一些学校会有实验,比如清华ucore、哈工大linux0.11、川大也有引入nachos
这就是为什么美国高校有很强的编码能力、造轮子的能力,因为他们的CS学生成长环境就是这样的。
大多数高校老师升职不靠教学,所以大家都没把心思放在教学上,做“研究”发论文,不香么。
设计这么多麻烦的实验不是给自己找麻烦么
弄个PPT、Word多爽呀
这个现象我估计还会一直持续下去,老实说,跟着学校的路线走,学计算机,大概率毕业即失业。
给大家列举一个我做过的国外老师设计的实验吧:
模拟实现TCP可靠传输的
人家老外老师就是给力,直接做了一个网站,这个网站你可以通过TCP连接上去,然后你需要创建几个节点,互相发消息。
他们之间的消息都会经过老师的网站所以通过网站上是可以控制丢包率的,也能控制节点的拓扑结构,要求就是让你基于这种不可靠的信道,做出可靠数据传输!
这简直就是翻版TCP嘛,超时重传、ACK、滑动窗口啥的都给我安排上!
就是像下面图中一样,圆圈就表示你可达的范围,不同节点形成各种网络拓扑,可以调节网络丢包率Losschance。
设计这些东西、实验系统、自动化测试评分系统,肯定需要花费老师大量时间精力,但是有没有带来多少升职上的产出,当然没动力去搞啰。
反正吧,学计算机最好不要全部去跟着学校学,除非你学校很好,不然大概率毕业即失业。