`
izuoyan
  • 浏览: 9221471 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CC2e:《代码大全(第2版)》集萃

阅读更多

《代码大全(第 2 版)》是一本写得很有意思的书,既有生动的比喻,偶尔也有夸张的表达,另外作者还时不时开开玩笑,读起来一点也不枯燥。以下是从中摘录的一些有趣的话。这个版本略有删节,等书出版之后,我会扩充这里的内容。

  • 首先为人编写程序,其次才是为机器。
  • 傻子都会写让计算机理解的代码;而优秀程序员写的是人能看懂的代码。(Martin Fowler)
  • 好习惯很重要,因为程序员做的大部分事情都是无意识完成的。
  • goto的标号应完全大写并对齐行首,还应包含编程者的名字、家庭电话号码和信用卡号。(Abdul Nizar)
  • 编码时要把维护你程序的人想象成知道你住址的有严重暴力倾向的精神病人。(佚名)
  • 有两种设计软件的方式:一种方法是让设计非常简单,看上去明显没有缺陷;另一种方法是让设计非常复杂,看上去没有明显的缺陷。(C. A. R Hoare)
  • 忽略编译器所提示的程序错误太过草率,关掉编译器的警告功能则无异于掩耳盗铃。关掉编译器的警告功能仅仅意味着你看不到错误,并不表示这些错误就此消失,正如同小孩闭上眼睛并不能让面前的父母从此消失一样。
  • 想通过更多测试来改善软件的质量,就跟妄想通过更频繁的称体重来减肥一样。(编按:作者并不是说测试无用,而是说不能仅仅依靠测试。)
  • 心理取向对调试有什么影响?首先,它证明了养成良好的编程习惯的重要性。规范的格式、恰当的注释、良好的变量和子程序命名方式,以及其他编程风格要素都有助于构建编程的良好基础。在这样的基础之上,可能发生的错误将因为与众不同而变得格外引人注目。
  • 交互式调试器极好地代表了那些程序员们并不需要的调试器——它鼓励程序员采用随机试验查找错误的方法,而不是对程序进行系统的分析。同时,这样的工具也给了那些几乎没有资格从事细致的程序设计的人滥竽充数的机会。(Harlan Mills)
  • 聪明不像是个人性格的一个方面,也确实不是。碰巧的是,高智商与优秀程序员之间并无太密切的联系。
  • 懒惰这种品性能促使你努力减少整体花销;使你编写节省劳力的程序,别人也会觉得这些程序有用;使你编些说明,免得人们老是问你。(Larry Wall)
  • 你可能某天从上午8点工作到下午2点,就感到累得不行了。但你还是坚持下来,又从下午2点拼命干到5点。之后的一周时间,你却在修改这三小时里写出来的东西。
  • 有效编程中最重要的工作是思考,而人思考时通常不会看上去很忙。如果和我共事的程序员总是忙个不停,我会认为他并非优秀的程序员,因为他没用最有价值的工具——自己的脑袋。
  • “我们需要有五年以上C语言编程经验的程序员”就是愚蠢的说法。如果程序员过了前一两年还没有学好C语言,那么再加三年也没什么意义。
  • 调试代码的难度是首次编写这些代码的两倍。因此,如果你在编写代码的时候就已经发挥了全部聪明才智,那么按照常理,你将无法凭借自己的智慧去调试这些代码。(Brian Kernighan)
  • “这个循环好像有问题。可能是一个off-by-one错误。让我先来写一个-1试试。哦,这样不行。那么我就写个+1试试。啊哈,看来程序正常工作了。我可以宣布问题搞定了。”——随机地修改代码,直到你的代码看起来能工作,这就是所谓的“voodoo programming(巫毒编程)”。
  • 每个团队里都也许有这样一个程序员,他总会遇到无穷的问题:不听话的机器,奇怪的编译器错误,月圆时才会出现的编程语言的隐藏缺陷,失效的数据,忘记做的重要改动,一个不能正常保存程序的疯狂的编辑器——你怎么描述这种行为好呢。这就是“迷信式编程(programming by superstition)”。

最后谈一点,数学对编程很重要吗?纵观《代码大全》,作者谈了影响软件质量的方方面面,却*没有*说过程序员的数学功底是一个重要的影响因素。对程序员而言,掌握数学知识也不是必备技能。就我看来,数学不是决定性因素,甚至算不上重要因素。我没有听说过哪个软件项目因为开发人员数学功底不好而失败,或者因为在数学方面的不足使得质量低下、bug 丛生。

首先,数学是一门很大的学科,有非常多的分支。如果认为它很重要,必需列出到底其中哪些知识会影响软件开发,这样才有指导意义。我个人感觉,项目开发直接用到的数学知识很少。而且如果真的要用到,涉及的代码比例也不会很大,那么整个项目组里有一两个人(不一定是程序员)精通就行了(借助封装+抽象,让它是个黑盒子)。

与其强调抽象的“数学知识”,不如强调具体的“领域知识”。有些领域知识会涉及一些数学,比如我熟悉的有数值计算、电路分析、图像处理、信号处理等。不过这些数学知识都是针对这个领域的,而且经过领域知识的封装。有些领域几乎不涉及数学(前提是你不要把所有与思考相关的都归入“数学”),比如数字电路设计、体育比赛记分、以及很多常见的软件项目(考勤、系统工具、网站)。这些领域也都有各自的领域知识,不掌握这些知识肯定没法写软件,不过跟数学好像没什么关系。

总而言之,相比起程序员的其他职业素养(求知欲、诚实、交流能力、懒惰、良好的习惯等等),“数学知识”实在排不上号。

ps. 我是这本书的 4 名译者之一,我不可能向各位提供电子版。

分享到:
评论

相关推荐

    代码大全 中文第2版

    中文索引,现供您免费下载:下载地址:http://www.cc2e.com.cn/resoure/cc2index.rar在线浏览地址:http://www.cc2e.com.cn/resoure/cc2index.pdf ===================详细介绍见:...

    MSP430(5438)驱动 CC1100E 的DEMO代码和使用文档

    **MSP430(5438)驱动 CC1100E 的DEMO代码与使用文档详解** 本文将详细介绍如何使用TI公司的MSP430 5438微控制器来驱动CC1100E无线收发器,并且提供关于相关DEMO代码和使用文档的理解。MSP430系列是低功耗、高性能...

    TI无线模块 cc113l及cc115l测试代码及官方测试源码

    压缩包中的"5083e26a894f65c11f33a13deecea5cd.rar"可能是包含上述源码和相关文档的压缩文件,而"swrc219c"可能是一个特定版本的软件开发套件(SDK)或用户手册,提供了详细的API参考、示例代码和使用指南。...

    代码大全PDF(完整版)

    在这个压缩包中,用户可以找到7个PDF文件,其中提及的是"cc31-33.pdf",这部分内容可能涉及《代码大全》的第三十一章到第三十三章。 首先,我们来讨论一下《代码大全》这本书的核心知识点: 1. **编程规范**:书中...

    cc2530睡眠定时器代码

    总的来说,"cc2530睡眠定时器代码"是一个关于如何有效利用CC2530微控制器低功耗特性的实践示例,对于开发物联网或无线设备的工程师来说,深入理解并掌握这部分知识非常重要。通过IAR提供的开发环境,开发者可以方便...

    CC1100程序代码,配置代码C51

    《CC1100程序代码与C51配置详解》 在无线通信领域,CC1100是一款广泛应用的超低功耗、高性价比的单芯片射频收发器,常用于ISM(工业、科学、医疗)频段的无线通信系统。本资料包主要包含了针对CC1100的程序代码以及...

    CC1110源代码(含DMA串口示例代码)

    不仅限于此,而是CC1110下的源代码大全: "cc1110_cc2510_Basic Software_Examples ", 包含大家关心的DMA的串口示例: Filename: UART_CC111x_CC251x_DMA.c Description: This example sends/receives data on UART...

    网页颜色代码大全

    网页颜色代码大全,颜色辞典,颜色代码表,网页颜色代码选择器

    基于CC2530的温湿度传感器代码

    【标题】"基于CC2530的温湿度传感器代码" 涉及到的核心技术是使用CC2530微控制器与DHT11温湿度传感器进行数据采集和通信。CC2530是一款由Texas Instruments(TI)公司生产的微控制器,特别适合于无线传感器网络应用...

    CC1100 与C51 代码

    在C51代码中,我们需要编写相应的SPI或I2C驱动程序来实现与CC1100的数据交换。 四、CC1100初始化 初始化CC1100涉及设置多个寄存器,包括频率设定、调制方式、接收灵敏度、滤波器参数等。这些设置通常通过发送一系列...

    基于CC2530的光敏传感器代码

    在IAR Embedded Workbench开发环境中,可以编写和调试C/C++代码,为CC2530提供强大的软件支持。 光敏传感器通常采用光敏电阻或光电池等元件,其工作原理是利用材料对光的敏感性,当光线照射到传感器时,电阻值会...

    完整详细图文版 代码管理工具SVN、CVS、CC、VSS、GIT详细使用说明书(最终版本)Eclipse相关(共94页).pdf

    本文将详细介绍五种常用的代码管理工具:SVN (Subversion)、CVS (Concurrent Versions System)、CC (ClearCase)、VSS (Visual SourceSafe) 和 GIT,以及如何在 Eclipse 中集成这些工具进行日常开发工作。 ### 1. ...

    C51_cc1101参考代码_

    2. **命令序列**:CC1101的通信需要遵循特定的命令序列,例如SPI接口的片选、写操作等。在代码中,会看到如何通过C51的IO口模拟SPI通信协议,发送命令序列。 3. **数据传输**:在C51控制器与CC1101之间,数据的发送...

    CC1100E 驱动源

    2. **寄存器配置**:CC1100E有多个可编程寄存器,如IOCFG2至IOCFG0用于配置输入/输出引脚,FSCTRL用于设置频率合成器,FREQ2至FREQ0用于设定工作频率,以及GDO0CFG至GDO2CFG用于配置GPIO引脚功能等。驱动源码需要...

    IAREW8051基于ZigBee802.15.4的CC2430CC2431的精简版协议栈全部C51源代码

    《IAREW8051基于ZigBee802.15.4的CC2430/CC2431精简版协议栈C51源代码详解》 在物联网技术日益发展的今天,ZigBee作为低功耗、短距离无线通信标准,被广泛应用于智能家居、工业控制等领域。IAREW8051是一款适用于微...

    CC1100E 中文资料

    - CC1100E在代码、封装和外引脚方面与CC1101和CC1100 RF收发器兼容。 - 支持互补频带,可用于全球最常用的开放式低于1GHz频率的RF设计。 #### 集成调制解调器 CC1100E集成了一个高度可配置的基带调制解调器,支持...

    CC3D飞控资料(代码,原理图)

    《CC3D飞控:深度解析代码与硬件设计》 CC3D(Cleanflight Configurable Open Pilot)是一款广泛应用在无人机领域的开源飞行控制器。它以其高度的可配置性和强大的功能,吸引了众多无人机爱好者和开发者。本资料...

    CC2430Zigbee源代码

    《CC2430与Zigbee:源代码解析与应用探索》 CC2430是一款由Texas Instruments(TI)公司推出的微控制器,专为无线传感器网络和Zigbee通信设计。它集成了微处理器、射频收发器、模拟前端以及闪存等组件,使得在低...

    【最新版】 IEST STD-CC1246E 2013.pdf

    2. IEST STD-CC1246E 是污染控制领域的一份标准文件。 知识点解释:IEST STD-CC1246E是污染控制领域的一份标准文件,旨在规范和指导污染控制相关的技术和工程实践。 3. 该标准文件的主要内容是污染控制的产品洁净...

    绝对强的cc1000代码

    【标题】:“绝对强的cc1000代码”指的是基于CC1000无线射频芯片的程序代码,这是一套专为控制和通信该芯片而设计的软件。CC1000是由Texas Instruments(德州仪器)制造的一款低功耗、高性能的无线收发器,常用于ISM...

Global site tag (gtag.js) - Google Analytics