《Exceptional C++ Style》译序

by 刘未鹏

 

逍遥派武功讲究轻灵飘逸,闲雅清隽,丁春秋和虚竹这一交上手,但见一个童颜白发,宛如神仙,一个僧袖飘飘,冷若御风。两人都是一沾即走,当真便似一对花间蝴蝶,蹁跹不定,于这“逍遥”二字发挥到了淋漓尽致。旁观群雄于这逍遥派的武功大都从未见过,一个个看得心旷神怡,均想:“这二人招招凶险,攻向敌人要害,偏生姿式却如此优雅美观,直如舞蹈。这般举重若轻、潇洒如意的掌法,我可从来没见过...”

—— 金庸 《天龙八部》

金庸小说中描绘的逍遥派武功讲究的是飘逸灵动,然则绝非片面追求招式漂亮,招招看起来都优雅美观,但招招都攻往要害。

写代码也应如此。

毫无疑问,代码的目的是实现既定的功能,所以实用论者可能会说代码只需实现既定功能即可,无需费时费事去搞那么多周折弄那么多形式。但问题是,如果代码写完了就永远不用管它就好了,如果的确如此的话,这番论断倒是言之有理的。然而事实是,代码的维护占用了软件开发中的大部分乃至绝大部分时间和人力。譬如说做外包业务的公司大部分时间都是在维护代码,或者说改代码,而不是原生开发,这便意味着买来的代码的形式“漂亮”与否直接关系到一个项目的开销。另外,一般的公司,就算是作坊公司,日积月累,也一定会有自己的代码库,自己的遗留代码,只要他们想节省开销,复用以前写成的代码是必由之路,因此这里代码的可读性,代码结构的可扩展性等等就变得异常重要了,有过一些经验的程序员都会说维护别人(甚至自己)的代码是最痛苦的事情。可见代码的“形式”构成了软件质量的一个重要部分。无论如何,就像政治书上听得我们耳朵都起茧子的那句话所言:“内容决定形式,但形式对内容也有反作用”。

然而徒有其表的代码也只是个花架子,没有真材实料,再花哨的形式也无济于事。软件归根到底要的还是功能。这就好比练武,光有花拳绣腿而没有扎实的内功是万万成不了气候的。

那么,在软件开发领域,这两者到底矛不矛盾呢?答案是根本不矛盾。之所以我们平时无法鱼和熊掌兼得,一方面固然是由于deadline的缘故,另一方面也与编码时的方法学有一定关系。

本书讨论的正是后者。

正是由于C++是一门非常自由的语言,因此C++编码的“形式”才变得异常重要,以至于一些大公司都规定了各自的编码标准。本书正是着眼于C++编码风格的一本书,但这里所谓的编码风格并非指命名风格、注释风格之类的浅显的东西,而是指在某些特定的问题领域所采取的编码方式(或“形式”)。在C++中往往有若干条道路都能通往同一个终点,问题是选择哪条道路才是最具有洞见性的,最能达到形式和内容的统一,这一点很关键。

为此,本书的40个条款围绕C++日常编码中的种种问题展开讨论,详细考察各解决方案之间的优劣,最终给出权衡之下最为妥帖的方案并将其提炼为一条条的编码方针。

武侠小说的读者大多数都希望看到招式漂亮而又非常厉害的武功,觉着很过瘾。殊不知维护代码的程序员何尝不希望看到写得漂亮而又有实在功能的代码呢?

相信你在Sutter的书中能够找到一些答案。

最后,感谢老朋友谢轩和罗翼,跟他们讨论问题是我的快乐,谢轩(《Symbian OS Explained》译者)提供了第34章(原样章)的译稿、罗翼则无偿帮我初译了第六部分,他们的热情给了我莫大的帮助,他们的技术和文笔也让我获益颇多。

感谢父母一直以来的支持,令我不敢懈怠。

刘未鹏

05年10月

于南京

转载于:https://my.oschina.net/abcijkxyz/blog/720620

