软件是艺术科学的结合

Jason Gorman对刚刚成立的SEMAT组织有自己的思考,SEMAT是软件工程方法和理论Software Engineering Method and Theory,试图统一目前混乱的软件工程领域。作者认为任何将软件只和工程 "engineering"和"科学"挂钩的说法都是有失偏颇的,作者认为:软件应该是科学和艺术的结合。

原文:Software Is Both Art & Science. Can We Move On Now?

这个观点我相当认可,正是因为对软件开发这个事物基本定位存在争论,所以才诞生各种混乱,而试图统一这种混乱的SEMAT组织如果对这个基本问题都没有定论,相信其权威性是缺乏认同的,虽然都是由一些大牌推动的,最后又成为学术院墙中看上去很美的蜡枪头了。

如果软件是艺术科学结合,那么软件工程专业就不应该只能是理科生报考,也许文理分科是造成国内软件阳痿的罪魁祸首。同时,这些以科学思维强奸软件,并且获得所谓成功地位以后,再反复加深对这种误解,这应该是目前中国软件行业最大的畸形。

为什么我认同软件是艺术和科学结合,原文因为本人水平有限,没有完全理解,但是从个人经验来看,软件很多方面都散发着依赖个人感觉和素质的地方,比如重构中的坏味道,虽然我们可以靠一些工具找出BUG,但是误报漏报还是经常出现,而如果你有深刻设计模式背景,有很强的OO经验,你对坏味道的辨别能力就比别人强,别人闻不到的你可以发现,你甚至可以依靠职业直觉发现一些潜在设计问题。

我们知道软件分析设计是一个创造性工作,而创造性是不可以被科学的,创造性是科学发展的动力,但不属于科学范畴;同样,软件设计是一个追求巧妙设计的过程,大道至简,如何去繁复简呢?需求是那么复杂,如何抽象呢?除了算法数学之道以外,还有一个巧妙之道。

我们经常讲“数学之美”, 而美属于艺术范畴,数学属于科学范畴,最后,数学科学不也是在追求艺术中一种美的极致吗?

软件应该是科学和艺术的结合,它应该是哲学,至少是一种方法论,如果不能从这个角度来认识软件,恐怕就会发生盲人摸象的笑话,做了一辈子软件,居然软件是什么都无法准确定位,这应该是一种耻辱吧。

转贴一句,对于软件开发同样需要:止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得!

相关:
关于设计模式的心里话
[该贴被admin于2010-04-27 09:18修改过]

深表赞同,我也一直认为软件和艺术在深层次的地方有相同的本质。特别是《对象设计:角色、责任和协作"(Object Design: Roles, Responsibilities, and Collaborations)》一书,作者完全就是用拟人的手法去看待软件设计的(“人”要有责任啊,要跟“人”协作,甚至还会“背叛”。。。),和日常思维一样容易让人接受,这何尝不是一门艺术呢?
[该贴被Antinomy于2010-04-27 09:19修改过]

2010年04月26日 16:50 "banq"的内容
止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得! ...

现在中国的软件行业,有几家公司能够有这样的心态?在做软件的从业者又有多少人有这样的心态呢?国人智力并不差,差的是总结经验的能力,差的是一览大局的能力,差的是沉下来的能力,除此之外,现在的高校教育,职业教育也都应该反思一下了。
[该贴被lendo于2010-04-27 10:38修改过]

强烈赞同。
软件本身作为工具,帮助人们的提高工作效率,促进生产力发展。
一件好的工具就是一件好的艺术品,软件也不例外。

其实我对软件的看法就如江湖

会有很多门派 都有自己的绝学 每种功夫代表语言 和对语言的理解使用程度

因为人的原因所以江湖混乱了...

想要一统江湖 是个愿望。虽然你的绝学是公开的 但是会不会有人接受
那就不很确定了。毕竟人嘛从没有两个相同的。思想就更是千奇百怪。
一旦绝学被划定阵营(正派 邪派)那就是很难解决的事情。

一点点见解。

参与争斗的都是人
[该贴被EvenNever于2010-04-27 11:40修改过]

我也很赞同软件是一门艺术的观点。
有的软件,你阅读它的代码有一种被强奸的感觉,混乱不堪,到处重复。
但有的软件,看代码如行云流水,十分清爽。这就是设计模式的魅力,或者说是代码秩序有没有搞好的差别。
打个比方:
有的人收拾房间井井有条、纹丝不乱、找什么东西就像在手边一样;一种日用品,基本上不会重复买,只要想到屋里有,伸手就能找出来。
另外一些人房间杂乱无章,无论找什么东西都要翻个底朝天,还未必找到。明知屋里有,急用找不到,没办法再买一个,久而久之,同样的东西重复买个好几个。经常不经意发现昨天拼命翻腾也找不到的东西。
大家都知道房间布局实际上是一种美学技术,软件也是一样,讲不讲究艺术大不一样。

Matin Fowler也对SEMAT有思考,非常遗憾的是负面思考,http://martinfowler.com/bliki/Semat.html

Matin Fowler认为正是因为软件是一门艺术,所以才几乎不可能抽象出共同的流程,每个系统都有自己的不可替代性,通过建立一个组织来集合一组软件设计的最佳实践和思想,并能帮助其他大多数项目,是不切实际的。

2010年04月30日 17:32 "bloodrate"的内容
Matin Fowler也对SEMAT有思考,非常遗憾的是负面思考,http://martinfowler.com/bliki/Semat.html

Matin Fowler认为正是因为软件是一门艺术,所以才几乎不可能抽象出共同的流程 ...


"人才是软件开发中最中心的元素,而人却是不能预测的,尝试去找出共同过程元素只会是白费工夫,除非有一天,人变成可以用数学描述的。"( via Martin Fowler)