书评 – 程序员经典读物(1)

早几天,笼统地就经典感慨了一番,接着来个逐一点评,算是有始有终了。经典是用来阅读而非膜拜的道理,自然是明白的,虽然我是属于比较推崇经典那一类的。阅读大致就是一个和作者交流的过程,有兴致时无妨感慨点评一番,算是对作者的一种致敬吧。

1 Steve McConnell - Code Complete: A Practical Handbook of Software Construction 
  感言:二获Jolt Awards,算得上众望所归了,印象中,国内书商有炒作过第二版。作者主持过SWEBOK工作,所以写起书来也明显带有百科全书式的味道。我对SWEBOK一类百科全书式的东西,一般是不太感冒的,但这本书是个例外。作者学识渊博,却并无丝毫学究气,文笔洗练朴实,众多话题娓娓道来,处处透着一股举重若轻的味道。并不太关注各编程语言之趣向,直面编程之实质性内容。Coding之外,软件开发其它过程均有所涉及。有闲时,寻一寂静处,一边品茶,一边就着此书做些梳理功夫,慢慢地自然而然可收洗髓伐毛之功了。如此一来,也就不太适合初学者了。


2 Elisabeth Freeman, etc.  -  Head First Design Patterns
  感言:二名作者属于不怎么出名那一类的江湖高人,后来还整了一本HTML的书,影响就远远无法和这一本相比了。为这本书作序的一堆高人中,前二个就是GOF之二,GOF作为Design Pattern之父,当时有一位已仙游走了。我相信读过第一章后对Strategy Pattern以及OO Principle仍然觉得没有啥感觉的,应该是不太可能发生的事情。如果有人如此不幸,我估计有二种可能,第一可能是英文太糟糕了,第二可能是买错书了。此书并无甚原创性,属于阐释Design Pattern一类的著作,但是写的太精彩了,不仅绝顶高手好评如潮,更难得的是由初级向高级突破进阶时尤其给力。


3 Steve McConnell  - Rapid Development 
  感言:作者是排名第一那本作者同一人,的确是太有才了。如前面提到的,作者主持过SWEBOK工作,比较有意思的是,这本讲软件开发过程的著作有很浓的敏捷开发味道,我一直很好奇,一位软件工程权威组织的专家居然整了一本富有敏捷精神的书?而且好几年后,Agile Development这个词才出现。


4 Erich Gamma,etc.  - Design Patterns: Elements of Reusable Object-Oriented Software 
  感言:此书在编程语言之外为OOP开辟了一片独立的天空, 影响之深远,江湖上可谓无人不知。OO修炼过程中,知易行难的感慨向来颇多。如果把OO理念比作九阴真经,那Design Pattern就是降龙十八掌了。九阴真经太玄妙,降龙十八掌却是一招一式清清楚楚毫不含糊,一个个Design Pattern恰如降龙十八掌之各掌, 妙用各有不同,却处处体现同一个OO之理念。由此,Design Pattern打开了践行OO的方便之门。原著用的是C++,但一招一式无疑都是跨越语言的。另外,原著还采用了早期的UML,3年后,UML正式成为标准。


5 Bruce Schneier  - Applied Cryptography: Protocols, Algorithms, and Source Code (2nd Edition) 
  感言:未读过。


6 Robert C. Martin  - Agile Software Development: Principles, Patterns and Practices 
  感言:作者是OO领域的大师,敏捷开发先驱之一,XP鼓吹者。书名有一定误导,除了敏捷开发之外,精华其实是OO和TDD践行部分。实战性强,而且所举例子均是很常规的企业应用。此书先出的Java版,后出的C#版。印象中,作者并未讳言其早期对XP的疑惑,而附录中竟转载了一个不太出名的高人关于Coding就是Design的高论,对传统软件工程阵营的冲击无疑是颠覆性的,即使在敏捷社区内部,这个观点也是很激进的。一个早已名扬天下的大师,在根本立场上居然发生了180度的大逆转,令人感慨的已经不是大师个人的勇气,而是软件行业仍然是多么年轻。


