`
ruilin215
  • 浏览: 1161346 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

[转]编程是一门艺术吗?

阅读更多

编程是一门艺术吗?

发布日期: 2006-10-23 | 更新日期: 2006-10-23

Stanley B. Lippman

仅仅使用软件的人们 通常意识不到编写软件有多么困难。噢,设计部分和最初开发部分都很有趣。最困难的部分是使其正确运行(且运行速度足够快)。对于程序员而言,这就好比一餐开始时是美味的双层牛奶巧克力咖啡干酪饼,而结束时却是菠菜奶油沙司。

之所以说编程仍是一门艺术而不是一门科学或工程学科,是因为我们还不能将其分解成多个组成步骤,而后机械地进行。一旦我们在此方面获得成功,在某种程度上就会出现一种新的可能性:在编程时采用以人为本的设计语言 (PODL) 编写程序,通过编程来证明程序的正确性以及分析和支持语义查询。然而到那时,编程依然是一门艺术,也就是其中含有那么多传统智慧。

但是,如同许多传统智慧一样,此类比经不起进一步推敲。事实上,编制程序(我干这行已经有 20 多年了)根本一点都不像艺术 — 至少不像写小说(我干这一行也已经有 20 多年了)那样的艺术。让我用两个片段(一个程序片段和一个散文片段)来说明我的观点吧。

第一个片段是一个用于分析 Visual C++® 7.1 的词法分析程序的一部分。该片段如下所示:

if ( index >= TokenID::lastKeyword() ) {
string token = tokenString( index );
if (( isdigit( token[ 0 ] )) || ( token[0] == ‘-’ )) {
#ifdef TELL_ME
display( "!! TokenSet::tokenIdentify: ",
"文字数字:", token );
#endif
return TokenID::TK_Literal;
}
}

第二个片段是我在大约 27 年前所撰写的一个故事的开头,那时我居住在亚利桑那州的图森市,从事散文教学和创作:

We were her pride of 10, Miss Steward named us: the Prodigal, Phoenix,
Benjamin, and perspicacious, pacific Suzanne. Hush, child. Benjamin, be
still, Miss Steward commanded him gently. People are never just.

两个片段都经过了精心设计 — 也就是说,我预先花费了大量时间来设计整个工作的体系结构,而且这些片段反映了我所付出的设计努力。该程序有一个性能缺陷 — 我是按值而不是按指针在关联的字符串表中检索字符串条目的。如果将该代码投入生产,则很明显需要进行修订。这与正确性无关,而只是与性能有关。对于较小的源代码程序,速度上的差异不可测量,因此我选择了更简洁但更慢的对象语法,因为我不喜欢 C/C++ 的指针操作标志。

尽管我的散文没有吸引数百万读者,但那些确实阅读散文的人都很欣赏其在严格的符号框架下编织情感的巧妙方法。那些不欣赏散文传统的人认为它故弄玄虚,因为它毫无作用。艺术的目的是以特定的可塑性媒体(对于散文而言就是词语)在公共事件中反映出个人感情以及个人私生活的真实性。当然,它不像程序那样具有与生俱来的内在价值。

我喜欢程序的设计过程,喜欢弄清楚程序的不同部分是如何相互作用的。我喜欢定义抽象或抽象族。我将其视为自己的人物塑造。并且,我喜欢编制接口,因为它们就是我的人物彼此之间所做的事情。这其实就是我编写程序的方式。

我不喜欢编写表达式和语句。我希望我们能有一种符号式编程语言,这样我就能够更好地用其进行思考并将其记在我的脑海中了。坦白地讲,我无法使算术表达式和括号嵌套保持清晰。尽管我能记住八个单独的文本部分,对其进行对比和回显,但我搞不清楚在我所设计的类及其接口之外的程序的意义。

在 John Markoff 所著的 PC 行业大事记《What the Dormouse Said》(睡鼠述)中,他声称最初幻想家使人人都能够支配计算机的目标已经实现。但是他错了。该目标仅实现了一半。如果一个人本身不会编程,怎么能说该人已拥有了计算机的全部威力?我们还没有实现他们的梦想,因为我们还未弄清楚如何将编程变成一门艺术,以使人人都能够分享它。在我们实现此目标之前,编程仍旧既不属于学科范畴,也不属于艺术领域。目前,编程只不过是一种新式“炼金术”。没有人能真正理解它,也没有人能将规范变成真金。

Stanley B. Lippman 从 1984 年开始在 Bell 实验室与 C++ 的发明者 Bjarne Stroustrup 一起研制 C++。之后,Stan 在迪斯尼和梦工厂从事形象动画方面的工作,并担任了《Fantasia 2000》(幻想曲 2000)的软件技术总监。此后他一直担任 JPL 的名誉顾问,并在 Microsoft 的 Visual C++ 团队中兼任设计师。

本文摘自 MSDN 杂志2006 年 10 月刊。

转到原英文页面

© 2006 Microsoft Corporation 版权所有。保留所有权利。使用规定。

分享到:
评论

相关推荐

    编程之道--编程是一门艺术

    要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE和成为比尔盖次的冲动,那么我劝你还是应该不要开始学习,因为这样的目标很难支持你日后...

    程序员编程艺术pdf可编辑

    程序员编程艺术pdf可编辑,教你如何将编程作为一门艺术

    多处理器编程的艺术

    在多处理器编程平台上进行编程时,即使熟练掌握了系统提供的各种同步语句,但是所编写的程序还是差强人意,问题在于多处理器编程时一门艺术和科学结合的学科,希望这本书能给你帮助。

    unix 编程艺术

    ### Unix编程艺术 #### 一、Unix哲学与编程原则 Unix作为一款历史悠久的操作系统,其设计哲学和编程原则对后来的计算机...无论是对于新手还是有经验的程序员来说,《Unix编程艺术》都是一门值得深入研究的重要课题。

    汇编语言编程艺术(清晰版).

    编程是一门艺术!此书极为清晰地讲述了汇编语言的来龙去脉,让你感受到汇编并不痛苦。

    javascript Dom 编程艺术

    JavaScript是Web开发中最重要的一门语言,它强大而优美。无论是桌面开发,还是移动应用。JavaScript都是必须掌握的技术。W3C的DOM标准是开发Web应用的基石。已经得到所有现代浏览器的支持,这使得跨平台Web开发成了...

    JavaScriptDOM编程艺术(第2版)PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一本关于JavaScript DOM编程技术的书籍——《JavaScript DOM编程艺术(第2版)》。尽管实际书籍内容并未给出,但从标题、描述及部分链接信息来看,这本书主要涉及JavaScript...

    C语言艺术编程——浅谈艺术编程之举一反三、灵活运用.pdf

    C语言作为一门经典的编程语言,在计算机科学与工程领域拥有深远的影响。随着技术的发展,编程不仅仅是解决问题的工具,更成为一种艺术,即艺术编程。本文将深入探讨C语言艺术编程的概念,特别关注于“难一易一难”...

    编程艺术美

    线性代数是一门重要的数学分支,它在计算机科学、工程学、物理学、经济学等多个领域都有广泛的应用。...无论是在科学计算、数据分析还是人工智能领域,线性代数都是不可或缺的工具,是支撑现代编程艺术的重要基础之一。

    程序员编程艺术

    《程序员编程艺术》一书,由July及其编程艺术室团队共同创作,自2011年4月14日启动,至2012年4...它不仅教授编程技巧,更引导读者思考编程的意义,鼓励在编程过程中追求卓越与创新,体现了编程作为一门艺术的独特魅力。

    计算机编程艺术

    编程不仅仅是一门科学,更是一种创造性的过程,涉及逻辑思维、美学设计等多个方面。 - **目标读者**:本书适合对计算机编程感兴趣的初学者、中级开发者以及希望进一步提升编程技能的专业人士阅读。 - **内容特点**...

    java编程艺术源代码

    《Java编程艺术源代码》是Java开发者们深入学习和理解Java编程的一份宝贵资源,它涵盖了从基础到高级的各种编程技巧和实践经验。这份资源通常包含了书中提到的所有示例代码,帮助读者通过实践来掌握理论知识,提升...

    创意编程收集.zip

    在这个压缩包中,"awesome-creative-coding-master"目录下包含了各种开源项目,这些项目不仅展示了编程技术的应用,更体现了编程作为一门艺术的可能性。 1. **生成艺术**:生成艺术是创意编程的一个重要分支,通过...

    JavaScript DOM编程艺术

    JavaScript DOM编程艺术是一门至关重要的Web开发技能,它涉及到如何使用JavaScript语言来操作网页的结构、样式和内容。DOM,即文档对象模型(Document Object Model),是HTML和XML文档的一种标准化表示方式,允许...

    《创意编程》课程教学大纲1

    创意编程是一门旨在培养大学生利用计算技术解决创新设计问题的课程。这门课程主要面向工业设计二年级本科生,由设计学院设计系的张立群老师授课,采用中文教学。课程的核心是让学生掌握编程基础,从而能够运用编程...

    小学生C++趣味编程 C++源代码(2021.11.22).rar

    10. **第82课 编程是一门艺术-2021.11.06.cpp**:这节课可能会探讨编程的美学,如代码风格、效率和可读性。 这些课程覆盖了C++的基础语法、控制流(如if-else、for、while)、数据结构(如数组)、数学运算、函数...

    给程序员的话《编程新手真言》(PDF)

    《编程新手真言》是一本面向初入编程领域的学习者的指南,旨在帮助新手程序员避开常见误区,提升编程技能。PDF格式使得这本书易于在线阅读和下载,方便编程爱好者随时随地学习。以下将从标题、描述和标签中提取出的...

    java并发编程

    Java并发编程是Java开发者必须掌握的关键技能之一,它涉及到如何在多线程环境中高效、安全地执行程序。并发编程能够充分利用多核处理器的...总的来说,Java并发编程是一门深奥的学问,需要不断学习和实践才能真正精通。

    编程珠玑 续.pdf

    5. 前言摘要:前言部分提到编程既是乐趣,也是优雅的科学,这强调了编程不仅是一门技术和科学,同样也是一门艺术。它还强调了编程与人的关系,比如理解客户需求、使用户能够更容易地与程序沟通等问题。此外,作者还...

Global site tag (gtag.js) - Google Analytics