免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: oooooxxxxx
打印 上一主题 下一主题

[C] 抛砖引玉 你觉得大学计算机专业应该怎么教 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2011-09-01 11:57 |只看该作者
上面有位仁兄好像有点故意拔高软件工程的地位啊。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
42 [报告]
发表于 2011-09-01 12:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
43 [报告]
发表于 2011-09-01 13:42 |只看该作者
本帖最后由 狗蛋 于 2011-09-03 08:40 编辑

正常读大学的学生——当然,这个“正常”不是中国的正常——不需要老师说明一门课程的重要程度,也不需要老师逐字逐句的讲解这门课程:他只需要知道解决某个/某类问题需要了解的某个关键字,就能很快找到相关资料,并通过阅读迅速掌握这门新知识。

对正常的大学生来说,老师的作用有两个:第一是引导,第二是开阔视野。


对计算机学科来说,所谓引导,就是如何让第一次接触计算机学生们能够迅速、正确的理解计算机是怎么回事、它能做什么、不能做什么。
而所谓开阔视野,是让他们知道,解决某些/某类问题的一般性思维方法,以及业界某些很有意义、但尚未成文或者尚未提炼的新探索——的思路。



我曾教过一位同事。他觉得教材上的东西很枯燥,虽然很有用。所以他的学习方法是:不管有无理解,先背下来,以后实践时碰到了,说不定就理解了。

这,可能就是某些毕业后经常沾沾自喜于“本人有经验,有学校学不到的经验”的不合格大学生们的普遍看法吧。


而我则完全不这么认为。
比如说,你把冒泡算法死记硬背下来,有什么用?你永远碰不到需要自己实现冒泡算法的机会。多少带qsort的库啊。
当然,如果你愿意浪费时间重新发明轮子,那么的确是有机会写自己的冒泡算法的。


但,这些人没有意识到的是:他们的脑子已经被圈死了,残疾了;他们更加不会知道,他们丢掉了多大的一片世界。



那么,怎么学冒泡算法?或者说,教这个完全没有实用价值的冒泡算法,为的是什么?

要回答这个问题,不妨如此着手:

第一,何谓冒泡?相关/相似的物理过程有哪些?
这显然难不住小时候认真玩过沙子、筛子、泥巴的同学。

那么,第二,为何会有这种自然分层的物理现象?能不能定量或定性分析一下?
很简单的物理定律而已。

第三,将前面的定性/定量分析一般化。
大概结果就是:一个集合,如果针对它内部元素的某个性质做一系列什么样的局部操作,会使它们在整体上以某种方式有序。
或者:如果需要让某个集合产生某种有序结果,那么需要按怎样的规则执行一些局部操作?
进一步推广:如果已知某种物理结构/过程可以产生某种宏观功能(经典例子如自然选择、矿物在自然条件下的富集过程等等),那么如何以计算机模拟之?能否将这种模拟通用化为处理类似问题的算法?



到此为止,冒泡算法才算学会了——注意,不好意思,哪怕到了现在,我也没看过一眼教材上的“冒泡算法标准实现代码”。


很显然,这里面的一般化思路可以应用到其它看似非常不同的场景上。
比如,我曾做的一个配置命令接口自动测试框架的设计: 配置一个东西,可以看做生成一个对象;调整这个东西的某个参数,可以看在修改这个对象的某个成员,而这个成员同样可以看做一个对象……

于是,我们可以很轻松自然的把这些命令对应到数据库插入、修改、删除数据上;而这个命令的预期执行结果,数据库会告诉我们的——是的,这的确是我学到的冒泡算法。虽然上面连一点冒泡的影子都看不到了。


事实上,热门的“尖端”人工智能算法,如遗传算法、如神经网络,哪个没有上述“冒泡式思路”的影子呢。


我教一个同学编程,最后告诉他的就是:学编程不能只学计算机。机械原理、模拟电路、汽车发动机的设计图之类是更加重要的知识。你写一个程序总是吭哧好几天没有思路,我一转眼就能想出一堆办法,原因就是我不务正业,啥都想知道,啥都知道点。

这很显然。
如果你对金相学毫无了解,同时又没仔细观察过烧红的铁块是怎么冷却的,你就完全无法理解何谓“模拟退火算法”;更不可能想出以“模拟(烧红金属的)退火过程”来达到“在巨大的解空间中寻找最优解”这个目标。

当然,实践中你很少会遇到这种需要自己创造“模拟退火”这样的难度爆棚的问题。但,实践中你绝对会见到无数的、没有先例的诡异需求;要解决它们,摸索、创造一个算法出来并不难:理解它,找到内部蕴含的规律,对规律编程即可。

很显然,你深刻理解的物理/数学/化学/机械/电子等等方面的规律越多,你的思路就越开阔,抓规律的能力也就越强。这甚至可能是随积累指数增长的。


所以,合格的,或者说正常的大学生,当然应该是能够从“冒泡”算法窥到遗传算法思路、甚至设计出类似算法的那些人——或者说,举一反三的天性哪怕没有被刻意培养,至少也尚未被磨灭的那种人——而不是学冒泡就是冒泡,而且还没把代码完全背下来,需要到“实际中”历练一番才能背下来的那种人(这离“正常”二字,差的未免也太远了)。




事实上,看看老外经典,里面经常有一堆堆的、给你介绍他们尝试过、却被证明行不通的那些方案的“讨厌的废话”——这种东西,自然不像黑体字一样经典不可置疑(它们甚至根本就是错的);但事实上,正是它们,才可能真正教会你黑体字背后的意义,让你在实践中如鱼得水,甚至有机会创造出同样值得写成黑体字的经典——而不是可怜巴巴的、用实践来帮助背诵黑体字。

把脑袋锁死到“用实践来帮助背诵黑体字”上,这就是应试教育的罪恶;而帮助摆脱这种罪恶,却不应当是大学教育的责任。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
44 [报告]
发表于 2011-09-02 20:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
45 [报告]
发表于 2011-09-03 07:57 |只看该作者
回复 44# pmerofc


    是的。知识面太窄。

软件设计是一门交叉学科。很难想象一个除了计算机什么都不懂的人能做好设计。

何况,更多所谓“懂计算机编程”的人,其实不过是背会了更多黑体字的文盲,以至于除非你以某个具体的算法名称关键字来触动他头脑中缓存的黑体字,更有甚者,必须给出具体的代码段供其拷贝,否则此人只能茫然不知所措。

论坛徽章:
0
46 [报告]
发表于 2011-09-03 09:19 |只看该作者
http://zh.wikipedia.org/wiki/%E8%9A%81%E7%BE%A4%E7%AE%97%E6%B3%95

蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质.针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值
蚁群算法flash演示版: http://afoxlittle.blogbus.com/logs/37299595.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP