最近陪儿子自学编程
forcode:同同放暑假后去外婆家住了三四天,就吵着要回新家,因为走之前陪他看了网易云课堂里App Inventor的几节免费教学视频,又动手做了个简单的手机APP。到外婆家没有电脑可以操作,他自己手机安装网易云课堂自学了一个新的APP设计案例,昨晚回到家洗完澡,自己就在那里把界面给设计出来了,刚才又模仿着拖动积木编程块进行逻辑,情况比我预期的要好,主要他有很强的学习兴趣!

他已经学着开发了2个小游戏了,一个是猜价格,一个是画画,他大约独立完成了80%的部分,有20%的部分是我协助完成的,8岁开始学编程,有些稍微复杂一点的东西,他还是理解起来有点困难,比如二维坐标轴由x和y两个坐标确定一个点的位置,这个概念他就还不太懂……

这个APP inventor的好处,除了类似scratch积木式编程很容易上手之外,设计出来的APP可以实时同步到手机或模拟器里调试,所见即所得,小孩学起来很容易有成就感。
想当年,我们本科学C语言的时候,学了几个月了,还从来没有搞出过图形界面,一天到晚学抽象的语句和算法,无法运用所学的知识弄出一个能够运行的程序来,非常受挫。
我觉得,要培养编程的兴趣,最好就是从案例入手,让孩子能够一开始就做出能够运行的APP出来,能够看到自己学习的成果,能够打包成一个apk文件在手机里运行,这太好玩了。
比如,这个简单的画画的APP,半小时就能学会,打包安装到自己的安卓手机里,就真的可以画画,而且还能保存为图片:

因为我以前看到有人用别的编程语言生成分形图片


所以,当我陪同同学了这个画画的app案例之后,就想着是不是可以用循环语句实现分形图片的生成。
刚开始的时候,我直接弄一个循环语句,却死活都画不出图来:


后来我发现,要想让循环语句循环起来,必须把循环语句嵌入到计时器模块里:

刚开始因为画笔颜色是固定的,所以画出来的线条比较单一,不怎么好看。后来,我知道app inventor的颜色模块中,有三原色合成颜色的功能,于是,我在循环语句中利用3个取值在1-255之间的随机整数来随机合成画笔颜色,这样计时器每计时一次,画笔颜色就随机改变一次:

加入了画笔随机颜色之后,终于画出一些色彩比较好看的线条了:


但是,这依然不是我想要的结构复杂的分形图片,还需要研究一下分形的算法和公式。
另外,我还发现一个问题:
我本来期望的是每一次计时器+1之后,循环语句循环一次,画布里的画笔就会画一笔,然后app运行的时候,能够看到画笔在画布上不断画出新的线条来。但是,我运行的结果是,要等循环语句运行到结束之后,画笔所有多次循环画出的线条才会一次性呈现出来。有谁知道如何实现循环一次画笔画一笔吗?我的逻辑结构哪个地方有问题?
陪儿子学编程,顺便锻炼了他处理图片的能力、搜索资料的能力、录音剪辑的能力,比如,他想要插入一张汤姆猫的图片,我就让他自己去百度图片里搜索下载,自己用Faststone Capture编辑处理,然后上传到app inventor里;
Faststone Capture非常方便简单的图片处理工作:剪切、加图标、加说明文字,反应非常灵敏。强烈推荐!

如果app需要一段几秒的提示音,我就让他在开源音频软件audacity里录音,然后导出为MP3格式,再上传编程。
audacity也是我用了十几年的一款非常小巧又开源免费的录音、音频剪辑工具,非常轻量化,功能完全够用了。


