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

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开发等方面教学都很少。

以上,结论,在大学甚至不是不是计算机专业都不重要,不要指望学校教育能让你养成良好的编程习惯或者老师们能解决你的困惑。自学才是正道
6481 次点击
所在节点    程序员
72 条回复
YUCOAT
2012-08-22 21:37:46 +08:00
@ant_sz
写Minix要求太高了,在全国高校里面,有能力自己写操作系统的老师就只占少数。哪怕是写个bootloader。我说一下我们学校计算机专业的情况吧,他们都比较浮躁,大一还好,大一过后老是找不到自己的方向,不知道怎么学,学什么,久而久之,对计算机就抱一副无所谓的态度。到了大三大四,很多人眼看要毕业了,但又没学到什么东西,心急如焚,C语言都忘得差不多了,于是赶紧跑去培训机构培训一把。其实很多普通高校计算机专业很多学生是这样的,至于名校是怎么样,我就不知道了,我不是名校的。

我们国家IT和教育两者同时落后的时候。IT教育肯定更加落后,这不是我们这些学生可以改变的。我们不要对他们抱太高到期望,自己拿者一本经典慢慢啃,学到东西了就对着键盘慢慢敲,遇到不懂的就上网搜索,这应该是最明智的做法了。当然,如果有一个好的环境,可以和周围的同学老师相互讨论。
sinxccc
2012-08-22 21:46:01 +08:00
@ant_sz 取值范围这种东西只要原理掌握了16位的32位的64位的或者哪天再蹦出了128位的,有什么差别么?另外即使工作之后在8位16位的机器上写程序的机会也是有的⋯⋯

我觉得第一门基础语言课用 IDE 也是有好处的,可以让从来没接触过编程的人迅速跑起一个程序来,关注语言本身,而不是花上半学期去纠结如何编译的问题,可以减少很多挫折感。技术细节什么时候补都可以,接触多了自然就了解了。

