what if 让我来安排大学本科的课程

来源:互联网 发布:软件测试管理办法 编辑:程序博客网 时间:2024/05/17 03:54

    现在都快毕业了,读了3年大学,学院的教学一直让我诟病,感觉除了坑爹,还是坑爹,特别是专业的方向--嵌入式,我都不想提了。当初刚入学,人家还问我,为什么报嵌入式方向?我那时觉得又能搞软件又能搞点硬件还不错,那时还幻想能整个机器人什么的,结果上完嵌入式,彻底摧毁你的兴趣。实验室那些都不知是什么鸟开发机,上课跟实验都乱七八糟的。

    不过,既然你说它不好,你就应该提出一个更好的解决方案。那好,现在让我来构建一个乌托邦。

    现在来安排一个大学本科的计算机类专业教学计划吧。

    先列举我的基本原则吧。   

  1. 笔试的话,原则上采用开卷考,因为我觉得,靠背诵,靠查书就能解决的问题就不是问题,人是用来思考、分析问题的,背诵的话,交给机器就行。其他笔试的话,像不少公司的笔试题那种,我觉得就应该闭卷,因为都是很基础的东西,一些很基础的东西还去查书?我觉得说不过去。所以总结一下,有些知识要静态链接到程序,有些需要的时候动态加载就行。
  2. 分数采用等级制,也就是ABC。我不觉得考99分的就比98分的强,但我觉得如果学得好的话,拿A应该没问题,对分数看得太功利我觉得会让学生变得猥琐。
  3. 重内容,轻形式。实验报告什么的,能少写就少写。牛顿要是当年要写那么多实验报告,肯定发明不了电灯泡!这东西没少写过,有没有用我心里清楚的很。重要的是实验或者代码实现成功实现没有,而报告只是一个形式。搞成现在,要交作业就大家互相抄来抄去,有些人抄得分数还不错,可是还是什么都不懂,有意思么?要布置些有用的东西,而不是为了打包给学院存档。当然,文档也是重要的能力,但我不觉得写这东西有鸟用,还不如写写博客,总结心得什么的。点名批评嵌入式和网络的实验,都是些TM坑爹货,按手册一步一步操作算啥?而且,到了大四写论文,看到到处在分享一些论文怎么排版的日志,写了这么多文档,到头来连个word都不会用,难道不觉得羞愧么!
    @潮州在外学子社团  昨天在银行~我旁边坐着一名中年男子紧紧拽着这么“厚”的一叠钱,我好奇问他这是存钱吗?他说是给读大学的儿子寄生活费~我问他可否让我拍一张照片?他点了点头,说可以。我只是想问,这是谁的父亲?你要爱他。如果被我发现你在宿舍玩电脑,我第一个赏你耳光,不为什么,只因为他排了足足一个小时的队。

  4. 取消选修学分值。自己觉得喜欢学点啥就去学吧,学校的课不爽,去整点开源项目什么的也是不错的选择。课程安排也可以弱化,不要用课程制,用主题实验室的方式或者兴趣小组都不错,给学生最大自由。搞得学生为了学分而选课,没意思。

    对于教学课程,我的打算是大课程化!相关的课程合并到一起,消除课程间的割裂,加强课程间的联系。具体的课程安排:
  1. 算法与数据结构。课程包括c语言,离散数学,数据结构,算法。编程语言的话,我还是会选择c,当然这里的c泛指c/c++(不包括面向对象部分)。据说国外的大学有用java,python教学的,但我觉得吧,用c语言目前还是具有一定的靠谱性,因为搞acm主要还是用c (*^__^*) 。怎么说呢,c比较偏底层(比如指针,这东西其实可以不用暴露给程序员,java就没有指针。),对于理解计算机或者编写底层软件有好处;而像java,python这些语言,是后来发展的,适合用来“编程”,可以把精力放在“程序”本身。嘿嘿。课程的话,一定要强调动手能力,基本就靠机试来考察吧,平时作业你爱抄什么的随便。  
  2. 数理逻辑基础。高等数学,线性代数,概率统计,数论,具体数学什么的吧。当年高数没学好,很惭愧。数理逻辑是很重要的素养,这些课的话,联系不是特别紧密,就可以分开上,不过我觉得要跟编程结合起来一起上,比如线性代数,好像跟图形学联系很紧密(我没上过这一块的课,不敢妄言)。而概率统计在数据挖掘很有用!!我想起高中那些数学不好的学生,一直有这样的抱怨,数学学来干嘛,有计算机就行了啊。我想,学校除了上课,最好把为什么要上这门课的原因交代清楚,毕竟不是所有学生都悟性那么高,而且人一遇到困难就容易给自己找借口开脱。这种课我想有不少学生都会抱怨学完有什么用,所以最直接的办法就是联系具体应用,把数学的power展示给学生看。现在的状况就是,在上课的时候,“WTF,这课学了有毛用啊!”;等到要用的时候“WTF,后悔当初这门课没好好学”
  3. 面向对象与软件工程。语言c++/java任选,注意跟自己以后职业规划match。虽然我觉得语言只是工具,并不重要,但是面试java岗位的时候面试官问你java的问题,你说你只会c++,会让大家觉得很为难的,现实有无奈的地方。语言安排学生自学就行。课程完成一个相对大型的project,先用面向过程写,然后改写成面向对象,最后再加上设计模式。大学的c++课还是停留在“要把代码写到类里面”的程度,然后举一些扯蛋的创建类例子,比如人,汽车,动物什么的乱七八糟的派生,上完表示对面向对象还是一头雾水(难怪还没有对象,^_^)。人类对事物有一个认识的过程,我认为人为地割裂开不科学,所以安排了2个工程改写的过程,目的就是让学生了解整个发展过程。为什么要用面向对象?肯定是因为面向过程有不足。我觉得这是个重要的问题,是应该重点对比清楚的问题。至于软件工程这课,现在觉得唯一比较有用的就是介绍了版本管理软件的使用。其他的话,没有一定的工程经验,跟你谈软件工程,这本身就是扯蛋。还有那《系统分析与设计》恶心的分析寄存箱作业,现在想起来还是觉得蛋疼。
  4. 深入了解计算机系统。课程包括计算机科学概论,计算机组成原理,操作系统,汇编语言,linux编程(APUE)。课程最后写个小型的操作系统,差不多啦
  5. 网络应用课。学院大三才上网络课,而且上完还是什么都不懂,坑爹。实验课更是傻B无比。买了一套网络的书,等研究下。  
    好像是清华的作业,看啊,这就是差距!感觉这样的作业不错啊,就是后面的“提交详细实验报告”感觉比较恶心。
  6. 数据库。企业关注的锁,存储过程,高并发,性能,跟教学的关注点好像都搭不上。  

    选修课?

  1. 乐高魔方机器人。应该蛮好玩。
  2. 编译原理。学院那个实现一个编程语言还蛮不错,可惜那时候大三下学期没时间做,等有空再做做,编译原理是个好东西,感觉放到必修不错。跟webkit结合起来好像不错。
  3. 翻墙与反翻墙。太敏感,我觉得学院肯定不敢开这课。
  4. 黑客攻防战。目标可以是自己学校的网站,嘿。
  5. 游戏开发。引擎,图形学那种。不是我们学院那个老头开的吹水课那种。
  6. 开源项目的研究。
  7. 等等。。。


    找工作?

    之前看到的说法,大学本科是基础教育,不是职业教育(北大青鸟?)。那本科出来找工作不就是坑爹吗?不管如何,工作还是要找的,作为学院我觉得还是得为学生以后就业在课程安排上提供一些引导,而不是在就业推荐表这种傻B玩意盖个章就了事。学院是有分专业方向的,不过现在看来,应该是失败的(不同意可以来探讨下)。我觉得吧,现在入学时大方向统招是趋势(先打完基础再说),然后根据岗位提供一些对应的选修课系列供大家选择更靠谱(分测试,运维,开发等,而不是什么计应,通软之类不靠谱的玩意。BTW,当年上了软测的课,表示很坑爹)。大学四年,说白了就只有3年,好短啊。哎,哥现在后悔都来不及了,哎,不说这个桑心事了。


     最后再吐槽一下学院的学费和招生吧,软件学院学费出名贵,我觉得这是一个相当不好的行业规则。另外中大软件调剂的学生太多,一来耽误这些学生的前程,二来也影响其他想学的学生(大作业,组队,想想就恶心)。软院有在一步步好转(比如C语言注重上机了)这是事实,只是苦了哥这批小白鼠。

     多反思,多总结,是好事。现在回想起来,大学基本过得比较失败,浪费了不少时间在一些不知所谓的课程上,大学的课程,从安排和内容上看,肯定是有问题的。像有些人,只顾自己编程,挂了很多课,最后也牛B哄哄的;有些人,分数考得很高,动手写个程序都写不好。。。我觉得一个成功的学院,应该让每一个踏踏实实学习完毕业的学生都能有足够的编程素养和能力。


    鄙人才疏学浅,欢迎大家交流探讨。

    
    
   

