Karel是谁?
在介绍Karel之前,我们先谈谈编程学习遇到的困难。编程学习会遇到哪些困难?当然,会遇到很多困难,最开始的困难就是入门难,虽然一般人感觉前面学习基础知识相对简单,并没有那么困难。但是入门其实很难,难在没有人指导,虽然可以通过课堂,或者培训机构学习,但是依然很难,因为很多时候需要1对1指导。刚开始容易遇到各种各样的问题,这些问题,以后回过头看很简单。但是刚开始的时候我们没有掌握太多的技能,很可能一点点小问题,就需要花费很长时间去解决。如果没有人指导的话,帮我们指出哪里错了,很多人可能卡在很简单的问题,出不来,最后放弃了,从而失去了走进编程世界的机会。就像婴幼儿一样,需要人呵护与指导,小小的感冒,都有可能让他们失去了长大的机会。等我们长大了,强大了,能扛得住更多的风雨。
另外一点,入门非常重要,入门不仅仅是学习这门技术的基础知识,更重要是建立正确的编程思维,养成良好的编程习惯。就像我们学游泳,跟着爸爸学,也可以学会,不过最后学会的是狗刨,而跟着专业教练学习,则能学会蛙泳,自由泳,并且学会正确的姿势….
这跟Karel有什么关系了?
Karel是专门针对编程入门教学的,1970年,一位名叫Rich的斯坦福研究生认为,在编程基础的教学中,学生可以在某种简单的环境下,摆脱大多数编程语言的复杂的特性,学习基本编程思想,可以取得非常好的效果。Rich为刚入门的学生设计了一个非常好的编程环境,这个环境可以让学生指导一个机器人完成简单的任务,这个机器人就是karel。karel非常成功,被广泛用于计算机科学入门课程。在网易有一门公开课叫做《编程方法学》,许多学习JAVA课程的人,通过设计karel的行为,学会了如何让程序工作。在它的世界中,你可以通过给karel一组命令,直接让keral执行某些任务,指定这些命令的过程称为编程。Karel只有几个简单的命令,但是通过这几个简单的命令可以完成很多有趣的任务,比如跨越障碍,走迷宫….你会发现,解决这些问题极具有挑战性,而我们编程的本质就是解决问题。在整个学习过程,你会收获不少乐趣。Karel是使用Java语言的,对学习Java入门非常有帮助。
Karel有什么特别的?
相比较我们传统的JAVA入门课程,Karel很有趣,在指导Karel完成任务的时候,你会体会到跟Karel直接互动,比如你写下move()这样的命令,会在屏幕上看到Karel机器人往前运动。而不像我们以前学习的时候,学习了很久的理论知识,却不知道如何上机编写代码,或者上机编写一个简单的打印字符的程序。通过Karel,我们能立马体会到程序的魅力,一下子就喜欢上编程。所以Karel是一个很好的入门课程。
另外在完成Karel的任务,你会体会到软件工程的思维,比如分解任务,自上而下的设计,面向对象的编程…即使你已经比较熟悉Java基础知识,通过Karel你可以深刻体会到良好的编程习惯和正确的编程思维对于成为一个好的程序员有多么重要。
Karel的世界?
Karel孤独地生活在一个遥远的星球上,水平方向称之为街,垂直方向称之为道,街道相交的地方称之为街角。Karel只能站在街角上,并且只能面朝四个标准罗盘方向中的一个(东.南.西.北)。如下图所示,Karel处在第1街第1道相交的街角,面朝东方,春暖花开。
从图中可以看到Kare生活的世界里的一些境况:Karel前面是一个Beeper,会发出声响的宝贝,我们就将它称之为钻石吧。Karel只有与钻石处在同一个街角的时候才能发现它。图中的实线是墙,Karel不能穿越墙壁,只能沿着墙壁走。这是Karel生活的世界中最基本的一些规定。
Karel能做什么?
Karel可以通过一系列的命令集指挥它完成很多任务,刚出厂的时候,Karel只有一组非常少的命令集组成:
move():命令karel向前进一步。当一堵墙挡在karel面前的时候,karel不能响应move()这个命令。
turnLeft():命令karel向左转90度(逆时针转动)。
pickBeeper():捡起karel所在位置的Beeper,如果当前位置没有Beeper的话,不能响应此命令。
putBeeper():在karel所在位置上放下Beeper。如果Karel的包里没有Beeper的话,不能响应此命令。
每个命令后面带的一对括号是Java语言常见的语法。同时需要特别注意的,在使用这些命令的时候,有严格的限制条件。如果karel企图尝试一些不允许的行为时,比如遇到墙壁的时候,想穿越墙壁,继续往前走。或者捡起一个当前位置并不存在的Beeper,错误就会发生。这个时候,会显示错误信息,同时拒绝执行剩余的命令。
Karel自己并不能自动运行这些命令,要想让Karel顺利完成任务,必须组合好这些命令,并把它们放进一个Karel的程序里。
如何运行karel
1.搭建Java的运行环境
我们要运行Karel程序,我们必须先搭建好Java的开发环境。
Java的开发环境搭建主要有三个任务要完成:
1) JDK的安装
2) 配置环境变量,
3) 下载JAVA IDE(eclipse)。整个过程非常简单。
JDK的版本很多,自己根据操作系统,选择合适的版本。配置环境变量的方法网上有很多详细的教程。
Java的开发平台是Eclipse。选择Eclipse一定要注意选择跟自己的操作系统匹配的版本。另外也可以选择汉化版本。安装成功之后,可以试验一下是否能正常运行Eclipse。首次进入Eclipse,会弹出如下界面,让你选择工作空间:
工作空间是Eclipse新建项目存放目录的地方。可以选择把下面的选择框勾上,这样以后启动Eclipse就不会再出现这个提示界面。点击ok后,一段时间等待后,会出现如下界面。
2.接下来是如何导入Karel机器人项目
1) 下载karel机器人的完整工程,网址是http://www.stanford.edu/class/cs106a/assignments/Assignment1.zip
2) 将karel项目导入到eclipse里。点击工具栏上的File->Import, 选择existing projects into workspace然后点击next,点击browse,找到要导入的项目,点击finish,就将项目导入进来了。可以在软件的左侧树形结构里看到Assignment的项目如下图:
点击文件夹旁边的+图标,展开如下界面:
注意:有可能没有出现上图出现的JRE System Library这一项,这是可能由于jre的版本不匹配导致的,也就是我们在安装JDK的时候选择的版本不匹配导致的。
接着点击(default package)旁边的+号,展开如下界面:
我们可以在带.java的文件里完成我们的代码。我们双击其中的一个,会出现如下界面:
我们大概了解Karel机器人项目的组成,我们现在准备运行这个项目:点击Assignment1节点,然后右键点击Run As->Java Application
选择带(default package)后缀中的一个,比如我们选择CheckerboardKarel,然后点击ok,出现了如下图界面,我们正式进入了karel的世界。
我们一定要达到这个界面,能够将这个项目正确运行对于我们学习后面的课程有非常大的帮助,否则就很难体会到Karel的妙处。在搭建JAVA环境或者导入Assignment1工程中遇到任何问题,都可以通过使用搜索引擎解决问题,你所遇到的所有问题,网上都能找到解决方案,学会使用网络资源,是学习编程的一个好办法。网上有一个笑话:“百度一下会死吗?”,“会。”虽然各种黑百度,但是百度解决技术问题,还是能够起到很大帮助。当然后面可以使用更专业的搜索网站,但是前期百度还是够用的,学会使用关键词找到答案非常重要。
我们如何通过Karel学习编程?
1) 你必须“弄脏你的手”
编程是一项技能训练,就跟开车,游泳一样,需要大量的实际锻炼。理解概念和完成程序不是同一回事。很多时候看起来很简单的东西,具体实现起来就变得非常困难,在整个学习过程,自己亲自完成代码,完成任务是非常重要的。如何开始学习编程, ---开始实际动手操作。
2) 开始的时候多寻求帮助,慢慢学会独立解决问题。
最开始的时候,可能会遇到各种各样莫名其妙的问题,而我们经常被这些问题弄得束手无策,我们照着代码敲上去,发现得不到预期的结果。我们可以先尝试自己或者百度一下,解决问题。如果解决不了,可以想办法请教同学或者老师。不要怕问题简单被别人笑,刚开始我们掌握的东西少,往往很简单的问题都能让我们卡住很久。在最开始的地方,大家都觉得很难,无从下手,往往就放弃了,如果这个时候有人稍微指导一下,其实很快就能度过这个幼儿期。如果有资源的话,最好找一个厉害的专业人士指导,效果比较好。还是那句话跟着爸爸学游泳,最后可能学会的是狗刨。跟着专业教练学,可以学会标准姿势的蛙泳,自由泳。
3) 不要怀疑自己的智商,坚持下去。
我在通过karel培训学生的时候,最开始的时候他们连最简单的任务也要花一周时间才能弄明白,现在很多学生都能独立快速编写五子棋,围棋,俄罗斯方块,坦克大战程序。相信自己,你不会,不是自己笨,而是编程最开始的时候一定要有人进行上机指导,不是光靠视频学习就能解决问题的。最开始的时候最难,最容易放弃。
未来课程是什么?
我们接下来的课程会通过让karel完成不同任务具体是:
1) 身残志坚的karel。Karel虽然只有几个简单的命令,并且有些行为被限制了,但是karel却能完成很多任务,比如跨越障碍,比如走迷宫寻宝,找到神秘位置…..
2) Karel的三大定律(上)(下):我们会慢慢发现无论多么复杂的程序都没有超过三种情况:顺序,选择,循环。。。当目前为止,我们还没有遇到第四种情况。就像尼古拉斯赵四说过,这世上就没有一顿饭解决不了的事,如果有,那就两顿!同样程序世界里没有三大定律搞不定的事,如果有,那就再来一遍选择,循环,顺序…..
3) Karel的化零为整大法:Karel如何又快又准确的完成复杂的任务,将复杂的逐步分解,就像剥洋葱一样,一层一层剥下去,剥到最后,发现什么也没有了,难的任务,在无形中已经被消解了。
4) Karel的算法世界(上)(中)(下):虽然化零为整大法很厉害,但是依然有它解决不了的问题,Karel必须掌握算法,在算法的世界里,Karel完成了一个又一个精彩的任务,比如寻找宇宙的中心,寻找遗失的“非洲之星”…
5) Karel世界的总结:最后对我们在完成这些任务的过程中遇到的风景和遗留的问题进行总结。
最后,让我们一起进入Karel的世界,进入编程世界,享受它带来的激情。即使你未来不想成为一个程序员,学习程序也是有必要的。乔布斯有一句名言:“每个人都应该学习编程,它教会你如何思考。” 机器是与人不一样的思维方式,学习编程是学习另一种思维方式。等你坚持下去的时候,蓦然回首,你会发现奇妙的东西就在灯火阑珊处。
欢迎继续收看第二期课程:身残志坚的karel。
谢谢大家。