除了开头几天,我是陪着他一起看教学视频、陪着他编程之外,最近两天我已经不怎么管他,完全是他自己在看视频自学,自己模仿教学视频里的案例设计app界面和逻辑,最后运行有错误,我再帮他查找原因。他学习编程的劲头非常足!
目前暑假期间,他每天的学习是这样的,上午补语文、数学的五三天天练,因为上学期疫情期间没开课,很多作业都没做,发现他看学而思的录制课程,学习效果不理想,很多东西没弄懂,不做练习还是不行。
下午让他每日阅读打卡,然后我教他学《美国语文读本(The Eclectic Readers)》第一册,里面的句子很简单,适合小学1-2年级学习,每天下午花半小时学4个lessons,但是,还没让他动笔去写单词,明天开始可能要让他把每个单词抄10遍了,否则光会念不会拼写。这本书第一册有115个lessons,按照我这个进度,估计暑假一个多月就能学完整本书。
上学期疫情在家,教他学了6本绘本和100个旅游英语句子;一年级的时候,则记了四百多个英语单词。算是有一定英语基础了,但是相比北上广深的孩子,英语基础可能还是偏弱,尤其口语和听力,拼写则完全没要求他,大部分单词只会读,不会写。
每天下午学完英语,同同就急不可耐地要自学编程了,原来我2006年那台X60笔记本给同同用,但是配置太低了,运行app inventor的模拟器AI伴侣,半天加载不出来,所以,这两天给他用我的台式机学编程。
他目前处于沉迷于编程的状态,我必须每半小时叫他离开电脑去喝水撒尿和活动。说到这里,明天可以让他开发一个app,每半小时提醒他起来活动撒尿喝水,让他自己录音提醒自己……
同同学app inventor,没有报任何少儿编程培训班,我一直觉得,少儿编程培训属于智商税《少儿编程成了新的应试教育》,《少儿编程变味了》任何一窝蜂去做的事情,我都保持警惕,我觉得目前网络上免费的教学资源多得是,完全没必要花钱学编程,如果孩子真的对编程感兴趣,家长稍作引导入门之后,孩子靠兴趣引导着自学,完全够了,一分钱都不用花,教程、视频、帮助文档,网络上都非常完整。
我们用的是浙江大学吴明晖老师免费的教学视频,网易云课堂和哔哩哔哩上都可以搜索到,我用“唧唧down”把整套视频教程都下载到我电脑里了,方便同同随时学习。
网易云课堂的地址(除了视频,还有配套的ppt课件):
https://mooc.study.163.com/course/1000132000#/info
B站(只有视频,没有ppt,但速度更流畅):
《App Inventor-零基础Android移动应用开发》
https://www.bilibili.com/video/BV1FJ41157Zz

================
forcode:前年,我用app inventor开发的第一个安卓APP:同同的拼音教室,录制了拼音声母发音,然后切割成一个个ogg音频文件,然后上传到app inventor开发界面,每次只能上传一个文件,效率很低。然后每个声母还需要一个按钮,一个音效,音效还需要关联上传的音频文件,然后进行逻辑关联,点击按钮播放相应的音频文件。
但是有个问题:点击的声母超过14个之后,后面再点击其他按钮就没有声音了,退出APP之后,再重新进入,没有声音的按钮又有声音了,但点击超过14个按钮,又失效了,感觉跟内存限制有关。所以,这个APP inventor只能当做一个玩具来教小孩子编程,开发一些简单的功能,要搞复杂的程序,效率还是太低。如果是纯代码的编程,重复的按钮不需要在图形界面里拖拽几十次,直接复制粘贴代码再修改就行了……
这是我开发的第一个APP下载地址:
https://pan.baidu.com/s/1ewVYI2tMTsR2BAIUOZHmbA

话说,我前几天突然想起来很多年前玩过的PC小游戏——“北京浮生记”,这个游戏完全没图片,纯文字的买卖系统,但是很耐玩。


我觉得用app inventor,也完全可以开发出一个类似的安卓版“北京浮生记”来,我跟同同说,你好好学,到时候你可以开发一个“小学生浮生记”,每天如何去赶作业、考试、去托管,然后设置几个不断加减的参数,比如:近视度数、身高、考试分数、快乐值……选择课外辅导会增加近视度数、降低快乐值,快乐值低于某个阈值会得抑郁症,参加户外运动,会降低近视度数、提高快乐值、增加身高,课外辅导班会提高考试分数,但是增加近视读书……
游戏最后要综合比拼各个维度的分数……
目前只是一个初步的构思……
================