文/一个从自学者变成助教再变成讲师的人
我教编程大概有五六年了,从最初在技术社区帮忙回答新手问题,到后来在培训班正式带课,前前后后接触过几百个零基础的学员。
这些学员刚来的时候,几乎每一个人都会问同一个问题:”老师,我完全不会,能学会吗?”
我的回答也几乎一样:”你先打开电脑,跟着教程写一个Hello World。写出来之后,你自己告诉我答案。”
他们就去写了。大部分人在十五分钟之内都能跑出来,不管基础多差、年纪多大。跑完之后他们回到座位上,表情有了一个很明显的变化——从”我能不能学会”变成了”我可以试试”。那个表情的变化,就是”从零到一”的变化。
我一直觉得,Hello World这个程序最神奇的地方,不是它本身有多厉害,而是它是唯一一个”不需要老师教”的程序。你在任何一个搜索引擎里输入”怎么学编程”,第一个步骤永远都是”写一个Hello World”。你照着做,就能做成。你做成了,就完成了一次”自我教学”。
在整个编程学习的过程里,后面所有的知识点,几乎都需要有人指点才能顺利走过去。循环怎么写、数组怎么用、函数怎么定义、面向对象是什么,这些如果没有老师或者教程解释,光靠自己摸索,会卡很久。唯独Hello World这一课,它不需要解释,不需要背景知识,不需要理解原理,你照着做就对了。
它就像一个编程世界里的”自动扶梯”,你只要站上去,它就会把你从”门外”送到”门内”。
那些靠Hello World撑过”第一道坎”的人
我带过的学员里,有一个五十多岁的大叔让我印象特别深。他是做水电工的,想学编程是因为他儿子在大学学计算机,他想”能看懂儿子在说什么”。
他第一次上课的时候,连”文件”和”文件夹”都分不太清楚。鼠标左键右键偶尔搞混。我让他打开文本编辑器,他找了五分钟才找到。然后我给了他一段Python的Hello World代码让他照着敲。他戴着老花镜,一个字母一个字母地敲,敲了大概八分钟。
他按运行的时候,手有点抖。屏幕上出现那行字的时候,他摘下眼镜擦了擦,然后问我:”老师,这算成功了吗?”
我说:”算。你写了一个能跑的程序。”
他把那个窗口最小化又打开,最小化又打开,来回看了好几遍。后来那堂课结束的时候他走过来跟我说:”我今天来的时候,心里特别没底。刚才那行字出来的时候,我觉得好像没那么可怕了。”
后来他学得其实挺慢的,进度大概是其他学员的三分之一。但他从来没说过”我不学了”。每次学到卡住的地方,他就回去写一遍Hello World,写完再回来继续。他好像把那个程序当成了一个”情绪按钮”——按一下,焦虑就消一点,再按一下,就又有了继续的力气。
课程结束的时候,他做了一个小工具,帮他记录工作里每天要检查的水电表读数。不是很复杂,但他很得意。他在结课发言里说:”我从不会开电脑,到能写一个自己用的东西,中间就隔了一个Hello World。那个东西一直带着我往前走。”
那个”不需要老师”的程序,其实就是最好的老师
我后来仔细想过:为什么Hello World能成为”唯一不需要教”的程序?
因为它简单到没有任何”理解”的门槛。你不需要懂”字符串”是什么概念,你只需要照着把那些符号打出来。你不需要懂”函数调用”是怎么回事,你只需要知道按了运行之后它会出字。你不需要懂”编译器””解释器””环境变量”这些抽象名词,你只需要完成”敲代码、按运行、看到字”这三个物理动作。
它不要求你”理解”,只要求你”执行”。而”执行”这件事,绝大多数人都能做到。
这就产生了一个奇妙的效果:一个人在没有任何背景知识、没有任何人帮助的情况下,通过自己的双手,让计算机执行了一个完整的指令序列,并且得到了预期的结果。这个过程本身就是一次”自我证明”——”我能让这个东西听话,我能控制这个机器,我能在这个领域里做成一件事。”
这个证明,比任何人跟他说”你行”都有说服力。因为它是他自己做出来的,不是别人告诉他的。
“教育的最高境界不是教,是让学习者发现自己能学。”Hello World就做到了这一点。它把”编程”这件事从”需要老师教的高深技术”,变成了”自己动手就能做成的简单动作”。这个”发现”,比后续学到的任何具体知识都重要。
为什么”Hello World”不能被替代
有人问过我:”能不能把Hello World换成别的示例,比如’写一个能加两个数字的程序’?那也是一个很简单的程序啊。”
我说不行。因为”加两个数字”需要”理解”。你要理解”变量”是什么意思,你要理解”输入”和”输出”的区别,你要理解”数据类型”这种概念。虽然都很基础,但它们都是”需要被解释”的东西。一个完全没有编程概念的人看到那些代码,脑子里会冒出一百个问题:”什么是a?什么是b?为什么要用int?sum又是什么?”
而Hello World没有这些问题。它只有”输出”这一件事。输出是人的本能——你说一句话,别人听到了,就这么简单。不需要解释任何前置概念,不需要理解任何抽象模型。
所以它比任何其他程序都更适合当”第一个”。它是所有编程知识里”抽象程度最低”的那一个。它不是”需要先理解再执行”,它是”先执行,再慢慢理解”。顺序反过来,学习的门槛就降到了最低。
“先做,再懂”跟”先懂,再做”之间,差了一个”勇气”的距离。Hello World帮人跨过了这个距离。
那个”自己学会”的瞬间,谁都给不了
我后来在培训课上,已经很少讲Hello World的”原理”了。我把代码给学员,让他们自己照着敲,自己运行,自己看到结果。我只在旁边坐着,回答他们遇到的技术问题——”括号在键盘哪里””为什么要用英文输入法””保存的时候文件名要加什么”。
然后等他们跑出来了,我才说一句:”这就是编程。你刚才自己完成了一个程序。”
他们脸上那个表情,我在每一期课上都能看到,它从来没有变过。那是”我自己做到的”的表情。那个表情里没有”老师教得好”的成分,全是”原来我真的可以”的成分。
我后来觉得,一个好老师不是把所有知识都讲明白的人,是能让学生说出”我自己搞懂了”的人。而Hello World这个东西,它天然就是一个”你自己搞懂了”的工具。你不需要任何讲解,你照着做,你做出来了,你就懂了。
那个”懂”不是懂语法、不是懂原理、不是懂任何具体的东西。那个”懂”是懂了”这件事我能干”。而”我能干”这三个字,是通往所有后续学习的入场券。
那个从门缝里看到的光
所以我想说的是:Hello World从来不是一个”技术示例”。它在编程教育里扮演的角色,比”教学”更深——它是一个”启动开关”。
你按下去,门就开了一条缝。光从缝里透出来,你看到了里面有人影在动。你还不确定自己能不能真的走进去,但那条缝和那道光,已经让你相信”里面是亮的”。
然后你就迈出了第一步。后面的路还很长,但第一步迈出去这件事本身,就已经是教育能给出的最好的礼物了。
那个第一步,就是”Hello, World!”。
它说”你好”,其实是在说”你可以”。它说”世界”,其实是在说”这个世界欢迎你”。
每一年、每一期课,我都看到有人听完这句话之后,眼神里亮了一下。那个亮光,比我讲过的所有知识点加起来都值钱。