看到这么多令人丧气的答案……来给母校打个广(tu)告(cao)吧。广东某老牌 985 的软件学院,坐标大学城,不是轮子上学的地方,应该很好猜……不过据说很快 CS 相关专业就会合并成一个新的学院了……
因为是软件学院所以严重偏工程,就CS的S的水平来说……嗯你懂……好处大概就是比较接地气不愁就业吧……(当然自己不能太水否则没有卵用)
UPDATE: 不要来问我中大研究生怎么考啊以下全是本科生的情况,至于中大研究生如何欢迎围观评论 OTZ 另外中大的 CS 相关专业都合并到新数计院了所以现在没有软院了……
值得表扬的地方大概有:
比起国外似乎亮点也不算多,大概也不能算国内顶尖,不过自从知道国内还有辣么多不靠谱的CS之后突然觉得我院很多老师简直业界良心了,而且因为自己经常Google到其他国外学校的课程网站去,平心而论只要选课得当我院和欧美非Top大学的CS还是有得一比的。本来我也很喜欢吐槽自家学院的一比我就不再黑了……然而我院似乎还不如某些更加坑爹的985 CS有名,何况我院分数线在985里也不算高(对于广东人来说),上不了清北交浙or不想出省(我就是= =)的同学可以试试我院。隔壁 CS 据说也不错但是似乎偏理论,工程类的东西没那么多,喜欢搞工程的来我院也无妨,喜欢ACM和科研的去隔壁院资源更多,虽然似乎很快我们就要合并了hhhh
其他槽点还是有的,比如:
所以如果想度过一个有干货的大学四年,就不要选公认的水课/祈祷必修课能轮上靠谱的老师……
认真备课认真教学的老师还是很多的,比如某大法师和某常驻外教,不过也有现场从百度文库下载PPT开讲的老师就是了……另外老师水平和老师RP没有必然联系,涉及毕设/去当廉价劳动力这种事需要极其慎重。好的老师一般打分是很严的,考勤(学院强制要求至少10%)小作业大作业期中期末什么的列个表格清清楚楚,加起来多少就是多少,没得操作,而且那种TA写脚本打分的就更没得改了。我院多名老师挂科率安定的三分之一,当年抄个作业查出来都能开除现在抄个作业查出来最多就挂科吧(某些师弟师妹已经开始有抄代码没什么大不了的心态了这让我有点淡淡的忧伤),多次因为挂人太多上南都/差点上南都(虽然南都内部有大量校友……)。还有就是我院课程的TA很重要,一些课程的出作业改作业甚至出试卷都由TA负责。TA一般精选大一届的师兄师姐/老师手下的学生担任,喜欢水群/闪电回复邮件+认真负责的TA能让你的学习效果有质的飞跃,喜欢划水/经常漏发东西/作业需求永远定不下来或者有bug的TA会让你痛苦加倍。
哦还有选了我校就不要想假期这种东西了,我校俗称孙逸仙不放假魔法学院/大山不放假中学。
Update: 好像有人误解了我们学院都是这样的课……强调一下上面说的很多是选修啊选修!不想这么 push 的话也有很多神似“通识课”的选修的,也有很多课内容水不水得看老师。总之修够分数就可以了,只不过我院好歹有选择自虐的余地……另外因为生源比较杂,有很多人是调剂进来的又转不走,所以差距很大,比如整体地看抄袭现象恐怕不比其他学校好到哪去,到了大三还严重缺乏编程常识的人也不是没有。只能说如果你愿意努力学习 CS 知识的话,起码这里能够提供相当的资源和环境,不怕找不到志同道合的小伙伴,不愁没有干货学,很少会强制拖你后腿,而且大多数时候努力是能够得到相应的回报的。
=====================================================
上个锤子的话,这是我宿舍目前留下来的书……一些没什么用的就处理掉了,一些四五厘米厚的凶器搬回家了(实在放不下……),大三的选修课基本上没有买纸质教材都看电子书去了所以大部分都是大一大二的书……非英文影印的基本都是自己课外买的
教材基本都是买的影印英文版……还有一些自己买的杂七杂八的书……0.0
国内CS本科:上课耽误学习,不上课考勤扣分,拿不了高绩点,耽误保研出国。(PS:仅针对大部分而言,少数牛逼高校请自动忽略。
坐标国内某 985 软件学院,也算 35 所示范性软件学院之一。
我想了下,我们学校几个优点就是:
不过多看国外经典的大黑书确实帮助非常大,附上大学期间买的一些书,毕业的时候大部分都卖了,因为实在不便携带:
学习计算机一定不要想着速成,要下苦功夫,去啃那些经典书和源码,然后自己动手写,我大学整理了一套计算机必读的经典书籍,对于CS学习的同学帮助非常大,且十分系统,现在免费分享给大家:
书籍分享:书单推荐,少即是多(含下载方式)
但是u1s1,国内大部分高校CS教育还和国外有点差距,但是一些比较新兴学校,比如深大、上科大他们老师会更贴近国外一些,比如会引如 gitlab、代码查重等, 这个问题也有他们学校的学生来回答,可以看下:
我在新成立的上海科技大学读大一,目前学校还没有安排专业课,但这学期开了一门通识向的信息科学导论,面对每个本科生。这门课分为四个部分,编程、机器人、信号与系统和电路,每个部分一个月,各有16课时。把其中编程这部分的几个亮点和大家分享一下。
1、抛弃中国大学传统使用的C/C++,选用美国顶尖高校逐步采用、当前十分热门且受到高度评价的Python作为教学语言;
2、全英文授课,从第一节课开始不讲任何语法知识,直接讲编程的有关思想;
3、不设教材,如果有的话,老师推荐的教材是Python3.3的官方文档;
4、强制每名学生在Linux环境下编写程序(这个和下面配合),原则上自行安装Linux;
5、强制使用git提交作业;
6、评测用我们老师自己写的gradebot系统,类似ACM等的OJ,自动评测,实时出分;
7、使用强大到变态的代码查重系统(同样是老师自己写的),宁可出现误判让学生时候去证明独立完成也要保证独立完成,而且被判plagiarism代价巨大(轻则扣去本次作业的分数,重则整门课直接fail);
(PS:这个查重系统,我在做国外Lab的时候深有体会,MIT MOSS系统,会对比其它同学、往届同学、互联网、github资源,给出相似度报告,非常厉害!
原回答:国内的本科 CS 教学和国外相比有什么优劣?
说完了优点,我就要开始说说缺点了(如果你们学校不是这样的,请自动忽略哈哈,如果有任何一条是这样的请双击屏幕点个赞,想看下有多少学校!
我自己是CS专业的,身边很多各大高校CS的同学,覆盖了北邮、华科、川大、二本等,根据他们反馈,总结了以下几点:
实验报告就像这种(迪杰克斯拉算法):
3. 都 2021年了,国内估计没几个学校交代码是用 git这些工具吧,评分没有搞自动化测试吧,做国外的labs,都是直接去网站提交代码,立马跑test case,马上就能知道哪些 case 没有过,立马再去 debug。
4. 教材大部分使用自己编的,水平如何就不多说了,懂的都懂,幸好我们学校教材基本都是使用全英文黑皮书,比如自顶向下、系统编程课使用csapp等,对于计算机的学生,最好的资料和书籍是美帝那边的书,因为计算机就是发源自美帝,这些书单如果你没看过,一定要去补下:
我把自己整理的大学期间的电子书籍都分享给大家,可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统:
(PS:打个小广告,欢迎关注小北的公众号 「编程指北」,分享CS学习路线、硬核技术、校招打法、国外lab学习等,对计算机专业同学应该挺有用的~~
5. 讲课全程PPT,放 PPT 就算了吧,很多 PPT 还是十几年都没更新那种(C语言PPT上用的还是 VC6.0....),什么 C 语言,main函数返回值 void 都来了
比如我看过的一门非常经典课程,MIT CS107,讲师全程几乎都是黑板粉笔板书,学生跟着老师思路学习,这才是最高效的,而且各自手写代码、手画栈帧、手写汇编,但是估计国内有不少老师自己都好多年没写过代码了吧?让不会写代码的来教编程这不是搞笑么:
( 强烈推荐去看下这门课哈 而不是一页页PPT的翻过去而不管学生到底能吸收多少,在我大学期间,只有一位数学老师坚持板书, 大部分基本就是放 PPT了事,下面的学生纷纷拿起手机拍照,然后能学到多少呢?
在这给大家推荐一些优秀的公开课:
5. 代码量太少,很多同学到毕业估计 几万行都没写到,但是真正想锻炼出极强的编程能力没有上 10w很难,但是这方面我们学生也要多反思,为什么平时没有写到这么多代码
6. 很多学校就是孤立的学了一堆 操作系统、计组、体系结构、编译原理、C、汇编,但是很少有同学能把这些课程连起来形成CS体系,这方面 CMU 的神书神课《CSAPP》又要提下了,幸好我们学校开设了《系统级编程》,教材就是这本书,其它没有开设这门课的学校建议学弟学妹们自学。
7. 课程设置杂乱,学了一堆的数电、模电、大学物理..... 想起大一被大物实验支配的恐惧,,,时间都费在这些上面了,说实话把这些课程压缩,上一些函数式编程、或者比较前沿的CS方向,我觉得对计算机专业更好!
8. 我们学校大二下、大三才开始计网、操作系统、数据库原理等核心课程,太晚了,这些课程至少要在大三前完成,大三再开设图形学、编译原理等进阶课程,大四直接就是实践课程为主或者让同学们自己出去找实习!
我个人觉得大概这样设置CS课程更为合理: 大一上:C/C++程序设计、高数1(初等微积分)、离散数学 大一下:数字逻辑、数据结构、汇编语言、面向对象编程(Java/C++)、高数2 、线性代数 大二上:软件工程、数据库、Java/Python Web开发、组成原理 大二下:操作系统、计算机网络、系统级编程(CSAPP) 大三:软件测试、软件安全、课程设计、密码学、图形学等选修方向 大四:实践、毕设、实习 另外,还有最大的问题就是OS、网络、数据库等CS核心课程上成了文科!缺乏一些动手实践Lab,大部分都是写实验报告,就是不写代码。
为什么美帝在数据库、操作系统、各种工业软件工程能力如此强悍?
我觉得和他们 CS 强校的教育模式有关,国外,尤其是美国,很多高校 CS 教育极其注重实践,国内也就清北复交浙等少数学校有少量的实践教学,其它都是念 PPT,课后作业就是做 Word 项目。。。。
知道为什么国内 Word 项目这么多么,因为很多老师自己也不会编程.... 更没法设计那些硬核的实验和辅助教学平台,不会编程的人教你编程这结果能好么。
就拿我自己来说,学校不是很好 但至少也是个 985 吧,我上了三周的 Java 课,愣是没听懂在讲啥,最后看了几个尚学堂高琪的视频几天就入门了....
再来说美国为什么有强大的基础软件能力吧,这得益于他们的高校在培养学生造轮子的能力。
比如国外是如何学习数据库的?
就拿 MIT 来说,6.830 Database Systems: 这是一门数据库系统的一门核心课程。前半部分比较基础的数据库的知识,后半段主要在讲Distributed Databases的东西
他们的实验是什么?
是让你写个小型关系型数据库,比如 lab1实现数据库基本的存储逻辑结构,具体包括:Tuple,TupleDesc,HeapPage,HeapFile,SeqScan,BufferPool等。
国内数据库教什么?教 SQL 怎么写,教数据库原理(这个还算好的)
国内的大多数高校实验是什么?
用 Java 使用 JDBC 连接MySQL 写个应用。。。
国外是如何教计算机网络的?
手写 TCP!
比如斯坦福 CS 144,CS144 Lab Assignments - 手写TCP - LAB4
国内是怎么教的?
记住 TCP 三次握手、四次挥手、记住 DNS使用 UDP协议....
国内大作业是什么?
有些是 Word写。。。有些是让你用一下 socket api 写个网络程序。。。 这是计算机网络原理吗?
国外是如何教 操作系统的?
比如 MIT 6.828,现在改名了
直接让你基于一个 xv6 去实现一些模块,比如文件系统、多线程。
国内是如何教的?
记住进程和线程区别、记住虚拟内存的各种组关联....
当然也有一些学校会有实验,比如清华 ucore、哈工大 linux0.11
这就是为什么美国高校有很强的编码能力、造轮子的能力,因为他们的CS学生成长环境就是这样的。
国内大多数高校老师升职不靠教学,所以大家都没把心思放在教学上,做”研究“发论文,不香么。
设计这么多麻烦的实验不是给自己找麻烦么
弄个 PPT、Word 多爽呀
这个现象我估计还会一直持续下去,老实说,跟着学校的路线走,学计算机,大概率毕业即失业。
在这,顺便分享一份大学期间自己整理的电子书库,绝不是在网上那种打包下载的,而是自己需要学到某个方向知识的时候,去网上挨个找的,最后汇总而成。
汇集了编程语言(Java、C++、C、Python等等)、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件 、前端开发、后台开发、网络编程、Linux使用及内核、数据库、Redis....等主流的编程学习书籍。
这部分会不断把它完善的,当成自己的小电子书库,不多,但贵在精。
我整理的这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统:
书单:
再来看下我做过国外老师设计的一些实验吧:
第一个是文件系统
这个玩意挺有意思的,就是要让你自己去设计一个文件系统,比如文件、数据块、目录等等,而且你要提供创建、读写、删除、随机读、随机写等等接口,然后通过 Linux 的 VFS(虚拟文件系统) 机制挂载到 Linux 内核中,然后就可以用系统调用 open、read、write 这些来在你的文件系统上进行读写。VFS 是Linux一个机制,它规定了 IO 接口,然后你去实现这些接口,你就可以挂载在上面。通过这个东西我深入的学习和了解了文件系统,报酬也是非常值的。
第二个是SVC
就是版本管理系统,类似 SVN 和 GIT的,但是相对 GIT 做了很多简化,核心的就是创建分支、分支合并、回滚、commit 这些,通过这个我又去详细了解了 GIT 的实现原理,并且自己写了一个简单版本的 GIT,受益匪浅,也赚到了几千大洋。
第三个是操作系统的锁实现
这个就是让你基于硬件的原子指令 xchg、cmpxchg 这些实现一个锁,这个需要内联汇编、汇编等知识,简直是硬核!!!做完这个也解开了我对锁实现的一些疑惑。
Web Proxy
这个就更有意思了,要求用 C++ 写一个代理服务器,类似 Nginx 的代理功能,当然,相比 Nginx 弱鸡很多,
但是麻雀虽小,五张俱全,而且老外最有意思的是要求代理服务器对一些图片和 HTML 恶作剧,就是代理服务器随机的在原始服务器,返回的响应里 插入一些图片和文字,因为那天是愚人节。。。 不得不说老外还是很有趣的。
还有模拟实现 TCP 可靠传输的
这个就更硬核了,人家老外老师就是给力,直接做了一个网站,这个网站你可以通过 TCP 连接上去,然后你需要运行几个节点,互相发消息,他们之间的消息都会经过老师的网站,所以通过网站上是可以控制丢包率的,也能控制节点的拓扑结构,要求就是让你基于这种不可靠的信道,做出可靠数据传输!这简直就是翻版 TCP 嘛,超时重传、ACK、滑动窗口啥的都给我上!就是像下面图中一样,圆圈就表示你可达的范围,不同节点形成各种网络拓扑,可以调节网络 丢包率 Loss chance。
设计这些东西、实验系统、自动化测试评分系统,肯定需要花费老师大量时间精力,但是有没有带来多少升职上的产出,当然没动力去搞啰。
反正吧,学计算机最好不要全部去跟着学校学,除非你学校很好,不然大概率毕业即失业,建议看下这些回答:
编程指北:Linux C++ 后台开发自学路线总结,已拿腾讯微信后台 offer
记得帮我 @编程指北 点个赞哟~