附:在麻省理工读计算机专业 看美国的计算机教育【转】

美国, 麻省, 计算机教育, 理工, 专业 清华本科5年,和许多同志们一样为着一个闯荡世界的梦想苦苦努力,98年终于在历尽千辛万苦之后,踏上北美大陆。这两年来当真是感慨万千,清华的学习生活我算是深有体会,而北美大学的学习生活我也可以算是领会了个中滋味。相信国内的许多好学上进的DDMM们还处在一种梦想和憧憬的阶段,如我两年前一样,在这里我穷一己之力,希望能作一比较和介绍,让大家在国门之内能够了解到清华与北美的学习生活之同之异与差。切入点我选择的是中国和美国的名牌老大:清华和 MIT。

从生源上讲,美国没有那个学校可以把全国各省的理科状元和前十名大半收入囊中。MIT虽然始终在理工科方面独占鳌头,但是加州理工学院、 Stanford、Berkeley等名校并不逊色太多。像Stanford更是以地处硅谷、生产杨致远型的资本家而独具吸引力。从优秀学生的聚集程度上讲,大概MIT加上Stanford都不足以与清华一拼。

TOEFL和GRE毕竟没白考,上课能听懂百分之八九十。本来用于录老师讲课内容的单放机只带了一次,也没开录,后来再也没带过。阅读课文也没有太多的困难(哪有GRE歪词那么多)。美国学生实在是基础差,又不用功,一百分的作业得不到五十分的一般都是美国人。(日本、印尼等其他国家人的英文名字读起来可没有美国人的那么顺)。但是,这里的课程负担可实在是不轻松,一般来说,选三门课上是标准(不少人只敢选两门);能上四门课的人堪称不同凡响;五门课?最好不要想。