7 Joel Spolsky  - Joel on Software 
  感言:典型地美式实用主义文风,擅长铺垫,于平淡中自然演绎出自己的观点或感受。不是一本谈具体Coding的技术书,也不是系统谈Process的,类似于专栏文章的选集。印象中,作者本是技术高手,曾主持过早期MS Excel VBA项目。近几年比较火的技术社区stackoverflow.com,作者是主要策划人之一。


8 Tom DeMarco, Timothy Lister  - Peopleware: Productive Projects and Teams (2nd Edition) 
  感言: 就好像是推崇所谓人本主义管理那一套的专家,无意中发现了软件开发领域种种愚蠢+恶心的搞法,激愤之下忍不住出手相助,于是整出了这一类书。早些年读的时候,着实觉得很感动,现在我觉得这类书的作用主要就二个,一是为媒体提供了一些可以没完没了炒下去的话题,二是让聪明的管理者变得更虚伪或更开明,让自以为是的管理者变得更……。


9 Frederick P. Brooks  - The Mythical Man-Month, Anniversary Edition (2nd Edition) 
  感言:作者是Turing Award获得着,不过这绝不是这本经典长盛不衰的原因。Intel的摩尔定律都已经失效了,而这本经典里面那个著名的断言依然继续着它淡淡的叹息。所谓“朝闻道,夕死可矣”,如果一生只能读一本软件开发方面的书,我愿意选这一本。我个人认为应该排第一。


10 Martin Fowler  - Refactoring: Improving the Design of Existing Code 
  感言:Martin Fowler的书,相信很多人和我一样,每本必读。这一本是OO实践中从初级向高级突破的必读经典。早读早受益。


11 Mike Cohn  - Agile Estimating and Planning 
  感言:未读过。


12 Alistair Cockburn  - Writing Effective Use Cases 
  感言:作者是敏捷开发先驱之一,思想富有原创性,哲理性很强。不过这本书实在看不出来,我一直奇怪这本书为何如此出名?有意思的是,如今Use Case风头已经不如User Story了。


13 Bertrand Meyer  - Object-Oriented Software Construction (2nd Edition) 
  感言:作者是OO先驱之一,大师级学者。此书属于OO早期的经典,影响深远,学术性较强。由于和OO实战有一定距离,如果不是特别喜欢追溯思想源头,建议不要浪费时间,因为可以替代它的更贴近实战的经典不少。如这个清单里面Robert Martin和Martin Fowler的著作。


14 Steve McConnell  - Software Estimation: Demystifying the Black Art 
  感言:作者是排名第一那本作者同一人,的确是太有才了。未读过。


15 Mike Cohn  - User Stories Applied: For Agile Software Development 
  感言:未读过。


16 Donald E. Knuth  - The Art of Computer Programming, The, Volumes 1-3 Boxed Set (2nd Edition) 
  感言:被媒体反复炒过。作者是大师级计算机科学家,也是Turing Award获得者。尝试读过,实在读不下去,多少有点后悔年轻时没多下点功夫。


17 Martin Fowler  - Patterns of Enterprise Application Architecture 
  感言:我个人认为这是企业应用领域的圣经。如果是从事企业应用开发的,建议读至少3遍,如果是架构师,至少6遍。并不是暗示难懂,恰恰相反文笔朴实自然,犹如清澈小溪一般通透,主要是内容太丰富了。


18 Jeffrey Friedl  - Mastering Regular Expressions 
  感言:未读过。


19 Andrew Hunt, David Thomas  - The Pragmatic Programmer: From Journeyman to Master 
  感言:二位作者均是敏捷先驱。典型的实用主义至上视角,文笔很好,基本上不提具体的代码,均是由实战中得来的真知灼见。年头久了点,但可读性仍然很好。The Pragmatic Programmer作为一个系列,也出了不少精品。


