优秀的代码是一件艺术品?或者软件工艺宣言言过其实了?成为一名“优秀”的程序员,有什么要求?

  设想你雇佣了一名水管工,让他更换地下室的旧管道。这个家伙在工作之前、之中、之后,他就没有停止过谈论他的管道工艺的艺术美。

“看看那根管道的角度。看看它与墙壁对齐是多么地美?如果你问我,那么它就是一件艺术品。”

  这和程序员没什么区别。没有什么比 不可一世的程序员把他或她自己的代码看做是艺术品 更糟糕的了。这个类推借用了”敏捷麻烦制造者”和BDD【注1】创立者Dan North的一篇广受赞誉的文章,Dan North激烈地批判了软件工艺宣言,论证了“编程不是艺术”。

  软件工艺宣言

  宣言的作者Kevlin Henney、Bob Martin、Corey Haine和Glenn Vanderburg揭示了下面几项将通往软件工艺的大门:

  • 不仅是可运行的软件,而且是精心设计的软件。
  • 不仅响应变化,而且稳步增加价值。
  • 不仅个体与交互(Individuals and Interactions),而且是专家社区。
  • 不仅仅是客户协作,而且是有生产力的合作伙伴。

  North的问题在于,软件开发者的自尊经常妨碍其成为优秀的软件项目。North谈到,用“精心设计的软件”这种荣耀的概念进一步加压到自尊上,是达不到预期的。Webservice和J2EE就是最近的项目例子,软件艺术性的崇高诠释部分地导致了项目的失败。

  优秀的编程

  你或许已经知道了来自于小型IT项目的这种问题。某个开发者主张使用特定技术是因为审美(而非务实)的原因。从此就每况愈下了。

  根据North的观点,代码优美是因为它能有效地运行,而不是因为审美上有吸引力。不应该太计较代码看起来怎么样,而是看代码在从A点到B点带来的一段信息是多么可靠、高效。

“一个技术娴熟的编程团队可以在非常短的时间里交付让人惊奇的业务结果。一名真正的专家——真正的工匠——将理解埋葬在、比如我们把企业软件称作的杂乱里的、优雅的简单,并整理清楚。” ——Dan North

  但是悲哀的是,甚至那些优秀的程序员经常忘记优秀软件的核心职能——软件工艺宣言的过分强调往往是祸因。

“软件从业者—特别具有讽刺意味的是优秀的软件从业者—经常忘记这一点。他们爱上了软件本身,开始把他们自己看做软件工匠。”——Dan North

  开发者需要多大的才能?

  这里有个引起整个争论的问题:软件工程是一种艺术形式吗?焦点集中在 对他们的工作充满激情的有热情的专家 和 只为薪水工作的程序员 之间的挣扎上。

  据说性能和效率在软件行业的差异正在缩小,但是就成为优秀开发者的条件定义而言,没有达成一致或被认可的方法。Dan North说,“一名真正伟大的程序员胜过数百个为钱做事的程序员,在数小时或数天就可以交付,而普通程序员要用数周或数月。”

