问题：﻿中国的高校计算机教育存在哪些问题？ 中国的高校计算机教育存在哪些问题，有哪些长处和不足之处？
话题：﻿计算机、大学、高等教育、大学教育、计算机科学
回答：﻿好像看的人有点多，看样子引起了大家的共鸣，先可耻的匿了—————————原答案——————————我的学校是浙江的一个普通的双非一本，大三上比较幸运参加了伯克利的BGA项目交换一个学期，来了以后才发现差距不是一点点的大。首先说下我国内的情况（1）教师照本宣科严重，上课就是念ppt，就像读操作说明书。而且还必须要点到，不去还要扣平时分。所以为了绩点不得不去，去了有感觉非常的浪费时间学不到东西，那我自己的话说就是“温水煮青蛙”，慢性死亡。（2）没有重视体系的培养，单说计算机相关的课程（不算物理数学）大一上就是C语言，然后大一下C++离散，大二上数据结构，计算机网络，JAVA，大二下计算机组成原理数据库。大三上操作系统软件工程等等。这些课当然都是对于整个计算机科学非常重要的，但是都只是强行塞给学生，各门课之间都是知识的孤岛，没有连起来。（3）知识体系落后，教材落后错误多，教C语言还是用谭浩强的书，离散用的是学校自己编的书（错误巨多，我们老师有次布置作业就是找到教材上的错误，醉了。。。），数据结构用的不知道什么外国教材（反正没什么名气。。）计组和计网的书也很枯燥，讲的很晦涩，计组是白忠英那本，计网是谢希仁那本。（4）实践太少，我们计网简直就像是文科一样，上课老师念ppt没有相关的实践，考试也只考概念，还特别多特别散。这个大概是国内的通病，我在伯克利认识一个西交大的小伙伴，他们学习也是实践特别少。。我觉得吧，一个合格的程序员至少大学期间要写五万到十万行代码（不是简单地堆砌代码而是刻意的练习）。（5）考试僵化，上学期我们软件工程专业必修web应用开发（就是用javaee写什么jsp，servlet），考试竟然考API什么的，实在是太迷，我室友一个学期没怎么学最后背背API和书上的案例考试也考了90.（6）视野局限，很多我的同学不会用github，不知道StackOverflow，对于UNIX/Linux完全不了解，跟不要提相关的工具链。基本上老师教什么用什么，上java老师用eclipse就eclipse，不知道IDEA，上C语言老师用VC++6.0就用这个。对比之下，在伯克利（1）一般CS的课都是视频的，即使不去也没有关系，反正youtube上都有。也有的教授只是照着ppt讲，比如我这学期上操作系统的老师IonStoica(没有黑的意思，Ion人还是非常牛逼的）。但是教授都很nb，基本都是业界的大牛（2）教学资源非常强大，我在国内的时候一直觉得学习就是上课好好听讲，下课做作业多练习。但是在这边，上课lecture是很小的一部分，很多课每周都有lab有discussion，每隔几周一个大的project。一门课上的人很多，比方说61a，这学期好像有1800多人，因此配套的助教有几十位。每个助教引领一个discussion，而且有officehour专门答疑。lab上不会做了也可以直接问他们会手把手教你。（3）课程内容丰富而且视野开阔，不会说我单独的给你上一门C语言什么的，课程的应用方向是什么就教什么。比方说从他们大一上第一门编程课cs61a，教材用的是伯克利改编的python版本的SICP，整个学期的安排大概是，一开始教你python，基本上两个礼拜过完语法层面，然后开始讲高阶函数lambda函数等等接近函数式编程的东西，之后教你各种基本的小算法比如链表树什么的，但是配套的练习非常多，比如反转链表，快排，二叉树各种路径生成搜索等等，然后每个练习都有测试例子可以在本地直接跑。之后是讲面向对象编程，在之后是我最喜欢的部分，教scheme这门lisp的方言，也是大概一周过完scheme的语法层面，然后讲解函数式编程的美妙之处比如惰性求值lambda演算（但是我还是理解的不到位），在之后让你用python实现一个scheme的解释器，体会命令式语言和函数式语言的不同。然后在讲讲SQL语句与宏啥的61a每周基本上一到两次作业加上一次实验（对于我这种菜鸡大概要花四个小时以上），然后一个学期有四个project，然后project的代码框架都搭的特别好，比如说第二个projectAnts，就是实现一个类似于植物大战僵尸的游戏，但是图形层面基本游戏逻辑都给你写好了，但是各种ant单位和敌人的部分交给你实现，这个project写完你对于面向对象编程就有一些了解了。（4）注重对于整个计算机科学体系的培养，这一点我觉得非常非常的重要，在伯克利，一般的CS学生就是大一上cs61a(structureandinterpretationofcomputerprogram)，大一下cs61b(datastructure)加上cs70(DiscreteMathematicsandProbabilityTheory)，然后大二上cs61c(machinestructure)，上完61系列加上70基本上就是junior低年级的CS课就ok了，然后各种课就随便上170算法，162操作系统，164编译原理，184图形学，189机器学习等等。为什么我说注重体系的培养呢，因为他们从计算机抽象的最高层一步一步往地处走，而且每一步都注重和之前所学的结合。比方说我上面说的61a是计算机科学的入门课，学生了解了一门面向对象的高抽象的语言python，一门函数式的语言scheme，同时实践了基本的一些算法（链表，二叉树，快排等等），也了解了SQL语句，了解了macro宏的概念，写了很多的作业与实验具有了一定的编程基础。然后是61b数据结构，这门课他们是用java教的，也是一两周过完java语法层面能够写一写基本的算法，因为我国内上过了没选所以也不知道具体如何，但是据我认识的小伙伴说课业压力也非常大（他之前一个作业写一个正则匹配的算法搞了很久）。在之后是61c相当于我们的计组，抽象层面进一步降低，到硬件的层面，也是一两周过完C语言（用的是经典的那本教材C语言程序设计），然后教一些基本的汇编指令（用的是伯克利自己研发的RISC-V指令集，开发这个指令集的DavidPatterson教授今年刚拿图灵奖），接着将cache，浮点数等等计组的内容，实践过程中用到了spark和openmp还有intel的simd指令等等东西，在国内我们的计组就只有理论，而且老师根本不会提这些技术。最后的project也是实现一个简单的CPU（用他们提供的程序模拟的）。（5）视野开拓，理论与实践并行。我觉得学习操作系统就应该写操作系统，学编译原理就应该写编译器，但是国内大部分高校这两门课就很容易教偏了（当然一些顶尖高校像清北复交之南浙之类的应该都教的很好），经常是理论大大多于实践，搞得学生没有兴趣，像我们学校操作系统实验竟然是用windowsAPI在xp系统上做一些简单实验。。。都8102年了，教操作系统还不用UNIX/Linux。我上的162操作系统就是改pintos这个教学用的操作系统，虽然实现的过程比较痛苦（原谅我菜），也参考了别的组的文档，但是感觉收货非常大，你真正的才能知道原来操作系统是怎么回事，而不是成天看书背书背概念。（6）没有水课，其实也有但是很少，至少就计算机专业课来说，基本没有。然后这里的学生基本上每个学期学三到四门课（3到4个学分一门）。整体的课业负担比我在国内上12门课还大。（7）不开无意义的课，像我在国内竟然Linux的使用还要单独开课，这。。。自己找本鸟哥的书，查查文档手册啥的直接上手不就行了？然后学过了一门命令式语言比如C/C++后还要专门开课教java，而且还每周还只讲讲基本语法，一周讲变量，一周讲条件语句。。（我。。。而且不去还要扣分。而伯克利只要开课了基本上没有轻松的，你上完能够感受到学到了很多。综上，大家如果有条件有能力，学计算机还是尽量出国吧，不说了写162project去了（逃