「译」编程是艺术吗?

编程是艺术吗?

我们是否应该教每个孩子编程?

字典对"艺术"的解释

牛津词典:人类创造力与想象力的表达和运用

韦氏词典:通过经验/学习/观察获取的技艺

编程显然是人类通过经验获得的创造性技能,所以它是艺术(笑).

我们来仔细考察一下.

编程 vs 应用软件产品开发

这两个东西不一样.软件开发和编程有关系(令人惊讶的是关系通常比较小),但是并非所有编程都是为了制造产品.

软件开发的定义没有太多争议,多数人都认同它是编程的一种.软件是为用户设计的.它们有一些明确的特征:用户界面,让用户输入数据,业务处理逻辑,通常提供一种交互机制,让用户启动功能执行.

但是并非所有的软件都这样,譬如汽车软件里数百万行的代码,控制红绿灯的代码,以及平板电视里处理图像的代码--它们没有交互.

软件开发

...牵涉很少的实效编程

Alexander Stepanov(C++ STL主要的设计者和实现者)转告我们,Scott Byer(Photoshop架构师)估计开发者90%的时间在做"胶水工作"和"技术家务",譬如内存管理/脚本/UI管理/IO/调色,10%的时间才是实质的编程.他列了一个清单,对(他认为实质的)编程活动在一些行业软件中所占的比例作出估计:

文字处理 3%

演示应用 1%

数据库 10%

CAD 30%

企业应用 1%

就我个人经验判断,这些数字看起来比较合理.

关于编程

编程和作曲类似:写一首曲子没有万能公式,但是错误的方法却有一万种--你可以用N种组合让所有观众都觉得难听.同样,编程也没有万能公式.

编程和文学类似:没有人会混淆李白和杜甫,他们给人完全不一样的感觉.同样,一个程序员的代码风格是独一无二的.如果知道别的程序员的风格,看代码就能知道是谁写的.

编程和画画类似:留白的部分和填满的部分一样重要.空白决定了作品的风格和深度.同样,代码行数并非越多越好.顶尖的程序员以砍掉了多少行作为评价重构的标准,而不是新增了多少行.

编程和舞蹈类似:每个人都可以跳舞,但是只要少数人跳得特别好的才有出场费.

写出好的代码,需要程序员脑子灵光,能在大脑中梳理人类活动与事务的乱麻,提取出形式逻辑.

好的程序员需要超越常人的耐心,因为:

“Computers are like Old Testament gods; lots of rules and no mercy.”

~ Joseph Campbell

计算机就像旧约里的上帝,满是规矩却不见怜悯.

好的程序员必须要在心智上处理诸多常人无法处理的问题,譬如递归,并发,回调,闭包.

...第二个问题

我们真的应该教每个孩子编程吗?

我不知道那些把这个问题当真的人是怎么想的.

也许我们可以类似地问,是否应该教每个孩子做阑尾切除手术呢?因为医生是如此短缺,让每个孩子都谙熟医学不就能大大缓解医生的短缺吗?

或者我们可以教每个孩子成为教师,那么等这一代长大,我们就再也不需要学校了,因为所有人都是教师,又能继续教下一代成为教师.

我觉得我们可以教每个孩子编程,如果只是在"每个人都可以跳舞"这个意义上.但是不可能让每个孩子都成为优秀的程序员,这比教会所有孩子高难度的芭蕾舞动作更难.

结论

编程是艺术,但我们不能把它和重复的集成组合代码库的活动相混淆,虽然这是大多数所谓的“开发人员”在企业IT部门每天做的事.正如我们不能将设计汽车的工程师和组装汽车的流水线工人混为一谈.

应用开发不是编程,它必将被机器取代,变得越来越自动化,而且准入门槛也会越来越低.

同时,真正的程序员会继续进行他们的艺术,就像汽车仍然用粘土作模型一样.

原文链接:https://hackernoon.com/is-programming-art-1429e50c21fc

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();