20 Karl E. Wiegers  - Software Requirements (2nd Edition) 
  感言:读过部分章节,坦白说,没有啥感觉。有一点可以肯定的是,很多需求模板,特别是Use Case模板,被广泛借用。

 

如果坚持读到这里,估计会有人和我一样对上面的排名有不同意见。这个排名并不是来自某个特权威的机构,而是来自一个名不见经传的博主http://www.noop.nl/2008/06/top-100-best-software-engineering-books-ever.html,我借用一下不是为了偷懒,而是觉得他的工作干得很漂亮,唯一的遗憾是没有找到最新的更新。

转载于:https://www.cnblogs.com/xumaojun/p/8541612.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu安装环境软件全文档

1,安装apace2: sudo apt-get install apache2 2谷歌浏览器的安装:sudo apt-get install chromium-browser-dbg 3,国际版QQ下载:http://pan.baidu.com/s/1nt1Nu6P 根据自己的安装的32位或者是64位来下载。 安装的时候按照文件顺序安装就好了…

线性代数(二)

2 解线性方程组 1 Ax b的列图像实质是A的列向量有各种线性组合,b为其中的一种组合结果。 2 Ax b可以写为Axx1a1...xnanbAx x_1a_1...x_na_n bAxx1​a1​...xn​an​b,其中a1,a2...ana_1,a_2...a_na1​,a2​...an​为A中的列向量。 3 当Ax 0时&#…

xor方程组消元 UVA 11542 Square

题目传送门 题意:给n个数,选择一些数字乘积为平方数的选择方案数。训练指南题目。 分析:每一个数字分解质因数。比如4, 6, 10, 15,, , , , 令,表示选择第i个数字,那么&am…

从汇编去分析线程安全

首先要知道什么是线程安全? 当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。…

前端面试问题汇总

面试技术问题: Null 与 undefined区别?l NULL的类型是object;undefined的类型是undefined类型,一个变量如果没有初始化的话就是undefined。 l null 表示此处数值为空,undefined表示此处应该有值,但是确…

深度学习修炼(八)——经典卷积网络

文章目录8 经典卷积网络8.1 LeNet模型8.2 Alexnet8.3 VGG8.4 ResNet8.5 感受野8 经典卷积网络 在前面一讲,我们谈论了关于卷积神经网络的诸多细节。综合来讲,卷积神经网络就是含卷积层的网络。在本讲中,我们将会根据卷积神经网络发展的历史&…

Lua语法基础(1)---简介、基本数据类型、表达式

我觉得我已经陷入了一个坑内。因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制。先放一放吧。首先,来回顾一下Lua的语法基础。 第一 起点 在Lua中具有一个Chunks的概念…

视觉中的经典图像特征小结(一): 颜色直方图, HOG, LBP

[普兒原创, 如有错误和纰漏欢迎指正. 更新中...] 1. 颜色直方图 颜色空间在本质上是定义在某种坐标系统下的子空间,空间中的每一个坐标表示一种不同的颜色。颜色空间的目的在于给出某种颜色标准,使得不同的设备和用途都能对颜色有一致的描述。这里主要介…

C++从0到1的入门级教学(七)——指针

文章目录7 指针7.1 指针的基本概念7.2 指针变量的定义和使用7.3 指针所占内存空间7.4 空指针7.5 野指针7.6 void*指针7.7 指向指针的指针7.8 const修饰指针7.9 指针和数组7.10 指针和函数7 指针 指针是指向另外一种类型的符合类型,和引用类似,指针也实现…

urllib库的使用

#使用urllib库,将langlang2017全站网页请求并保存 #1、引入模块 from urllib import request from urllib import error#2、操作 #(1)创建url base_url "http://www.langlang2017.com/route.html"try:# (2)…

一个显示日期的工具类

