转:编程的艺术:漂亮的代码和漂亮的软件

标签: Misc | 发表时间:2012-02-23 11:13 | 作者:gouki
出处:http://www.neatstudio.com/

最近在转一些装波一文,发发牢骚而已。现实中除了那些API和一些开源软件,真的很少看得到漂亮的代码,不过有一天帅朱给我看过一段代码,不错。。。Sun也能我看过一些,也不错。看看自己写的,一泡污啊

原文来自:http://kb.cnblogs.com/page/132236/

  英文原文: Beautiful Code and Beautiful Software
译者:legendsland

  2007-10-29

  编程很有意思,是因为我可以做一些很酷的东西,但是实际上让我着迷的却是那一行行代码的语法和语义。保持对好代码和坏代码之间差异的敏感相当激 励人,同时,去寻找编写高效、自文档化和经过深思熟虑良好组织的代码的方法将会永远吸引着我。这便是我对所在领域钟爱的原因 —— 编程的艺术 —— 这种奇妙的复杂物(complex craft)将会让你花费一生的时间去成为大师。

  续Ruby之后,我学习了Java和Objective-C,我开始享受到底层软件开发的乐趣。我是在一个讨厌繁缛语言开发的社区(Rails 社区)成长起来的,但是当我第一次接触这类语言之后,发现我喜欢上了它们。它们(和Ruby比较起来)是不同的语言,但仍然具有它们特有的乐趣。以 Java 里面的for循环为例,当以我的高级程序语言的背景,编写了一些这样的基础代码后,发现这种代码可以更好地帮助我理解面向对象的一些实践,但同时我也对 for循环本身产生了兴趣。这不仅仅是优美的语言吸引了我,也是语法背后的逻辑和不同语法形式让我着迷。计算机语言,以及它们之间的差异,本身就极具魅 力。

  当这学期我在学校学汇编语言的时候,获得了相同的满足感。汇编很繁琐,有时相当痛苦,但是让我去思考使用这种新的方式去实现基本的程序功能,跟痛苦相比,是完全值得的。当然,意识到自己编写的代码如此底层,也让我享受到了极客(Geek)的快感。

  情况变得更糟了!在今年的早些时候,当我读到Wolf的 程序员不喜欢编码时, 我经历了一个很不错的自我发现过程。我确实是喜欢在编码过程中解决问题,进行优雅地创造,以及通过编码来学习,但实际上我意识到我也是因为喜欢编码而编 码。至少,这就是我享受CSS和XHTML的方式。我拥有大量的Web前端开发经验,并且最近没怎么碰到新的问题(事实上,难搞的问题和我从没有见过的 Bug会让我异常兴奋)。尽管如此,我仍然喜欢这些东西。比如,整理一下我完全理解的代码让它变得好看点,就像是在我的笔记本上重复地画一些卡通猫,或者 是坐在钢琴前重复地弹三个相同的音调一样,这让我感到放松。甚至仅仅去阅读漂亮的CSS(我自己写的CSS),上面每一样东西都整齐有序、缩进良好,并且 进行了正确的层叠(CSS里面很重要的一种技术)而感到心情舒畅;相反,当我看到某些论坛的样式表里面混乱的缩进、多余的空行、被注掉的一些老代码,以及 通过故意使用错误的属性名来屏蔽掉的样式的时候,我感到难受,就像是生病了一样。

  当你可以如此轻易地被激起兴趣 ,就是上面这个结果。仅仅是墙上的影子就足够让你继续生活下去(译注:看来,她对柏拉图很有兴趣)。你得不断地重新审视自己的敏感度,以便让你的声色品味与你口袋里的钞票相匹配。(你对代码或者软件的品味来自于你自己的能力水平)

  这样来讲吧,这些天我一直在思考(整个)软件开发中的软件部分。特别是软件中的用户界面设计。今年在BARcamp,我喜欢Aza Raskin的一个实验,他让所有的开发人员举起手,然后是设计人员,接着他说那些第一次举手的人在第二次也应该举手。所有的开发人员必须是设计人员。至 少,幸运的是,所有的开发人员在他们的工作中可以对软件设计发表自己的意见。

  我越来越对软件开发中设计部分的重要性感到兴奋,尤其是当我反思我对过去所做的事情在不同方面的热情与心得的时候。在Web应用领域,开发和设 计一般是分离的。有时候,设计部分的工作在项目中被最少化了,这是因为客户是为软件的特性买单,而不会为漂亮的设计付帐。在一个项目中,我同时扮演了开发 和设计的角色,回想起来,我对只分配了两天时间来完成可视化的设计感到耿耿于怀。这决不是两天的事情。这是一个很复杂的应用软件,需要花上几周的时间与客 户交流和迭代设计。不幸的是,客户并不会因此而买单。相反,客户对我花了几个小时的原型感到无比满意,就这样,我们有了这个产品的第一个版本。

  在今年的C4上我有了另一次觉悟。好像很多Mac下的开发人员都在(私下)做自己的产品。这样,他们真的必须既是设计师又是开发人员。事实上, 设计是最重要的部分,并且用户体验和制造了不起的产品看起来要比代码本身更具有热情。在C4的一个晚上,有人在向我描述他的工作的时候,无意中帮助我看到 了这一点:编码这个基本要素是最容易的部分。那仅仅需要几周而已。真正困难和耗费时间的是搞定UI的规格。

  哇噢,我在想,为什么这看起来如此正确?为什么对我而言是这么的酷?哦,是的,那是因为我是从设计人员开始的。我享受开发、设计和艺术的方式绝然不同,这就导致了这三种享受之间巨大的差别。我一直在尝试整合开发和艺术(这两个方面),但是我其实应该整合这三个方面。

  毕竟,我的天啊!我们想要漂亮的代码或者是漂亮的软件吗?我生活中的另一个观点是:由于我的思想极具开放性和强吸收性,我发现我自己可以接受各 种相互矛盾的观点,有时候甚至是相反的观点。这种问题目前不会困扰我,因为我正处在探索模式的阶段,而不是在只接受我所相信的阶段,但是,当然啦,为了保 持我思想自身的一致性,当它们有点头绪的时候必须要好好的整理一下。

  所以,为了后续的考虑,我按照软件开发给人们带来的由内至外的收获,简单地列出了这个清单。我没有选择其他一些极好的介质,比如社区、开源和挑 战等等,是因为这些都很难按顺序列到里面去,不过我相信你可以领会到其中的要点。这个顺序对我而言是极度重要的,因为心理学家讲过,内因的力量更为强大, 更能让你坚持。比如,一个为了想从击打和踢腿中感觉到力量和兴奋而参加空手道训练的人,肯定要比仅仅为了健康的人更容易达到黑段水平。

  编程也是如此吗?

  * 代码感(译者:还记得圣斗士里面的第六感吗?)