《Exceptional C++ Style》译序[已出版]相关推荐

  1. 《Imperfect C++》译序[已出版]

    <Imperfect C++>译序                                                                              ...

  2. c++学习书籍推荐《Exceptional C++ Style》下载

    百度云及其他网盘下载地址:点我 编辑推荐 软件"风格"所要讨论的主题是如何在开销与功能之间.优雅与可维护性之间.灵活.性与过分灵活之间寻找完美的平街点.在本书中,著名的C++大师H ...

  3. 《Android/OPhone 开发完全讲义》已出版,现提供源代码下载

    <Android/OPhone 开发完全讲义>已出版. 购买: 互动网(China-pub) 样章下载 现将本书源代码完全公开   Android-OPhone-src.zip 目录 前言 ...

  4. 论文浅尝 | Data Intelligence 已出版的知识图谱主题论文

    本文转载自公众号:DI数据智能.   知识图谱被称为人工智能的基石,它的前身是语义网,由谷歌在2012年率先提出,用于改善自身的搜索业务.Data Intelligence执行主编.东南大学计算机科学 ...

  5. 新书《微信企业号开发揭秘》已出版,全书采用WeChatEnterprise框架开发

            新书<微信企业号开发揭秘>已出版,全书基于源码与API逐步讲解,采用WeChatEnterprise框架开发 纸质书购买地址:  天猫    京东    当当    亚马逊 ...

  6. SpringBoot+Vue讲解系列介绍(本专辑实体书已出版)

    2021年8月更新:本专辑已出版实体书,详见文章最后. 最近一直在开发Spring Boot及Spring Cloud前后端分离的分布式项目,打算把平时记录在本地的项目代码.笔记及疑难问题等整理汇集成 ...

  7. python深度学习include框架_搞事情。《用Python实现深度学习框架》已出版上架。...

    我和 @张觉非 合作的<用Python实现深度学习框架>一书已经由人民邮电出版社出版上市了.写作本书的缘由,是2017年11月我加入了360,开始负责以机器学习平台为中心的AI技术设施的研 ...

  8. 我的新书:《精通Excel公式、函数与图表》已出版上市

    由人民邮电出版 社出版的<精通Excel公式 .函数 与图表 >这本书本周已向全国开始发货,预计这两周就会在全国各地的书店上架销售. 本书将内容分为4部分共20章,详细讲解了Excel所包 ...

  9. 《Word排版之道》已出版上市

    前几天出版社的编辑告诉我,<Word排版之道>已经出版了.与此同时,编辑朋友还给我带来了另一个好消息:台湾出版社也要引进<Word排版之道>这本书,这个消息确实令我很高兴.我期 ...

最新文章

  1. docker logstash_用于监视Kubernetes和Docker的六大开源工具
  2. 数组-合并两个有序数组(双指针,从后往前)
  3. GUI_PICTURE以及context_menu学习笔记
  4. 设计模式----单例模式实例
  5. java 使用vsphere 创建虚拟机‘_Java数组的创建及使用
  6. mysql的area_GitHub - nszm/china_area_mysql: 中国5级行政区域mysql库
  7. 解决webpack4版本在打包时候出现Cannot read property ‘bindings‘ of null 或 Cannot find module ‘@babel/core‘问题
  8. C# servicestack.redis 互通 java jedis
  9. 网络安全系列之二十五 配置SSH
  10. 算法: 删除链表中的数据Remove Linked List Elements
  11. 做数据迁移差点累死的程序员有话要说----数据迁移经验分享
  12. 方方格子授权码_助力上分!灌篮高手正版授权手游礼包码攻略及防守技巧汇总...
  13. 基于Android Studio和Gradle 的小米便签配置和安装
  14. 调色板程序c语言,用C语言开发NES游戏(CC65)05、调色板
  15. SQL去重的三种方法汇总​
  16. 解决echarts饼图label显示不全的问题
  17. 1700802088 韩晓忠
  18. 反向链接-反向解释和扩展
  19. 公司股权分配协议 (2)
  20. java基于Android校园购物商城小超市

热门文章

  1. stdin和STDIN_FILENO的区别
  2. OpenOCD学习笔记 6-如何使用FTDI芯片作为SWD或JTAG调试器
  3. 深度学习高分辨率遥感影像语义分割
  4. 数据库 树形数据结构数据库的设计
  5. python---os模块使用详解
  6. 管理软件Jira Service Desk使用教程之如何将Jira Cloud用于Slack?
  7. STM32F103C8T6驱动舵机SG90(5V)
  8. 【小程序源码】谁是卧底线下发牌器微信小程序源码下载,强大的自定义功能
  9. scrcpy——Android投屏神器
  10. matlab作图背景黑色,【matlab】版本2014a 修改背景为酷炫暗黑色