已经在实际表现中展现了卓越的编程能力,甚至有新闻报道能通过的工程师面试,也不乏类似“初级程序员”即将失业的话题。本文希望探讨的,是所表现出的编程能力,对当前的青少年编程培训行业会产生怎样的影响。我认为,在短期内,不会给编程行业带来过多的冲击,也不会带来显著的帮助,但是长期来讲,的出现,孕育了编程培训行业的一个全新的机会。
1 会编程意味着什么
程序员的本质,就是一个翻译,是自然语言和机器语言之间的翻译。将人类的自然语言描述的需求,通过0和1的方式翻译给机器,让机器能够处理。这个过程,其实是从自然语言的模糊性,到机器语言的极度精确性的转变。所以我们说程序员一定要头脑清晰,逻辑能力强,还得学机器语言的语法。各种编程语言,类似C,,或者是图形化编程语言,都是为了方便人类理解机器语言而做的“中间态”。而随着时代的发展,我们对机器的依赖是越来越强,因此,学会机器语言,就相当于掌握了一个“秘密武器”,可以比别人更好的调用机器的能力,从而实现个人竞争力的提升。
无论现在家长是否认知到了这一层,也无论编程教育是否是打数学或者竞赛的擦边球,懂机器语言意味着未来的更强的竞争力的逻辑,都是构成编程教育成为非学科类培训中的佼佼者的最底层的逻辑。所以,现有的编程培训,和学习一门“语言”的培训是完全一致的。先学基本语法,然后尝试用这种语言去表达简单的词语(语法),简单的句子(程序片段),最后写成一篇文章(完成编程项目)。
从这个视角上看,的出现,整个颠覆了这个逻辑的底层。之前我们都是在研究人怎么学习机器语言,而则实现了机器可以听懂人类的自然语言,然后自行翻译成机器语言。也就是说,“翻译”的工作,不再完全由人类单方面努力,而是人和机器都在努力,机器在以不断进化的速度,理解自然语言。
请注意,这并不意味着人类程序员就会失业。大概率不会干掉一个行业,而是会让行业效率两极分化。各种财务软件的出现没有干掉“财务”这个岗位,但是不需要招一屋子的人打算盘了。所以,学会打算盘不再是当一个财务岗位的必要条件。同样,复杂项目的编程仍然需要人的智力投入,但是,现有的青少年编程培训的内容,可以肯定,至少80%,都不需要学习了。
2 编程培训会受到什么影响?
尽管的能力属于“釜底抽薪”式的颠覆了编程培训行业的根基,但是这种影响并不会立即出现。首先是因为作为一个新事物,的价值还需要时间去沉淀,其次是目前的编程培训中,竞赛和“类奥数”仍然具有一定的市场。编程行业本身,是没有动力去宣传因为人工智能的发展,我们现在学的编程语法和知识,大部分是没用的。
同时,的编程能力,对于现有的编程培训业务来说,所能提供的能力非常有限。最容易看到的应用场景,就是使用的能力帮助学生修改bug。学生在学习的过程中,经常在语法上遇到一些小问题导致程序不能正常运行,使用来指出和修改这些bug,可以有效的提升学习效率。当然也可以用来做类似课后答疑的工作,帮助学生优化自己的程序。但是这些应用,对于现有的工作的效率提升都是有限的。制约编程培训的,并不是课后答疑的效率问题,或者帮助学生看程序的bug的人工成本问题。
所以说,当下看,编程培训业务不会被影响,一是长远的釜底抽薪的效应一时半会看不出来,二是虽然可以帮助优化一些流程,但是这些优化都不足以产生质变。
但是,由于釜底抽薪的效应,我们可以看到,现有的所有的编程培训业务,其实都已经是在沙滩上的大厦,缺乏了底层逻辑的支持,然而这样的大厦一时半会不会塌,这正是孕育新产品一举破局的最好机会。试想这样一种情况,如果有新的编程培训产品出现,采用先进的理念,重新定义了编程学习的价值,带来了新的教材和新的教学方式。同时在教学效果上,把现有的长周期才能看到效果的产品变成很快可以看到效果,把“程序运行的结果”变成“自己创作的作品”,这样的产品,在宣传上,是一定会指出传统的编程产品其实是建立在沙滩上的大厦的事实。所以,如果我们把周期放长,可以看到从面向公众开放的那一天开始,编程培训行业就已经进入了一个新的产品周期。
3 新编程培训的产品构想
由于已经具备了通过自然语义输出代码的能力,所以编程培训的核心不会再是语法。现有的编程教材上的“例题”,几乎都可以通过自然语言描述清楚后直接生成代码。所以,能用程序实现例题所要求的目标,就像用算盘算出若干个数字的和一样,甚至不再成为一个技能,而是“有手就行”的状态。那在这种情况下,新的编程产品应该具备哪些特点或者是属性呢?我尝试做一个粗略的分析和归纳,供大家参考。
(1)以准确描述和结构化阅读为基础
在新的编程产品中,具体使用何种语言来编写程序其实并不重要,也不太需要图形化编程作为兴趣导入,而是直接采用“自然语言编程”进行教学。这就要求编程学习首先要以相对准确的自然语言描述为基础。虽然现在对语义的理解能力很强,但是不难发现,不同的输入对于输出结果的准确性还是有很大差别。现在很多教材都通过控制海龟行走的程序作为起始,通过不断变难的游戏来学习类似分支和循环的结构,而在新的课程体系中,这部分的内容会用来训练“准确描述需求”。
我们来看一个例子:
“给定一个19*19的地图,随机40个点放上香蕉,从起点(3,3)开始,向右出发,走一个5*5的正方形,在走的过程中,观察路线上和两侧是否有香蕉,如果有的话则记录香蕉的点。回到起点之后,输出所有记录的香蕉坐标”。
在培训中,如何让孩子有逻辑的说出这段话本身,就是一个挑战。或许你会说,这个感觉像写作文啊,其实正是如此。如果说现在的编程培训,和数学的关系更近,那么下一代的编程产品,一定是离文字更近。这种描述可以用中文,也可以用英文。原生对于英文的理解能力会远超中文,未来应该也会有更能理解中文的类似的模型出现。这样的教学过程也会给孩子充分的成就感。因为在初期,我们可以先学习简单的语句,比如“前进,如果碰到障碍就右转,共前进10步”这话简单的描述,程序语言基本不会犯错,并且对于低年龄段孩子还可以使用语音输入,极大的降低了编程学习的入门门槛,也增加了初级状态下的成就感。
准确描述之后,程序是否会精确的给出结果呢?就以刚才的描述为例子,生成了如下程序:
这个时候大家可能已经晕了,我不会编程啥也看不懂啊。这就是准确描述之后的环节,我给它命名叫“结构化阅读”。写出的程序大概率不会有语法错误,即使有这样的错误,只要将报错信息输入,会自动纠正。关键是我们要去看这个程序是不是真正的满足了我们的目标。在给出的程序中,都是有注释的,所以我们可以阅读这些注释,结构化的去看程序。我们可以看到19*19,40个香蕉这些要素在程序里是如何写的。请注意,我们不需要立即学习语法,而是看多了之后自然的习得大概讲的是什么。目测好像没什么问题。那我们继续往下看,走一个5*5的正方形,我们看到的是range(3,16),这是啥意思?这样写对不对?通过运行不难发现这个程序没有达到预期,那大概率问题会不会出在这里?这样的教学过程,已经脱离了“语法”本身。
如果我举个学英语的例子,传统的教学,是先学单词再学语法,然后句子,然后你拿着句子去和外国人对话,发现他们能明白,学会。而现在的学习方法,则更像你直接拿中文说,机器自动翻译成英语,然后对方说的回答自动翻译成中文。那么你会发现,大部分时候,翻译机结果都没问题,这些部分就是“不用学习”的部分,而有些地方翻译机翻译成英语外国人听不懂,你就要去看这个部分哪里出了问题,一来二去也就学会了一些语法和结构,但是你只能看着改,到自己原创还有距离,不过没关系,因为这就足够交流了。
编程教学的未来也是如此。能用自然语言描述,能结构化读程序,能大概理解分支、循环的结构,能对程序中的一些结构找到问题,从而去修改自然语言描述的方式重新生成。这个能力才是我们真正需要的,和机器沟通的能力。这样的教学方式,不是先学语法,然后做改错题,而是真正在交流中学编程,所需要的教材逻辑、编程环境和上课的教学逻辑,都会完全不同。
(2)以多程序联调为核心
在满足第一步的程度下,可以说已经基本能满足大部分的单纯的“编程解题”的需求了。但是,这样的编程更多的是一种“为学习而学习”的状态,在实际解决问题上价值不大。在真实的应用场景中,很少是一个单独的程序就解决了所有问题。很多创意,都是多程序的联动才能实现。而目前还不具备一次性产生“一组程序”的能力。
比如说,我想做一个“一起讲故事”的app,这个app包括三个主要页面,首页,讲故事页,读故事页。首页包括登录入口,登录之后是菜单,分别是讲故事和读故事。讲故事页的功能是首先请用户讲一个故事的开头,然后会续写一段,依次进行,直到用户提出故事完成,然后储存这个故事。读故事则可以把讲过的故事列表,用户选择之后阅读这一则。
你看这个app就是一个有实际应用价值的产品,而这个产品的每一个页面,都可以用生成核心代码。但是这几个页面如何串联起来,成为一个完整的功能,则仍然是需要在环境中配置的。即使是在一个程序中完成所有的复杂功能,本身的能力也会限制其发挥。对于复杂的自然语言逻辑,拆分成若干个模块,阅读懂每个模块并确认之后,将这些模块“复制粘贴”到一起,如何粘贴能让程序顺利运行,这也属于“多程序联调”的一种情况。
这部分的学习,由于现有编程培训以语法为中心,孩子们能写出一个完整的程序都不容易,更不要说完成一个实际的作品。而由于第一阶段被极大简化,重心变成自然语言描述和结构化阅读,那么处理多程序联动的问题,也就可以提上培训日程。这件事是承上启下,既不会局限在单独的一个程序中,又和下文提到的实际可用的产品交付产生连接。而且这个部分是真的需要培训的,即使可以给出一些帮助,最终实际的配置,还是需要孩子自己来完成的。
(3)以短周期产生实际可用的产品为交付
现有编程产品基本上缺乏可交付的产品,能写出一个页面小游戏已经是非常高级的交付了,但是这些页面小游戏通常也只有少数孩子能完成。从我实际观察用户的行为上看,很多孩子看到别人的小游戏,不是自己去学习怎么编,而是去玩一下就结束了。学编程的孩子在日常生活中往往也会产生很多想法,但是都会由于自己的编程水平达不到而作罢。
从开始学编程,到能做一个自己的app,这个时间长的其实是超乎想象的。很多孩子学了一年编程,甚至都不能完整的写出一个循环结构,更不要说把自己的想法通过编程实现。因此编程学习的成就感大部分来自于作业,但是这些作业就像数学题,既很难调动孩子的积极性,又很难让买单的家长看到结果。
我想到了我小时学习编程的一段经历,当时学数据库,我用了一个假期,写了一个电话号码管理程序,把家里电话本上的号码都存进去,可以增删改查。当年还没有手机,固定电话都是靠电话本查询,有了这个程序,输入名字就可以迅速查询。这就是一个实际应用的例子。在学习编程的过程中,如果有实际的解决自己问题的作品,无论是对学习的信心还是效果的交付,都是极大的促进。
现有的编程学习的进度是非常慢的,而下一代产品,在第一个自己的可用作品的进度上,会大大加快。写一个小游戏可能不再是效果交付的目标,真正利用编程解决问题才是核心。比如说,写一个程序,让微信自动回复某些特定的信息,这件事是不是觉得很难?实际上,用作为辅助,学习时长一个学期的练习生,也是有机会写出一个这样的程序的。再比如说,利用电话手表的接口,写一个自动向家长汇报位置的程序,当出现某些情况的时候自动报告位置,或者自动联系朋友等等,这些孩子们生活中的真实需求,通过自己的程序实现,这才是编程培训进一步扩大影响力的正循环。
所以,下一代的编程产品,其交付物一定不是作业和正确运行程序,而是在不长的时间内,完成一个自己的作品。初期的作品可能是教材给定的,也类似完成作业,但是可用,后期的作品,则应当让学生更多的参与。孩子在生活中需要解决的问题是可以收敛的,如果把大部分涉及到的问题分类,放在教材中,引导孩子用自然语言编程去完成初步的编写,通过阅读和联调实现功能,最终发布出来,这才是编程培训产品的应有之义。
综上所述,的编程能力,对于编程培训行业来说,不是一场立即的灾难,也不是远处的一股清风,而是一个行业变革的绝佳机会。培训的目的一定不是赚钱,业务的逻辑一定不是销售导向,而是真正的让孩子学会编程,让孩子学会更好的使用机器解决未来的问题。懂编程等于更强的竞争力,这件事的底层逻辑没有变,更好的利用机器一定是竞争力的体现,只不过,如何学习编程,相信在未来的一两年的时间,会有这样的产品出现,将青少年编程培训行业带上一个新的高度,也让中国的青少年更加贴近最先进的科技,推动科技的振兴。
发表回复