学c语言难学吗为什么那么难

会说11种语言的外国人用汉语告诉你学习秘密--学语言为什么那么困难?_土豆_高清视频在线观看公众号:cstranslation
【外语工作】资讯分享平台——帮外语人才找对口工作,为用人单位招合适人才。更有各种热点话题、贴心互动、职场经验分享等。
感谢您阅读7个学外语的错误观念:为什么有些人就是学不好语言? ,本文可能来自网络,如果侵犯了您的相关权益,请联系管理员。QQ:世界上最难学的一门语言是什么?
世界上最难学的一门语言是什么?
09-02-19 &
联合国教科文调查:世界上最难学的语言排名: 1-汉语(中国) 2-希腊语(希腊) 3-阿拉伯语(阿拉伯) 4-冰岛语(冰岛) 5-日语(日本) 6-芬兰语(芬兰) 7-德语(德国) 8-挪威语(挪威) 9-丹麦语(丹麦) 10-法语(法国) ==================== 其实应该把爱斯基摩语列入其中才对。 语言的难易程度和文化密切相关。一个国家的文化越丰富其语言也越深奥。 如果抛开文化因素孤立地谈语言(这当然显得有点幼稚),那么最难学的大概是爱斯基摩语。请看下文: People thinking about the origin of language for the first time usually arrive at the conclusion that it developed gradually as a system of grunts, hisses and cries and must have been a very simple affair in the beginning. However, when we observe the language behaviour of what we regard as primitive cultures,we find it surprisingly complicated. It was believed that an Eskimo must have the tip of his tongue a vocabulary of more than 10,000 words so as to get along reasonably well, much larger than the active vocabulary of an average businessman who speaks English.Moreover, these Eskimo words are far more highly infleeted than those of any of the well -known European languages,for a single noun can be spoken or written in several hundred different forms, each having a precise meaning different from that of any other. The forms of the verbs are even more numerous. The Eskimo language is, therefore,one of the most difficult languages in the world to learn, with the result that almost no traders or explorers have even tried to learn it. ... 请注意第二段的第二句话。
请登录后再发表评论!
中文吧字正腔圆~
请登录后再发表评论!
请登录后再发表评论!
请登录后再发表评论!
世界上最难学的一门语言技巧是宝宝语言(优贝乐早教中心提供)
请登录后再发表评论!学编程为什么这么难?每个新手绝对要知道的那些事 - 文章 - 伯乐在线
& 学编程为什么这么难?每个新手绝对要知道的那些事
Quincy Larson曾经只是个穿西装坐办公室的家伙,有一天,他决定要学习编程。于是,他到处打听关于编程的事情。他从Ruby入手,接着很快学了Scala、Clojure和Go等多种其他的编程语言。他用过Emacs和Vim,甚至还学过Dvorak键盘布局。他不仅学会了Linux,涉足过Lisp,并且有超过半年的时间靠在命令行下编 Python 代码为生。
Quincy就像龙卷风中的一片叶子,别人给他的建议让他在编程的世界中晕头转向,直到他学完了“能想到的每一个在线教程”。尽管在故事的最后,Quincy,但他说:
…我认为,我碰到过的程序员们看似一帆风顺,实际上他们都饱尝过学习编程的痛苦,只是他们都压抑着没有说出来。
唉,这些话是不是听着很耳熟?
阶段一:手把手辅导的蜜月期(Hand-Holding Honeymoon)
每个即将进入编程行业的人都满怀期待,这很正常。
一方面,你在年轻的时候总听流言说编程如何如何难,但它们就像老奶奶讲的吓人故事,是用来唬孩子们去学习社会科学而已。
而另一方面,“学习编程”运动已经取得了很多成就,它打破障碍并向人们展示编程其实也没那么可怕。 像 、和
这样触手可得的工具,它们可以确保你(甚至任何人)不仅能学会编程,还能成为一名熟练的开发者。
突然间,问题不再是对编程的恐惧,而是抱有过多希望,期望太高。
而且最重要的是,这些入门工具足以像教小孩过马路那样,引导你学习那些令人头疼的变量和条件语句,以及初级编程语法。当你不断完成游戏般的挑战时,你的自信会随之大增。说不定你最后就学会了编程!学会编程并不难,基本上你已经是一名开发者了。
手把手辅导的蜜月期(The Hand-Holding Honeymoon)
现在问题来了,你正处于编程初期阶段,我喜欢称之为“手把手辅导的蜜月期”。尽管你可能感觉成功就在不远处,但其实你才刚踏出第一步。一切才刚刚开始……
描绘未来之路
在我们一头扎进第二阶段之前,先来仔细看看整个过程。
在这篇文章中,我将介绍典型的编程之路上必须经过的四个阶段,以及如何平稳渡过每个阶段。你也会看到资源的丰富程度和知识范围(各个阶段必须掌握的)的广度这两个关键因素是如何在编程之路上起到决定性作用的。
旅程艰辛就为了达到找工作的水平,这个艰苦的过程可以描绘成你的自信心随能力增长的变化曲线。
学习编程之旅
由于自信和幸福感紧密关联,而且只有在自信和能力相匹配时,才能正式地说你可以“上岗”了,因此,上图中的自信和竞争力是息息相关的。
随后我们会观察剩下的三个阶段中存在的独特挑战,但每个阶段本质上都包含了上面的这种关系:
手把手辅导的蜜月期(The Hand Holding Honeymoon),这个阶段充满了乐趣,面对看似棘手的问题,那些高质量资源的鼎力相助让你轻松取胜。虽然你主要学的是基础语法,但完成的工作会让你很有成就感。
充满迷惑的下滑期(The Cliff of Confusion),在这个阶段你会痛苦地发现,手把手辅导的阶段结束后,事情变得更困难了,实际上你没法独立做任何事。在你试图重新振作时,你面对的首要挑战不仅是要反复调试,而且你还不懂怎么问问题。
绝望的迷茫期(The Desert of Despair),这个阶段漫长而又孤独。在这个沙漠(充满困惑迷茫就像身处沙漠)中几乎没有路,每个方向都看似正确,但你却总是在绕圈,你极度渴望找到办法逃出生天。警惕“狂燥中出现的海市蜃楼(Mirages of Mania)”,它们就像是沙漠的迷魂曲,将引诱你误入歧途。
煎熬的上升期(The Upswing of Awesome),这个阶段里你终于找到了一条路走出沙漠,并且总体清楚了如何创建应用程序。但你的代码仍然很封闭,到处都是漏洞,就像纸糊的房子一样摇摇欲坠。你的网站可以运行并且你已经掌握了几种有效的模式,这些都让你的信心大增,而且你的朋友们都在称赞你的网站很酷,但实际上你知道底层连自己都不忍直视。你根本不知道该如何写出“可发布”的成熟代码。该如何弥补这个差距,从而找到一份真正的工作呢?
在过去这些年里,我已经面试过成百上千的开发者,他们都心怀抱负,并且不断给我说着相同的经历。我写这篇文章的目的,是希望你能够在学习的路上擦亮双眼,做一个详细的计划避开很多前人都曾掉入过的陷阱。
让我们回到阶段二吧…
阶段二:迷惑的下滑期(The Cliff of Confusion)
你正处于阶段一,也就是“手把手辅导的蜜月期(Hand-Holding Honeymoon)”,你正在获取各种奖励徽章并完成编程挑战,同时你的自信和能力都在蹭蹭地上涨。情况也不是很糟糕…那大惊小怪些什么呢?因为你的自信已经失去理智地膨胀到了极点。。。。。。
小心了!你即将踏出悬崖,多少英雄在此折腰沦为“编程太难”一族。这错误的一步发生在你第一次在键盘前坐下,打开文本编辑器并试图从零开始创建一个工程,但你却不用任何很赞的线上编辑器,也不用别人的代码框架或寻求有用的提示。
简直扯淡。
也许你能照着自学教程依葫芦画瓢,但是没有人可以一步登天,而且从某种意义上来说,你要徒手从一个空白的文本文件开始简直是异想天开。你才刚刚进入学习的第二个阶段,接下去你的自信将跌落谷底,这也是为什么我称之为“困惑的下滑期(Cliff of Confusion)”。
困惑的下滑期(The Cliff of Confusion)
你开始创建工程。你抓耳挠腮却只找到了一个勉强能用的方案,但总觉得哪里不对。为了你的(也就是你的大工程)能表现不错,你陷入了和bug的战争之中。似乎只有通过一键谷歌才能解决每一个问题,你那些过去能搞定问题的自信荡然无存。
Buuuuuuuuuuuuuuuuuuuuug!!!
不论是作为教育者,还是作为这个行业的从业者,在大家看来这个阶段都格外令人沮丧。任何人写的程序都可能有bug,但我们还是希望你能有所进步,因为最不可能的地方也能成就最伟大的成功。
在阶段一结束时,学生们被迫进入了阶段二。他们必须飞跃这个阶段,但太多有潜力的人却不去掌握真正有用的技能,而是一味地停留在挫败的情绪中。
可怕的是,你甚至还没有遇到过真正棘手的事情。阶段二的结束还早得很。当你解决掉足够多的bug结束了大部分的痛苦,并且已经完成了几个工程,尽管这标志着阶段二的结束,但总体来说你也仍然是刚上路而已啦。
对那些真正准备从事这个行业的人来说,他们通常会在渡过阶段二以后决定是否全身心投入这个新生活。但太多的人放弃了。而不幸的是,你现在才刚到阶段三(“绝望的迷茫期”)的入口。
起作用的两个关键因素
那么前两个阶段的真正区别是什么呢?为何相比阶段一(手把手辅导的蜜月期)来说阶段二(困惑的下滑期)给人的感受会如此糟糕?如果你的经历很像我们前面描述的那样,只要理解了这两个问题,你就能释怀了。
从根本上来说,每个阶段都有两股关键力量在起作用,那就是资源的密集程度和知识面的广度。在探索它们对阶段三的影响之前,我们先来看看这两个因素到底是什么。
因素一:资源密集度
正如我前面所说,一开始你会感觉有遍地的资源在引导你上手编程。事实也确实如此!
搜索“”,你会得到一大堆有用的工具、文章、视频以及自学教程。而且,老实说它们都很棒!从未有过如此多的方法指导人们学习编程。
不幸的是,后期可供使用的资源太少了。每一个从初学者成长到当前状态的人都能体会这其中的差距之大,相比刚开始入手,当你试图完全依靠自己创建工程时,能利用的资源就少得多。
进入阶段三后需要了解的知识猛然陡增,恶化了上面的问题,这也是为什么我把这个阶段称之为“绝望的迷茫期”。一旦你度过了这个阶段,并且开始了解你需要搜索的东西,你就会找到很多资源,还能使用一些技术工具,如专业博客和视频讲座。矛盾的部分仅仅在于明白该问什么问题。
下图显示了各个阶段中的资源密集程度(线条越密集表示资源越多):
各阶段的资源密集度
因素二:知识面的广度
现在我们来聊聊一个相关的话题——知识面的广度。它表示你在每个阶段中必须学习的新知识的总体广度。下图就显示了这个因素在每个阶段中的情况:
各阶段所需知识的广度
刚开始学编程时,你需要理解的东西很少。不论你的目标是什么,不论你用什么编程语言,也不论你之前是做什么的,每个人要做的都是搞清楚什么是for循环,如何创建条件语句,以及其他一些编程语法的基础结构。总体来看也没多少基础概念,因此阶段一所需要的知识面广度很窄。一旦你学完了基础部分,就需要去了解一些更复杂的东西,比如理解错误以及何时使用那些你已经会用的代码,此时你会发现需要学习的额外知识瞬间多了很多。这个时候情况变得不同了,因为一个明确的问题不一定有一个绝对正确的答案……事情开始变得棘手。
当你进入第三个阶段后,所需的知识面广度就更宽了。你需要理解该使用哪些工具,该学习什么编程语言;学习相关的计算机科学基础,如何写模块化的代码;学习面向对象的编程,学习好的代码风格,以及学会寻求帮助(以上仅列举几个例子)。每一次在 或 上进行搜索都让你大开眼界,找到的东西多得让你喘不过气,都是些你不知道但感觉自己应该了解的知识。
你不知道自己不懂哪些东西。
只有当你终于摸到了一些门道并结束这个“荒漠之旅”以后,所需的知识面广度才会再次缩小。那时,你已经选择了某种技术,并了解了它在这个行业的生态系统中所处的地位。你最终学会了那些你以前不懂的东西(可以说相当了解),也知道如何解决问题。随着你深入学习和事业逐渐起步,你将越来越专注于自己领域的技术。
阶段三:绝望的困惑期(The Desert of Despair)
理解了上面两个因素后,你会发现阶段二仅仅是个转折点。快速提升的知识面广度和急剧下降的资源密集度让你在这个阶段倍感痛,因此我称它为“绝望的沙漠”(身处这个阶段犹如在沙漠中一样,迷茫得团团转却找不到方向)。
本质上来说,你知道这个沙漠肯定在某个地方有出口,但你就是不知道怎么找到它。
绝望的沙漠
这个沙漠之旅路途遥远,而且危机四伏。你会发现自己总是沉溺在虚无缥缈的东西里,许多诱人的资源看似包含了你要找的对策,实际上它们只是又一次地让你深陷在了无边无际的砂砾之中。
或许你已经在 、 或 上注册了几门课程,又或许你找到了一个声称能一路指导你的自学教程。你自以为吸取了阶段一(手把手辅导的蜜月期)的经验教训,明白问题并不是那么好解决,但还是忍不住去寻找帮助。你注册的课程信誓旦旦地保证,一定能让你达到前所未有的高度,对此你还信以为真。无论别人怎么说,你都不可能只花一个星期或一个月的时间,也不可能就只上个学院课程就学会这些东西。因此,别再相信那些谎言!
这个阶段要学的东西很多,远超出你可能预期的那些。尽管你能让许多app运行起来,但要成为一名真正的专业开发人员需要做的更多,在其中你很容易感到迷茫失落。你每一次进步都难以衡量,你如何知道自己该学什么?甚至这些东西是不是你该学的呢?
就算你走对了方向,却仍然很难衡量你取得的进步。在你能做出外形和功能都符合自己期望的东西之前,你可能会感觉很迷茫。但是只要坚持不懈,并且保持正确的方向不跑偏,终有一天你能将那几个“货真价实”的处女作发布出去,你终于开始上道了。一路走来确实很艰难,但你开发的这个web东东其实也没有那么糟。。。。。。一切都在变好!
阶段四:煎熬的上升期
你已经成功穿越了荒漠,也越来越自信。你Google搜索的技能( )越来越了得,也能理解那些细致入微的专业博客文章和视频讲座。或许你已经深入掌握了某一种编程语言或框架,并且有自信能创建并发布一个能运行的应用。
这是“煎熬的上升期”:
煎熬的上升期(Upswing of Awesome)
表面看上去一切都OK,但你知道底下还差得远呢。
虽然你能让那个应用程序运转起来,但底层都发生了什么?你的代码里充满补丁,最糟糕的是,你甚至不知道哪部分很糟糕,也不知道实际上哪部分将运行无误。你不时地取得成就,同时也犯了许多菜鸟级错误,更糟的是,你渐渐开始怀疑怎么还是搞不清自己在做什么。
这是个两极化的阶段。一边觉得自己是个无所不能的开发者,另一边又觉得自己是个效率极低却深陷其中的狂热新手。走得越远,越是感觉惶恐不安,生怕哪天有人 “揭穿”你代码中的诡计。
你觉得自己应该算是一名开发者了,但你现在写的代码和在“职业”工作环境下写出的代码相比,差距实在是太大了…
尽管艰难,最终你一定会成功。那时的你心情澎湃,浑身充满力量,绝望的荒漠已经过去,而令你困惑迷茫的阶段二也成了遥远的回忆。终于,你是真的在走上坡路:你的学习速度更胜从前,也更理解如何学习编程。尽管历尽艰难,但你会经历足够多的最佳实践,把那些宝贵的知识凝结成产品级的技能集。这个可怕的上升期会比你预想的要长,也会让你感觉看不到头,因为你已经离终点如此之近……但你肯定会到达的。如果你在正确的道路(确定未来要做什么)上足够坚持,一定会有人愿意付薪水给你,让你继续学习。工作机会是你的了!
现在你已经看到了前方的路,也知道了为何会一路艰辛。将前面描述的四个阶段和过程中对它们起作用的两个要素结合起来,就得到了下面这个图表:
对这个过程的了解归了解,去经历又是另外一回事。你还是先迈出正确的第一步吧。
如何通过每一个阶段
整个旅程看似艰难,但坦白地说,学习编程的过程通常都是这么艰苦的。了解自己的目的很重要,尤其当你孤军奋战的时候。但你不会只能靠自己的,因为大部分问题都有捷径可走。学习编程没有人们说的那么简单,但也没有你在绝望时想的那么难。
我会在这部分介绍一些重要的策略,你能利用它们保持一个正确的方向。
你在各阶段取得的进步
I:如何顺利通过手把手辅导的蜜月期(Hand-Holding Honeymoon)
丰富的可用资源让阶段一充满了乐趣。这些资源能够在接下来的阶段中,很好的培养你的逻辑思维。现在是学习编程的大好时机,记住这两个建议,享受编程的乐趣吧!
从尝试多种不同的学习资源入手,找到最适合自己的学习方式和最让自己感兴趣的项目类型。最适合你的可能是的快速挑战、 的在线练习,或者是Chris Pine的书《》和Code School里那些古怪的 训练。刚开始你要思维开阔,不要理会那些告诉你应该学什么的建议。。。。。。在这个阶段学什么都是一样的。
选择一个,一旦发现它适合自己就要坚持下去。完整学习整个入门教程,你会从中学到写基础脚本和应用需要的所有基础知识。接着,就要准备好开始独立地创建工程。
II:如何顺利通过困惑的下滑期(Cliff of Confusion)
几乎每个人都要经历这个阶段,因为成为一名开发者的唯一途径就是不断去开发。你可以通过注册一些自学教程(或那些冒充是“完美课程”的自学教程)来模拟创建工程,但最终你还是要自己动手,这么做不过是拖延了时间。自学教程能很好地让你从更个性化的例程中得到启发,但是在某些情况下你必须脱离过多的辅助,独立解决问题。
如何过渡到独立地创建工程,下面有三个建议:
和他人一起工作,哪怕同样是菜鸟。你会惊讶地发现,两双眼睛更容易调试出一个不可能的错误。
阅读他人的代码,熟悉好的模式。尽量理解为什么作者这么做。同样的道理,不读书是不会想成为一名小说家的,对吧?我将在下一篇文章里集中讨论这个问题,但现在,请仔细注意其他人对任何小问题或工程提出的解决方案。
从小事做起,不断尝试。对于将来,你应该想过做一些有趣的大工程,但你也必须适应调试的过程,搜索一些带有小型挑战的学习资源。经验是无可替代的。
III:如何顺利通过绝望的困惑期(Desert of Despair)
一旦适应了调试过程,最令你头疼的问题就是难以获取所需知识,以及学习所有这些知识必须付出的代价…简直就像处于令人绝望的沙漠里。这种情况下,你真正需要的是一条有效的前进路线。而Mirages of Mania代表那些吸引你的捷径、诱惑你冒险的新世界和速成计划,它们最终只会浪费你的时间。
因此,要逃离这个沙漠的关键在于:
拥有一个强烈的目标想去实现,否则,什么有趣但没用的东西都学的话,最终不过瞎忙活一场。如果你在学习之外还有充裕的时间,请忽略这一条。。。。。。
找到一条有效的路径能直达你设定的目标,并且要验证其可行性。你必须深入思考“这个方法到底能不能帮我实现目标?”,而不是光看那些课程网站或书皮上打出的营销口号和看似真诚的笑脸。
专注,避免分心。因为你如果是个对学习编程很有兴趣的人,那你肯定也会对所有美妙的事情感兴趣。当编程遇到了困难,你需要进一步解决这个问题,而不是另起炉灶。
如果能确定一条路并坚持走下去,你最终一定会进入到下一个阶段,而不是花费了数月或数年,最终只是徒劳。
IV:如何顺利通过煎熬的上升期(Upswing of Awesome)
这个阶段是最棘手的过渡阶段之一。尽管你能开发出应用程序,但你实际上想成为一名web开发人员。通过这个阶段并找到工作,你需要做三件事情:
为编程寻找最佳实践,并效仿。你需要理解一个普通方案和最佳方案之间的差别。自己一味闷头钻研,远远比不上别人在真实工作环境下写出的产品级代码,而最佳实践样例很好地体现了这其中的差距。
检验你的假设。因为你可能回避了一些自己知识体系中的漏洞,甚至你自己都不知道有这些漏洞的存在。你需要检查并修复这些漏洞。
正确对待那些并不吸引人的技能。尽管它们很少被强调,但是你要过渡到一个专业环境,它们还是相当重要的。这些技能包括测试、数据建模、架构和部署,我们很容易忽略它们,但它们都是优秀开发的基础。
要做到上面这些并通过最后阶段,关键是要不断获得他人的反馈。完全自学或许富有成效,但难以写出易读、模块化以及可维护的代码,这就使自学者在职业环境中没那么有吸引力。你需要和和那些会怀疑你假设的人们一起工作,他们会提出尖锐的后续问题,并迫使你对自己的知识体系进行查缺补漏。
那么……这条路能行吗?
这些可能听起来让人崩溃,但我保证,在你之前已经有很多人坚持不懈地通过了这个旅程。理解前面的路,你就能有一个明确的计划,也会知道如何获取真正有用的帮助,这些都为你踏上这个旅程开了好头。
很显然,这篇文章没有按我们想的那样,深入挖掘旅程中的每个阶段,也没有提供详细的建议告诉你该怎么做。即便如此,由于我们熟知这个旅程并且对此抱有极大的热情,因此,我们希望倾尽全力帮助大家。
我们的是专为衔接整个过程而设计的,但如果你有兴趣自学这个课程,我们将在未来的博客文章中对此进行调整和深入探讨。
在此我们进一步探讨了各种问题(从寻找导师,到如何缩小差距得到一份web开发的全职工作),如果你也想尝试一下,就在下面注册吧。因为,尽管前方的路充满挑战,但你不是一个人在战斗。
祝你好运!
特别感谢Peter DePaulo、Javier Noris、 Michael Alexander、 Andy Brown、 Saul Costa、 Phil Nachum和分享你们的经历,以及帮助修正这些观点。
关于作者:
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线编程初学者学什么语言好?
编程初学者学什么语言好?
最近,台湾知名技术专家蔡学镛先生写了一本《编程ING》,宣称“人人都能学会程序设计”。作为一名IT教育工作者,这本书引发了我的兴趣,翻看之后,共鸣之处不少,结合国内计算机教育的现状,产生了颇多感触,于是就有了这篇小文。一、为什么学生视编程为畏途?先当学生后当老师,不知不觉之中我在大学里己“混”了十多年,我发现,进入计算机专业就读的学生,最初至少有一大半对真实的软件开发根本不了解,是“一张白纸”,不幸的是,学了四年之后,许多张“白纸”又变成了许多罐“浆糊”,带着对软件开发可能是畏惧也可能是无所谓但绝对不是喜欢的感触离开校园。编程真的那么没劲?那么难和枯燥?我写了将近二十年的代码,虽然不靠编程吃饭,但也似乎勉强可算是个老程序员,我对编程的看法可总结为两句:何以解忧,唯有编程!我经常在想一个问题:编程其实是很有趣很好玩很实用并很有成就感的一件事,为什么会有这么多的学生视编程为畏途?而我们的计算机教育,为什么在打掉学生对编程的兴趣方面“如此成功”?蔡学镛先生在《编程ING》给出了一张图:我认为这张图道出了问题的关键——学习过程中的“正向”兴趣循环是否成功地建立。强烈的兴趣与不断获得的成就感是整个学习过程的“引擎”,它为学生完成整个学习任务提供源源不断的强大动力。有无数的事实支持这个观点。传统的教学观点认为,本科的主要教育目标之一是为学生在本专业领域未来的发展“打下扎实的理论与实践基础”,所以从一开始就要“严格要求”,“科学训练”。这个观点不能说错,但我认为,我们的计算机教育,尤其是针对初学者的教育,首要的任务是引发兴趣。没有兴趣,一切免谈。我所了解的事实是:计算机专业的学生有不少视编程为畏途。其原因在于我们的现有计算机教学方式从一开始就给了这些学生“痛苦”的编程体验,不幸的是,这种体验在后期枯燥的专业课学习中不断得到强化,学生最终对编程敬而远之或畏之如虎。事实上,教育学研究早己指出,成功的高效的教学应该是这样的:循序渐进,由浅入深,步步为营,兴趣导向。教师的职责,不是将知识“灌入”学生的大脑,首要的任务是引发学生的兴趣,鼓励他们去探索未知的领域,主动地学习和吸收知识,培养技能,积累经验。在这个学习过程中,教师要成为一名优秀的导航员,给学生绘出航线,鼓励他们出海远航,解决他们在航行中所遇到的困难,并帮助学生建立学习的“正向”兴趣循环。对编程的“第一印象”很重要啊!由此,引发了一个很有趣的问题——应该选择哪一门语言作为学生的第一门编程语言?二、你学的第一门编程语言是什么?在国内的大学中,当前大多数选用C作为学生的第一门编程语言。这其实并没有太大的问题,C的重要性无须我多说。其实问题的关键不在于选择C教学,而在于以哪种方式去教。很不幸,国内许多C语言的教材都将主要的精力放在对C语法细节的介绍上,课程考核方式又很古板——很多院校采用闭卷考试,出一堆的选择题和填空题。典型的题目是将一段代码砍掉一两句,让学生“填空”。有哪位高手是通过做这些“填空题”学会编程的?上机也流于形式,让学生反复折腾几个“黑底白字”的“玩具般的”小程序,学了一个学期,学生连一个有点用的程序都写不出来……这种僵化的教学方式,足以毁掉多数学生对编程的兴趣。我个人认为,C不应该成为针对大多数学生所讲授的第一门编程语言,我们的教学体系,应该给学生提供更多的选择。针对初学者所讲授的第一门编程语言,应该具有以下的特点:(1)必须是“有趣”的,能诱导人去“动手”和“思考”。(2)需要对初学者屏蔽不必要的底层技术细节,以免分散他们的注意力。(3)这种语言必须足够简单,但同时又具备足够的能力编写出实用的程序,从而让学生能比较容易地获得成就感,感悟到软件开发的魅力。(4)这种语言必须能充分地体现现代软件开发的基本思想和技术成果,为学生进一步深入学习打下基础(5)花在这门编程语言上的时间和精力是有回报的,掌握了它,就掌握了一个强大的工具,可以在今后的学习中使用这个工具进行实践和创造。另外,这门编程语言的学习,应该有助于初学者正确理解与体会到以下的编程思想:(1)分而治之:将大问题切分为小问题。(2)组件化与模块化:以搭积木的方式“构建”出软件系统。(3)算法思想:针对实际问题建立数学模型,设计计算机算法,最终编程解决问题。同时,这门编程语言的学习,应能有效地培养出以下的编程基本功:(1)调试代码的能力。(2)撰写可读性强、扩充性好、易于复用的优质代码的能力,培养良好的编程习惯。(3)查找技术资源与阅读技术文档的能力。也许一门编程语言的学习无法达到上述的所有要求,但组合几种不同的编程语言就差不多了。下面,我介绍几种适合于初学者入门的编程语言。三、适合于入门的脚本编程语言为了教初学者学会编程,蔡学镛先生的《编程ING》选择了REBOL编程语言,这个语言确实比较简单,而且蔡先生的书图文并貌,用它来训练编程的基本技能很合适,但REBOL这门语言似乎过于小众化了一些,而且书中缺乏有力的能引发初学者兴趣的应用实例。依据我的经验,如果初学者能动手写出几个有用的实例,他喜欢上编程的可能性会大大增加。以下是我粗略归纳的很容易引发学生成就感的几个技术领域:图形图像与动画、多媒体游戏网络应用拥有可视化界面的桌面应用程序能跑在手机上的应用程序就我个人看法,第一门语言比较适合采用脚本式的编程语言。Python:认识编程是怎么回事,训练基本编程技能国外有许多人非常推崇Python(http://www.python.org),认为它是最适合初学者学习的一门编程语言。Python是一种动态编程语言,语法简洁易学,本身是开源的,Python程序可以运行于几乎所有主流的操作系统之上。对于初学者而言,使用Python可以学习基本的编程知识(比如学会编写分支、循环语句),体会动态编程语言的特点,并理解类和对象等面向对象编程的基本知识。但针对国内的实际情况,使用Python存在着一些问题:(1)官方提供了一个交互式的开发环境IDLE,易于使用,但要开发拥有可视化界面的程序比较麻烦,其他厂商的开发环境也不太成熟稳定。(2)缺少合适的中文教材,与其他语言相比,在国内应用也并不算广。
个人观点:使用Python对初学者进行基本编程技能的训练还是比较合适的,但在使用它入门之后,还必须学习其他的编程语言。MATLAB和Scilab:训练算法的设计与编程实现能力学习、应用和设计各种算法,培养为各种问题建立数学模型的能力,这对于软件开发而言非常重要,我国己在高中数学教学中引入了算法,并将其纳入了高考的考试内容,这是件好事。当前高中新课标数学课本中,使用的是由法国国家信息自动化研究院(INRIA)开发的Scilab(http://www.scilab.org/),这个软件与大学里流行的MATLAB高度类似,是学习算法的好工具。比较遗憾的是,Scilab也缺少足够的中文资料,并且由于高考数学仅考察简单的算法流程图,占分很少,因此大多数的高中都不会对这块投入太大力气,学生的算法思想和数学建模能力无法得到比较充分的训练,这个任务只能留到大学来完成了。使用Scilab或MATLAB作为第一门编程语言是完全可以的,与Python类似,Scilab或MATLAB编程采用交互式的运行方式(图2),编程语法也很简易,通过它同样能培养出基本的编程技能,特别是它们强大的数学图形功能,对学生吸引力很强,Scilab或MATLAB编程对他们数学能力与算法设计应用能力的训练无以伦比,这种能力会为学生未来在学术研究领域的发展提供强劲动力。Office+VBA:用VBA代码控制Office,让各种工作自动化几乎所有大学都开设有《计算机基础》这门课程,其中大多都会讲授微软Office软件包的使用。但当前这门课程教学方式是存在问题的,比如我看到过一些考试试题,考核学生是否记住了Word的某些操作快捷键,这完全是本末倒置!其实,将本课程教学内容略作改革,完全可以用于培养学生的编程技能,其中的关键在于加强或新增以下几个内容:(1)使用Excel进行数据分析,讲授Excel中功能强大的各种函数用法及数据的可视化呈现,这不仅实用,而且能有效地培养学生处理与理解数据的能力,而程序本质上不就是完成信息加工处理的工作吗?(2)使用Access存储与检索数据,这能让学生掌握数据库使用的基础知识,形成对数据库技术的感性认识。(3)Visual BasicFor
Application(VBA)编程:VBA是一种脚本式的编程语言,在Office软件包中具有“控制一切”的能力,使用它进行编程的最大好处时能让学生体会到——原来很多操作均可以一键“自动化”,并且在实现这种“自动化”的过程中拥有成就感。Processing编程语言:体会图形与动画的魅力国内可能有很多人不知道Processing这个编程语言(http://www.processing.org/),其实它己有10多年的历史,由美国CaseyReas教授与
Ben Fry所设计,可用于构造丰富多彩的交互式应用软件。与其它编程语言相比,Processing最强悍之处在于它的图形图像及动画编程功能。而在整个计算机技术领域中,这一块无疑是最吸引人的技术领域之一。虽说磨刀不误砍柴功,但有不少编程语言在能够真正“砍柴(即动手开发真正有用的程序)”之前,需要太长的时间“磨刀(学习语法,掌握开发工具、阅读API文档等等)”,而Processing就不存在这个问题,它的编程语法与Java一致,但比Java简洁得多,另外,与复杂的IDE如Eclipse、Visual
Studio之类相比,Processing的编程环境非常简单,这有助于学习者将主要精力用于创作上,并鼓励他们大胆地进行开发实践。Processing提供了一批直观、简洁而功能强大的图形图像函数,学习者仅需花少量时间学习就能立即投入到创作之中,而它所提供的大量可运行实例,能有效地激发学习者的想象力。Processing具有很强的可扩展性(现在已经有一百多个库可用了),特别地,Processing内置了对于Android的支持,Processing程序能够跑在Android手机上,这大大地增加了它的吸引力。也许不少国内高校目前还无法开设Processing课程,但事实上大学生们是完全可以自学的,Processing网站上有足够的学习资源和示例,唯一比较遗憾的是这些资源都是英文的。Small Basic:适合“零编程基础”人的编程语言在中国,有不少人是通过Basic语言迈入编程的大门的,特别是微软在上个世纪所推出的Visual
Basic,更被视为Windows桌面编程最佳入门语言,只可惜这个优势在其后继版本Visual Basic.NET中己经不复存在,从功能上说,现在的Visual
Basic.NET与C#基本一致,付出的代价是Visual
Basic.NET语言本身的复杂程度也变得与C#是同一级别的了,而后者的使用者要比前者多得多,与其学Visual Basic.NET,不如直接学C#。这里,我想介绍的是微软所推出的另一种Basic编程语言——SmallBasic(/)。微软公司在其软件用户友好性方面一直做得非常出色,Small
Basic沿袭了这个特色,其开发环境的易用性超过前面介绍的所有编程语言,并提供智能的编程帮助(图4)。Small
Basic提供了两个强大的“窗口”对象——TextWindow(用于输出文本)和GraphicsWindow(用于绘图),特别有趣的,它从历史悠久的Logo语言中得到借鉴,提供了一个小乌龟(Turtle)对象,通过简单的指令就可以命令这只小乌龟(Turtle)在屏幕上“爬”出各种图案来,确实有趣好玩。我个人看法,Small
Basic是一个非常好的针对“零基础”人的入门编程语言,特别适合于年纪较小的学习者(比如初高中学生),也可供非计算机专业(比如文科专业)的大学生编程快速入门。HTML 5 + JavaScript:互联网时代的主流编程语言各种脚本编程语言中,我想介绍的最后一种是JavaScript。JavaScript早就是Web客户端事实上的主流编程语言,它的运行环境是浏览器,当前所有的计算机和绝大部份智能手机都至少安装有一种浏览器,JavaScript程序“到处都可以运行”。JavaScript程序的编写极为简单,就算使用Windows记事本,写上几段也不算太麻烦。JavaScript早期存在的问题主要是各浏览器厂商自行其是,标准不统一,而且缺少必要的调试工具,但这些问题现在己大大缓解。以开发工具来说,主流的IDE纷纷加入对JavaScript程序开发与调试的支持,比如Visual
Studio 就做得很出色,另外,随着我们进入移动互联网的时代,HTML
5是唯一能被各厂商接受的标准,与此对应,JavaScript也正在走向标准化。与Python等语言类似,JavaScript也可归入动态脚本语言的范畴,语法简单,同样支持面向对象的编程方式,但JavaScript的使用远比Python等语言广,诸如jQuery之类的各种JavaScript库如雨后春笋般地出现,其功能无所不包,甚至在服务端JavaScript也大展身手,比如一个事件驱动的服务端JavaScript运行环境——Node.js(http://nodejs.org/)就相当引人注目。JavaScript在HTML 5规范中拥有核心的地位,可以用JavaScript完成很多的工作:基于canvas可编程绘制二维的图形,使用SVG通过DOM可构造交互式的应用HTML 5的audio和video元素可以播放音频和视频,所以可以用JavaScript开发多媒体应用Geolocation、Communication和WebSocket API支持编写地理感知的互联网应用程序……为了抢战先机,各大浏览器厂商都在不断地完善自己的产品,争取能支持更多的HTML
5特性,而且智能手机的两大主流操作系统iOS和Android都可以运行使用JavaScript编写的Web应用。微软也在紧跟这个潮流,在其最新的Windows
8中,可以使用JavaScript编写Metro风格的Windows 8 应用。由此看来,JavaScript可谓是风光无限。我强力推荐在高校中推广JavaScript课程,其实国内高校在这方面也已经有一定基础了,比如许多高校都开设有《网页设计基础》这门课程,只需更新一下课程的教学内容,加入HTML
5和JavaScript的内容,并改革教学方式(比如千万不要再采用闭卷考试的方式要学生去背各种HTML标记的含义……),就能让学生跟上时代的步伐,而且我相信JavaScript一定会比C更能吸引学生,激发他们对软件开发的兴趣。四、以编译型的语言作为入门级编程语言虽然我更趋向于使用脚本语言完成初学者的编程启蒙任务,但我们同样可以使用编译型的编程语言完成这一任务。C就不用我多说了,相信有很多牛人是从C出来的。另两门非常重要的编译型语言是Java和C#,我的看法是即使不把它们当成计算机专业的第一门编程语言,至少也应该在计算机专业一、二年级安排这两个编程语言的选修课程。下面先说说Java。Java:“人多势众”的主流面向对象编程语言据说全世界的软件开发人员中,Java程序员的总人数名列前茅。人多说明市场需求量大,Java技术应用广。采用Java作为第一门编程语言,比较适合于计算机专业的学生,能让他们一开始就能受到面向对象编程风格与思想的熏陶,之后他们可以再倒过来去学C。而不是象现在这样,先学C再学Java,谈到C再顺便说说C++,现在许多院校开设有C++课程,其实这些年来C++应用的领域被不断地压缩,而且C++语法过于复杂,开发效率低,除了部分有需求有兴趣的学生,不适合多数学生学习。Java入门主要分为两个阶段:一是Java语法与OOP思想的领悟,二是JDK中各个Java类及相关技术(比如多线程、序列化等)的学习。Java是Android的主要开发语言,因此学生在入门之后,可以进一步地开发基于Android的手机应用,引导学生进入移动互联的时代,具有很强的实用性,这点往往能触发学生学习Java的强劲动力。Java天生与“开源”两字联系在一起,掌握Java之后,学生可以迈入开源的世界,探索各种丰富的开源应用和技术的奇思妙想,这对于开拓学生的视野非常有好处,并且能直接地帮助其就业。其实很多院校都开设了Java课程,我的建议不过就是将其提到大学一年级就讲授,并立即跟上J2EE和Android的后继课程。C#:面向对象编程语言的集大成者作为面向对象编程语言家族的后来者,C#有足够的机缘从前辈中汲取经验,这使得C#成为一个面向对象编程语言的集大成者。与Java类似,C#比较适合作为计算机专业的入门级编程语言。C#开发通常使用微软自己研发的Visual
Studio,与其他IDE相比,我认为Visual Studio是非常优秀的集成开发环境,即使是免费的版本,也拥有高度的智能性和良好的使用体验。笔者曾经做过试验,直接带领计算机专业一年级学生在没有学C的前提下学习C#,也开设过全校的通识选修课,针对非计算机专业的学生讲授C#编程语言与.NET编程技术,都得到了良好的反馈。以下是我总结出来的C#编程中几个很能引发学生兴趣的内容:Windows Forms:可让学生迅速地开发出可视化的桌面应用程序,极具成就感。GDI+:通过简单的循环、递归的编程技巧,能够绘出漂亮的图案,并且可以移植到Web上,很吸引学生。ADO.NET:掌握它学生就可以开发简单的数据库应用程序,真正地写出一些有用的程序。Socket编程:让学生轻易地实现两台计算机互相交换信息,这个过程充满探索的乐趣。以上几板斧下来,实践证明,能成功地引发很多学生对编程的兴趣,甚至“引诱”了不少学生决定跨专业报考计算机专业的研究生。与Java相比,C#的问题是与微软公司绑得太紧,容易把学生局限于微软所构建的生态系统之中,影响其视野的开阔性。就我个人观点,计算机专业的学生应该在大一,最晚推迟到大二,就掌握一门主流的通用型编程语言和开发工具(Java和C#是我当前推荐的两种编程语言),并且在今后的专业学习中,使用它们把在后继计算机专业课中学到的理论知识应用于实践。这样一来,编程语言的学习就给计算机专业理论课的学习以强劲的推动,而学生的开发能力也将随着开发实践的深入而不断增强,为其日后迈入业界或进入学术领域铺路。五、结束语:与时俱进的计算机教学计算机是进步最快的技术领域之一,这就要求我们的计算机教学应该与时俱进并不断地调整。笔者从《计算机学会通讯》2012年第6期的一篇文章了解到,美国加州大学伯克利分校己经开设了这样的课程:教学生使用Ruby
On Rails之类的工具进行敏捷开发并在Amazon web Services上部署。“云计算”来了!“云计算”时代的来临,会对计算机教学的方式产生巨大的影响,笔者设想了一下,如果由教育部牵头,由国家投资支持组建一个“教育与科研云”,打造一个国家级的教育公共平台,不走商业化的路,坚持让所有的在校学生和教师都能免费使用,努力推动各种的教学资源上移到云端,让更多的课程能用上云平台所提供的丰富资源与强大计算能力,这将是一项利国利民的教育基础设施建设,从长远来说,对人的教育投资,是收益最大的投资。已经成为世界第二大经济体的中国,难道还拿不出这笔钱和资源进行这个旨在为整个民族赢得未来的长线投资?21世纪是人类信息技术突飞猛进并全面渗透到人类社会各领域的时代,在这样一个日益信息化的时代里,Are you ready? Let’s Go!
发表评论:
馆藏&24354
TA的最新馆藏

我要回帖

更多关于 自考汉语言文学难吗 的文章

 

随机推荐