百科问答小站 logo
百科问答小站 font logo



武汉大学计算机学风真的很差吗? 第1页

  

user avatar   yoghurtxj 网友的相关建议: 
      

华科毕业的阿里学长来强答一波。

学风差的不止武大,国内高校的计算机教育都存在同样的问题

我之前写过一个回答是给计算机专业大一新生的建议,已经获得了5200+赞和收藏

核心就是想告诉大家:学校教育不行,关键还是靠自学

不管是二本大学还是双一流,普遍存在类似的问题。

就连北京理工大学的金旭亮老师也表示了赞同:

也有不少学生在吐槽:

所以你看,上到老师,下到学生,其实大家都在吐槽,这不是武大一个学校的问题

下面结合笔者看到的国内大学计算机教育存在的一些问题给楼主一些大学学习上的思路和建议。

1、教材质量差

国内大多数大学使用的教材都是自己学校编的,质量不敢恭维。

为什么既然有了业界公认的畅销几十年的经典教材,国内大学还要每个学校自己编一本呢?原因就不多说了。读这些拼凑的书,难怪学生们读不懂,读不懂正常,很多编写者自己都搞不清楚。

写书尤其是写好书是一件非常难的事情,但是奇怪的是在国内阿猫阿狗都要写一本书,名字还取的很好听的样子,其实内容就是东拼西凑的。“上课耽误学习”,并不是全无道理,哈哈哈。

这里强烈推荐大家读书一定要读经典书籍,不要在这些渣渣教材上浪费时间。

当然,国内的一些顶尖大学的计算机专业也在慢慢追赶和欧美大学的差距,比如清华、浙江、上交等等也开始使用最先进的教材。比如清华本科的计算机组成原理的课程,教材是csapp,讲义是cmu 15213的ppt,这是一种好现象。

2、课程质量差,照本宣科

(1)大量使用PPT而极少数会有粉笔板书,PPT上基本都是死板的概念。很多老师都是对着ppt念一遍完事。相比国外顶尖大学,很多老师讲课的时候都是粉笔板书,现场推导或画图,非常考验功底。

(2)课程知识停留在十年前,和业界前沿技术脱轨严重。而反观国外课程会紧跟技术潮流,比如数据库,国外课程会讲解业界主流数据库的实现机制以及一些设计上的trade-off:如TiDB就出现在CMU的数据库课堂中:

3、实践太少或者深度不够

(1)国内课程首先是对实践不够重视,实践在最终课程考核分数中的占比非常低,按理计算机是非常偏重实践的一门课程,实践动手项目应该占大的比重才合理。

我下面是standford大学CS346数据库系统实现课程的内容,需要每个人实现一个数据库系统,考核分数也是project占大头(90%项目+10%的课堂互动)。

(2)国内实践考核方式存在很大的问题。很多居然以word文档的方式来提交C语言实验报告。难道通过Online Judge的方式来考核不香吗?而且还对实验报告的格式做很强的约束,难道不应该着重考核动手能力吗?

国内大学VS国外顶尖大学的实践对比

课程名 国内大学 国外顶尖大学
C语言 通过word文档写一个实验报告 杜克大学C语言课程,project是要求实现一个排序算法以及使用蒙特卡洛模拟(Monte Carlo simulation)来实现德州扑克概率计算。
操作系统 几乎无实践操作 要求跟着课堂,做完 6 个实验,就能实现一个简单的操作系统内核。
lab是这门课的重点:Lab1: C, Assembly, Tools, and Bootstrapping. 熟悉课程使用的工具qemu,C语言,以及汇编。讲解了bootstrapping:从计算机从通电,到开始运行操作系统,这个过程中发生了什么。Lab2: Memory management. 实现虚拟内存,分页机制。Lab3: User-level Environments. 实现进程管理,中断机制(interrupt),系统调用(system call),缺页处理(page fault handling)等。Lab4: Preemptive Multitasking. 实现多CPU的支持,Round-Robin进程调度,Copy-on-Write机制,抢占式多任务(preemptive multitasking), 进程间通信(IPC)。Lab5: File system, spawn, and sh. 实现文件系统,完善sh。Lab6: Networking. 实现网络功能。
数据库 使用JDBC连接数据库进行增删改查操作 CMU的数据库系统课程的project是要求自己实现B+树索引、查询执行器、并发控制等等:
15445.courses.cs.cmu.edu

4、思维陈旧,工具链落后

现在课堂上IDE还大量使用VC6.0。试问互联网公司还有谁在用VC6.0?

另外在实际生产环境中要用到的一些工具,学校根本就不教:

  • shell脚本
  • vim
  • 版本控制git
  • 远程服务器访问(SSH)
  • 数据处理
  • 虚拟机

关于这块推荐mit的课程《计算机教育中缺失的一课》 missing-semester-cn.github.io

