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

代码最重要的读者不再是编译器、解释器或者电脑,而是人!

 
阅读更多

在做IT的公司里,尤其是软件开发部门,一般不会要求工程师衣着正式。在我工作过的一些环境相对宽松的公司里,很多程序员的衣着连得体都算不上(搞笑的T恤、短裤、拖鞋或者干脆不穿鞋)。我想,我本人也在这个行列里面。虽然我现在改行做软件开发方面的咨询工作,但还是改不了这副德性。衣着体面的其中一个积极方面是它体现了对周围人的尊重,以及对所从事工作的尊重。比如,那些研究市场的人要表现出对客户的尊重。而大多数程序员基本上每天主要的工作就是和其他程序员打交道。那么这说明程序员之间就不用互相尊重吗?而且也不用尊重自己的工作吗?

程序员之间的互相尊重体现在他所写的代码中。他们对工作的尊重也体现在那里。

在《Clean Code》一书中Bob大叔认为在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。这也是同样的道理。

这样,代码最重要的读者就不再是编译器、解释器或者电脑了,而是人。写出的代码能让人快速理解、轻松维护、容易扩展的程序员才是专业的程序员。

当然,为了达到这些目的,仅有编写程序的礼节是不够的,还需要很多相关的知识。这些知识既不属于编程技巧,也不属于算法设计,并且和单元测试或者测试驱动开发这些话题也相对独立。这些知识往往只能在公司无人问津的编程规范中才有所提及。这是我所见的仅把代码可读性作为主题的一本书,而且这本书写得很有趣!

既然是“艺术”,难免会有观点上的多样性。译者本身作为程序员观点更加“极端”一些。然而两位作者见多识广,轻易不会给出极端的建议,如“函数必须要小于10行”或者“注释不可以用于解释代码在做什么而只能解释为什么这样做”等语句很少出现在本书中。相反,作者给出目标以及判断的标准。

翻译书是件费时费力的事情,好在本书恰好涉及我感兴趣的话题。但翻译本书有一点点自相矛盾的地方,因为书中相当的篇幅是在讲如何写出易读的英语。当然这里的“英语”大多数的时候只是指“自然语言”,对于中文同样适用。但鉴于大多数编程语言都是基于英语的(至少到目前为止),而且要求很多程序员用英语来注释,在这种情况下努力学好英语也是必要的。

感谢机械工业出版社的各位编辑帮助我接触和完成这本书的翻译。这本译作基本上可以说是在高铁和飞机上完成的(我此时正在新加坡飞往香港的飞机上)。因此家庭的支持是非常重要的。尤其是我的妻子郑秀雯(是的,新加坡的海关人员也对她的名字感兴趣),她是全书的审校者。还有我“上有的老人”和“下有的小孩”,他们给予我帮助和关怀以及不断前进的动力。

尹哲

------------------------------------------------

本文为《编写可读代码的艺术》译者序,原书名:The Art of Readable Code,作者:Dustin Boswell & Trevor Foucher。

【关于本书】


【关于作者】

Dustin Boswell毕业于加州理工大学,资深软件工程师,在Google就职多年,负责Web爬虫和程序设计相关的工作。他专注于前端、后端,服务器架构、机器学习、大数据、系统和网站等技术领域的研究和实践,经验十分丰富。他现在是MyLikes的软件工程师。

Trevor Foucher资深软件工程师和技术经理,先后在Microsoft和Google工作了数十年,在Microsoft担任软件工程师、技术经理以及安全产品技术主管,在Google从事广告应用开发和搜索基础结构研发相关的工作。

【样章下载】http://download.csdn.net/detail/hzbooks/4375270

【豆瓣收藏】http://book.douban.com/subject/10797189/


分享到:
评论

