# 编程是否应该成为一门基础学科？

- 作者：陈一斌
- 发布时间：2015-02-17 07:42
- 分类：公司
- 原文：https://www.ifanr.com/495874

[![matrix](https://s3.ifanr.com/wp-content/uploads/2015/02/matrix.jpg)](https://s3.ifanr.com/wp-content/uploads/2015/02/matrix.jpg)

当别人问奥巴马如何看待美国在科技领域有所落后和缺失的情况时，奥巴马回应道，“目前的事实是，如果我们不做一些更好的选择，那么我们的领先优势将逐渐缩小。我们需要让孩子们参与数学和科学，而这不仅仅是一小部分孩子，而应该是所有人。所有人都应更早地学习如何编程。”

这是一个国家领导人站在自己国家战略的角度上进行的回答。因此如果光从这句话去理解奥巴马想表达的意思，很可能会引起不必要的误解。对于站在这样高度的人所说的每一句话，都必须结合他所处的位置，以及说话的背景进行理解。

### 奥巴马关心的仅仅是编程吗？

2015 年 1 月，奥巴马发表[第六次国情咨文](http://news.sina.com.cn/w/zg/gjzt/2015-01-21/1829587.html)，重点放在未来的经济政策，关键词是“中产阶级”，奥巴马经济政策围绕着提升美国中产阶级人群的数量、生活水平而制定。奥巴马说，“在美国的历史上，任何一个经济变革的时刻，美国都采取了大胆措施以适应新情况，以确保所有人都有公平的机会。”

奥巴马的经济政策着眼于三点，一是减轻中产阶级的税负，二是升级美国人的职业技能，扩大中产阶级人群的数量，三是提倡科技创新。

在国情咨文中，他提到，“由于副总统拜登为升级我们培训系统所作的杰出工作，我们正将社区大学与本地雇主联系起来，以训练从事编程、护理、机器人等高收入职业的人员。”——这是希望美国人能够掌握更高的职业技能，以得到收入更高的工作，令更多美国人进入中产阶级。

他还提到，“在任何地点打造最具竞争能力的经济，同时公司也想在那些地点建立机构和雇佣员工。……21世纪的商业将依赖美国科学、技术、研究和发展。”如果说奥巴马希望通过职业教育令美国人掌握更多专业技能，那么他也必须创造出足以消化那么多专业人才的市场，否则就难以形成良性的循环。

2008 年，奥巴马在美国经济降到低点，失业率高升的情况下担任美国总统。所以，他的执政承诺当中，最重要的一个是令美国经济复苏，以及让更多人拥有工作岗位。而他作出了一系列决定当中，最重要的一个是号召美国企业回流，增加本国的就业，改善本国的经济状况。2011 年，2 月 17 日的晚宴上，乔布斯向奥巴马抱怨美国的工程师太少，说苹果在中国的一家 70 万人的工厂里，需要 3 万工程师提供支持，而在美国找不到这么多的工程师，“如果你能培养出这些工程师，我们可以把更多的制造厂搬回来。”

至此，可以从几个角度来理解奥巴马关于“编程要成为基础教育”的观点：

- 从教育角度来看，奥巴马希望更多人掌握编程的技能，进而拥有更好的工作，扩大美国中产阶级的数量。2014 年 Glassdoor 发布调查报告总结了美国 15 家薪酬最高的公司，其中有 7 家是科技企业；
- 从美国政府角度来看，如果“美国制造业回流”将是未来美国一项基本国策，那么美国本土就必须提供更多相关的人才，而编程作为一项高精尖行业必备的职业技能，必将得到重视；
- 从行业发展角度来看，未来美国的经济活力有赖于科学、技术的创新，而这方面的创新，从历史角度来看，有赖于中小企业的参与和推动。而足够的人才储备，将为创新提供充足的动力。

### 编程是否应当成为基础教育的一部分？

不管奥巴马那句话背后的意思如何，对于 IT 技术行业中的一份子，或许会更加关心这个问题：编程是否应当成为基础教育的一部分？

尽管这个问题还不够 20 个字，但却很难回答。它涉及以下几个问题：

1. 编程适合成为基础教育科目吗？若要成为基础学科，编程教育是希望达到怎样的目的？
2. 若让人更早地接受编程教育，那么编程教育应该是算哪种类型的教育？
3. 在大量计算机学院毕业的大学生，却往往缺乏相关的职业技能的情况下，中国教育的体制，适合推广编程吗？
4. 基础教育学科设立的背后，需要怎样的社会环境，才能得以顺利推广？

我采访了 20 位以上不同背景的人，询问他们赞同或反对奥巴马的观点，以及赞同与反对背后的理由。这些人当中，有的是开发者，有的是开发者当中重视技术教育的，有的是非开发者但注重运用技术工具的，也有的是非开发者而且也对科技兴趣了解不深的人，也有的是非开发者初为人父人母的……我试图站在更多立场来看待“编程是否应当成为基础教育”的问题。

- **以职业技能的观点来看，编程并不适合作为基础学科**

我在总结采访对象对该问题的态度时，发现不少人试图先定义“编程”作为一种教育，应当实现怎样的目的，而后再谈及编程是否应当成为一种基础教育。有趣的是，不管是支持或反对，他们并不不认为如果把“编程”作为一种职业技能来培训会产生很大的价值。

曾在爱范儿开辟“断章”专栏，现在担任一家公司 CTO 的陶醉，反对编程应当作为基础教育的一部分。他认为，“从培养基础学习能力来说，编程是应用技术，远不如数学、文学、外语、自然对任意国家的孩子来得重要。从培养技术工作能力来说，第一，如果他不从试着行业没有必要，如果他从事这个行业的话，更新换代又太快，掌握皮毛浪费学习时间和精力。”

哈佛尼曼学者、专栏作家安替也表达了同样的忧虑，“最大的问题是，如果推广的程序语言过时了怎么办？C 语言当年多少文科生在学啊，现在有什么用？行政推广一个本由竞争出来的语言肯定有问题。”

前 DoNews CTO、盛大创新院高级研究员，现移居加拿大的霍炬，同样不支持编程应当成为基础教育。“编程本身并不是一门学科，而是很多学科和对其他领域知识的组合。所以，单单学会一种计算机语言表达，对于解决实际问题帮助不大。”

“它和数学物理不同，那些是科学的一部分。即任何时候对于一个没有数学概念的人，学习数学都要从最基础的部分开始，编程则不然，整个系统环境和方法是快速变化的。基础教育欠缺灵活性，学会的技能很快会过时。”

移动 QQ 的产品经理唐敬艺认为，没有必要过早展开编程教育，“大家天赋不同，何必强逼。需要用编程带来的服务，不代表需要学。就如需要吃饭，不必人学做饭。让有兴趣和天赋的人学习就好。基础学科，人文、历史、自然、科学语言即可。编程是专业能力，大学里让一部分人跟进就好。”

另外，在我的朋友圈当中，这个问题引发了一长串讨论。总体围绕在“编程变成基础学科之后，就一定能够激发人的创造性吗？”的问题上。一朋友认为，编程是一门工程性学科，偏重在前人制定的规则不断世界上，是试图排除不确定性的过程，跟基础类学科有很大的差别。而另一朋友则认为，编程作为一种工具，实际可以激发孩子的动手能力，让他们去创造自己喜欢的东西。

- **如果编程作为一门基础学科，可能帮助学生提高逻辑思维水平以及独立解决问题的能力**

然而，如果编程不是作为一种职业技能来培训，而作为一种启蒙学科呢？几乎所有人都支持。

代码托管社区 GitCafe 创始人姚欣宇认为编程可以胜任基础教育科目。在他的观念里，基础教育的作用在于“教会一个人基本生活常识及各领域基础技能、解决问题能力和思维方式，以及面对失败的方法及如何通过这样的过程获得自信。”

“编程这件事情本身就是解决问题的代名词，如何系统化、逻辑地解决问题通过编程及其基础数学理论可以最好地教给受教育者。在学习编程的这个过程中，对于未知领域信息的搜索、获取及分析的情况会反复发生，这是在我们传统基础教育学科中极少遇到的情况，但是却是非常重要的一项基础能力，编程会无形之中不断强化一个人依靠自己的想法和力量找到解决方案的能力。

编程不总会一帆风顺，我们所写的代码会经常出现 bug，出现运行失败，或是未达到预期，在不断经历小挫折、debug 成功的路线循环中，一个人能够很好的培养起自己的自信，对未知的问题不再恐慌是非常重要的基础。”

理财应用 DailyCost 的开发者梁国鹏也认为编程应当作为一门基础学科对待，但他觉得编程应该是让人对计算机产生兴趣的敲门砖，这一点与姚欣宇的观点不一样：

“在当今计算机极大普及的背景下，一个国家的科技水平很大程度是由计算机水平决定的，这个水平不是使用计算机的水平，而是利用计算机、网络等手段解决更复杂问题的能力水平。而学习编程只是一个入门应该尽早的普及，引起孩子们的兴趣，带他们入门。”

我的身边一位初为人母的朋友和 KnewOne 的 CTO 李路、还有爱范儿产品总监李本卿，认为编程训练有助于学生逻辑思维的培养。李路说，“软件是人类能制造出的最复杂的事物（可高达 9 个以上抽象层次），编程基于逻辑，训练这方面的思维特别有效。”他还认为，“编程入门并不需要很多前置课程，但精通并不容易，这是基础教育的重要特征。”

- **编程成为基础教育的另一理由，技术已经渗透生活当中**

正点闹钟 CEO 王颖奇认为，“整个世界已经由软件驱动，学习编程有助于理解这个世界的运行逻辑，不会再出现高铁站上有人指着自动售票机骂娘的情况。”

爱范儿黄姓编辑认为，“App、移动互联网已经成为生活不可或缺的一部分，就像过去建房子、修电灯、烹饪一样，学习编程也是应对生活、改变生活的基本技能。”

而“教育大发现社区”联合发起者、北京师范大学教师庄秀丽也抱有同样的看法。“我对奥巴马的观点表示认同，因为奥巴马在表达要学习编程的时候，并没把否认或降低其他一些基本素养培育的重要。”

“未来的世界，是数字化的世界，人类各种信息的开发和存储，都在借着数字化的编程方式，表达、传播、加工。从这个角度来说，孩子从一出生，他所接触到的世界，就是被数字化符号编织和连接的物理世界。因此，当孩子有机会接触学习编程素养，会更好地帮助孩子理解和认识这个被数字符号连接的世界。”

- **从社会的角度看，若把编程转为基础学科，其后果可能是正面的**

爱范儿的 CTO 张涤凡支持编程成为基础学科，“奥巴马总统提出将编程能力作为基础教育的一部分将是另一次对美国历史产生重大影响的决策。克林顿提出的国家资讯基础建设计划促使了美国最近二十年在信息技术方面领先全球的结果，而培训出拥有编程能力的一代人，对计算机行业的发展会提供更多人才储备。这可以通过二十世纪末二十一世纪初，互联网泡沫时期，因泡沫刺激学习 CS（美国人习惯将计算机专业缩写为 CS）的人才在次贷危机过后为充满活力的互联网创业公司提供了大量的人才储备，促进了湾区新一次的创业高潮的事实而得到证实。而且，这也将减少美国对于外籍高科技劳工的需求。”

姚欣宇认为，“基础教育中真正开始注重基础能力的培养，是拉开国家和国家巨大差距的因素。编程只是个最好用的工具和方式，而美国率先意识到了这一点，无论是处于政治作秀原因还是真的理解，这都会带来非常正面的效果。”

现在深圳被视为中国的“硅谷”，很大程度上要感谢 2006 那一年迎来了“山寨”狂潮——应对快速变化的市场环境，训练了大量技术过硬的工程师，形成灵活而高效的供应链分配。更重要的是，因为“山寨”，深圳可能聚集着世界上数量最多的硬件工程师，这是中国深圳可与硅谷比较的优势。

- **在中国应试教育的环境下，编程不适合作为基础教育学科**

秒视 CEO 周凯雯说，“国内高中数学课程就有 Basic 编程的内容，主要是针对语法做了些讲解，高考这部分内容大概占 6 分，我们所示基础教育加入了编程，但是很明显没有多少人对这种流于表面不结合实际的编程教育有所受益。再好的东西用这种形式向学生传播，恐怕没有什么用。如果编程要推广成基础教育，还要看考试考不考，占多少分。”

- **如果编程成为基础学科，最大的挑战来自师资力量的不足**

庄秀丽以教师的角度出发，解释技术教育推广会遇到的问题，“推广编程教育，实际上包含两部分的内容：一是思维方式上的，一是操作技术层面的。技术层面的内容，是具体的，是变化的，就像程序语言发展一样，是不端更替变化fvj的。操作技术部分的内容，就像现在一些中小学中，孩子们会用 Scratch 这款软件编程一样。然而，不容易推广的，是体现现在操作背后思维方式这个层面的内容。当然，如果有足够优秀的师资（能更胜任引导孩子进行编程的优秀老师），推广也就不会是很难的问题了。

“优秀师资的培育，也不是段时间就能够发展出来，师资能够发展也需要有相应的土壤。如何克服推中存在的这一难题，打破传统学校机制的壁垒，无论是通过哪种方式，让孩子们有机会跟各类科技创新企业或相关民间教育组织进行连接，有机会体验到由那些企业组织提供的各种教育服务。”

Python 中文社区创始人周琦认为，推广编程教育“唯一的困难是当前社会的整体对知识、信息、数据的态度是什么。如果普遍认为知识无用，数据不值钱，信息必须受到严格过滤，那么无论进行怎样的教育体制内编程教育引进，都无法引发出合理的当代信息素养。”

另外，姚欣宇提到，社会对编程认知的偏差，也是推广编程教育的障碍：“普通老百姓对编程这件事情的认知分为三种：1. 这东西是聪明人玩的东西；2. 我用不到编程这个技术，不需要学；3. 会编程的人修电脑应该很厉害。”

另外，他还注意到，编程技术的选择多样性，也构成对编程教育的阻碍，“在技术圈中，我们都会讲 PHP 是最好的语言这个笑话，几乎所有技术从业者都知道这是讽刺PHP语言各类设计问题的行业笑话。但是现实中，PHP 虽然在一些设计上落后甚至有缺陷，但这样的技术应用广泛，学了对找工作有好处，所以从教育体系的角度来说，这个时候就会遇到问题，到底是教社会上用的多的，还是注重基本功先教核心基础。技术领域的多样性导致编程其实是一个非常庞大的话题和体系。”

他认为，“可以组织一些面向社会层面的活动，让大众了解到编程是什么以及不是什么，还有它能够带来什么，关于编程技术体系庞大的问题，可以先制定标准的选修内容，然后根据兴趣和方向进行不同技术路线的选修。”

### 总结

关于编程是什么，不是什么，或许是另外一个非常值得讨论的话题。然而，从采访的结果来看，可以看到应对高度信息化的社会，有的人认为掌握编程思维、技能，可以帮助孩子更早的适应社会、适应世界。

然而，若从教育的基础学科来看，编程作为一种工程性很强的、与多种学科挂钩的学科，作为职业技能进入基础教育未必适合——工程技术飞速往前发展，知识结构常常需要迭代更新，仅仅 3、5 年就焕然一新。而几乎没有人认为，中国的应试教育体制，能够很好地推广编程教育。

总之，丁香园 CTO 冯大辉的观点会更加中立，“我不觉得编程应该是基础教育的一部分。倒是觉得，IT 技术的基本使用技能应该是基础教育的一部分。编程只是 IT 技术的一部分而已。”

确实，在一个连搜索都还搞不懂怎么样的国家里，提倡编程变成基础教育学科或许还是太早了。

PS：感谢所有接受我采访，并给出回复的人，由于篇幅的关系，相近的观点没有列出，再次感谢。
