“兴趣驱动”的编程学习

我的技术及编程方面的知识都是靠着兴趣学习来的。其实我不管是什么爱好总结起来都是兴趣驱动的——如果不是的话很难坚持下来,也不会被称为爱好了(虽然有的放弃了是比较可惜了)。

最早我接触编程完全是为了驱动乐高机器人。当时在某个少年宫和同学一起学NXT,后来是EV3。它们用的是不同的图形化编程语言——为什么乐高自己都没有一个统一的编程环境呢?而是大同小异的不同语言。记得最清楚的这些语言的特征是横向延申,使用连线的方法来做变量,模块上没有文字说明而是示意图片。

我对EV3的了解远不及在梦里那么多。他的梦幻联动——python+EV3python+乐高=打印机这两篇文章让我耳目一新:虽然我也做过打印机,但是在我那个EV3只能很愚蠢地通过矢量方法一笔一划地打印出来一个偏旁。因为我发现如果不更新方法只是很傻地写下去程序地话意义不大,而我当时年少无知,所以还是拆了它做些别的机器人了。

接下来接触到的就是Scratch了。这好像是我爸爸介绍给我的。就像What’s Scratch里写到的一样,我对这个新奇的软件很感兴趣。9岁时完全不用报培训课程自己看着文字说明自学了Scratch。

Scratch和你的交互性很强:虽然有个象征程序启动的小旗子,但是只要点击一下模块他就会自己运行。我做过一些很好玩的东西(考古发现),灵感的来源也很有趣:发现MIT社区上有一个好玩的想法或是神奇的技术我就会自己remix一份(通常都是自己从头开始做);也有时玩到好玩的游戏也会试着做出来——但是这种一般都只会留一个半成品。到最后反而只做了一两个社区上一抓一大把的多见的Platformer,却做了好几个完成度比较高的双人游戏。比如一个喷涂大战使用了画笔,还有一个比屏幕大的地图的赛车游戏(比屏幕大的地图在我看来是一项技术,因为Scratch本身不太支持)。可惜后期一些作品删掉了,只保留了早期的一大堆半成品。

Scratch的编程还是会遇到不少问题的,比如本身的局限性以及美工(!)。并且我也不太喜欢做特别大且臃肿的游戏,在没有一个很好的结构时大型游戏一般逻辑混乱,难以扩展。

不过即使是这样我也做了一个大型的项目——单片机汇编模拟器。灵感最初来源于选修课用的老旧不堪的单片机。不知为何我想要做一个仿真…真是太复杂了,这个就是在Scratch这样本身已经是基于某种语言的语言上再次叠加了一层,我可以在其中使用数字编写程序(更像是汇编)来操控灯或是声音输出。其中支持循环、变量条件甚至是子程序(函数)等。不过一旦不记得这个项目的架构了就无法添加功能了。所以最终也停止了——不过还想要什么结果呢?

程序的主要解释器脚本。为了便于感受我把它拆成了两段

当时还没有学会采用模块化的设计思路,所以只是一个主程序,很乱很乱。

因为Scratch的自身局限性,我很长的时间内都只是偶尔做做小游戏。另外我的EV3也在这段时间内被“尘封”了。在后来的时间里我在W3School上面看过一些Html和Javascript的教程,不是很感兴趣就没有深入研究了。(后来才听说Html的可怕。)

小学信息课上老师介绍给我们一些好玩的游戏化编程网站,比如CODE.org(类似于blockly,自己可以去看看,还是比较有意思的学习编程的网站)。这些游戏化的编程会给你设置关卡和剧情,并在你通过关卡的时候给你奖励。我们就像是在玩游戏一样(也像是当今低龄儿童的学习),完成一项任务就会获得奖励,也会打开下一项任务。最终你甚至可以通过定义各种物体的行为方式和规则来创造一个自己的世界。听起来不错,是吗?

它们在刚开始玩的时候还是很新奇的,可是后来我发现它只能教给你最基础的语法。而你若有些耐心是完全可以以更快的速度更精准的理解学到这些知识的。虽然也会有一些收获,但是对于我来说效果不大:感觉就像简单的抄代码再改改。

想看更多关于游戏化编程的讨论可以看看这个:游戏化编程是个好主意吗?- 某行人。我很赞同这里面的观点。

CODE.org中操控一个2D的Minecraft

后面我学习python的基础语法又是看小甲鱼的视频学到的。后面就从来没有看过任何的系统性的教程了。如果要写一个特定的工具的话,代码也是东抄西抄的,抄多了也就明白了(我也不知道为什么…)。因为我认为没必要把所有的库的使用全都记下来,我又不是真正的软件工程师。觉得在具体的使用中多看看文档就可以了。

就是这样,我比较反对去报个课程学习编程,尤其是入门编程。有些教育机构打着“人工智能”“免费课”的旗号教给你Scratch,但是质量也有待提高。据说不少教育机构的老师自己只会把源码提供给孩子们,然后让给他们自己学习…我觉得在Scratch这种每个模块的功能都显而易见的环境里完全不需要培训机构来教育孩子们,若是由于自学的种种问题必须要老师教的建议放弃学编程,毕竟还有许许多多的路可以走也要确认教育质量。千万不能听到“老师今天上课讲了怎么做接苹果的游戏”,而是也许应该“老师今天上课讲了怎么键盘控制小猫”(虽然可能一部分的孩子年龄小认知能力没有到这种程度)。

我这方面主要依靠兴趣驱动的学习,比如看了《编码》这本书就想自己造一个出来,觉得自己如果做到了的话就很厉害。这样我几乎从来没有感受到被逼迫或是枯燥,当然一旦我不对它感兴趣了我就会去干些别的。

但是这样也是会有一些很明显的坏处的,比如就像“那些年挖过的坑”这样,会出现很多很多完不成的作品,因为我相信若你对一件事不感兴趣了再做下去也就没有意义了。同时这样会避免一些笨拙的、完全只是为了增加他人的使用感受的(显得我很厉害的)工作。

希望我可以尽量克服一些有害的问题,也希望我可以兴趣驱动学习。

关于 ““兴趣驱动”的编程学习” 的 4 个意见

  1. 啊啊啊啊啊啊啊啊啊,小甲鱼!!!!!!
    我也是看了他的课:《零基础入门学习python》!!!

  2. 如果孩子要学习编程,那么就是‘兴趣驱动’,而很多人没有这方面的兴趣,所以要激发这方面的兴趣,如果要激发,就要一个可以自由探索的游戏化的平台,也就是一个playground,就像是dynamicland
    另外说到‘报课’,我认为编程(无论是哪一种语言)更多是体会那种把大问题化为小问题,把复杂问题简单化,用更灵活的方式解决问题等等这些编程思想,从此遇到一个问题后多了一种解决、思考的方式,甚至通过树莓派、micro-bit、toio将编程带入到现实生活,而不是具体的解决某一个问题(比如做一个接苹果的游戏),然后就万事大吉,
    不过我都没有报名过所谓课程,也不大了解,所以我也没有发言权。。。
    我和你很像诶,不过我是先玩的scratch,然后scratch+EV3,然后python

发表评论

电子邮件地址不会被公开。 必填项已用*标注