相关推荐

    配书源码及工具(2012-08-19更新)

    Intel处理器,尤其是x86系列,是个人电脑中最常见的CPU架构,其指令集复杂且功能强大。学习汇编语言,有助于理解计算机底层工作原理,提高程序性能优化能力,尤其在嵌入式系统、操作系统开发、软件逆向工程等领域有...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    C和C++编程心得

    **编程时什么东西最重要----源代码** - **核心地位**: 源代码是程序的核心,包含了所有实现特定功能的逻辑。 - **质量考量**: 高质量的源代码不仅易于阅读和维护,还能够提高程序的整体性能。 **我的程序和一般的...

    Matlab基础教程

    MATLAB代码可以被编译成设备独立的P代码,这意味着编译后的代码不再依赖于原始的MATLAB环境,可以更加方便地在各种平台之间迁移。 MATLAB的开发环境包括MATLAB桌面、命令窗口、历史命令窗口、启动平台、图像窗口、...

    Thinking In Java 中文第三版,完美目录

    最后,压缩包中的"Thinking.In.Java.3rd.pdf"是本书的PDF格式电子版,便于读者在电脑或移动设备上阅读和查阅。这个版本可能是经过精心排版和优化,以提供良好的阅读体验,同时节省纸质资源。无论是初学者还是有经验...

    MTK.rar_mtk_mtk入门_visual c

    Visual C++是一个集成开发环境(IDE),它包括了编译器、调试器以及其他工具,使得开发者可以方便地编写、构建和调试C++代码。 MTK入门教程可能包含以下几个部分: 1. **MTK平台介绍**:首先,教程会介绍MTK平台的...

    arm方面最经典的书籍

    在“ARM_ARM.pdf”这本书中,读者可能会找到上述所有方面的详细解释和实例。而“www.pudn.com.txt”可能包含额外的资料链接或补充阅读材料,以辅助学习。对于初学者,建议先从基础概念开始,逐步深入到更复杂的主题...

    ARM学习手册

    ARM(Advanced RISC Machines)是世界上最广泛使用的处理器架构之一,尤其在嵌入式系统、移动设备如智能手机和平板电脑中占据主导地位。这份手册包含了从基础到高级的多个层次的知识点,对于想要在这一领域提升技能...

    嵌入式+芯片手册相关单词表

    这些语言通常具有丰富的库支持,并且可以通过编译器或解释器转换为机器语言执行。 #### 2. 文件 (File) 在计算机科学中,“文件”是指存储在磁盘或其他非易失性存储介质上的数据集合。文件可以包含文本、图像、音频...

    Windows Debugging Practical Foundation

    在第一章中,内容从理想化计算机到实际的Intel 32位个人电脑环境中的内存和寄存器的介绍开始,进而通过一个名为“Arithmetic”的项目,向读者展示了内存布局、寄存器以及它们与简单算术操作之间的关系。通过一系列的...

    ARM开发教程WORD版

    ARM(Advanced RISC Machines)是当前嵌入式领域最广泛应用的微处理器架构之一,以其低功耗、高性能的特点在移动设备、物联网、工业控制等多个领域占据了主导地位。本教程将带领学习者深入理解ARM体系结构,掌握编程...

    iOS5开发基础教程 Xcode4.2

    1. **Xcode4.2的使用**:Xcode4.2是苹果提供的官方集成开发环境(IDE),它集成了代码编辑器、编译器、调试器等多种工具,使得开发者可以方便地进行iOS应用程序的开发。 2. **Objective-C语言基础**:作为iOS开发的...

    简历:《深度探索Linux操作系统:系统集成和原理解析》学习笔记

    - Bash Shell:Bash是Linux中最常用的命令行解释器,学习如何编写有效的Bash脚本对于日常系统管理和自动化任务至关重要。 - GCC:全称GNU Compiler Collection,是Linux下的主要编译器,用于将源代码编译为可执行...

    CSharp_How_to_Program

    - **高级语言**:如C#,其语法更加贴近自然语言,易于理解和编写,通常需要编译器或解释器将其转换为机器码。 **1.7 C、C++、Visual Basic .NET 和 Java** - **C**:一种通用的编程语言,被广泛用于系统编程。 - *...

    Microsoft MASM 6.1 Programmer's Guide

    8086是Intel推出的一款经典微处理器,广泛应用于早期个人电脑中。 - **Operating Systems**:这部分内容探讨了MASM在不同的操作系统(如MS-DOS和Windows)下的工作方式以及如何针对不同操作系统编写汇编语言程序。 -...

    PC汇编语言 - Paul A. Carter

    - 解释汇编器生成的列表文件中的信息,帮助调试和理解程序。 #### 基本汇编语言 **2.1 整形工作方式** - **2.1.1 整形表示法** - 如何在汇编语言中表示整数。 - **2.1.2 正负号延伸** - 表示负数时,高位如何...

Global site tag (gtag.js) - Google Analytics