开学之际想发个文章吐槽一下中国的计算机教育

2012-08-22 11:46:38 +08:00
 ant_sz
本人大四,虽然不是计算机专业选手,但是所见所闻还是能凑出一点见解的,写这个文的目的是让即将或者很快就要进入大学阶段的v2exer提前提一个醒,那就是,在大学学习计算机,自学的能力是很重要的

吐槽开始
首先是c语言,据我所知,目前c语言教育的大纲和普遍使用的课本都几乎是十年前的版本了。虽然c语言在这十来年改变并不大,但是这些课本往往与实际脱节,教学时脱离编译器和运行环境孤立的讲课,比如对于数据类型所占的字节数,是跟编译器、系统环境等相关的,而大多数课本上都还停留在16位cpu时代的情况,大多数课本和老师授课时根本不会强调这点

再说上机,因为课本是老版本,所以上机的工具也是老工具,至少就我们学校而言,上机实践使用的是古老的vc6和更古老的turbo c,也许这两个产品的确非常经典,初学时拿来练手也就罢了,但是不应该在考试的时候将这两项作为考察的内容,有的甚至考察某个按钮的意义,如果你是一个vs2012或者gcc或者clang选手,那你就抓虾了

再说考试,一般来说考试分为上机和笔试两部分,上机咱就不说了,让你用古老的vc6或者turboc写个程序,笔试方面,没错,让你在纸上写程序,然后老师在纸上读你的程序,中间没有经过任何计算机编译和运行调试。你的成绩就出来了

最近还流行独立的软件学院,还有国际化教学试点,也就是英文授课,英文考试。实际情况是,的确给孩子们发了英文课本考试也是英文试卷,可是学校哪里找那么多高水平的英文授课教师啊?有的老师是对着英文ppt讲中文,有的正相反,而其中英文能说得很好的寥寥无几。

对于算法和数据结构,我深深的认为对于其中每一个,都要手动实现一边才能掌握,当然这个还是得靠你自己,老师在布置作业时一般不会强制你实践,原因是不容易判定你到底是否完成了,一般这类学科的作业是习题,只有一两次针对重要算法的大作业需要你自己实现。明白算法的执行过程和动手实现真心有差距。真正写过一便才能了解到细节!

另外,学校里教学涉及的内容很窄,必修的方面除c语言外一般最多是java和cpp,最近移动开发比较热门,故而有一些csharp或者android的选修课,此外,基本不会有热门技术或者技术热点的教学,新兴语言、web开发等方面教学都很少。

以上,结论,在大学甚至不是不是计算机专业都不重要,不要指望学校教育能让你养成良好的编程习惯或者老师们能解决你的困惑。自学才是正道
6477 次点击
所在节点    程序员
72 条回复
hexy
2012-08-22 13:21:13 +08:00
做个大的项目,或者多做小项目比看啥书都快。
binux
2012-08-22 13:33:02 +08:00
我觉得大学的课程设计还是合理的,虽然赶不上潮流,但是大学不是技校,还是以基础性教育为重。
大学的计算机课程设置都是有用,必要,而且并没有过时的。(64位和16位CPU在教授计算机原理的时候有什么不同?)

缺陷只是,你并不知道你学的这些东西有什么用,仅此而已。
zellux
2012-08-22 13:45:13 +08:00
我们学院的基础课教育还挺好的,用的教材是《Computer System, A Programmer's Perspective》,大一下大二上各上一学期,一共上一年。

课程 Lab 和 CMU 15-213 的内容差不多,上半学期的 lab 涉及了位操作、buffer overflow 攻击、汇编指令优化 (Y86),下半学期的 lab 偏系统编程,要写一个简单的 shell、malloc(给定 sbrk 函数)和一个 http proxy。总的来说所有 lab 认真坐下来收获很大。

大三上还有一门借鉴 MIT 6.828 的操作系统,lab 是实现一个支持文件系统和多任务调度的简单内核。如果之前那门基础课认真上了,这个 lab 做起来也不怎么困难。
DeeCheung
2012-08-22 13:46:46 +08:00
推荐些资源
http://www.youtube.com/user/wecolab/videos?view=1
http://sls.weco.net/CurrentSemester

台湾辅仁大学的教授弄的比较接近当下的技术学习。
zellux
2012-08-22 13:50:30 +08:00
另外我觉得使用英文教材和英文试卷挺好的啊,英文 slides 用中文讲也很正常嘛。
iwinux
2012-08-22 14:47:54 +08:00
@zellux WOW~你是什么学校的?
oa414
2012-08-22 14:59:33 +08:00
我也很想吐槽一下……作为一个马上开学的大一新生,虽然认识只是皮毛,但发现认识的在一些985,211的学生(开学大2)的同学对计算机的认识还不如我……

我的观点是:
1.当前中国大学大多是学校的计算机教育确实很悲剧……
2.计算机包含的方面有很多,精通任何一门都不容易,当然选择哪方面深入要看学生的兴趣。
3.自学确实是根本

我曾经有一个计划,写一个面向计算机相关专业的学生的toturial,简单介绍一下这个东西的方方面面,告诉0基础的那些同学,C语言不只只只是谭浩强,还有K&R,告诉同学们有 Brian Kernighan,Stevens等优秀的作家,告诉同学学计算机应该用*nix,以及其它方方面面的东西。

但是自己觉得没办法写好,就搁浅了。

如果有兴趣,大家合作一份如何?平时在网上混,知道有两三个不错的大学老师,还有一些同样的自学的强人,还有一些或许愿意贡献一点文章的牛人,我们可以发邮件或发帖询问愿不愿意合作创作。

