`
wodamazi
  • 浏览: 1420346 次
文章分类
社区版块
存档分类
最新评论

计算机优秀图书----《代码大全(第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 名译者之一,我不可能向各位提供电子版。

分享到:
评论

相关推荐

    经典书籍------代码大全

    程序员必看书籍之代码大全 一共有33个章节

    图书-图书系统-图书系统源码-图书管理系统-图书管理系统java代码-基于Web的图书系统设计与实现-图书系统设计与实现-代码

    图书系统源码-图书管理系统-图书管理系统java代码-图书系统设计与实现-基于springboot的图书系统-基于Web的图书系统设计与实现-图书网站-图书网站代码-图书平台-图书平台代码-图书项目-图书项目代码-图书代码 ...

    图书-图书系统-图书系统源码-图书管理系统-图书管理系统java代码-基于ssm的图书系统-图书项目代码-图书代码-java代码

    图书系统-图书系统源码-图书管理系统-图书管理系统java代码-图书系统设计与实现-基于ssm的图书系统-基于Web的图书系统设计与实现-图书网站-图书网站代码-图书平台-图书平台代码-图书项目-图书项目代码-图书代码 ...

    数据库课程设计-图书管理系统-附源代码.docx

    数据库课程设计-图书管理系统-附源代码.docx数据库课程设计-图书管理系统-附源代码.docx数据库课程设计-图书管理系统-附源代码.docx数据库课程设计-图书管理系统-附源代码.docx数据库课程设计-图书管理系统-附源代码...

    毕业设计基于STC12C5A、SIM800C、GPS的汽车防盗报警系统源码.zip

    STC12C5A通过GPS模块获取当前定位信息,如果车辆发生异常震动或车主打来电话(主动请求定位),将通过GSM发送一条定位短信到车主手机,车主点击链接默认打开网页版定位,如果有安装高德地图APP将在APP中打开并展示汽车当前位置 GPS模块可以使用多家的GPS模块,需要注意的是,当前程序对应的是GPS北斗双模芯片,故只解析 GNRMC数据,如果你使用GPS芯片则应改为GPRMC数据即可。 系统在初始化的时候会持续短鸣,每初始化成功一部分后将长鸣一声,如果持续短鸣很久(超过20分钟),建议通过串口助手查看系统输出的调试信息,系统串口默认输出从初始化开始的所有运行状态信息。 不过更建议你使用SIM868模块,集成GPS.GSM.GPRS,使用更加方便

    基于tensorflow2.x卷积神经网络字符型验证码识别.zip

    基于tensorflow2.x卷积神经网络字符型验证码识别 卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。 全连接层(Fully Connected Layer): 在CNN的末端,通常会有几层全连接层(也称为密集层或线性层)。这些层中的每个神经元都与前一层的所有神经元连接。 全连接层通常用于对提取的特征进行分类或回归。 训练过程: CNN的训练过程与其他深度学习模型类似,通过反向传播算法和梯度下降(或其变种)来优化网络参数(如滤波器权重和偏置)。 训练数据通常被分为多个批次(mini-batches),并在每个批次上迭代更新网络参数。 应用: CNN在计算机视觉领域有着广泛的应用,包括图像分类、目标检测、图像分割、人脸识别等。 它们也已被扩展到处理其他类型的数据,如文本(通过卷积一维序列)和音频(通过卷积时间序列)。 随着深度学习技术的发展,卷积神经网络的结构和设计也在不断演变,出现了许多新的变体和改进,如残差网络(ResNet)、深度卷积生成对抗网络(DCGAN)等。

    【三维装箱】遗传和模拟退火算法求解三维装箱优化问题【含Matlab源码 031期】.zip

    【三维装箱】遗传和模拟退火算法求解三维装箱优化问题【含Matlab源码 031期】.zip

    自己编写的python 程序计算cpk/ppk

    cpk&ppk python 小程序,品友点评

    基于Springboot开发的分布式抽奖系统.zip

    基于springboot的java毕业&课程设计

    课设毕设基于SpringBoot+Vue的影城管理系统 LW+PPT+源码可运行.zip

    课设毕设基于SpringBoot+Vue的影城管理系统 LW+PPT+源码可运行.zip

    MC教育版(免登录版)

    MC教育版(免登录版)

    农作物叶片病害分类和分割数据集【数据集+标签】

    包含13993张数据和对应的13993张mask分割模版,数据集用不同目录保存,也可以用作分类数据集 类别包含:桃子、辣椒、覆盆子、大豆、南瓜、草莓

    基于vue+springboot二手交易网站.zip

    基于springboot的java毕业&课程设计

    【三维装箱】遗传算法求解三维装箱优化问题【含Matlab源码 3408期】.zip

    【三维装箱】遗传算法求解三维装箱优化问题【含Matlab源码 3408期】.zip

    基于javaspring 开发框架的培训教程 TP1.zip

    基于javaspring 开发框架的培训教程 TP1.zip

    信号和系统 MATLAB 代码:探索信号生成、系统建模、傅立叶分析、滤波器设计、采样和控制系统仿真.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    医院网上预约系统设计与开发/毕业设计

    医院网上预约系统设计与开发/毕业设计 JSP基于SSM网上医院预约挂号系统 科室信息: 科室id,科室名称,科室介绍,成立日期,负责人 医生信息: 医生工号,登录密码,所在科室,医生姓名,性别,医生照片,出生日期,医生职位,工作经验,联系方式,擅长,医生介绍 病人信息: 病人id,医生,病人姓名,性别,身份证号,联系电话,病人病例,登记时间 预约信息: 预约id,预约用户,预约医生,预约日期,时段,联系电话,下单时间,处理状态,医生回复 新闻信息: 新闻id,新闻标题,新闻图片,新闻内容,新闻日期,新闻来源 留言: 留言id,留言标题,留言内容,留言人,留言时间,管理回复,回复时间 用户: 用户名,登录密码,姓名,性别,出生日期,用户照片,联系电话,邮箱,家庭地址,注册时间

    企业数据治理之数据质量治理方案.pptx

    企业数据治理之数据质量治理方案

    MySQL8.4.0 LTS(mysql-8.4.0-10.fc38.x86-64.rpm-bundle.tar)

    MySQL8.4.0 LTS(mysql-8.4.0-10.fc38.x86_64.rpm-bundle.tar)适用于Linux Fedora 38 (x86, 64-bit)

    1659 jsp游乐园管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目源码

    一、源码特点 java 医疗数据管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了数据模型进行区块链设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。 二、功能介绍 如博客中介绍 三、注意事项 1、管理员账号:admin 密码:admin 数据库配置文件DBO.java ,权限包括管理员,用户 2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。 3、数据库文件名是jspyly 系统名称yly 4、地址:http://127.0.0.1:8080/yly/qt/index.jsp

Global site tag (gtag.js) - Google Analytics