为了写这篇文章,我让8岁儿子独立完成了Hello World


一、事情的起因:一个周末的突发奇想

上个月周末,我儿子趴在我旁边看我敲代码。他问我在干嘛,我说在工作。他又问工作就是在屏幕上打字吗?我一时不知道怎么回答,就随口说了一句:”要不你自己试试?”

其实说完我就后悔了。他才8岁,三年级,英文单词都认不全,让他写代码不是搞笑吗?但他眼睛一下子亮了,拽着我的胳膊不放。我拗不过,就答应了,但跟他约法三章:第一,我不会替他敲任何一个字母,最多告诉他按哪个键;第二,他得自己读屏幕上的信息,看不懂可以问我;第三,如果中间喊累不想玩了,随时可以停。

于是我们就开始了。我打开VS Code,新建了一个文件夹,让他在里面新建一个文件。他问叫什么名字,我说随便,他想了想打了个”hello”——因为他只认识这个词。


二、第一个坑:那个该死的中文分号

我让他照着屏幕上的一段Python代码抄:

python

复制

下载

print("Hello, World!")

他盯着屏幕看了半天,然后开始一个一个敲。他食指和中指并在一起点键盘,敲了大概一分钟,终于敲完了。他兴奋地抬头看我:”好了!”

我凑过去一看——print("Hello,World!")。括号和引号都是中文的,逗号也是中文的,感叹号还是中文的。我让他按回车运行,终端报了一堆红色错误。他盯着那些英文报错一脸茫然,问我:”它是不是生气了?”

我没忍住笑了。我说:”你看这个括号,和屏幕上的括号一样吗?”他凑近对比了五分钟,终于发现了区别——中文括号是胖的,英文括号是瘦的。他一个一个改过来,改完再运行,又报了另一个错,因为引号还是中文的。他有点不耐烦了,说怎么这么多规矩。我说你想放弃吗?他咬了咬牙说继续。

又改了三分钟,终于把所有的标点都换成了英文。他深吸一口气,按下了回车。终端里跳出了那行蓝色的”Hello, World!”。他盯着屏幕看了好几秒,然后突然”哇”了一声,转头看我,眼睛里有种我好久没见过的东西——不是兴奋,是一种”我真的做到了”的认真。


三、他以为程序只能问候世界,我说你能让它说任何话

他问我接下来干嘛。我说你可以改一下说的话,随便什么都行。他想都没想就改成了:

python

复制

下载

print("我是小豪,今年8岁")

运行,屏幕上出现了他的自我介绍。他笑得特别开心,然后又开始改:

python

复制

下载

print("爸爸是笨蛋")

这行我就不评论了。他玩了好几分钟,不停地改里面的文字,每改一次运行一次,盯着屏幕傻乐。我突然意识到,这是他第一次感受到”我写的字,电脑会听我的”——这种控制感,对他这个年纪来说,可能比什么”Hello World”的本意要重要得多。

但问题很快就来了。他试着把括号里的中文改成英文,成功了。然后他突发奇想,想把”print”也改成中文”打印”,我还没来得及拦,他已经改了。运行报错,他很困惑地看着我说:”为什么这里不能用中文?”我给他解释,print是Python认识的一个指令,就像老师点名喊”起立”一样,你不能喊”站起来吧您嘞”因为大家听不懂。他似懂非懂地点头,但至少明白了一件事:程序里有些词是固定的,不能随便换


四、他挑战了第二种语言,然后开始吐槽Java

玩了大概半小时,他觉得Python太简单了(原话是”总共才几个字嘛”),问我还有没有别的。我想了想,打开了Java的教程页面,让他抄那段九行代码。

java

复制

下载

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

他抄到第三行就开始不耐烦了:”为什么这个要写这么多?”我解释Java就是这么啰嗦,什么东西都要放在一个叫’类’的大盒子里。他停下来问我:”类是什么?”我想了半天,说就是你放玩具的收纳箱,你每次拿玩具之前得先打开箱子。他不知道的是,这个”收纳箱”的比喻其实挺牵强的,但对他来说足够了。