一个显示日期的工具类 .h文件 #import <Foundation/Foundation.h>interface TimeUtil : NSObject (NSString*)getTimeStr1:(long long)time;(NSString*) getTimeStrStyle1:(long long)time;(NSString*)getTimeStr1Short:(long long)time;(NSString*) getTimeStrStyle2:(l…

【leetcode】Median of Two Sorted Arrays

题目简述&#xff1a; There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). 解题思路&#xff1a; 这本身是个很简单的题目&#xff0c;但是题目要求他的复…

C++从0到1的入门级教学(五)——字符串、向量和数组

文章目录5 字符串、向量和数组5.1 命名空间5.2 标准库string5.2.1 定义和初始化string对象5.2.2 string对象上的操作5.2.2.1 读取string对象5.2.2.2 风格5.2.2.3 使用getline读取一整行5.2.2.4 empty和size操作5.2.2.5 size_type类型5.2.2.6 比较string对象5.2.2.7 string对象的…

媒体格式分析之flv -- 基于FFMPEG

本来是应该先写一个媒体文件格式的简单讲解的&#xff0c;还没来得及写&#xff0c;以后再写。今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv. FLV 是FLASH VIDEO的简称&#xff0c;FLV流媒体格式是随着Flash MX的推出发展而来的视频格式…

Linux命令整合之find

描述Linux下find命令在目录结构中搜索文件&#xff0c;并执行指定的操作。用法find 路径 -命令参数 [输出形式]参数说明路径&#xff1a;告诉find在哪儿去找你要的东西&#xff0c;命令参数&#xff1a;参数很多下面会说到输出形式&#xff1a;输出形式很多&#xff0c;-print,…

[HEOI2015]兔子与樱花

题目描述 很久很久之前&#xff0c;森林里住着一群兔子。有一天&#xff0c;兔子们突然决定要去看樱花。兔子们所在森林里的樱花树很特殊。樱花树由n个树枝分叉点组成&#xff0c;编号从0到n-1&#xff0c;这n个分叉点由n-1个树枝连接&#xff0c;我们可以把它看成一个有根树结…

C++从0到1的入门级教学(三)——表达式和运算符

文章目录3 运算符3.1 表达式3.1.1 基本概念3.1.2 运算符和运算对象3.1.3 运算对象的转换3.1.4 左值和右值3.2 运算符3.2.1 算术运算符3.2.2 赋值运算符3.2.3 比较运算符3.2.4 逻辑运算符3.2.5 成员访问运算符3.2.6 条件运算符3 运算符 C提供了一套供操作内置数据类型的运算符&…

谈谈用SQLite和FMDB而不用Core Data

谈谈用SQLite和FMDB而不用Core Data 发布于&#xff1a;2014-04-22 11:22阅读数&#xff1a;4235 凭良心讲&#xff0c;我不能告诉你不去使用Core Data。它不错&#xff0c;而且也在变好&#xff0c;并且它被很多其他Cocoa开发者所理解&#xff0c;当有新人加入你的组或者需要别…

Idea工具开发 SpringBoot整合JSP(毕设亲测可用)

因为&#xff0c;临近毕业了&#xff0c;自己虽然也学了很多框架。但是&#xff0c;都是在别人搭建好的基础上进行项目开发。但是springboot的官方文档上明确指出不提倡使用jsp进行前端开发&#xff0c;但是在校期间只学了jsp作为前端页面。所以&#xff0c;废话不多说&#xf…

深度学习番外——Yolov5服务器环境搭建

文章目录1 服务器搭建yolov5环境1.1 创建环境1.2 跟随官方指引2 下载预训练权重3 推理4 测试1 服务器搭建yolov5环境 1.1 创建环境 首先先的在本地环境下搭建一个我们的环境&#xff0c;名字设为yolo5-6 conda create -n yolov5-6 python3.7#创建环境 conda activate yolov5…