我在这里的第一学期上了一门叫《计算机系统设计》得本科课程,其辛苦程度真实一言难尽。十五个星期内交了十次作业,作了六次课程设计。有的设计还分几个部分,分开交设计报告。所以设计报告大概也交了有十次左右。最恐怖的是有一次,十天内要交六份作业或设计报告,而且当时正值其他几门课正在期中考试。抱怨是没有用的,老师说:"我很抱歉。但这门课很重要,请大家不停的工作。"学生从一般的逻辑时序电路开始设计(数电都已忘得差不多了);核心是自行设计"麻雀虽小五脏俱全"得ALU,单指令周期CPU(single cycle CPU);多指令CPU(Multi-cycle CPU);以直到最后实现流水线(pipe line)32位MIPS CPU和Cache。一门课下来,所有与计算机CPU有关的知识全部融会贯通。硬件设计水平也有了很大提高(就是太累)。

在清华的本科课程中实在找不到这样一门如此实在的集理论实践于一体的课程。计算机系的TEC-II型试验计算机几经是全国独家了,但是试验安排并没有触及核心(TEC-II机是微指令时的计算机)。缺乏动手设计环节是学生对CPU原理的了解比较肤浅。

当初我作微指令实验时曾由茅塞顿开的感觉,但是现在才发现远远不够。至于全校性选修课《微机原理》的水平就不用说了,至今我想起老师的一句话还有些心痛-- "学通了八位机,十六位机、三十二位机的原理是一样的",MIPS怎么可能和十六位CPU相提并论?在anford,本科生也有相似的计算机系统设计课程,但是要求学生用VHDL语言(当今IC设计标准语言)实现,清华的本科生由几个会用VHDL?在清华曾上过《操作系统》这门课,要在 Linux基础上作四个project,六个人一组,可以期末一起交。我在计算机系的同学直到期末前两三周仍叫我不必惊慌,说最后一两周内定会有牛人做出来,大家都可以搭车。我在这里的情况则不同,也是四个project,三个人一组,每三周交一个project。

如相似之处过多,当即受到质询,处罚办法抄者被抄者各扣50分(满分100),被罚者早有先例。交作业时间是某个周日晚11点59分59秒,网上交作业,半秒钟也不许拖延,到时间传输停止工作,谁也交不成。所以大家只有坐下来勇敢的面对困难。

其实,三个星期短得不合理,因为第二个星期与Project相关的课程才讲完。唯一的方法就是熬夜--第三个星期,从晚上九点到凌晨两三点,公共机房的数十台工作站前座无虚席,几乎每个人都要连续熬夜;凌晨三点有人开始支撑不住,而熬到六七点的也不乏其人。教师在上第一节课时曾展示过一块白布,上书"我宣布投降"和几十人的签名。这份由败在Project手下的学生赠送的礼物被老师悬挂在办公室的墙上。而我对这门课的感觉只有一句:我开始明白操作在清华,计算机系的《操作系统》和《计算机原理》是体现了其应有的份量的。