项目可以放在github上,大家合作完成。
yeshiwei
2012-08-22 15:04:27 +08:00
所以真想学计算机应该去数学院,或者物理学院,甚至外语学院。
zellux
2012-08-22 15:16:17 +08:00
@iwinux 复旦软院
io
2012-08-22 15:31:11 +08:00
谭浩强有什么不好?
hu437
2012-08-22 15:53:48 +08:00
同意@YUCOAT的看法
1、C语言这个课程是当作编程入门课程讲的,使用什么版本,什么IDE,编译器,手写或者是上机这些都不是问题的关键所在,关键是通过C语言让学计算机的学生理解计算机编程是一个什么东西。

2、流行的东西,像android,学过java和操作系统的人学android肯定会很快,学过TCP/IP的人再学计算机网络,路由和交换等也会快速入门。看看近十几年的计算机发展,本质上其实没有什么特变变化。操作系统、数据结构、编译原理、计算机网络、C语言、软件等不说学到精通,即使是学到一般,再学习新的东西也会非常快,在现有的计算机体系下,即使是出现新的技术也当能快速入门。

学校里面教框架使用,android开发,系统开发等远不如教基本原理对将来的作用大,我想这也是为什么很多公司不喜欢要培训学校出来的,而更喜欢科班毕业的。

3、我上学的时候也觉得学校教的东西过时了,也常喜欢研究些新的技术或东西,但工作几年后回头看才有上面的想法,如果现在让我重学一次,我定不会再说操作系统、计算机原理、数据库原理、编译原理、计算方法等这些课过时,没意思,老旧了。

4、大学自学最重要,这一点何止是计算机,任何一门课都是这样的
iEverX
2012-08-22 16:21:01 +08:00
说一下自己的学校,和楼主说的还是有许多不同的。。

1. C语言,教学环境和考试环境确实是VC6,但是考试是机考,没有笔试。也没有VC6相关的问题。。
作业都是编程题,提交到评测系统进行评测
2. 数据结构,和C类似。自己不写的话,即使过了,也就是个及格
3. 就像@YUCOAT 所说,大学里教的是基础,组成原理、操作系统、网络等等一个计算机方面的根本

另外,国内的计算机教学确实有很多问题。。关键是动手过少,项目经验少。。
再另外,自学很重要,但哪个学科不是这样??
mikale
2012-08-22 16:39:22 +08:00
大学教育根本不需要涉及流行的,我认为大学教育连java都不应该教..能教lisp或者C语言就够了

其他的应该多教数据结构这些东西
holsety
2012-08-22 17:09:12 +08:00
手写代码,呵呵

其实只是想让你体验一下在纸带上打孔的艰辛而已。
PrideChung
2012-08-22 17:09:22 +08:00
同楼主一样很反感在试卷上手写代码,找工作的时候面试也很讨厌这个,毫无意义。
hoogle
2012-08-22 17:20:33 +08:00
大學教育沒必要追流行,,不是職業教育。。 老師可以隨便點一下。。 還得靠自學。。。。。
Matrix42
2012-08-22 17:30:09 +08:00
我是走了无数弯路。。。
colincat
2012-08-22 17:40:24 +08:00
@hu437 很赞同,
1.学习这件事情来说看你自己观念,如果你本身就不想学,老师再教也没用,俗话说:师傅领进门修行靠个人;
2.在大学学到的东西虽然很多是基础的,但是确让你基础更加牢固,不管技术再怎么更新也很快能适应,讲的是原理,并不是技术,也就是说大学并不是技校;
3.在大学你有充分的时间实践,机会不是别人给与的,是自己争取的,相信每个大学的计算机系都有牛人吧;
4.新技术一定要掌握,老的原理也不能丢弃,计算机本质的东西不会变太多,新技术不过就是一层一层的封装而已;
5.学好英语,自己看英文书籍,能力都是培养出来的,最近看英文的技术书受益很多,国内大部分书真的是骗钱的,好的真是少之又少;


最后还是一句,能力决定一切,不论你在哪里,从哪里来,真本事在手才是王道!
GeBron
2012-08-22 19:46:28 +08:00
好像非计算机专业基本不上 算法与数据结构 这门课,得靠自学。。。
ant_sz
2012-08-22 21:05:09 +08:00
@binux @YUCOAT @hu437

语言和编译器是很相关的,单纯讲述语言而忽略编译器的差别问题很大,在16位时代,int的的取值范围是 -32768 到 +32767。 但是VC6是32位操作系统和CPU下面的产物,int的取值范围其实是原来long的长度,而在64位计算机和编译器情况下,这个范围就更大了,这是很重要的差别,我觉得大学的计算机教育应该重视这种差别,才能让学生正确的树立对语言和编译器的概念。

有多少人认为IDE和语言是一体的?实际上,VC6也是VC这个IDE加上一套独立于这个IDE的编译器和工具链所组成的,完全可以不使用这个IDE直接在命令提示符中调用编辑器,很多计算机教学都没有清楚地说明这一点。

现在很多大学计算机教育的实际问题不是教授原理还是贴近实际的问题,而是很多课程只是照本宣科,没有充分的将其中的原理抽象出来,不能很好的传达思想,同时又没有很贴近实际,讲述的内容不能很好的应用。

相比为了更好的讲述操作系统,而自己写出 Minix ,为了更好的演示数学计算而逐步开发出Matlab这种计算机教育的境界,我们还是差的很远。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45750

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX