编程还是被编程?

  尼古拉斯·达内:有很多定义方式。首先,代码是使机器运行的程序。如果没有代码,我们的电子设备包括电脑、手机就没有生命。代码是让我们最接近机器灵魂的方式,使机器能根据我们的需求而运作。它是一些通过算法来自动完成任务的句法。这是第一个定义。

  但是代码也可以被定义为一种语言。因为它基于数学算法,我们过去倾向于认为它只是一个属于数学家和工程师的领域。但实际上,许多语言学者已经对编码和发明新的编程语言产生兴趣。有些人甚至用代码写诗!斯坦福大学的学生就创立了一个俱乐部,将诗歌和编程融合在一起。代码完全可以被视为一种说话和表达方式。

  从某种意义上说,学习代码和学习一门外语相似:开始会很艰难,但渐渐地,我们开始理解语言的逻辑性——每个人都有能力掌握它,因为说话谁都会。

  因此,我们都能学会代码,但有必要所有人都学吗?

  没错,任何人都可以学习代码,包括儿童。只要使用合适的界面,孩子也可以轻松地码代码,而不必非得是编程天才或计算机学博士。就像你不必非得是莎士比亚才能说好英语一样。理解基础的编程语言并不复杂。事实上,大多数人每天都会处理几行代码:每个人都要在网络浏览器中输入 URL 地址;每个人都知道删除 .com 后的整个序列会带你回到首页。

  根据美国著名的网络文化作家道格拉斯·洛西克夫所说,一个当代性难题在于“编程还是被编程。”这可能略有些极端:我们并不需要因为使用手机,而必须成为手机程序员。我们使用工具并不意味着需要亲自制作工具。然而,如果我们希望能够与现有这个由代码构成的环境交互,而不是处于完全被动的话,就需要了解基本的编码。我们不应该把这种技能完全地推给某一阶层或精英。

  公民需要基础教育,所以对编程有所认识是有意义的。当我们学习读写时,最好能有一些编写代码和“阅读”那个我们身处其中的数字世界的经验。

  对我来说,这几乎与公民学一样必要。不传播民主的价值,公民将永远无法找到自己在社会上的位置。同样,如果我们不懂编程的逻辑,身处这个由代码构成的世界就会感到不自由。就以 Google 这个每个人每天都会使用好多次的搜索引擎为例,如果我们不了解它是如何工作的、如何生成信息索引、信息又来自哪里、为什么一个查询能反馈很多结果等等,就可能轻易地被这个工具欺骗。永远不要以为,搜索引擎给出的结果就一定是真理;不要以为,除了搜索结果的前几条其他都是无关紧要的。

  简而言之,你认为数字教育、唤醒学生对代码的认识很重要。当然,这是公民教育的使命之一,但学校真的是教这门课的最好地方?

  近年来在几乎所有的西方国家都出现了是否应该在学校教授代码的争论。然而,改变整个学校计划通常是很艰难的,而且我们没有足够的计算机教师来使编程成为一门像数学和英语那样的主课。同样,当法国于 2010 年将算法这门课引入高中课程体系时,那些没有受过相关训练的教师就有了麻烦。

  有人会问为什么编程要单独成为一个学科:如果编程就像写作,那么所有学科都将涉及到。

  我倾向于从另一个角度理解这个问题。在我看来,更重要的是采纳学生的观点进而了解什么才是对他们最有利的,而不是把精力集中在如何将编程加入到教育课程中去。

  我们经常抱怨孩子们花太多的时间在屏幕前,这可能是正确的。但最重要的是,我们需要确保当孩子们在屏幕前时不只是处于一个被动的状态。这就是编码可以发挥至关重要作用的地方。如果一个孩子可以开始编程,通过适当的界面,他们很快就会体验到其中的乐趣。因此,他们在使用 IT 工具时将有完全不同的体验。

  在这一点上,存在一个关于学习范式的基本问题:是从理论出发更好呢?还是将实践和理论结合更好?就个人而言,我不认为你可以在不亲自运行代码的情况下理解编程。从实践出发总是最好的,而不是通过阅读代码理论的书。当我还是个孩子时,我就是从尝试编写几行代码起步来学习编程的。我的代码远非完美,但这不重要,重要的是了解它们的背景和它们的运作方式。通过实验来学习算法思想比单纯阅读理论书更有效。

  但学校能提供这种方式吗?

  不一定。这种学习模式可以在课堂之外实现。每个学校的代码和计算机文化是非常不同的,水准也有很大差别:教师、学生、硬件……相反,代码的世界主要基于自学者和网络支持。总之,这正是整个宇宙的创建方式。不将这些理想的水平协作模式融入到教学中,使之不同于传统教学,将是一种耻辱。在第二个阶段,这些处于传统教育边缘的主动性学习可以被重新组合、获得进一步开发。不断在边缘地带试验、更新、整合,其实就是一种非常“数字化”的思维方式。

  这种方式也会部分解决人力资源的问题,也就是说,大规模地招聘教师或是同等力度地将编程引入到小学或中学课程中去。然而,如果没理解错的话,你认为在中期内,学校的课程体系应该包含这些课外活动。我们甚至可以想象,如果数字时代必须改变学校,代码就可以被视作触发这一变化的特洛伊木马,允许不同学习文化的发展。那么你如何看待学校的未来呢?

  理想情况下,它应该比现在更加强调协作能力。孩子们需要学会通过与人交往来了解自己。这是一个巩固知识的好方法。如果一个学生需给他的同学做出解释,那么他就需要首先加强自己的知识水平。在这种背景下,老师在课堂上的位置也会改变。老师的工作将成为一种催化剂,而不只是传递知识。理想情况下,这种协同维度可以扩展到与来自其他国家班级的交流,在伊拉斯谟计划*的初高中教育体系下。

  未来的学校也将关注创造力。在实践中学习,给日常生活中的问题提供解决方案:制作一个网站、设计一个小程序来自动化一组任务、编程连接对象、玩一个光传感器,等等。在某种意义上,代码非常类似于其他的创造性领域,如视觉艺术或音乐:在程序设计中,一个给定的问题很可能引起在优雅性和时效性方面全然不同的解决方案。最后,学习编程是一种发现和深化学习风格、培养创造力的方式。

  *伊拉斯谟计划(Erasmus Programme,European Community Action Scheme for the Mobility of University Students),是欧洲各共同体在 1987 年成立的学生交换项目,2014 年 1 月在它的基础上创建了应用于欧盟现有教育、训练及青年体育领域的交换计划 Erasmus+。其国际版为伊拉斯谟世界计划。

  作者介绍:

  尼古拉斯·达内毕业于 Celsa 新闻学院(巴黎),现服务于欧洲 Change.org 组织,管理客户服务团队。此前,他的职业是咨询顾问。尼古拉斯是两本书的作者,并曾经在 2013 年创立过公司:软件作坊 Simplon.co。从 2012 年开始,他成为巴黎新星广播电台的常客。

