只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  软件开发到底是工程还是艺术,还是科学?


软件开发到底是工程还是艺术,还是科学?

发布时间:2019-05-18 15:09:54  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
前不久看过@冯欣伟 的一篇博客程序员的四种类型,作者将程序员分为4类:科学家,与其说他们是程序员,不如说他们是数学家;码农,这个词汇来自网络上程序员的自嘲;专家,他们在软件行业中摸爬滚打多年,见多识广
软件开发到底是工程还是艺术,还是科学?前不久看过@冯欣伟 的一篇博客程序员的四种类型,作者将程序员分为4类:
  1. 科学家,与其说他们是程序员,不如说他们是数学家;
  2. 码农,这个词汇来自网络上程序员的自嘲;
  3. 专家,他们在软件行业中摸爬滚打多年,见多识广且精于一个或多个领域;
  4. 工匠,他们是很特殊的程序员,与其他程序员关心技术本身相比,他们更关注实现的结果,他们是把科学家论文商业化的实践者;
idem,软件开发也可以分为4类:
  1. 科学;
  2. 搬砖;
  3. 工程;
  4. 艺术;
附上原文:
程序员的四种类型

不是每一个写代码的都是程序员。这里,我把程序员定义为以编程为生的人。我认为世界上存在四类程序员:科学家、码农、专家和工匠。下面我一一介绍自己的观点。

科学家,与其说他们是程序员,不如说他们是数学家。他们发明了各种理论、算法和术语,教科书上那冗长的证明和计算也出自他们之手,其他的程序员都或多或少受益于他们的成果。有时,他们的一篇论文能改变整个业界的思维方式,但他们通常不会也不喜欢把那惊世骇俗的理论商业化。相比之下,他们更喜欢沉浸在科学的象牙塔里,自得其乐,好不快活。他们是程序员中最不经常写程序的人,甚至有一些大师一辈子都没写过程序,你也许认为这违反了我们开头对程序员的定义,可谁说编程非要用键盘呢?

码农,这个词汇来自网络上程序员的自嘲。但在这里,我把他定义为软件的主体实现者。正如农民工兄弟一样,他们是软件大厦的实际缔造者,他们通常熟悉或精通一到两门语言,在现有的架构下进行开发。他们是程序员中的蓝领,干着某种程度上的体力活,但这并不是什么坏事,事情总要有人做,并且编程的自由行赋予了码农很大的创造和学习空间。如果承认自己是个码农并乐于所从事的工作,那也是件极其美好的事,可问题在于很多人并不是自己愿意做码农,而是被迫成为了码农,他们本应是音乐家、运动员或者是商人,可因为种种原因成为了码农,干着他们认为枯燥且重复的体力活,所以他们不开心,这种状态下工作身心俱疲,也就是他们最容易发出程序员吃青春饭,三十岁以后还写程序没出息,应该转管理之类的蠢话。可当他们真的成为了管理者,通常情况下,只有极少部分人找到了自己喜欢做的事,其他大部分码农仍将继续他们的抱怨。综上,码农是程序员中占比最大的群体,他们的可塑性最高,有刚学习编程的中学生,有刚参加工作的毕业生,也有工作多年仍乐于战斗在第一线的资深工程师;作为码农,首先要承认自己的身份,然后找到自己的兴趣与方向,或者乐于做一辈子码农,或者准备向其他三类程序员转换,再或者换个行业,追寻自己最初的梦想。

专家,他们在软件行业中摸爬滚打多年,见多识广且精于一个或多个领域。他们在公司里通常被称之为高级程序员,架构师或是CTO,他们通常设计软件大厦的结构,然后安排码农去实现,或者自己写一些核心代码。他们经验丰富,具有技术前瞻性,能够未雨绸缪,提前做出反应以应对软件大厦腐朽的趋势和业界的技术变化。他们性格单纯,喜欢自己的工作,且薪水不菲,通过阅读科学家的论文来保持与时代共同进步。软件行业很特殊,对于制造业,杰出者与平庸者带来的结果差距通常只有一到两倍,可在软件行业恐怕用千万倍形容都不为过。所以专家是公司的宝贝,任何一家公司都要不懈余力去争取或培养专家;同时,成为专家通常也是很多码农的终极梦想。因此,如果你是一位专家,请接受我致以的崇高敬意。