对于最后一句,国内的话 skyeye 是个很成功的例子⋯
zyAndroid
2012-08-22 22:07:09 +08:00
今年刚大学毕业,东北某部属211院校,本科,计算机专业。
有三点经验之谈跟大家分享。
1.基础课很重要。C语言、数据结构、算法、操作系统、组成原理。这些课一定要好好学明白,别因为老师怂 自己也认怂不学。英语也很重要,因为计算机这行的外文文档很多。
2.逃课很重要。除了上述课程,其他自己不感兴趣的,或者明显就是在忽悠人的课程(譬如马哲),能逃就逃。
3.逃课的时间用来学习算法,练习编程。学校有ACM实验室的,请务必参加,对学习和领会算法很有帮助。平时多学些酷酷的东西,对未来发展很有帮助。比如本科毕业生里知道python和django的基本凤毛麟角。
基本就这些了,放眼望去,那些在大学里依然是乖孩子,争当党员的上进孩子,基本毕业之后就失业了。身为计算机专业的学生,他们只学会了重装系统,而且还是TM windows系统。
新生们,好自为之吧。
shanks
2012-08-22 22:14:15 +08:00
@zellux 复旦威武啊。。。CSAPP做教材确实很好,而且一年能讲多少我也蛮好奇的。。。
(其实我是羡慕嫉妒恨啊摔 T_T 都是211,985咋就差那么远。。。
zellux
2012-08-22 23:06:44 +08:00
@shanks 我们基本上都讲了,除了性能测试那一章跳过去之外。当然其他章节也有不同的侧重,比如下半学期重点就放在 memory hierarchy、cache 和 memory management 这几个章节,networking 和 signal 两部分讲得不详细,主要靠 lab 学习了。
silverbullettt
2012-08-22 23:37:41 +08:00
@YUCOAT
"编程是计算机行业最普遍,最辛苦最不值钱的行为之一!"

同学, 你知道编出好程序有多难么?你知道好的程序员有多值钱么?不要宣传这种观点。
写操作系统这事我就干过,只要有耐心肯定能写出一个(非常)简单的来,而且市面上已经有这方面很好的指导教材。但是大学里的老师啊,唉我就不说了,技术和学术水平好的可以说极少,有水平同时又教得好的,凤毛麟角啊。这样的老师我上了三年学就碰上过一个。
当然你说自学是根本,太同意不过了。其实如果有高人指点更好,但是高人可遇不可求。

@zellux 跟我们软院比,复旦是相当与时俱进啊。

@shanks,我念的也是985,也就那个样- - 不必羡慕嫉妒,自己肯努力,方向找正确,绝对有成就。比方说CSAPP,学校不用做教材,我们完全可以自己学嘛。

@ant_sz int 的定义本来就是不比 long 长,不比 short 短,设置成跟 long 的长度一样很正常啊。学校的教学没有将原理教给学生是一方面,另一方面几乎完全与工业界脱节啊!即教不好恒久不变的原理,又不教瞬息万变的新技术,所以不对学校报什么期望是明智的。

@hu437 我个人认为用C语言这个课程当作编程入门课程讲,实在太不妥了。C 语言必须学,但是放在入门不合适啊。不过


@glasslion 我们的考试也有名词解释,我靠出这种题的人简直是……不说了,你懂的。

唉,好久没吐槽计算机教学了,今天又来发泄一下,心情瞬间愉快了少许,哈哈哈。
不过光抱怨是没有用滴,只要对计算机抱有浓厚的兴趣,还有什么能阻挡你成为高手呢?
Mutoo
2012-08-22 23:44:37 +08:00
其实。。。99%的人只是陪读而已。我们自己学吧。
clowwindy
2012-08-22 23:58:35 +08:00
大学有时间不妨认真看一些书。

http://book.douban.com/doulist/1643064/
quake0day
2012-08-23 00:05:39 +08:00
支持在纸上手写代码
binux
2012-08-23 00:13:20 +08:00
@ant_sz 又不是真的要让你学过之后就用汇编干活,及时是课程设计,也不会要求int的范围。

开《编译原理》就写一个词法/语法分析器,开《形式语言与自动机》就写个完整的正则解析器,,开《计算机图形学》就写个引擎?

你以为大学学几年啊,《编译原理》也就玩玩lex/yacc,《形式语言与自动机》只要求*?+,《计算机图形学》用一下OPENGL。实际上从电子电路,到计算机组成原理,到软件工程,都是有课程设计(实践)的,但是你要求所有这些都能达到拉出去就能干活的程度,这根本不可能。计算机教授的包括电子,通信等相关科目,随便拿一个出来就够一辈子了,大学3-4年你想学到什么程度,你能学到什么程度。
undeadking
2012-08-23 00:33:36 +08:00
吐槽一个教育落后的国家的教育没什么建设性,没有方向和指导的自学纯粹是抓瞎。

我可不信你就随便看几本书做几个项目就能悟出版本管理,代码规范之类的东西来。虽然大学多数教师的水平都不怎么样,不过还是有少数能作为灯塔来指明方向的。在国内有多少靠谱的技术社区?不去学校学习难道还指望社区么?
ant_sz
2012-08-23 00:58:10 +08:00
@binux C语言作为一门接触编程语言的基础,一个基本的数据类型的范围难道不重要么?数据取值的范围会随着环境的不同而不同这种基本的概念不应该在学习编程早期就建立起来么?

我承认很多学科要学一辈子,但是不是所有上大学的人都立志去研究计算机学科一辈子。你就用那一辈子的方法给那些只学四年就要上战场的人合适么?

值得反思的是,我们的大学教育到底要培养什么样的人才,你是要培养程序员?可是你教授的东西脱离现实,让学生毕业后怎么快速进入工作? 你是要培养学术人才?但是目前来看连基础的概念确立都存在问题,计算机教师教授知识的水平也一般。

我们目前的计算机教育难道不值得反思么?难道您觉得现在这样是is just perfect?
ant_sz
2012-08-23 01:06:23 +08:00
@sinxccc 我认为数据类型宽度会随着计算机环境等因素的变化而变化是一个缩影。我们现在的计算机教育忽略掉太多这样的原理了。

我们现在计算机教育普遍不能将数据类型的宽度随环境变化的原理教授出去,而是让学生死记硬背那几个数字,让学生以为无论到了什么时候int类型的宽度都是那样。这是不对的,当学生面对更新的硬件,也不能适当的利用它更新的性能,而偶尔遇到一些小型的资源特别紧缺的设备(比如8位的芯片)他仍然按照16位的处理方法编程,就会导致很大的错误。这不得不说是一种教育的失败
binux
2012-08-23 01:35:30 +08:00
@ant_sz 明明说的是汇编好吧,决大部分计算机毕业生毕业后是不使用汇编的,这不是教授重点。数据的范围已经在计算机组成原理等众多课程中教授了,写程序不一定要用IDE,这在《编译原理》中已经教授了。而c语言课程作为计算机语言这一个目的来教授,这样的细节并不是这一门课的重点,变量、分支、循环,这才是目的。

计算机学科已经非常广了,更不论它与其他学科的关联性,不是每一个计算机毕业的都是写c的。计算机的课程设置中同时有电子电路基础也有WEB技术,那你去问问有多少计算机出身的前端会分辨二极管的极性。

大学依旧是通才教育,只不过领域被缩小了,但是还不足以小到能够在4年的时间内入门,因为门还是太多了。而这门是必须你自己去入的。
Hyperion
2012-08-23 08:51:56 +08:00
围观, 首先, 计算机这东西不知道自学, 必定悲剧, 这点应该没人反驳吧? (特例不算, 强调普适性)

然后, 知道自学, 那学校教什么还有什么区别吗?

最后, 还是决定不吐槽本楼其他回复了, 每个人的思想都是不一样的, 争论无用.

@binux 不知道怎么分辨二极管还不如去街边卖红薯 0_0... 我觉得应该问"怎么分辨三极管的脚"比较好...
qq286735628
2012-08-23 09:00:25 +08:00
大一中无意见到某公司的岗位要求,然后大学按着这要求过来了,马上进入第四年
shanks
2012-08-23 09:35:29 +08:00
@zellux
@silverbullettt 好书确实是可以自己看,但是你该明白我们已经把多少时间浪费在应付渣渣教材的上课和考试上面。。。。我一直都没想明白,为什么不直接用各种经典教材而要用国内某些渣渣教材呢?还有一些本校出的渣渣教材战斗机我就不吐槽。。。
只是我非常不喜欢一门好端端的计算机组成原理弄成单纯的背书。。。我自己看CSAPP效果比老师讲课不知道好多少。。。Orz
humiaozuzu
2012-08-23 09:51:08 +08:00
@shanks +1

我们一学期有大量的时候都是赶完全无用的作业,我们甚至有傻逼老师要求作业抄题目,然后说这是尊重老师。
一学期11门课,就算专门学学校的东西都不够,该学的更不说了。

PS:鄙人在某全国前十的学校的软院
binux
2012-08-23 10:15:32 +08:00
@Hyperion 总之,自学是需要的。但是大学的课程设置也是合理的,自学一般是不会去学《形式语言与自动机》的,但它实际上很有用。大学的课程和实际使用之间有一层纸,你需要靠自学去捅破它。但是无论你愿不愿意,觉得是否有意义,大学系统的计算机课程设置,在你捅破与实践的联系这张纸后,会让你受益的。
shanks
2012-08-23 10:18:09 +08:00
@humiaozuzu 就是这样。。。所以有时候确实蛮无奈的。。。。
(PS:全国前十的学校和全国前十的软院可是不同概念的=_,=

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

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

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

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

© 2021 V2EX