| 查看: 2935 | 回复: 10 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
[求助]
大家看看,我该如何投稿到哪个期刊?《从金庸的武学视角谈计算机编程思维的培养》
|
|||
|
从金庸的武学视角谈计算机编程思维的培养 摘要:以计算机编程思维的培养为研究对象,从金庸的武侠小说与计算机编程的联系出发,讨论了兵器、内功、武术修养与编程语言、集成开发环境、算法基础等的联系,探讨了各种编程语言的异同,基于武术内外兼修的思想,探查了计算机编程的理论功底的建立和数学思维的培养的途径。 关键词:兵器、功夫、编程语言、算法、思维培养 金庸的武侠小说与IT世界是有联系的。武侠小说离不开武功,练武之人少不了兵器,就好像IT世界离不开编程,编程之人少不了编程语言和开发环境。武侠里的兵器和信息技术里的软件开发环境,用时髦点的说法,都属于人的生产工具,这样一来,两个世界就有了基本的联系。兵器多种多样,刀枪棍棒斧钺钩叉;编程语言和开发环境也是琳琅满目,让人目不暇接,比如说基于Pasical的Delphi、Visual C++、基于Java的Eclipse、基于C#的Visual Studio 2005、基于C++的QT、Matlab、Borland C++、Ruby等等。接下来我将以我自己的理解来寻找一些对应关系。Delphi,其内置的Pasical语言语法简单,屏蔽了很多底层内容,加上开发环境带有的大量组件,容易上手,适合快速开发。其易于上手的特点与兵器中的刀很相似。C#,微软开发的语言,取义sharp,锋利的,开发利器,像匕首一样。Java,面向解释的语言,同样的代码能在多种系统上正常运行,Java就像一把长枪,能在短兵器望尘莫及的地方发挥作用。如果说Delphi是刀,那么VC++就是剑了。剑既不如枪的作用范围大,也不如刀易于使用,但历朝王公帝侯,文士侠客,商贾庶民,莫不以持之为荣。C++的程序难以同时在各种平台上运行,学习起来也困难重重,但历数各领域的著名软件,从Windows到Photoshop,从World of Warcraft到KMPlayer,均是由C++程序集合而成。《碧血剑》里提到,“一年练刀,七年练剑”。刀只有一面刃,挥砍是其最有效的攻击方式。而剑不但有两面刀刃,一般还有尖刺,因此用起来变化更加复杂,招式以劈、砍、崩、撩、格、洗、截、刺、搅、压、挂、云等为主。在实际开发中,C++也具有多种用途,图形图像处理、操作系统、嵌入式开发等等,都能见到C++的身影。 一、武术的兵器与编程的语言选择 兵器的使用依靠着灵活、有力的形体动作来实现。一个练武之人,没有迅捷的形体功夫和扎实的拳脚功底,便难以将兵器应用到得心应手、出神入化的境界。一个编程之人,没有对计算机底层硬件原理的深入了解或者对编程语言的基本逻辑流程有深刻的认识,在开发过程中必然会遇到巨大的困难。我们都知道,C语言有两方面显著特点,一是它面向底层硬件,可以直接对内存进行操作;二是它的逻辑结构完善、简洁,与其它高级语言在功能上并无巨大差异,是学习使用其它语言和开发环境的有益入门。由于C语言的这些特点,使得它与武侠世界中的拳脚功底有了联系。 上面提到的兵器与拳脚功夫,在金庸小说的世界里,被统称为:外家功夫。外家功夫固然重要,但是,对于一个练武之人来说,内家功夫也就是内功的深浅,才是衡量其武术修为的真正标准。高手之间的较量,往往都不需要兵器,只需要肢体上的接触即可完成。比如说在武林大会上,郭靖为了救杨过,与金轮法王对了一掌,之后他们马上就知道对方的实力如何。从这个细节中我们也可以看出,内功的深浅是通过外功表现出来的。没有强大的内力,再漂亮的外家功夫也只能算是花拳绣腿;不通过肢体的运动,再深湛的内功也展现不出来。在编程的世界里,逻辑和数学思想可以算得上是内家功夫。比如说,同样行数的代码,有的只能实现简单的功能,有的却能在实现强大功能的同时占用较少的系统资源。同样的,在编程的世界里,内家功夫,也就是逻辑和数学思想才是衡量编程技能的真正标准。内功的深浅是通过外功表现出来的,但是也往往不需要兵器。编程能力的高低也通过具体的编程语言来体现,也往往不需用到高级语言及其开发环境。因此,在招聘的过程中,用人单位很经常会要求应聘者使用简单的C代码来实现某种具体的功能,以检测应聘者的编程技能水平,这就像是金庸小说中的武者在用肉掌比试内力。下面我举一个例子。 比如说大学里的大学生公寓,共10层,有一部可容纳10人的电梯。在同学下课回宿舍时,如果电梯每层都停,会严重影响到使用效率。现规定,当同学们在一楼进入电梯并按下各自想去的楼层后,只能在2-10层停一次,然后同学们在这一层全部走出电梯,步行至自己的楼层,电梯再直接返回至一楼,运送下一拨同学,如此反复。如果说上一层楼要消耗能量3,下一层楼要消耗能量1,那么问,电梯应如何选择要停的楼层,以使得当前电梯里的同学回到自己的楼层所消耗的总能量最少? 设电梯在第x层停靠,这样,从第二层开始枚举直到第十层,如果电梯在该层停靠,计算出所有同学出电梯后爬楼所需要的能量,获得能量最小值的楼层即为电梯应停靠的楼层。代码1如下: 代码1: int nPerson[]; int nCalories, nMinCalories, nTargetFloor; nTargetFloor=-1; for(i=2; i<=10; i++) { nCalories=0; for(j=2; j { nCalories+=nPerson[j]*(i-j); } for(j=i+1 ;j<=10; j++) { nCalories+=3*nPerson[j]*(j-i); } if(nTargetFloor=-1 || nMinCalories>nCalories) { nMinCalories=nCalories; nTargetFloor=i; } } Return(nTargetFloor, nMinCalories); 代码2: int nPerson[]; int nMinCalories, nTargetFloor; int N1, N2, N3; nTargetFloor=2; nMinCalories=0; for(N1=0, N2=nPerson[2], N3=0, i=3; i<=10; i++) { N3+=3*nPerson; nMinCalories+=3*nPerson*(i-2); } for(i=3; i<=10; i++) { if(N1+N2<3*N3) { nTargetFloor=i; nMinCalories+=(N1+N2-3*N3); N1+=N2; N2=nPerson; N3-=nPerson; } else break; } return(nTargetFloor, nMinCalories); 可以看出,以上代码时间复杂度为O(n2)。下面进一步进行分析。假设电梯在第i层楼停靠,可以计算出所有同学爬楼总共需要的能量Y。设有N1个乘客目的楼层在第i层以下,有N2个乘客在第i层楼,还有N3个同学在第i层楼以上。实际上,这个Y可以进行计算,但是我们没有必要计算,只需要利用这个Y来得到N1、N2和N3的关系即可。这时,如果电梯改停在第i+1层所有目的地在第i层和第i层以下的同学都要多下一层,消耗的能量为N1+N2;所有第i+1层和第i+1层以上的同学可以少爬一层,那么节省下来的能量为3*N3,即,消耗的能量为:-3*N3。如果Y+N1+N2-3*N3 二、练武的环境与编程的集成开发环境 在《神雕侠侣》中,有些章节经典地描绘出内家功夫和外家功夫的关系,我不妨在这里与大家一起回顾一下这些场面,以期能发现于现实世界中有益的类比。话说杨过被郭靖的大女儿郭芙砍下了右臂,他不愿再呆在郭家里,遂寻了一匹军马,往荒僻之处行去。行到一处荒谷,杨过再次遇见曾有过一面之缘的神雕,神雕把杨过带到了剑魔独孤求败埋骨处的石洞。在神雕的照料下,杨过在石洞内修养,断臂的伤口渐渐愈合,身体也日就康复。一天他在石洞附近散步,偶然发现了位于一处峭壁顶端的当年独孤求败埋剑的地方。他在这剑冢之中正自感慨,神雕赶来,用双爪搬开一些大石头,给杨过展示了剑魔所埋的剑。只见有三柄长剑并列在一块大青石上,在第一、第二把剑之间另有一块长条石片。杨过拿起第一把剑,剑下青石上刻有字:“凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋。”然后,杨过拿起第一、第二把剑之间的长条石片,青石上也刻有字:“紫薇软剑,三十岁前所用,误伤义士不祥,乃弃之深谷。”放下石片,杨过拿起第二把剑,这剑虽三尺来长,重量竟不下七八十斤,青石上刻字:“重剑无锋,大巧不工。四十岁前恃之横行天下。”最后,杨过拿起第三把剑,这竟然是把几近腐朽的木剑,剑下石刻道:“四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进于无剑胜有剑之境。”这段文字以剑术为着眼点,精辟地揭示了武艺修为的几种境界和进阶要点。这与编程技能的相关特点非常接近。以VC6.0为例,无论我们对这个开发环境有多么熟悉和精通,如果要用来解决实际问题,核心和本质是我们必须掌握各种解决问题的手段和方法。比如说在信号处理领域,如果要对某一信号进行相关的特征提取和分析,没有诸如傅里叶变换、加博变换等数学手段,仅有对程序开发环境的功能和用法的精深理解,是很难有任何收获的。相反,如果我们掌握了大量的数学理论与逻辑表达方法,再加上过硬的编程基本功,用C就足以解决各种复杂的问题。因此,编写程序的关键是要精通各种解决问题的方法和手段而不是客观因素。“自此精修,渐进于无剑胜有剑之境”,这也是编程的高级境界。 从独孤求败生平用的几把剑来推理,可以认为深入学习编程技能,需要有两个基本的条件,第一是扎实、朴素的开发环境,第二是持续编程的动力或者说压力。首先看独孤求败30岁前用的两把剑,前者锋利,后者柔软。前者之锋利,降低了剑法中内力的要求;后者之轻灵,使得剑法更拘泥于形体的飘逸和舒展,也不利于内力的精进。就像是编程初学者一开始就用有垃圾回收机制的开发环境,这肯定不利于其加深对编程和计算机运行等原理的理解。直到独孤求败用到玄铁重剑,才认识到“大巧不工”——最朴实、最能够激发武者自身潜质和悟性的兵器才是最优秀的兵器。在杨过分别观察了这几把剑后,神雕执意让杨过选了玄铁重剑,并开始对他进行训练。不几日,某天大雨,引得山洪暴发。神雕带着杨过来到一处水流湍急的溪前,让他跃入水中,用剑逆流击打顺流而下的大石。一开始杨过进入水中,站立都不平稳,逐渐地他开始使用内力来与激流相抗并执剑挥击水中的大石。随着水逐渐变深,从腰没到胸,从口到没顶,他就想跳上岸稍作休息。可是神雕一见他往岸上跳就把他击到水里,如此反复,总使杨过不能得意。最后杨过索性就在水里练了半日,仅换气时候跃出水面。刚开始还觉得无比疲惫,几乎无法再支持下去,可越到后来越觉得体内真气充沛,并不觉得很累,并逐渐悟出了许多顺刺、逆击、横削、倒劈的剑理。到这时杨过方始大悟,以此使剑,真是无坚不摧,剑上何必有锋?其时大雨初歇,晴空一碧,新月的银光洒在林木溪水之上。杨过瞧着山洪奔腾而下,心通其理,手精其术,知道重剑的剑法已尽于此,不必再练,便是剑魔复生,所能传授的剑术也不过如此而已。将来内力日长,所用之剑便可日轻,终于使木剑如使重剑,那只是功力自浅至深,至于剑术,却至此而达止境。在一段时间以后,神雕又带着杨过在汹涌澎湃的海水里练剑,结果杨过领悟到“无剑胜有剑之境”。加上自己对小龙女的思念,最终他自创了“黯然销魂掌”,并以此拳术击毙了金轮法王,打退了蒙古军队对中国的讨伐,成为不朽的侠客。 除了客观条件和主观要求,下面分析一下郭靖和杨过的武功家数,看看是否还会有一些收获。郭靖自幼年开始,师从江南七怪习得多种外功,因其在蒙古军中长大,本人是蒙古式摔跤的高手,下中原前得全真派第二代大弟子马钰亲授内功,来中原后受北丐洪七公传授降龙十八掌,周伯通亲传七十二路空明拳、左右互搏之术,授一灯大师指点,学得九阴真经总纲。杨过生平自全真教学得玄门正宗内功的口诀,自小龙女学得玉女心经,在古墓中见到九阴真经,欧阳锋授以蛤蟆功和逆转经脉,洪七公和黄蓉授以打狗棒法,黄药师授以弹指神通和玉箫剑法,除了一阳指之外,东邪、西毒、北丐、中神通的武学无所不窥。经过比较我们可以看出,郭杨这二位武学宗师的武功家数有以下几个相似点:第一,内力的修为对他们武艺的进境都有着至关重要的影响;第二,武艺均博览众家之长;第三,外功为内功的修炼提供了基础,内功为外功的精进指明了方向,他们武艺的进步都遵循着由外及内然后由内及外的过程。这些特点暗示我们在学习的过程中应该以学习、研究、总结解决问题的思想为主导,多尝试多接受新的编程语言环境和开发任务。这一点与现今的学历制度是并行不悖的。拿“博士”这一学历层次来说,其“博”是在解决问题的方法和思想等“内功”上涉猎广博,并不是说“博”在外家功夫上。外家功夫只是内功的表现方式,多尝试外家功夫是为了最终选择出最适合自己的表现形式,以求将“内力”发挥到极致。从小说中也不难发现,郭靖到了中后期几乎只用降龙十八掌,而杨过到后来也只通过黯然销魂掌这一种外功施展强大的内力。同时,从郭杨二人的奋斗轨迹中也不难看出,他们的成功也离不开自身对武艺不懈的追求。因此,我觉得,涉足IT领域的我们,也应像习武之人每日操练一样,善于用动手编程的行动来解决实际生活中的问题,如此坚持下去,定当有所收获。 三、内功修养与编程的数学思维 在江湖上,各种拳脚功夫多如牛毛;在IT世界里,用基本的C代码实现的功能模块也不可计数。在武侠世界,有一种常见的形体功夫叫做擒拿手,这种功夫以抓取敌方兵器或反制、挫伤敌人关节为目的,依靠迅速有力的臂和手部动作对敌人进行攻击。擒拿手包含大擒拿手和小擒拿手,它们是金庸小说的武侠世界中的基本技能,其口诀和心法都是练武之人最基本的知识。在信号处理领域,有一种常用的方法叫做傅里叶变换,这种方法的作用是将处于一个空间内的信号通过改变原空间基底的方式把信号“抓”到其它空间里表示。傅里叶变换包含连续傅里叶变换和离散傅里叶变换,它们是进行信号转换的基本过程,其原理和实现,都是基本常识和基础知识。这又是一对新的联系,见图1。 图1武学编程的数学思维 在金庸小说里,有一部叫做《九阴真经》的武功秘籍贯穿了多部作品,武林人士将这部秘籍奉为圣典,认为谁拥有了它就能无敌于天下。《九阴真经》原作者是北宋年间一位叫做黄裳的文官。因早年负责整理校对道家经典,过程中竟然悟通武学义理,后来将毕生所学记录下来。《九阴真经》博大精深,是金庸小说中著名的内功秘籍。它分为上下两册,下册记录外功招数心法,上册记录配合下册的内功运行原理和修炼纲领。《九阴真经》在信号处理世界里,就像是一部算法精编,分别在上下两册里记录着各种高级信号处理算法的数学原理和实现代码,其效果比普通的方法更明显更有效,需要有一定的内功修为也就是数学和逻辑基础才能习得。下面举一个例子。由于傅里叶变换无法达到脑电波、地震、语音等信号的实时性要求,故人们又用加博变换对这些信号进行时频分析。可是海森堡测不准原理指出,加博变换的分辨率不能在时频域同时无限制减小,故小波理论开始进入人们的视线。小波变换的作用也是将处于一个空间内的信号通过改变其基底的方式把原信号抓到其它空间里表示出来,但是它具有时频域能同时进行局部化的特性,按照人们的需求,在信号的低频部分频窗可以足够窄,而在高频部分频窗可以足够宽。因此,小波变换被誉为信号处理领域的“显微镜”。见图2 图2编程的算法基础 通过与擒拿手和傅里叶变换的比较,如此看来,小波变换真像是“九阴神爪”!“九阴神爪”是记录在《九阴真经》下册的外家功夫,郭靖就用过,不过大家可能更多的听说过“九阴白骨爪”这种阴邪功夫。同样是《九阴真经》的外家功夫,怎么差距就这么大呢?原因是梅超风从师父黄药师那里只偷到了《真经》的下册,少了对其内功原理的理解,神功必然练至异境。比如说,《真经》下册中指出以爪击敌人“要首”,配合着上册的理论,很自然的是用爪击敌人要害的意思,可是梅超风却误认为是爪击敌人的头部,因此练这功的过程中残害了不少无辜的人。而她自己,不但被江湖中人四处追杀,也因鲁莽练功,走火入魔,把自己两条腿给练残废了。从这个例子中我们也能深刻体会到,别人的代码,在弄懂原理之前千万不能随便拿来用,否则不但容易遭到他人声讨,也很容易走火入魔,反受其伤。 四、小说的编程思维培养途径 随着学习和研究的深入,这种联系和启发还有很多,通过对比与联系,对相关领域的学习兴趣增强了,对相关技能的理解也有所提高,学习的目的也更加明确和清晰。通过金庸小说,使人们明白了为什么C/C++技能在应聘时是如此的重要,为什么各种各样的类库都要用C/C++的,为什么程序员都需要精通C和C++。金庸的小说给了明确的指示。 小说高于生活,但却源于生活,武侠小说也是如此。正因为金庸的小说从具体生活中来,它才会如此的精彩,如此的引人入胜。经得起时间考验的经典的小说无非以下几种,一是小说体现出作者对社会的某些规律有着深刻的理解,阅读这样的小说会让读者快速地获得经验和阅历;二是作者对社会的某种弊端或缺陷有着深刻的洞察,以小说的形式来进行揭示或者提供新的解决方案;再就是基本符合客观规律的意淫类小说,令读者在阅读的同时获得极大的快感。金庸的系列作品完美地将这些特质融合在统一的武侠世界里,作者对现实规律的深刻认识与把握更使得人们沉醉在作品中。如果将前面介绍的内容进行一下推广,只要包含劳动者、生产工具的具有一定技术含量的现实生产生活都可以与金庸的武侠故事进行某种联系。所以,人们在享受金庸小说阅读乐趣的同时经常会得到一些有关现实世界的启发,这恐怕就是该系列小说能受到如此广泛欢迎的根本原因。可见,既然我们在这个世界中生存,我们就应该热衷于了解这个世界,想办法弄清楚它运行的基本过程。研究哲学的根本目的就是弄清楚世界运作的一般规律,其中尤以马克思主义哲学总结得最为系统和准确。因此,年轻人理应是热爱哲学、热爱自己、热爱生活的。这次我们讨论的话题,用马哲的观点总结起来也就是生产力构成的一个要点:劳动者是生产力的主要因素,在生产劳动中起主导作用。哲学的表述往往都是高度提炼的,有时候没有机缘,很难深刻理解这些东西。不过,如果你觉得难以与枯燥艰深的理论同行,那么,欢迎进入金庸的武侠世界。 参考文献: [1]以武学的视角来戏说.NET程序员的倚天之术[EB/OL].http://www.west263.com/www/info/ 16595-1.htm [2] 论金庸武学于编程语言[EB/OL].http://www.yyhun.cn/blog/index.php/2007/221.html [3] 由C#风潮想起的——给初学编程者的忠告[EB/OL].http://www.iplaysoft.com/csharp- think.html |
» 收录本帖的淘帖专辑推荐
科研joke |
» 猜你喜欢
A期刊撤稿
已经有3人回复
职称评审没过,求安慰
已经有34人回复
垃圾破二本职称评审标准
已经有17人回复
回收溶剂求助
已经有6人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
申请26博士
已经有5人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
求助文献
已经有3人回复
投稿返修后收到这样的回复,还有希望吗
已经有8人回复
» 本主题相关价值贴推荐,对您同样有帮助:
文章大修,大家给看看应该如何对第一条意见进行相应的修改
已经有2人回复
文章重投又被拒,好像还是被同一个人拒,请大家给点意见
已经有25人回复
第一年申请青年,我的评审意见,请大家指导该如何改进
已经有0人回复
大家好,Fitoterapia的编辑提的一个问题彻底把我搞晕了,请大家看看该如何回答!
已经有3人回复
大家帮我看看这篇文章该如何处理,谢谢!
已经有3人回复
大家帮忙看看编辑的回复,小弟实在是不知如何是好
已经有10人回复
大家帮忙看看,这种情况如何回复编辑及申诉
已经有15人回复
大家帮我看看评审意见,明年还有修改再投的意义吗?谢谢大家
已经有9人回复
论文审稿意见回来了,大家看看如何回复啊
已经有16人回复
博士即将毕业,不知道该选择何种工作,请大家帮我出出主意。
已经有4人回复
标书可投三个学部,该如何选择???
已经有62人回复
投稿被拒了,不甘心想写信给编辑,大家帮我看下该怎么写?
已经有10人回复
【教程】如何设置ppt,使讲演者看到备注,而观众看不到
已经有72人回复
关于会议论文会后投期刊,及论文版权的一些注意事项。
已经有178人回复

9楼2012-01-08 06:25:19
wlp816
金虫 (正式写手)
- 应助: 4 (幼儿园)
- 金币: 3632.2
- 散金: 17
- 红花: 2
- 帖子: 320
- 在线: 573.5小时
- 虫号: 1143121
- 注册: 2010-11-10
- 性别: GG
- 专业: 控制理论与方法
2楼2011-12-31 12:42:23
qiping929
至尊木虫 (著名写手)
尘埃落定
- 应助: 29 (小学生)
- 金币: 3529.9
- 散金: 9586
- 红花: 13
- 帖子: 2049
- 在线: 723.8小时
- 虫号: 1528097
- 注册: 2011-12-07
- 性别: GG
- 专业: 计算机应用技术
3楼2012-01-01 11:01:15
4楼2012-01-01 23:26:30













回复此楼