工匠,他们是很特殊的程序员,与其他程序员关心技术本身相比,他们更关注实现的结果,他们是把科学家论文商业化的实践者。对他们而言,重要的不是技术本身,而是利用技术创造伟大的产品。因此,你很难用前端、后台、DBA、安全工程师定义他们,为了创造伟大的产品,他们愿意学习任何技术,有些浅尝而止,有些因为需要或兴趣而精通无比。他们通常具有叛逆精神,本能地抵制权威,喜欢挑战某个领域的领导者,具有传统意义的黑客精神。他们对自己和别人都极其严格,具有很强的控制欲,喜欢插手编程之外与产品有关的事物,如设计、UI、市场等等;因为他们不希望因为某个环节的失误而降低了产品的影响力,虽然他们并不总是对的。他们喜欢编程,但编程通常并不占据生活的全部,他们一定会有一些与大众眼中程序员气质不符的爱好,如吹笛子,打剑道,玩音乐,绘画,种地,旅行等等。他们特立独行,性格倔强,工作疯狂,只愿和优秀的人合作。因为如此种种,在一般的企业中,工匠很难共事,他们总会觉得自己的才华受到了限制,周围的人跟不上他的节奏;他们在某种意义上是公司的不稳定因素,要么是天使,要么是魔鬼;绝大部分的企业不需要工匠,但对伟大或立志伟大的企业而言,工匠比专家还重要,专家可以把现有的产品做到行业领先,但工匠可以创造新的产品从而改变游戏规则。因为适合工匠的企业如此至少,他们中的有些人选择自己创办一个。

以上是我个人对程序员的分类,科学家、码农、专家、工匠;每一个程序员依据技术能力,性格习惯一定会找到自己的类型,但通常或多或少都会具有其他类型的气质,有工匠气质的科学家,喜欢与码农并将作战的专家等等。对于每一位程序员,重要的不是你现在属于哪种类型的程序员,而是找到你希望成为的那种程序员,并为之努力。每一位程序员,都会有自己的精彩。
对大部分人来说,是种手艺。怒答。
《禅与摩托车维修艺术》窃以为,本质上是工程,艺术是附加品,科学是理论基础。哪来那么多艺术?教科书的名字就起的妥妥的叫《软件工程》。对有的人来说是艺术,对有的人来说是精密的系统化的工程,对有的人来说只是份工作。贝尔实验室发明C语言那群人是科学家。
至于用C语言敲代码的,就是码农而已。

甚至现在都不是C语言。在更先进的语言里,层层的框架、类库来回拖拽而已。涉及到数学和底层的部分都有高级码农帮你做了。你只要会调用就行了。
智商未必比得上那些保洁的阿姨。只是人家以为编写网站、app是多么高科技,,不知道现在编程这么容易而已。

这么分类吧:
发明C语言的,发明C#、JAVA的,是科学家。
编写各种框架,类库,函数的,是工程师。
调用那些框架,编写网站、软件、app的,是码农。http://paulgraham.com/articles.html计算机历史上最经典的著作是什么? The Art of Computer Programming - Donald Knuth,计算机程序设计艺术

计算机编程属于工程和科学,不会有人反对。这个问题简化为:计算机编程是不是一门艺术?

答案是:在当前阶段,计算机编程属于一门艺术。为什么它是艺术,那就不得不说艺术和科学之间的历史因缘?

有很长一段时间,science 和 art 平起平坐,他俩都表达一个意思「skill」。比如,中世纪时的 Seven Liberal Arts 也被称作 Seven Liberal Science。 在13世纪,Duns Scotus 把 logic 称为 「The science of sciences, the art of arts」。

到了18和19世纪,science 和 art 的关系被很多学者讨论过,也致使 art 的意思发生的较大改变。如1784年 Kirwan Elem. Min. Pref.:
Previous to the year 1780, mineralogy, though tolerably understood by many as an Art, could scarce be deemed a Science.

1834年 Southey Doctor cxx. 294:
The medical profession.. was an art, in the worst sense of the word, before it became a science, and long after it pretended to be a science was little better than a craft.

John Stuart Mill 在1843年给出了被认为最好的定义(?):
Art in general consists of the truths of Science, arranged in the most convenient order for practice, instead of the order which is the most convenient for thought. Science groups and arranges its truths so as to enable us to take in at one view as much as possible of the general order of the universe.

发现什么没有?这时候 Art 已经被降级了,同时 Science 升级了。Science被定义为逻辑分析整理后的知识,是对知识更高层的抽象。而 Art 则是「The application of knowledge」,是因实际生活的需要而存在。这跟现代我们对 science 和 engineering的定义很接近。

Knuth也曾说「科学是我们已经能较好理解的知识。对于我们还没能完全理解的事物,那是一门艺术所需要解决的」。