* 编码的知识
* 享受计算机逻辑
* 享受计算机语言
* 优雅的语法
* 优美的语义
* 学习代码
* 问题求解
* 了解问题
* 获得可用性
* 完成一个产品
* 优雅的软件
* 解决人的问题
* 解决商业的问题
* 满足市场需求
* 赚钱
* 有一个稳定的职业

  哪个是最能持续激励人的收获?更重要的是,哪种动机可以制造出最好的软件?有时候我很想在这个话题上做一个很正式的研究,当我们希望软件既满足 可用,又具备可维护性,同时还叫买,而且还要满足一些其他的目标的时候,我很确信这个答案就是清单上面各种条目之间健康的平衡。我同时还很确信这种平衡性 是因情况和人而异的。现在,我已经勾画出了一条钟形曲线(正态分布),那些可以促成最佳的软件的动机位于曲线的中间部分;但是,我想实际上所有的动机在某 些方面都是有益的,并且当程序员有她自己的优先级的时候,动机自然是越多越好。

  我们领域的悲哀在于大多数程序员并不会欣赏上面大部分的收获,尤其是那些更为重要的。这个清单很有用,因为大多数编程的工作无法满足那些关心所 有这些事情的人。同样地,我很好奇,如果我们每个人都从内心关心我们做的东西,并且不会有人为了稳定的工作而去选择计算机科学者个专业,那么这个(软件) 领域将会成为什么样子呢?我好奇这样会对整个世界产生什么影响?

  我想我每年都应该反思一下这种问题,以便成为一个更好的软件开发人员。尽管如此,我还是觉得我的信念已经固定下来了:越是成长,就越希望能够在 一个足够自由的环境里面创造美妙的东西。值得注意的是,美妙和自由都是模糊和主观的概念,可以任意地去理解。我只知道,在大多数的编程工作中对代码之美和 软件设计之美的妥协永远会让我感到不满。如果到最后,我选择成为一个自由开发者去做Web设计,以满足这种自我的生活风格,我不会对此感到意外。

  最终我会从计算机上面退休,并且用我剩下的时间在国外美丽的农场里面画画。或者是,过上在街头涂涂抹抹和牢房之间互动的感性城市生活。想象一 下,当我觉得技术玩完了的时候,接下来要去哪里将是很有趣的。但愿永远不要发生这种事情,因为我希望成为一个酷酷的guru奶奶,到时候给孩子们上一些编 程的必修课呢!(Fantastic guru girl !!)

----------

看完到最后的时候,我在想guru是什么,有道告诉我,这是专家的意思。哦,

相关 [编程 艺术 代码] 推荐:

转:编程的艺术:漂亮的代码和漂亮的软件

- - 膘叔
最近在转一些装波一文,发发牢骚而已. 现实中除了那些API和一些开源软件,真的很少看得到漂亮的代码,不过有一天帅朱给我看过一段代码,不错. 原文来自:http://kb.cnblogs.com/page/132236/. 译者:legendsland.   编程很有意思,是因为我可以做一些很酷的东西,但是实际上让我着迷的却是那一行行代码的语法和语义.

编写可读代码的艺术

- - BeiYuu.com
这是《The Art of Readable Code》的读书笔记,再加一点自己的认识. 英文版: 《The Art of Readable Code》. 中文版: 编写可读代码的艺术. 写代码前的思考和看代码的时间远大于真正写的时间. 读代码是很平常的事情,不论是别人的,还是自己的,半年前写的可认为是别人的代码.

android 编程代码规范

- - CSDN博客推荐文章
                学习android开发已经有很长时间了,但是有时代码却很少用规范的模式进行书写,下面就简要的总结了自己学习的代码规范. 一、关于一些常量值资源的书写规范. 颜色值有RGB和透明信息Alpha组成,以#开头, 形式有 #RGB                        #ARGB                        #RRGGBB                    #AARRGGBB.

让代码更美:10大编程字体

- Psyche - cnBeta.COM
日复一日的编写代码,有没有感到审美疲劳. 也许些许的改变就能让我们感到生活更美好. 下面我眼中的十大编程字体:.

代码审查和不良编程习惯

- - 外刊IT评论网
有时候,做为一个程序员,我觉得我的职业生涯会被我开发软件使用的开发工具和技术架构明显的分割成几个阶段. 一部分是因为使用的编程语言——在大学时是 Smalltalk,在Gog Creek公司是C#和Python,而另一方面是开发工具. 我在Fog Creek公司里工作了8年,在那里,我们有一个非常固定的技术架构:bug管理、客户支持和文档管理用 FogBugz;开发管理用 Trello;代码审查用 Kiln;版本控制用 Mercurial;编码用Vim和 Visual Studio ;持续集成用我们的内部工具Mortar;随着时间的流逝,这些工具在慢慢的变化,但变化从来都是缓慢逐步的,一个组件一个组件的.

结对编程 VS 代码审查:对比开发者文化

- - ITeye资讯频道
从上一份工作到现在的这份工作,我从结对编程的开发文化过渡到同行代码审查,这个转变过程是一个非常有趣的经历. 我认为我要记录下些我所注意到的变化. 你可以找到很多标题是/(结对编程|代码审查)的(利|弊)/这种样式的文章,这些文章的作者都可以给出一套清晰且有说服力执行方案. 我认为只要权衡它们的利弊,这两种方案都是非常有效率的.

硅谷流行结对编程:一人负责写代码另一人监控

- - TechWeb 今日焦点 RSS阅读
结对编程的坚定支持者Facebook程序员肯特--贝克(腾讯科技配图).   腾讯科技讯(马乔)北京时间8月28日消息,据国外媒体报道,英国著名女作家弗吉尼亚•伍尔芙(Virginia Woolf)认为,一位女作家应该拥有一个属于她自己的房间. 而在美国硅谷,部分科技公司则对程序员是否需要属于自己的独立工作空间表示质疑.

我读过的最佳编程书:一本没有代码的书

- - 博客园_新闻
英文原文: Best development book I've read, has no code in it.. Dave Hoover 和 Adewale Oshineye 合著的《 软件开发者路线图:从学徒到高手》是一本优秀的书籍,它能为技术人员提供很好的帮助. 书中主要体现的思想就是人应该沿着一条漫长的道路坚持走下去.

职业感悟:代码审计与编程在渗透中的重要性

- - Seay's blog 网络安全博客
   配图:3D立体街头涂鸦.      博客连着断了一个月没更新,期间写过好几篇各个方向的文,都是写到一半就夭折,这篇文章强迫自己耐心写出来的. 最近跟出版社沟通好了在写一本关于代码审计和安全编程的书,算是把我这几年的技术积累做一个总结,刚好昨天跟safekey team几个搞渗透的朋友说到编程的问题,就想写个文来好好讲讲.

每日站会、代码审查、结对编程 之开源中国实践

- - 翟志军
在我来到开源中国之后,尝试将每日站会、代码审查、结对编程这三种编程实践带入团队. 而这个过程,我个人觉得是一项非常宝贵的体验. 先介绍下目前我们团队的结构:3名Java开发,1名前端,2名实习. 以下我不会详细介绍它们分别是什么,也无意讨论它们有什么好处坏处,本文侧重分享在实践它们的过程可能遇到的问题,以及我们是如何处理的.