时间: 2024-10-27 19:55:43

编程还是被编程?的相关文章

物联网网络编程、Web编程综述

本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空领域. 的确,物联网研发应该以团队协作分工的方式进行,所以有嵌入式设备端.网关.web前端.APP.后端开发等专属岗位.作为系统架构师,自然需要掌握各种岗位的关键技术.作为嵌入式工程师,掌握网络编程.web编程,能够极大地拓展自己的视野和架构思维,能够主动地对系统的各种协议和应用场景提出优化的见解

Python编程和 Lua编程的比较

Python编程和 Lua编程的比较 2016.4.21 定义函数: python: def functionname( parameters ): "函数_文档字符串" function_suite return [expression] lua: --[[ function returning the max between two numbers --]] function max(num1, num2) if (num1 > num2) then result = num

python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)

python_way.day7 1.模块 configparser,xml,shutil,subprocess 2.面向对象(上) 创建类,类的构成,函数式编程与面向对象编程的选择,类的继承 1.模块 configparser 用于处理特定格式的文件,其本职上使用open来操作,只能是  [test1] 特定的格式 [test1] k1 = 123 k2 = True [test2] k1 = 123 k2 = v1 文件内容 1.获取 import configparser #打开文件找到文件

XMPP-05Socket编程之网络编程篇

