随着数据、计算资源和人工智能的发展，编程教育是否越来越重要了？
从宽泛的意义上讲，编程其实是一种整合资源创造新产品的活动。 在现在，编程体现为使用某种编程语言，比如C++、Java、Go、Python等实现某个软件服务或产品。但这只是一种表现形式，实际上，编程这件事情，分成两个阶段： 而第 2 个阶段的事情，其实可以不用现在耳熟能详的C++、Java、Go、Python、JavaScript等来实现，你完全可以在手机上用指头戳几下，或者凭空做几个手势就可以实现。 而且，现在已经在往这个方向发展，比如面向儿童编程的Scratch - Imagine, Program, Share，它不需要孩子们懂编程语言，它以一种很欢乐的方式就把编程这件事情完成了。 现在可以设想将来的情景：会有越来越多的人学习编程思维，使用更高级的但不同于当下这么原始的编程技术把某些想法实现为产品或服务。 这一定会成为现实。基本推断是这样的：每个人都想证明自己是特别的，而将来什么产品都有都很便宜，大家都用得起，彰显自己非常特别的难度就变得很大，而需求也会越来越强烈，那么结果就是大家都可可能会使用编程工具来定制自己的一切。 其实现在已经有了雏形了。像 3D 打印技术的出现，就让有一部分人拥有了和别人不一样的能力，他们可以在脑海中先构造原型，然后利用 3D 打印机这种编程工具来生产他们的专属产品，打造自己的特别之处。 那么，与之相应的编程教育，也会越来越重要。但请注意，将来的编程教育，绝不是现在的教你如何做网页或者APP。
Thinking in computer最重要。编程教育只是其中一环，并且只是其中最不重要的一环。 这里包括几个层面的知识或思维模式： 1、数学表达。把一个实际问题抽象成数学问题，并通过数学的方法来解决这个问题。这一步最重要。计算机终归是计算机，它其实并没有智慧，不懂得思考，它实际上只懂得计算。如果一个问题它不能通过数学模型来进行描述，那么它就是不可计算的，因此也就不能受益于日益增长的计算能力。曾几何时，我们认为计算机不能处理声音，不能识别图像。但最终通过科研人员的努力，现在计算机图像识别已经烂大街了。 2、系统工程。计算机仅仅是贡献了计算机能力。但广义的计算机实际上是一个计算机系统。它包括了计算核心部件CPU和外围部件。而外围部件在嵌入式计算机的使用中，又独立成为一个微小的计算机系统，并以此迭代。最终，这些系统组合成一个目标系统。因此如果要理解一个目标系统，就必须理目标系统的组成以及各自的作用。通过分层和抽象，使得我们处理问题的时候，适当的把某一层级的系统进行黑盒化，从而简化了数学建模的难度。但是为了要构建这个系统，最终还是要打开每一个部件进行开发和建设。这当中如果设计者没有系统工程的思维，则绝不可能理解和构建一个复杂度越来越高的计算机系统。 3、硬件界面。不管计算机的计算机能力多么强大，数学建模的契合程度多么完美，如计算机要最终作用到现实世界的话，它就必须直接操作硬件。而在硬件层面，这些计算结果最终会表达成为0和1。而这些0和1最终会成为某一条线路上的逻辑电平，从而通过电平的高低来进行硬件电路的操作。如果设计计算机系统的设计者没有这样的思维，那么计算结果仅仅是结果，绝不可能产生当今这种生产能力巨大的变化。 4、编程方法。编程方法可以说是上述思维的粘合剂。它是最重要的，然而它又是最不重要的。说它重要，主要是指它的思维方法重要：数据结构+算法。而说它不重要是指，具体的编程语言是不重要的，编程语言只是工具，工具可以有助于或限制了思维的表达，但工具绝对不能产生新的思维。当工具成为产生力的约束的时候，人们就会发明新的工具来代替它。实际上只要掌握了数据结构分析方法和算法设计的原理，对于一个熟练的程序员来说，学会一门新的语言只需要五分钟。 论述到这里，我的答案就出来了：用计算机的思维方式去思考问题是最重要的，而编程仅仅是必要的步骤和过程。不要把过程当成目标了。