大学里的计算机课程通常专注于讲授从操作系统到机器学习这些学院派的课程或主题,而对于如何精通工具这一主题则往往会留给学生自行探索。
在这个系列课程中,我们讲授命令行、强大的文本编辑器的使用、使用版本控制系统提供的多种特性等等。
学生在他们受教育阶段就会和这些工具朝夕相处(在他们的职业生涯中更是这样)。
因此,花时间打磨使用这些工具的能力并能够最终熟练地、流畅地使用它们是非常有必要的。
精通这些工具不仅可以帮助您更快的使用工具完成任务,并且可以帮助您解决在之前看来似乎无比复杂的问题。

给楼主的建议是,一定要打开自己的视野,不能局限在学校的课堂,多利用互联网资源(如google、Stack Overflow、coursera、github),看经典书籍和经典开源项目源码,多实践,与技术牛人交流,多了解前沿技术。

说完了国内大学计算机教育普遍存在的问题,你可能也发现了,要想学好计算机技术核心在于自学!自学!自学!

       如果你现在在计算机专业学习的道路上 遇到了一些问题解决不了或者产生了迷茫 可以戳下面咨询入口把你目前的情况说明一下 我来帮你诊断&建议     

关于大学四年的学习规划,我之前有整理过一个2万字的回答,可以看看:

那么作为一个优秀的计算机专业的学生,我们应该养成哪些好习惯呢???

我昨天写了一个回答,觉得有必要分享给大家,阿里老学长的血泪经验贴,看完你肯定会有所收获

本人华科硕士毕业,在阿里巴巴工作多年后,依旧非常后悔自己没有利用好大学四年,如果时间能重来,下面这几点能力我肯定会重点培养。

(一)自学能力非常重要

为什么我一定要强调自学,核心在于2点:

1、学校教不会你什么,编程技术基本靠自学

不管是科班还是非科班,如果你认为学完学校的课程就能找到一份好工作,那你想的真的太简单了,等待你的可能是“毕业就失业”,不是我吓唬你,关于目前国内高校计算机教育普遍存在的问题,我上面已经写得很清楚啦。

好在现在的孩子都有些觉悟,会主动提出下面的问题,我也认真的解答了一下,感兴趣的可以围观:

2、工作后为了保持技术敏感度,更需要保持学习

这个行业发展太快,技术淘汰的速度也很快,3 年不学新东西就可能落伍了,工作之后发现自学能力更加重要了。

但是这里你一定要警惕自学陷进,而要掌握学习新知识的方法论,个人总结主要为以下几点:

知道自己在学什么,明确自己的学习目标;

建立自己的知识网络,比较简单的方法就是善用思维导图,把知识网络串起来;

③从大量信息中筛选有价值信息的能力,人的精力是有限的,我们不可能面面俱到,学习一定要学经典资料;

实践推动学习

(二)重视计算机基础

打牢基础!打牢基础!重要的事情说三遍!

基础非常重要,不管你以后从事什么方向,应用开发也好,大数据开发也要,客户端工程师也好,要想吃得开必须依赖这些基础课程:操作系统、组成原理、计算机网络、数据结构、算法、数据库

几乎各个大厂面试前2轮面试都会重点关注基础,如果基础不扎实,那么就很难进入后面的面试,把大学一半的精力花在打基础上都是值得的。

计算机基础重点是6门课程:

①操作系统

进程、死锁、内存管理等等基础知识。

②计算机组成原理

③数据结构

典型的数据结构:数组、队列、栈、堆、树、哈希表、并查集、字典树,原理要知晓,并且要对于队列、堆、栈这种能手写代码自己实现。

④算法

  • 排序
  • 分治
  • 动态规划
  • 搜索
  • 回溯

这几个典型的算法一定要能熟练掌握原理并能运用,举一反三。

⑤计算机网络

书籍推荐《TCP/IP卷一》

⑥数据库

除了掌握基础的数据库知识,还需要对常见的SQL编写、索引优化熟悉。

这里推荐一本薄的书籍:《mysql必知必会》。这本书不厚,但是实操性强,非常推荐。

(三)多实战

Talk is cheap, show me the code;

对于计算机专业来讲,实践是非常非常重要的。

那么有哪些实战的方式呢?

1、参加比赛

有含金量的比赛大概有如下几个:

  • 经典算法比赛:ACM-ICPC全球竞赛、topcoder
  • 数据挖掘/AI比赛:Kaggle比赛、天池比赛、KDD-CUP、腾讯广告算法大赛
  • 中间件-阿里巴巴中间件性能挑战赛

2、实习

实习是非常好的实践方式,一方面可以提前了解和感受互联网公司的环境、氛围,另一方面向各路大牛学习,获取一手的经验,还可以参与实际的项目。