“做为软件解决方案的买家,难道你不想知道你的系统是被大师级工匠而非拿薪水的人开发的?你支付了钱,你有权保持某种信心。让我们搞清楚怎样提供这种软件。”——Dan North

  North声称,“架构之美”无助于我们区别好坏。任何程序员都能把他或她自己称作软件工匠,滔滔不绝、高谈阔论软件架构的“美”。North对我们说,他将“乐于看到有人根据结果导向和取悦客户来重写软件工艺宣言。”

  地下室与代码

  房主不关心他们的水管看起来如何,只要它们不漏水就行。软件同样如此。客户和用户都不关心它是如何运转的,尤其不关心它内部看起来是否“美”。

  “同样,我想让专家级电工而非新手给我的屋子布线,我想让专家级程序员涉足我的业务,”North对我们说。“然而,我不想要一个坚持谈论管道系统优雅与审美的、恃才傲物的管道工。”

  • 原文地址:http://jaxenter.com/programming-art-and-software-craftsmanship-112123.html
  • 注1:行为驱动开发(缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。在过去数年里,它得到了很大的发展。http://zh.wikipedia.org/wiki/行为驱动开发

转载于:https://www.cnblogs.com/thanksmoons/p/4077848.html

[转]优秀编程的“艺术”相关推荐

  1. Java并发编程的艺术pdf

    下载地址:网盘下载 并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,<Java并发编程的艺术>是他们多年一线开发经验的结晶.本书的部分内容在出 ...

  2. java 并发 mobi_Java并发编程的艺术pdf txt mobi下载及读书笔记

    Java并发编程的艺术pdf txt mobi读书笔记 如何解决资源限制的问题:对于软件资源限制,可以考虑使用资源池将资源复用.比如使用连接池将数据库和Socket连接复用,或者在调用对方webser ...

  3. 转载:每一个程序员要遵守的一些优秀编程风格

    无论你是业余的还是专业的程序员,正确的编程风格,不但有助于提升软件产品的功能,还可以明显减少软件灾难的产生.今天,我们就来探讨一下有助于我们获取更佳编程风格的一些最好的规则. 每一个程序员要遵守的一些 ...

  4. Java并发编程的艺术 记录(一)

    模拟死锁 package com.gjjun.concurrent;/*** 模拟死锁,来源于<Java并发编程的艺术>* @Author gjjun* @Create 2018/8/12 ...

  5. 企业c语言的编程风格,c语言优秀编程风格.docx

    作为一个初学者如何具有良好的程序设计风格呢?我想引用一个关于初学者请教编程大师 的故事让读者自己去领悟. 有一位编程大师,他写非结构化的程序, 一位初学者刻意模仿他, 也写非结构化的程序.当 他让大师 ...

  6. Java并发编程的艺术,解读并发编程的优缺点

    并发编程的优缺点 使用并发的原因 多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升. 在特殊的业务场景下先天的就适合于并发编程. 比如在 ...

  7. 多线程知识梳理(2) - 并发编程的艺术笔记

    layout: post title: <Java并发编程的艺术>笔记 categories: Java excerpt: The Art of Java Concurrency Prog ...

  8. 《Java并发编程的艺术》笔记

    <Java并发编程的艺术>笔记 第1章 并发编程的挑战 1.1 上下文切换 CPU通过时间片分配算法来循环执行任务,任务从保存到再加载的过程就是一次上下文切换. 减少上下文切换的方法有4种 ...

  9. 《Java并发编程的艺术》——线程(笔记)

    文章目录 四.Java并发编程基础 4.1 线程简介 4.1.1 什么是线程 4.1.2 为什么要使用多线程 4.1.3 线程优先级 4.1.4 线程的状态 4.1.5 Daemon线程 4.2 启动 ...

最新文章

  1. 计算机辅助语言和计算语言学关系,建构主义理论视角下计算机辅助语言学习环境对留学生学习汉语动机的影响——以广西大学泰国留学生为例-语言学及应用语言学专业论文.docx...
  2. Android之实现多桌面图标app入口进入不同的页面,像2个独立运行的app一样,互不干扰。
  3. 骆驼路线的主/从故障转移
  4. Linux的sort命令
  5. 【计算机科学基础】数据运算
  6. Linux 多播(组播)例程
  7. 三级计算机信息安全基础知识
  8. Flameshot——最好用的ubuntu截图工具
  9. latex大括号 多行公式_【干货】四招教你如何快速写公式!
  10. 查看弹出广告来自哪个软件
  11. Excel中换行的问题
  12. Interwine China 2009广州国际名酒展
  13. javascript bool 强制类型转换
  14. 随机过程(一)基础概念与随机过程基本类型
  15. android 无法添加帐户,安卓手机outlook无法登录、添加帐户
  16. python文件中的代码调用以及“__init__.py“ 文件说明
  17. 玫瑰花pythone_用python画玫瑰,玫瑰花
  18. 微软计算机键盘上Tab,电脑键盘上的tab键有什么功能
  19. 计算机怎么设置java环境_怎么设置java环境变量
  20. BitmapFactory.decodeStream接收servlet传回的图片数据流慢、卡死、延迟问题

热门文章

  1. python22期_python学习第22期
  2. boos里的AHCI RAID_安徒恩Raid删除,安徒恩讨伐战上线,详细攻略快速看,成为新的摸金圣地...
  3. php foreach是什么,php中foreach的用法是什么
  4. 微型计算机系统外文,微型计算机控系统(单片机控制系统) 毕业论文外文翻译.doc...
  5. java ftp 判断文件是否存在_FTP判断文件是否存在
  6. 【单片机】时钟周期 器械周期 指令周期的关系
  7. fceux源码解析_fceux源码解析_从源代码制作deb包的两种方法以及修改已有deb包(转载)...
  8. 33个2017年必须了解的iOS开源库
  9. Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...
  10. OpenDNS 不再向用户展示广告