他抄完了所有代码,运行——报错,因为文件名和类名不一致。他改文件名,再运行,又报错,因为大小写写错了。折腾了快二十分钟,屏幕上终于出现了”Hello, World!”。但他没有欢呼,而是转过头对我说:”这个语言太烦了,以后不想学了。”

孩子的反应是最诚实的。一个8岁小孩用直觉对比了Python和Java——Python直接、简单、反馈快;Java复杂、规矩多、门槛高。那些语言排行榜上的特性列表写得再漂亮,也抵不过他亲自动手打一次代码的感受真实。


五、他给Hello World加了颜色,把程序变得不像程序

后来我给他看了网上别人写的彩色Hello World。他特别感兴趣,问怎么弄的。我教他加ANSI转义码:

python

复制

下载

print("\033[91m" + "Hello, World!" + "\033[0m")

运行出来是红色的。他高兴坏了,立刻开始试别的数字,92是绿色,93是黄色,94是蓝色。他把一排不同颜色的”Hello, World!”排在一起,看着屏幕说:”好像彩虹。”

这时候他突然问我:”能不能让它闪?”我查了一下,还真有闪烁的ANSI码——\033[5m。加上之后终端里的文字开始一闪一闪的,他兴奋得从椅子上跳起来了。

那一刻我突然觉得,所谓的”编程入门”,其实根本不需要什么高深的理论。一个8岁孩子,用一个下午,从完全零基础到能自己改文字、改颜色、让字闪烁——他获得的成就感,比那些”先学一个月语法再写第一个程序”的课程要强一百倍。


六、他踩过的坑,比我想象的要多

这一个下午,他踩的坑我粗略记了一下:

  • 中文标点:出现了不下十次
  • 大小写:把Print写成print,把Hello写成hello,把class写成Class
  • 缩进:在Java里还行,但Python里他差点乱缩进
  • 括号不匹配:好几次只打了左括号忘记右括号
  • 文件名和类名不一致:Java特有的坑
  • 引号混用:单引号双引号搞混

这些坑在程序员眼里都是”低级错误”,但对一个8岁的孩子来说,每一次错误都是他在理解一个规则——虽然这个过程充满了挫败感。

让我意外的是,他没有中途放弃。虽然他抱怨了好几次”好烦””为什么不行”,但他每次都又坐回去继续改。事后我问他为什么没放弃,他说:”因为前面已经成功过一次了,我知道它能成功。”

这句话让我想了很久。Hello World对新手最大的价值,不是那行字本身,而是第一次成功的记忆——你知道它能做到,所以第二次遇到困难时,你有信心跨过去。


七、结束之后他问:这就完了吗?

天色暗下来的时候,他关了电脑,突然问我:”学了这么久,就能打一行字吗?”

我愣了一下,然后说对,打了几个小时,其实就是让屏幕显示一行字。他想了想,说:”那也挺厉害的,电脑原来都不认识我,现在我打什么它就显示什么了。”

他没问我”那有什么用”,也没问”这能赚钱吗”,他只是觉得能让电脑听自己的话这件事本身很酷。这种纯粹的动机,让我这个写了十几年代码、早就把”Hello World”当肌肉记忆的人,重新找回了第一次看到那行字时的心情。

最后说一句:如果你家里也有小孩对编程好奇,别给ta看什么”从入门到精通”,直接坐在旁边,让ta自己敲一个Hello World。标点用错了别急着指出来,让终端报错给ta看。报错看不懂也别急着翻译,让ta自己琢磨一会儿。这个过程里ta学到的,远不止”如何打印一句话”——ta学到的是:尝试→失败→调整→再尝试→成功,这个循环本身,就是编程的全部。

赞(0)
未经允许不得转载:helloworld官网下载 » 为了写这篇文章,我让8岁儿子独立完成了Hello World