编程,艺术 or 科学?

    在一个微社区帖子里讨论这个话题,以下是一些随想:


    先给出自己的认识:

    保罗·格雷厄姆的《黑客与画家》一文给的注解完全同意。“计算机科学”就是一门人为强加的科学,个人认为至少是一门伪科学,它就是一门大杂烩,将不同不相干的领域强行拼装,比如数学,物理(高低电平,脉冲代表01代码),甚至金融、通信等等。为什么会出现这种情况,主要原因是计算机更多的应该是被称为一种工具。另外,这门“科学”的地基本身也是人为的构造,比如计算机结构的冯诺依曼体系,然后我们就是在此之上砌砖添瓦,一旦有一天这个体系被颠覆,那么我们所谓编程的东西也都付诸东流。而实实在在的说,计算机真正的理论基础其实少的可怜,比如编译原理,数据结构等等。(就算是数据结构,我都不认为它是计算机科学而应归于数学或是其他,因为链表,队列,栈就是生活中最简单的现象。。)


    称之为科学,是搞创新理论研究,是应该颠簸不破的真理;称之为艺术,是创造有价值的实物,这个价值依赖于人的主观意志,诸如美术、音乐...这一类就是单纯给人以美的享受。而至于编程,它又显得比较独特,不属于搞创新理论研究,更多属于创造有价值的实物(从这方面说,计算机编程本身肯定不属于科学)。但是,它的价值却又体现在两个方面:一方面,是实现客观功能需求,比如实现人力资源管理系统,它是实现某一类功能需求,是使用价值;另一方面,在实现相同功能需求的基础上,追求更合理的设计,更优美可读的代码,更出色的性能,给人由衷的赞叹,美的享受,这又是人主观上的价值。只不过,这里的享受的人不是普罗大众,仅仅只是读代码的程序员。因此,编程的技艺又在受众上打了折扣,而这就是编程的独特所在。


    基于这样一个认识,我觉得讨论这个话题才有意义。


    如果单纯为了实现某个功能而编程,这就好比建筑工人搬砖砌墙,哪怕做到极致,也当不成建筑师(建筑师设计的建筑也是一种艺术)。也许,为了快速实现这样的一个功能,编程过程中可能会运用科学的方法、思想,但这样就好比给了一套模具,然后快速生产产品。这一类编程,自然远远称不上艺术,就算其编程本身而言,也必然称不上科学,充其量可以说明其运用的方法、思想是科学的。还有一类编程,追求软件设计的优美,代码的优美,性能的优美...奇思妙想,灵感迸发,码思泉涌,手中代码敲打实现行云流水,让后续阅读代码的人更是啧啧称奇...这一类编程,是真正在搞创作,我认为可以称得上艺术。只不过欣赏这种优美艺术的,又只有程序员。。之后,或许又可能出于某位杰出人士之手,通过从这类充满艺术气息的产品中,提炼出通用的编程设计、方法、思想,并加以丰满,充实,形成一整套的固定理论体系,这种又不能不称之为科学。(哪怕这门科学又是建立在计算机这门“伪科学”之上)


    最后,我的看法就是:编程对于追求优秀甚至追求极致的黑客来说,一定是在搞艺术创作;对于普通的程序员工程师,通过提炼出优秀软件代码通用的结构特性,形成一定的设计方法、思想理论(这个可以称之为科学),继而再编程开发功能产品,这个仅仅是制造,而非艺术创作。所以,对于编程本身,可以不是艺术创作,但绝不会是一种科学


    另外推荐下这个微社区:乐橙微社区http://www.happycoding.com.cn/),这个微社区目前刚开始起步,正在测试阶段吧,里面有多位技术强,经验足,并且非常热心的老师互动交流,非常赞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值