`
bugtags
  • 浏览: 30189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

优秀的程序员就像艺术家?

 
阅读更多

优秀的代码能不能算艺术品?软件工艺这一理论是否有点矫枉过正?怎么样才算是一名真正“优秀”的程序员?

让我们先从一个问题引入话题。假设你雇了一个水管工替换地下室里已经老化的旧水管,在整个过程中,这家伙一个劲地给你灌输这些水管是有多么多么的有艺术美感。

Alt text

“哇哦,看看这根管子弯曲的角度,它与墙壁对齐得是这么的漂亮!简直就是艺术品啊!”你会怎么看这个水管工?

写代码也是如此。再也没有比一个开发人员非要将他的代码写成艺术的模式更糟的了。上述比喻来自一篇广受好评的文章《programming is not a craft》,其作者是Dan North,“Agile troublemaker”和BDD方法的创始人。

软件艺术

该理论的作者是 Kevlin Henney、Bob Martin、Corey Haines和Glenn Vanderburg,以下就是软件艺术的要领。

不仅得能正常运作,还应该精心制作
不仅可以应对变化,还能稳步增值
有良好的个体交流,以及专业人士组成的社区
和谐的客户合作关系,富有成效的伙伴关系
而现在的问题是,很多软件开发人员往往会因为太过自大反而不能很好地完成软件项目。因为自大会让他们将软件艺术捧得很高,North 说。Web服务和J2EE的项目就是这方面的例子,该项目的失败有很大一部分归咎于将软件艺术放到了过于崇高的地位。

优秀的程序员

你或许早就在一些小的IT项目中就领略过上述问题的存在了。如果有开发人员坚持使用某种特定的美学技术而不愿意务实的话,那么我敢肯定他已经被所谓的“软件艺术”洗脑了。

好的代码应该是高效的代码,而不是因为它的美观。不管它是什么样子,只要它可靠、高效就成。换言之就是不管黑猫白猫,能抓老鼠的就是好猫。也可以归结为理解和实现简单流程的能力。

“一个经验丰富的编程团队完全可以在很短的时间内拿出惊人的业务成绩。只有真正的专业人士和真正的软件匠手才能在毫无头绪一团糟中,例如各种企业软件,发现被抛弃的优雅与朴素。”——Dan North
但可悲的是,即使是优秀的程序员也经常会忘记何谓优秀软件的核心功能——过分重视所谓的软件艺术往往是罪魁祸首。

“软件从业者——具有讽刺意味的是,尤其是一些优秀人才——却经常会犯此错误。他们爱上了软件本身,然后觉得自己已经化身成了软件艺术工匠。”——Dan North
程序员的才华

全文这个辩论是基于一个问题展开的,这个问题就是:软件工程是否是艺术形式的一种?

据说性能和效率的比重在软件行业里已经有所下降,而怎么样才能成为一名优秀的开发人员却依然没有达成共识。“伟大的程序员,只需要几个小时或者几天就能完成普通程序员需要数周或者数月才能搞定的任务。”Dan North坚持这么认为。

“作为买家,你难道不想知道你的系统是由大师级工匠还是临时工做的吗?你付了钱,就应该有这个知情权。所以如何辨别两者就很重要了。”——Dan North
North也承认,好不好看并不能让我们正确区分两者。任何开发人员都可以自诩为软件匠手,也能做到对何为“软件架构之美”侃侃而谈。North诚挚地希望能有有识之士重新编写软件艺术的概念,这是最基础的理念问题。

站在背后的代码

我们并不在乎水管长啥样——反正是埋在里面的。这同样适用于软件。无论是客户还是用户,都只关心代码是否能工作以及页面看上去ok就行。

“同样的,我只想请专家电工来给我的房子布线而不是一个滥竽充数的家伙,我也只想要专业程序员来写代码,” North郑重其事地说,“我最讨厌的就是,一个自命不凡自以为是的水管工一刻不停地谈论他优雅美丽富有艺术感的水管。”

译文链接:http://www.codeceo.com/article/art-of-programming.html
英文原文:The ‘art’ of good programming
翻译作者:码农网 – 小峰

分享到:
评论

相关推荐

    8种类型极品程序员,不知你属于哪一种?

    艺术家型程序员追求代码的完美和美观,他们在编程中注入了个人情感和审美,致力于创造艺术品般的代码。然而,过分追求代码的美观可能牺牲了代码的效率和实用性,有时甚至会为了所谓的美感而牺牲程序的可读性和可维护...

    程序员编程艺术系列之经典算法研究 电子书【高清中文带书签】

    Dijkstra算法是由荷兰计算机科学家Edsger Dijkstra于1956年提出的用于解决单源最短路径问题的算法。该算法适用于带有非负权重的有向图或无向图,能够找到从一个顶点到其他所有顶点的最短路径。 **详细知识点:** -...

    程序员的数学系列书籍介绍-2020-10-20.pdf

    - **主要内容**:探讨编程艺术,介绍优秀的编程技巧和方法。 - **适用对象**:适合所有程序员阅读。 23. **信息学奥赛数学一本通** - **主要内容**:专为参加信息学奥林匹克竞赛的选手编写,涵盖竞赛所需的数学...

    程序员 软件工程思想

    当时的编程活动更像是艺术创作,缺乏系统性和规范性。 **内容概述**:“这些问题是导致‘软件危机’的原因。” - **软件危机**:随着计算机应用领域的不断扩大,软件规模迅速增长,但由于缺乏有效的管理方法和技术...

    <<编程修养>>

    代码如同作品,优秀的程序员应当像艺术家对待自己的画作一样认真对待每一段代码。以下是文章中提到的一些具体建议: - **注释与格式化**:良好的注释习惯可以帮助他人快速理解代码逻辑;正确的缩进和对齐方式则让...

    《程序员》杂志2012年第5期

    - **IaaS、PaaS、SaaS技术成果分享**:来自多家企业的专家解读了不同层面的云计算技术,包括基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)的最新进展和应用场景。 - **开源云先锋OpenStack**:介绍...

    软件的艺术性

    最后,软件本身的构造和设计,就如同艺术家精心绘制的画卷。优秀的程序员会在编写代码时注重整洁和逻辑,使得代码既有功能性,又有观赏性。整洁的代码结构,恰到好处的注释,都使得软件如同艺术品般引人入胜。同时,...

    阅读优秀代码能提高个人修为.docx

    正如艺术家需要研究大师的作品来提升技艺,程序员也需要分析和理解那些由经验丰富的开发者编写的高质量代码。尽管直接向大师学习的机会不多,但我们可以通过阅读他们的代码来间接学习。代码就像一种无声的教程,其中...

    Hackers and Painters

    Paul Graham鼓励程序员要有艺术家般的审美和直觉,去追求代码的简洁性和优雅性。 在互联网创业部分,Paul Graham分享了自己的创业经验,讨论了如何从零开始创建成功的互联网公司。他提出,黑客应当具备创业精神,...

    程序艺术PPT学习教案.pptx

    在当今数字化时代,【程序艺术】作为一种将计算机科学的技术与创造性结合的领域,正逐步成为业界的新宠。...通过学习和掌握程序艺术,程序员可以更深入地理解编程的精髓,实现从编程匠人到编程艺术家的蜕变。

    开发人员_47_it人员简历_程序员简历模板_计算机相关专业.docx

    【开发人员_47_it人员简历_程序员简历模板_计算机相关专业.docx】这份文档是一个典型的IT行业求职者的简历,特别关注的是网页设计师这一职位。简历的结构清晰,包括了基本信息、工作经验、自我评价、教育背景以及...

    软件工程的艺术性.doc

    软件工程师需要在保持原有功能稳定的同时,不断迭代升级,满足用户日益变化的需求,如同艺术家在作品上不断雕琢,使其日臻完美。这种追求卓越的精神,使得软件工程不仅是一项技术工作,更是一种创造性的艺术实践。 ...

    谈论数字艺术创作发展.docx

    数字艺术创作通常是一个跨学科的过程,需要艺术家、程序员、设计师、市场专家等多方合作,共同克服创作中的难题。 再者,建立可持续的商业模式对于行业的长远发展至关重要。这要求我们寻求投资与回报的良性循环,...

    processing入门教程

    这种易于使用的特点吸引了包括艺术家和设计师在内的非传统程序员群体。 Processing的学习过程不仅包括了基础编程知识的介绍,还鼓励用户通过动手实践来学习。这种学习方法尤其适合那些可能对传统理论先行的教学方式...

    参赛项目,创意网站推荐

    对于游戏开发者或在项目中需要使用到插画元素的程序员,这个平台可以帮助你找到合适的插画风格,甚至直接与艺术家合作。 6. **世界各地优秀LOGO作品**(http://logooftheday.com): Logo of the Day展示每日精选...

    计算机编程艺术第3卷

    《计算机编程艺术》系列是计算机科学领域...通过深入研读《计算机编程艺术》第三卷,读者不仅可以掌握排序和查找的基本理论,还能培养出对算法设计和分析的敏锐直觉,这对于成为一名优秀的程序员或数据科学家至关重要。

    洗鏡光 『程式設計之道』

    优秀程序员应如哲学家一般,洞察程序的本质,理解如何在有限的时空条件下,选用合适的语言与结构,以高效、优雅的方式解决问题。这种道的哲学,要求程序员不仅仅局限于编写代码,更要在追求完美代码的道路上,始终...

Global site tag (gtag.js) - Google Analytics