要学习XMPP,就要先了解Socket编程,在学习Socket之前,还要先了解一下网络编程 一.网络编程基本概念 通过使用套接字来达到进程间通信目的的编程就是网络编程. 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑…… 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理

函数式编程与面向对象编程的比较

函数式编程作为结构化编程的一种,正在受到越来越多的重视.工程中不在只是面向对象编程,更多的人尝试着开始使用函数式编程来解决软件工程中遇到的问题. 什么是函数式编程?在维基百科中给出了详细的定义,函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.函数编程语言最重要的基础是λ演算(lambda calculus).而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值

Atitit 函数式编程与命令式编程的区别attilax总结  qbf

Atitit 函数式编程与命令式编程的区别attilax总结  qbf 1.1. 函数式程序就是一个表达式.命令式程序就是一个冯诺依曼机的指令序列. 命令式编程是面向计算机硬件的抽象,有变量(对应着存储单元),赋值语句(获取,存储指令),表达式(内存引用和算术运算)和控制语句(跳转指令),一句话,命令式程序就是一个冯诺依曼机的指令序列. 而函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式. 1.2. 面向对象语言中,数据类型分为两种--基本类型和对象类型(

全新编程模式---站立编程--独创编程方式,可能会流行

多年来我们程序员已经习惯了编程模式--坐着编程 一来到编程办公室,我们马上坐下,打开空调,松软的旋转座椅,坐下来就可以编程.于是人们只知道世界上只有这种编程模式--坐着编程. 这个模式不是不好,可是如果坚持只用这个编程模式,会带来严重问题,坐久了屁股痛,最后没办法坐了.于是只能躺着编程. 坐着编程,身体缺少运动,每况愈下,身体不堪负重,垮了.生成各种疾病,最后竟然有的程序员英年死去,没办法编程了! 我编程十几年,曾经也是运动健将,但是因为坐着编程,身体也不行了,坐下没多久屁股就痛了.现在是左右为

基于对象编程与面向对象编程(表达式计算器3)

基于对象编程与面向对象编程 我们的最终目的是用C++设计一个面向对象的表达式计算器,所以非常有必要弄清楚,什么是基于对象编程和面向对象的编程.而要弄清楚这一点,又要先弄明白什么是值语言,什么是对象语义 值语义:对象的拷贝与原对象无关,拷贝后与原对象脱离关系,互不影响.这种拷贝叫深拷贝.拷贝之后脱离关系,只要在拷贝的时候都为对象分配内存空间就行了.某种些情况下算是一种对资源的浪费 值语义例子 class Test { private: int * pNum_; public: Test(int n

[从玩游戏来理解编程]关于面向对象编程的浅解(1)

我最近在玩星际争霸2,感觉到面向对象真是太重要了.有三个种族,每个种族有自己的兵种,一个兵种就是一个类,而且他们的父类都是一个类. 每个单位都有自己的属性和技能,之前学习的c语言是面向过程的,慢慢的也理解到了面向对象在某些地方的重要性. 之前都是在学习算法,实现上用的c语言,看不出来到底有什么区别,反而在用c来的更简洁和更快,最近慢慢的接触到小项目之类的什么的就慢慢感觉到面向对象的重要性. 最近在看一本书叫<making games with python and pygame>,这本书很好,

我是如何开始去了解Python函数式编程--Python函数式编程初涉

Python函数式编程 1. 开始我们会了解什么是函数式编程: 函数:function 函数式:functional,一种编程范式 函数式编程特点:把计算视为函数而非指令,贴近计算 纯函数式编程:不需要变量,没有副作用,测试简单,支持高阶函数,代码简洁 Python支持的函数式编程特点: 不是纯函数式编程:允许有变量 支持高阶函数:函数也可以作为变量传入 支持闭包:有了闭包就能返回函数 有限度的支持匿名函数 2. 高阶函数 变量可以指向函数,函数名其实就是指向函数的变量,而高阶函数其实就是可以接