再有像美国的VLSI设计课程在清华很难找到其应有的设计实践效果。这里的VLSI设计课程上到深处,学生就可以做出实实在在的ASIC芯片,然后拿着自己的设计去硅谷或别处工作面试,说:"这是我作的东西。"清华大概没有真正的"企业级"集成电路设计试验课程--这也不奇怪,全中国现在都在作板子而不是" 片子"。[b]美国大学的教授对授课的认真程度有高下之分,但任何教授都不允许抄袭。这一点我在前面已经提到了一些。有一个教授的话很据代表性:"发现抄袭很难;但我会竭尽全力。"[/b]

另一个共同特点是他们上课一般不会沉闷的让你想睡觉。它们的幽默虽不像新东方的宋昊那么多,但是往往恰到好处:比如一个教授说"有的黑客只是看一看,就像女人逛商场";有一个教授每当学生回答出一个较难的问题时就赠送一美元;一次课堂上学生回答问题时说"这要看实际情况(Itdepends) ",教授对大家说"怎么像政客说的话"......总之,这里你一般碰不到在清华常见的"面苹果"老师。比较认真的教授的责任心是令人钦佩的。一个教授在学生课程最重的时候,把家中的电话留给学生,告诉学生说晚十点前可以打电话请教。我有一个同学修一门课,最后一个Project做到半夜三点时完工,大呼轻松之余上网解闷,发现一封新的E-mail,原来授课老师也工作到半夜三点,有设计了一个新的Project叫学生作。

再比如说美国教职人员活着很不轻松,一般没有国家投入这一说。如果自己不能做出成果拿到企业界的资助,处境就会相当艰难。助理教授(assistant professor)升副教授可不像国内这么容易。在princeton,五年内拿不到终身职位(tensure)就请卷铺盖走人。Princeton 大多助理教授都是这种命运。我所在的学校化学系的一个教授就是被princeton轰出来的,现在已经是某个领域中的带头老大一级的人物了(天啊, princeton也太横了)。像这种人,Princeton 又会利用其巨大的名望、优厚的待遇和良好的研究条件把人吸引回来。

前几天和国内同学联系,听说一个现在是直博生的本科同学一学期要修九门课,下学期则专门为老板出差。另一个硕士生一学期中半学期旷课为导师出差。首先以美国的课程标准,这样做大概死定了;其次,美国教授一般会让自己的学生多参加研究工作而不是做重复性项目。美国的博士生一般有一个资格考试,在硕士期将近结束时进行。[b]形式时提出一个新兴课题,摆出方案,由五人评议小组审核课题的新颖程度,意义和方案可行性等。[/b]通过资格考试,你才可以在这个课题上开始你的论文研究。如果评议期间有人就同一课题发表了阶段性研究成果,你就必须修改课题甚至从头再来(作一次要看遍所有相关论文,还要做准备性的研究,要半年多时间呢,全废了可够点背的)。准备资格考试过程中还要修课呢,谁有时间出差?好多教授都让学生全心准备资格考试。

这种考试算轻松的, UCLA和加州理工学院的化学系博士资格考试有这么一项:几个教授从某篇新发表的文章中(博士生大概还读不到或并不在专项领域内)提取课题,让博士生在两三天内提出解决方案(人家可是作了好几个月才发表文章),以此测验学生对前沿研究的敏锐程度。这种考试有时一个通过的也没有。合格标准是十次中必须通过四到五次,过不了就对博士梦说永别吧。导师也许会帮助说话,但是像[b]加州理工学院明确规定,百分之二十左右的博士生再优秀也拿不到博士[/b],我可知道一个北大生物系的女生berkeley苦战四年,最终落马,现在硅谷某生物公司工作,年薪两万多(这点钱在物价飞涨的硅谷可不太好混)。

据说,加州理工学院六年博士毕业者就是天才,MIT有些博士生则耗时九年。清华的博士水平是很高的,但有时导师会让学生不用参加自己开的课的考试,有时会在该做论文研究时让你出差,然后再想办法让你的论文不战而胜......

《操作系统》这门课的MIPS模拟平台和基础代码(不是Linux或 MINIX)是由berkeley的一位教授设计的,现在为多个大学采用。值得注意的是这是一个非盈利的项目,对于这位教授的升迁和获取工业界的资助也没有任何帮助,而且不知耗费这个教授多少可用来做项目赚钱的时间。

本文写到此处,我不禁怀疑自己太悲观或是忘本,TG期间我也是靠课程轻松和抄兄弟们的作业才挺过来的。但我清楚,即使像VLSI这样的硬件抛开不说,清华的课程管理决不能与MIT相比,也许六十年代是可以的。每一个清华人在海外都享受着清华两字所带来的荣耀,我衷心希望清华成为一个让平庸者却步,让挑战者兴奋,让优秀者更优秀的世界级学府;而不是只靠名气招揽人才却只提供平庸的教育。这才是我写本文的初衷。

原创粉丝点击