从这个角度讲,人类正努力把每一门艺术都发展成一门科学。而计算机编程还在处于艺术和科学之间,类似于之前1834年对Medicine 的描述:曾经是一门艺术,在伪称是一门科学后及真正成为一门科学前,只不过比匠艺好一点。

19世纪,人们(科学家?)普遍认为 Science 优于 Craft,而 Craft 优于 Art。不过这些年,Art 和 Craft 在人们(工程师?)心中的地位有提高,意义也随之产生了一些变化。(尽管每一门 art 最终可能都会发展成 science,但我不认为 Science, Craft, Art 有孰优孰劣,只是思考和做事的不同方式。)

The science without the art is likely to be ineffective; the art without the science is certain to be inaccurate.
没有艺术的科学是不起作用的;没有科学的艺术是不准确的。




科学方法是逻辑,系统,理性,无人情味的;而艺术途径是美学,创造力,博爱,感性的。二个看似截然不同的文化,对于计算机编程和行业发展都会有很大价值。没有必要非得争个归属,如何利用好两个不同的文化,创造出有价值的程序和软件才是应当去思考的。

Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better。
计算机编程是一门艺术,因为它将积累的知识运用于世界,因为它需要技巧和灵性,更是因为它能制造美好的东西。一个潜意识里把自己视为艺术家的程序员,会更喜爱他的所做,也必将做的更好。




Computer Programming as an Art
How Art Can Be Good
Zen and the Art of Motorcycle Maintenance
Great Hackers
The Two Cultures


--
Peng同英语、数学、图画、音乐等类似,程序语言也是是一种描述事物的“符号系统”。英语、数学、图画、音乐这些“符号系统”侧重于表达“what is”,而程序语言侧重于表达“how to”。

更重要的是,程序语言是人和机器沟通的语言,通过程序语言,人的想法生成一份“copy”,这个“copy”在计算机上运行,就将人的心智赋予了计算机,而计算机能自动运行,把人从一些心智劳动中解放出来。

至于用这个“人和机器共享”的“符号系统”来做艺术工作、工程项目、科学研究,都是可以的。所以其实CS专业是艺术、工程、还是科学,是具体工作内容决定的。

想有更具体的了解,可以去读一读SICP。题目很大,水平有限,只能说说个人感受。

说是科学显然是过誉了,因为科学寻求的是新,是变,是不同,至于有无实用价值那是后话。

做软件更多是成熟的技术,通用的平台,可控的流程,可预期的结果,从这个意思来说完全是工程的标准模板。

但是,哈哈,聪明的码农怎么甘心只当搬砖的苦力呢?为什么资深码农更是以一当十,老当益壮呢?是什么让他们玩的这么爽呢?

他们在追寻一种隐知识,一种工匠契约,这种经验的积累来自于日复一日不断地读改写思考讨论教授领悟,一次次的debug, code review, prototype design等等都在潜移默化地提升着最底层的思维能力!

平衡,优先级,迭代,限制因素,异常情况,用户体验,系统性能,工具,自动化,需求控制。。。

他们把这个混搭的游戏玩出了艺术范。。。有科学的部分也有工程的部分,科学的部分少争议,因为有证明有结论,容易让对方闭嘴,类似基于比较的排序应该怎么做最好。各种数据结构的用法也少有争议,因为好衡量。
不好衡量的部分属于工程,类似泥瓦匠弹琴作诗画画之类,能达到的方法各种,流派更是千差万别,光音乐就有古典民谣摇滚流行等等,不同工匠不同做法,为此会无止境的争吵。如果哪一天出了一种好衡量的办法也就成了科学。
因为属于工程,又跟文艺工作者干的事类似,所以这个领域容易出神棍,也容易有争议,很多时候像艺术。软件开发过程更像一个人类进化过程,我们从远古走来,向人类的方向发展,为了适应各种环境,我们发展出各种分支,但是都被我们抛弃,消失在历史长河中。最后只有人类一种生物发展到我们当前的状态。
软件开发也一样,我们只知道一个模糊的目标,为了一个目标进行各种尝试,包括设计人员和开发人员还有测试人员,中间的各种小迭代,小改进,就是我们丢弃的分支。最后我们发布了一版。
但是之前抛弃的部分有价值吗?当然有。这就好比你吃了三个包子饱了,前两个有意义吗?
所以严格来说,软件开发和建筑业肯定不能对比。我更倾向于将它比喻成一个修表行业。你可以说是艺术,也可以说不是。我只知道这个行业聚集了大量身怀理想的人。应该说是工程,但并不排斥艺术和科学机器不懂美,但是操作机器的人知道什么叫美。不能反客为主。
责任编辑:
热门阅读排行
© 16货源网 1064879863