3、github开源项目

如果没有实习,也可以通过参与实验室项目或者github上的开源项目。github上开源社区有完善的文档、协作机制,可以和很多人一起交流,开阔视野。

作为新手,下面这个回答你可能会需要:

4、刷题

主要是锻炼数据结构和算法能力、提高思维能力。 推荐用LeetCode或牛客。

5、顶尖公开课的project

通常都非常有深度,有一步一步实现一个麻雀虽小五脏俱全能run起来的系统,如数据库或操作系统,或者一个tcp协议栈。

(四)多读经典书籍

少看博客,多读书。

博客只能帮你找到学习思路,真正的知识储备建立在你阅读了多少经典书籍的基础之上

相比于电子书,我本人更喜欢纸质的,一是尊重作者劳动成果,拒绝白嫖;二是阅读体验我自己觉得更好。

网上也有很多电子书,但是希望的大家不要放在网盘里落灰。有条件可以买书回来自己看,动力更足。

研究生读的一些书,老照片了,像素太低多包涵:

工作之后看的一些书,只是其中一部分:

再来唠叨2句,有些书籍最好不要买,比如21天精通XXX,完全就是割韭菜的。

学习计算机一定不要想着速成,没有什么捷径和超能力。要下苦功夫去啃那些经典书和源码,然后自己动手写,所有技术大佬都是一行行代码敲,一本本书啃出来的。

我在大学期间,为了把专业学好,看了大量经典的专业书籍,整理了这份计算机必读的高分经典书籍

这份书单对于CS学习的同学帮助非常大且十分系统,这些书籍的电子版已经整理好了。

需要的直接戳这里领计算机必看经典书籍(附pdf下载),请注意查收~

因为我本人是Java工程师,关于Java从入门到进阶的经典书籍之前写过一个回答,已经获得3000+赞和收藏,想学Java的同学可以看看:

都醒醒,看完我的回答就去乖乖看书好嘛~

(五)善用工具,学会搜索

经常逛一些比较不错的工具网站,比如google、Stack Overflow、coursera、github、知乎等。

多关注一些你的领域的一些大牛在干嘛,多关注一些优质原创博主的博客,比如说你如果觉得我的回答写得还不错,可以关注一下我 @夏天

多关注业界前沿技术和动向趋势,了解最新技术解决了什么新问题,是否能够给自己的工作带来帮助。这里推荐几个优秀的前沿信息来源

  • infoq
  • 《美团技术博客》
  • 公众号-阿里技术
  • 公众号-高可用技术
  • 业界有名的会议:archsummit 架构师大会、flink forward

使用 Google 搜索而不是百度

下面我这个回答整理了我常用的几个技术社区和开源项目,对于提升自己的编程能力还是很有帮助的,可以看看:

(六)养成写博客的习惯

写博客对我们好处很多:

  • 如果能讲出来让别人懂,那说明自己是真的懂了。勤总结可以不断加深我们对知识的理解;
  • 博客也是自己的一个标签,能够让自己在以后的面试中获得加分;

我在校招的时候就因为博客加分不少。我的技术博客原创博文已经很多了,虽然没有太多高深的东西,都是一些基础知识,但是大多是自己加以总结了的。大多数面试官都打开我的博客看了,评价还不错。

上学的时候主要在CSDN分享,那时候我就已经算是个大V啦,多年没维护,粉丝掉到了4000个。

还有粉丝催更的,现在主要在知乎做些分享。

另外,下面下面这些回答你可能也会需要:

以上就是我个人的一些经验分享,希望对你有帮助。

再补充一个大家最近问的很多的,关于计算机专业电脑选购的问题

按照不同的预算给大家推荐了几款电脑,闭着眼睛买就行:

       每个价位只帮大家挑了最值得买的几款 终结选择困难症戳下面文章看     

希望能够帮助到学弟学妹们~




  

相关话题

  大一计算机专业学生如何在寒假充电? 
  请问一个程序员应该怎样才能学会编写带GUI的程序? 
  如何看待小程序云开发把程序员的准入门槛降低?那怎样衡量一个程序员的价值? 
  做游戏不仅要编程能力还要计算机其它方面的知识吗? 
  大学学习linux是安装虚拟机,还是安装双系统。? 
  为什么C语言能长盛不衰? 
  室温超导、量子计算、可控核聚变、稳定超重元素这几项科技哪项会率先实用化? 
  学云计算用什么配置的电脑? 
  为什么计算机学术界认可顶级会议论文,而其他领域几乎都是只认可顶级期刊? 
  把BAT的机房炸掉,公司是不是就垮了? 

前一个讨论
本人应届大学毕业生,想去平安普惠工作如何?
下一个讨论
怎么看待湖南货拉拉司机被判一年缓刑一年?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利