博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程,艺术 or 科学?
阅读量:2754 次
发布时间:2019-05-13

本文共 1346 字,大约阅读时间需要 4 分钟。

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

    先给出自己的认识:

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

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

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

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

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

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

转载地址:http://orpad.baihongyu.com/

你可能感兴趣的文章
suggestTree-实现rank-ordered autocomplete suggestions的数据结构
查看>>
LSH: Locality Sensitive Hashing Theory
查看>>
C++容器模板在共享内存中的使用
查看>>
SHA1和MD5算法详解和源码
查看>>
URL短地址压缩算法 微博短地址原理解析 (Java实现)
查看>>
proxy
查看>>
新浪微博布局学习——妙用TabHost
查看>>
ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
查看>>
android 拍照上传及本地上传
查看>>
ANSI、unicode、utf-8、DBCS等字符集及相关数据类型、函数的区别
查看>>
Android 更新UI的两种方法——handler和runOnUiThread()
查看>>
详解Android中AsyncTask的使用
查看>>
从拉马努金到张益唐——数学是一个整体
查看>>
动态规划——最优二叉查找树
查看>>
Filtering ListView with custom (object) adapter
查看>>
onWindowFocusChanged重要作用 and Activity生命周期
查看>>
不再依赖A*,利用C++编写全新寻路算法
查看>>
浅谈状态压缩的应用
查看>>
目标检测(Object Detection)原理与实现(六)
查看>>
linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
查看>>