前些天写了一篇《程序猿也爱学英语(上),有图有真相》,大概介绍了我学英语的一些基本资料以及心得体会,本来接下来该发中篇,但《程序猿也爱学英语(中),有图有真相》实在太长,为了方便读者阅读以及多方面考虑,我把它拆分成了几篇。前面一篇《学习英文之社区,博客及源码》主要讲了社区,博客以及源码,今天这篇我们就来聊一聊英语相关的技术书籍。
在讲今天的内容之前,我先说一下最近热议的一名印度工程师的感慨文章《孟莎美:令人忧虑,不阅读的中国人》以及China Daily的时评《War of words over Chinese reading habits》,文章和时评的大致意思是中国人现在看书越来越少,这种现状很是堪忧。我想随着网络信息的日趋发达,不阅读或者少阅读是一个全球化的趋势,这并不仅限于中国,决定因素还是在于阅读者本身,而不在于哪个具体的国家。另外网络时代在带来巨大利益的同时,不可否认也会带来不同程度的弊端,正所谓有利就有弊,任何事物都不可能尽善尽美。
今天我们这篇文中主要讲英语技术书籍,所以中文书籍以及其他不是计算机相关的书籍不在此篇论述范畴。关于为什么我喜欢读这些技术书籍,我也有一些自己的浅显心得,这里也先分享出来:
前面废话了这么多,那么下面我们就具体来聊一聊英语的相关技术书籍,需要强调的是文中的观点只是自己的学习心得和一些体会,属一家之言且鉴于本人学识浅薄,如有不对的地方,也请大家见谅并指正。
最早接触英语原文技术书籍是在大学的时候,当时我们学院的一个普林斯顿大学(Princeton University)的博士导师教我们软件工程。在他的推荐与熏陶下,我也开始慢慢接触了基本经典的英语技术书籍,不过遗憾的是当时真的看不懂,原因主要是:
(题外话:去年在新加坡面试系统分析师和架构师职位的时候,细节考得最多的还是这些知识,看来基础还是起着比较重要的作用,所以以后还得慢慢补回来!)
直至毕业后的几年里,随着自己英语和技术水平的提高,技术领域的不断深入,发现一下几个问题:
基于以上两点,自己逐渐地开始活跃于国外的社区及博客,最后也理所当然地慢慢接受了英语原版书籍。
讲到这里,就不得不提我的.NET情缘,当时大学图书馆里面藏着一些关于NET Framework 1.1以及C#的书籍,自己怀着一种好奇的心态借阅了几本,但过了几天总是原封不动的还了回去,这也算是.NET原文书籍的第一印象。原因和我前面提到的一样——还是因为看不太懂且没有看中文书籍来得那么直接!
因为我在工作主要在外企,所以最初为了应付外企的英语技术笔试和面试,我看了Professional C# 2005 with .NET 3.0英文版,通过它学到了很多.NET领域专业词汇的英语表达并且也扩宽了自己的知识面。所以接下来几年又追着看了Professional C# 4.0 and .NET 4以及Professional C# 2012 and .NET 4.5。
对于Professional C# 2012 and .NET 4.5,我没有买到原版的书籍,在朋友那里打印了所有的章节,比起书籍来说重量减少了,携带也就比较方便,同时也比电子书看得要舒服很多。
另外,Effective C#: 50 Specific Ways to Improve Your C#也相当不错,不过只粗略浏览了一遍,有机会一定再仔细看一下!
接触CLR Via C#系列,是因为同事的一本Applied Microsoft® .NET Framework Programming。因为之前看过李建中的翻译版《.NET 框架程序设计》,所以再重复读起来就比较的容易。后来由于项目的关系,自己免费获得了几本中文技术书籍,其中的《框架设计:CLR Via C#》(第2版),大概翻阅了几章,发现翻译质量真的不是那么尽如人意,所以看完几章后就搁置到书架上了,后面在新加坡国家图书馆才读完了它的原文版。另外,去年读了大部分CLR Via C# Third Edition,上个月开始在读CLR Via C# Fourth Edition,不得不说Jeffrey Richter真的写得不错。
同样,之前免费获得一本《Microsoft SQL Server 2005技术内幕: T-SQL程序设计》,看完之后发现翻译质量还可以且自己收获也颇多,通过Blog得知这套系列图书一共包含四本:
于是产生了购买的想法,但考虑到当时正在搬家,所以后来就通过电子书先后看完了其英文版《Inside Microsoft SQL Server 2005 T-SQL Querying》和《Inside Microsoft SQL Server 2005 Query Tuning and Optimization》。至于《Inside Microsoft SQL Server 2005 The Storage Engine》,自己兴趣似乎不是很大,所以一直都没有没有动过。
谈到重构方面,自己的项目经历比较多,其中书籍也阅读比较多,主要有以下几本对我影响比较大:
书名: Refactoring: Improving the Design of Existing Code 作者:Martin Fowler & Kent Beck… 书名: Clean Code: A Handbook of Agile Software Craftsmanship 作者: Robert C. Martin 书名: Refactoring to Patterns 作者: Joshua Kerievsky 书名: Code Complete: A Practical Handbook of Software Construction, Second Edition 作者: Steve McConnell 书名: Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries 作者: Krzysztof Cwalina & Brad Abrams 书名: Test Driven Development: By Example 作者: Kent Beck 书名: Design Patterns: Elements of Reusable Object-Oriented Software 作者: the GangOfFour 书名: Head First Design Patterns 作者:Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra, Elisabeth Robson 书名: Agile Principles, Patterns, and Practices in C# 作者: Robert C. Martin, Micah Martin大家可能之前看过我写的《31 天重构学习笔记索引》和《31天重构学习笔记重新整理下载》,其实在那之前,也就是2010年初,我也在公司做过《重构——OO与设计模式》的内训培训。当时我知道这个专题想在一下午的时间把它讲清楚是非常困难的,这个不像之后培训的WPF、WCF和 Silverlight那么单纯,并且每个人的基础都不一样。当中有还没有毕业的实习生、刚毕业不久的毕业生、工作了数年的工程师及技术大牛们,所以如何把这些知识很好的插入到每个人的知识树上面成了我考虑的重点。
同时当时我的心里也比较矛盾,一方面希望参加培训的同事多一些,另一方面希望人越少越好。前者则是按照常理来考虑的,毕竟培训者都希望自己所做的培训,越受欢迎越好,这样才能使自己的思想得到更多人的认可,同时自己也能实现分享知识的目的。后者则是担心怕讲不好,少一点人就少一点罪过。可是恰巧这一次是历次培训中参加人数最多的一次,来参加培训的同事有一百多人,不过幸好由于会议室坐不下,才分成了两批,这样就可以让我具备了更充分的时间和更好的心态。
总之培训是向内和向外的提炼与升华,正所谓“自己理解的知识未必能使人家理解”,这不仅考验的是技术,阅历以及经验,还考验了一个人的综合能力。
对于WPF,我花的时间和精力最多,之前有写《WPF 基础到企业应用系列》,本想从WPF的起源、背景、历史、现状讲起,然后逐渐过渡到基础、企业应用以及经验总结等,但写到第九篇就转到了Unix&PowerBuilder&Sybase项目组,抱着怀着宁缺毋滥的精神,就没有再继续写下去。如果你感兴趣,也可以看下这几篇:
· 1. WPF 基础到企业应用系列1——开篇有益
· 2. WPF 基础到企业应用系列2——WPF前世今生
· 3. WPF 基础到企业应用系列3——WPF开发漫谈
· 4. WPF 基础到企业应用系列4——WPF千年轮回
· 5. WPF 基础到企业应用系列5——WPF千年轮回 续前缘
· 6. WPF 基础到企业应用系列6——WPF布局全接触
· 7. WPF 基础到企业应用系列7——深入剖析依赖属性(核心篇)
· 8. WPF 基础到企业应用系列8——依赖属性之“风云再起”
其中的所阅读的书籍大概有:
其中最为经典或者阅读最多的要数以下几本:
这里不得不提到Charles Petzold 的 《Applications = Code + Markup A Guide to the Microsoft Windows Presentation Foundation 》,由于当年学习WPF的书籍很少,中文书籍基本没有,所以只有通过MSDN以及英文版的电子书,其中对我影响最大的就是这本。它用Code和XAML两种方式对WPF进行了诠释,并且很多时候能激发出读者举一反三的兴趣和激情,如果大家看过我的WPF基础到企业应用系列,可能会找到很多类似的写法。但是书中基本没有图片,通篇只有文字和代码,而且里面还有比较复杂的数学原理,如果你是WPF初学者,还是建议从比较基础的看起。
同时也分享一下当时给公司所做培训的资料:
WPF企业内训全程实录(上)主要讲解历史渊源、概念引入、基本阐述以及WPF的每个知识点。
WPF企业内训全程实录(中)主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述。
WPF企业内训全程实录(下)着重强调结合其他技术共同打造WPF项目、相关性能优化、以及部署与更新问题。
具体包括WPF的各个基础概念:
Silverlight方面的书籍:不得不承认当年Silverlight确实很火,以至于大家没有理由不相信今后它没有用武之地,同样我也是大家中的一员,所以我花在上面的时间不比WPF少。
基于几个项目的经验以及所阅读的书籍,我也曾在公司做过一次关于Silverlight的分享《Silverlight基础到实战》
从最开始的WinForm+Remoting和ASP.NET+Web Service到WCF再到今天我们用的Web API,由于项目对这些知识用得比较多,看的书籍自然也不少。这不,今年年初项目服务层从WCF换成Web API + SignalR ,就和同事边学边用终于完成了重构。为了继续深入学习和研究,到现在还没看完《ASP.NET MVC 4 AND THE WEB API》。
还记得三年多以前在公司做的一次内训《WCF剖析及深入应用》,也正是基于自己从Remoting & Web Service==》WCF的使用经验以及书籍的归纳总结。
三年多以前,关于云计算以及Windows Azure的相关中文资料,国内市场基本没有。所以当时做项目主要参考微软的白皮书和一些相关的英语书籍,主要如下:
但主要有三本对我影响较大:
记得2010年我发布了一篇《实战第一个云程序》,有幸得到张亚勤博士的推荐,还以为Windows Azure会马上落地中国。但一晃时间就过了三年多了,国内的企业仍然不能用Windows Azure。同时因为当时项目转移到Unix以及PowerBuilder&Sybase项目的重构,所以自己也放弃了MSDN视频录制与云计算写书的邀请,现在想起来还是很遗憾的。
当然,在这些年中,我也先后看了一些其他的一些非技术英文书籍,其中包括技术、管理和小说等,由于不属于本篇范畴之内,所以这里就不再详细罗列,免得跑题越跑越远!
最后,我个人的经验是“书籍不至于多,而在于精!”——首先选择一本自己感兴趣或者工作中要用到的技术,然后认认真真读完它,你会发现自己除了收获了鱼之外,也自然而然的学会了如何捕鱼!
关于电子书,我自己从2005年开始陆陆续续收集了几百本,内容涉及也比较的广泛,最主要是根据当时的兴趣,学习和工作的需要而下载的。
其实只要你保持阅读的习惯,看完一本书是非常快的!
另外,我使用的电子书下载网站很多,前些年收集了很多网站,到后来就从固定的一两个站点下载。现在看电子书越来越少了,究其原因,主要有以下几个考虑:
所以相对于电子书而言,我越来越青睐纸质书。
既然前面说到了电子书下载的问题,那么我这里就介绍两个比较实用的给大家:
FreeComputerBooks 皮皮书屋FreeComputerBooks 是一个比较齐全的计算机方面的电子书网站
优点:里面的书籍分类非常的清晰明了,而且不用注册就能免费下载,你也可以通过网站的搜索功能进行查找你需要的书。
有待改进的地方:里面的电子书还是太少,很多时候不能找到自己所需要的书籍。
皮皮书屋 收集的书籍专攻计算机科学以及相关延伸学科。
优点:里面的书籍非常的多,基本上包括了计算机学科的方方面面并且下载也非常的方便简单,另外搜索功能也比较实用。
有待改进的地方:分类不够详细,排序功能欠缺。
另外,万能的网友也总结了很多实用的网站,这个就需要大家去淘,比如在Google或者百度输入“免费国外电子书”,就会出现一大堆的文章及链接,所以我这里就不一一罗列这些网站。
最后我也放上一些公认比较好的电子书(基本涵盖了操作系统、数据库、编译原理、数据结构,算法,具体语言编程以及程序猿工作效率,管理等)。其中有些书自己以前读过,有些书看了一些或者正在读,有些书还未读且想读。
如果你也对某本书感兴趣,你也可以从这里找到一些相关书籍的介绍http://cspray.github.io/my.so-archive/100-most-influential-programming-books.html:
Modern Operating systems.html" target="_blank">Systems by Andrew S. Tanenbaum
The Art of Unix Programming
Code Complete (2nd edition) by Steve McConnell
Structure and Interpretation of Computer Programs by MIT professors Harold Abelson and Gerald Jay Sussman, with Julie Sussman.
The C Programming Language by Kernighan and Ritchie
The Pragmatic Programmer by Andrew Hunt and David Thomas
Introduction to Algorithms by Cormen, Leiserson, Rivest & Stein
Design Patterns by the Gang of Four
Refactoring: Improving the Design of Existing Code Martin Fowler
The Art of Computer Programming by Donald Knuth
Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman
Gödel, Escher, Bach by Douglas Hofstadter
The Mythical Man Month by Frederick Brooks
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
CODE by Charles Petzold
Programming Pearls by Jon Bentley
Working Effectively with Legacy Code by Michael C. Feathers
Peopleware by Demarco and Lister
Coders at Work by Peter Seibel
Founders at Work
Surely You're Joking, Mr. Feynman!
Patterns of Enterprise Application Architecture by Martin Fowler
The Little Schemer
The Seasoned Schemer
The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity
Test-Driven Development: By Example by Kent Beck
Practices of an Agile Developer
Don't Make Me Think
The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan
Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp
Pragmatic Unit Testing in C# with NUnit by Andy Hunt and Dave Thomas with Matt Hargett
Writing Secure Code (2nd Edition) by Michael Howard
Introduction to Functional Programming by Philip Wadler and Richard Bird
The Productive Programmer
The Art of Deception by Kevin Mitnick
No Bugs! by David Thielen
Rework by Jason Freid and DHH
Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin
Domain Driven Designs by Eric Evans
The Design of Everyday Things by Donald Norman
Best Software Writing I by Joel Spolsky
The Practice of Programming by Kernighan and Pike
Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt
Software Estimation: Demystifying the Black Art by Steve McConnel
The Passionate Programmer (My Job Went To India) by Chad Fowler
Hackers: Heroes of the Computer Revolution
Algorithms + Data Structures = Programs
Writing Solid Code
JavaScript - The Good Parts
Getting Real by 37 Signals
Foundations of Programming by Karl Seguin
Computer Graphics: Principles and Practice in C (2nd Edition)
The Elements of Computing Systems
Refactoring to Patterns by Joshua Kerievsky
Things That Make Us Smart by Donald Norman
The Timeless Way of Building by Christopher Alexander
The Deadline: A Novel About Project Management by Tom DeMarco
Computer Systems - A Programmer's Perspective
Agile Principles, Patterns, and Practices in C# by Robert C. Martin
Growing Object-Oriented Software, Guided by Tests
Framework Design Guidelines by Brad Abrams
Object Thinking by Dr. David West
Advanced Programming in the UNIX Environment by W. Richard Stevens
Hackers and Painters: Big Ideas from the Computer Age
The Soul of a New Machine by Tracy Kidder
CLR via C# by Jeffrey Richter
The Timeless Way of Building by Christopher Alexander
Design Patterns in C# by Steve Metsker
Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig
About Face - The Essentials of Interaction Design
Here Comes Everybody: The Power of Organizing Without Organizations by Clay Shirky
Computational Beauty of Nature
Writing Solid Code by Steve Maguire
Philip and Alex's Guide to Web Publishing
Object-Oriented Analysis and Design with Applications by Grady Booch
Inside Microsoft SQL Server 2005 T-SQL Programming
Inside Microsoft SQL Server 2005 T-SQL Querying
Inside Microsoft SQL Server 2005 Query Tuning and Optimization
Inside Microsoft SQL Server 2005 The Storage Engine
Professional C# 2012 and .NET 4.5
Applied Microsoft® .NET Framework Programming
Masterminds of Programming
Computability by N. J. Cutland
我个人认为:电子书不在于多,而在于你到底有没有认真去看完,而在于你看完之后是否找到你所需要的东西,也就是说看完之后有没有什么收获,所以也希望各位朋友能认清这一点,不然下再多的电子书也枉然!比如我在做项目的时候,我就需要去复习和巩固相关的知识,然后再在项目中进行实践。我在做重构的时候,也需要一些重构的书籍作为参考,毕竟这些书都凝聚了作者们的智慧和经验;我在做公司内部培训的时候,书籍是我最好的辅助资料;我在面试或者被面试的时候,同样书籍可以让我重新巩固所学知识。
另外,每个人的时间和精力都很有限,所以选择适合自己的书是非常重要的!这个就需要根据自身所处的具体情况来权衡,但是如果你现在有充裕时间或者精力,不妨先从以下几个方面开始,也许你会收到事半功倍的效果:
正如我前面所说,《程序猿也爱学英语,有图有真相(中)》实在太长,为了方便读者阅读以及多方面考虑,我把它拆分成了几篇。今天这篇我们讲了英语相关的技术书籍,那么下篇我们将接着说其他的几个主题,希望能对大家有帮助。
最后需要强调的是随着网络时代的不断发展,我们的时间也逐渐被新闻,QQ,电影,电视,游戏以及微博等打成碎片,所以如何把时间充分利用起来是我们每个人进行阅读之前的必修课!另外,如果大家有什么问题或者建议,你可以通过 圣殿骑士微博 联系我。真心希望能和大家一起学习并共同进步!
备注: