编程是门艺术
是编程艺术吗?
……我们真的可以教每个孩子编程吗?
如果您需要3或4个截然不同的意见,请问1或2个程序员。 在这个特定主题上,我的一些同事感到非常强烈,以至于他们甚至有能力自我辩护。
还有单词的意思……
词典
如果我们坚持字典的定义,那就没有问题了。 OED将艺术定义为“ 人类创造技能和想象力的表达或应用…… ”,而韦伯斯特的说法是:“ 通过经验,学习或观察获得的技能 ”。
编程显然是一种通过经验获得的人类创造技能,仅此而已。 am!
但是,让我们采取更细微的方法。
编程与软件应用程序开发或生产
吨他两个是不一样的东西。 所有软件应用程序都涉及一些编程(通常很少),但是并非所有编程都用于软件应用程序的生产。
“软件应用程序”的定义略有不同,但通常都认为这是一种特殊的程序。 专为最终用户设计的程序。 这意味着它具有某些定义特征:用户界面,通常允许用户输入数据,通常具有逻辑,并且几乎总是为用户提供某种交互方式和触发功能执行的方式。
并非所有程序都是这样。 汽车中大约有一百万行代码不执行任何这些操作。 还有更多代码可以使您附近的交通信号灯正常工作,还有更多代码可以在平板电视中进行很多图像处理,而无需您进行任何交互。
应用开发…
……涉及很少的实际编程。
C ++标准模板库的主要设计者和实现者亚历山大·斯蒂芬诺夫(Lexander Stepanov)向我们传达了Adobe Photoshop的架构师斯科特·拜尔(Scott Byer)估计,有90%的开发人员致力于“胶水”和内部管理任务,例如内存管理,脚本,UI管理,文件I / O和颜色管理。 10%用于“物质”。 他提供了以下估计,用于各种应用程序类型,他认为“物质”上花费了多少时间:
•文字处理-3%
•演示应用程序-1%
•数据库-10%
•技术/ CAD — 30%
•操作系统-1%
•企业应用软件-1%
从个人经验来看,这些数字对我来说似乎是正确的。
现在开始编程
P AGC软件是喜欢写作音乐; 没有一种真正的方法来创作旋律,但是有很多错误的旋律。 笔记的许多组合对于几乎所有听它们的人来说都是绝对不愉快的。
同样,也没有一种真正的方法来编写程序。
P是在AGC等文献; 没有人会把Umberto Eco的一个段落与Richard Brautigan的一段混淆。
同样,程序员的编码风格与任何媒体的作者风格一样独特且可识别。 一旦程序员了解了特定的程序员风格,他们便可以轻松地识别彼此的工作。
P AGC软件就像是画; 你不画的东西和你所做的一样重要。 负空间定义形式,增加深度。
同样,多行代码也不是更好。 顶尖的程序员通过删除多少行代码(而不是添加多少行)来衡量重构的成功程度。
P AGC软件就像跳舞; 任何人都可以跳舞,但只有极少数的人可以跳舞得很好,足以付钱。
要编写好的代码,一个人必须具有某种头脑,这种头脑可以分析杂乱的人类过程和实践,然后将其归结为形式逻辑。
一个好的程序员需要足够的耐心。 比一般人要耐心得多,因为:
“计算机就像旧约中的神灵; 很多规则,没有怜悯。”
〜约瑟夫·坎贝尔
一个好的程序员必须能够在头脑上处理大多数人根本不可能完成的事情,例如递归 , 并发 , 回调或闭包 。
……这使我们想到第二个问题
我们真的可以教每个孩子编程吗?
我什至无法理解任何人都认真对待这个问题。
我们不妨问一下,是否可以教每个孩子进行阑尾切除术。 医生供不应求,通过教所有孩子要医学方面的知识来增加医生和外科医生的供应是很有意义的,不是吗?
或者,也许我们可以教每个孩子成为老师,那么我们就不需要学校了,因为当这些孩子长大后, 所有成年人都将成为下一代的老师。
我想我们可以教每个孩子编程,就像任何人都能跳舞一样。 但它已不再是可以教每个孩子计划以及比它woud是教给每一个孩子跳舞EN足尖 ,或entrechat。
结论
按任何人的定义,编程都是一门艺术,但是我们不应将编程的艺术与重复集成和装配代码库(通常在企业IT部门工作的大多数“开发人员”正在这样做)相混淆。 同样,我们不应将设计汽车的工程师与组装汽车的组装线工人混淆。
“应用程序开发”不是编程,将不可避免地变得越来越自动化,并且越来越多的技能越来越少的人可以使用“应用程序开发”。
同时,“ 真正的程序员 ”将继续练习他们的艺术,就像汽车仍在粘土中建模一样。
编程是门艺术