到现在已经工作两年了,这两年读了很多计算机方面的经典书籍,非常受益匪浅;下面向大家推荐下。
计算机入门类:
Behrouz Forouzan的《计算机科学导论》:这是一本计算机的绝佳入门书籍,书中内容包括:“计算机原理”、“计算机组成”、“计算机网络”、“操作系统”、“数据库”、“算法与数据结构”、“软件工程”、“人工智能”等;不过都没有深入讲解,看完这本书后你会了解到计算机的各个方面,然后就可以去深入学习了。
算法类:
Mark Allen Weiss的《数据结构与算法分析 java语言描述版》:这是一本讲解算法和数据结构的经典书籍;虽然它所介绍的绝大部分数据结构与算法都能在《算法导论》中找到,并且没有《算法导论》介绍得那么深入,但是它还是值得每位java程序员买上一本;因为它不仅介绍了算法,还介绍了tiger的新特性,而当你开始研究java API源码时,你会发现它和这本书的很多实例都是很接近的;另外,这本书还介绍了一些《算法导论》中没有提及的数据结构和算法,比如跳跃表。
Thomas H.Cormen的《算法导论》:这是一本算法宝典,它几乎涵盖了算法和数据结构的所有方面,并且深入地去讲解和分析,《算法导论》值得每位程序员都买上一本,建议把它摆在电脑桌旁作为参考书。
Jon Bentley的《编程珠玑》:Jon是一位算法大师,被评为影响算法发展的十位大师之一,大家都知道James Gosling和Joshua Bloch吧,他们都曾是Jon的学生。《编程珠玑》可以说是一套算法的智力题,它总会带给读者意外和惊喜,这是本翻开后就会欲罢不能的书;另外它的习题和正文一样有趣,一定不要错过。相信我,这本书值得读上好几遍。
可能精通算法的你会抱怨说算法类的书籍怎么能没有Donald E.Knuth的《计算机程序设计艺术》;TAOCP确实是本伟大的书籍,但因为我没有读过,所以没有列出来;不过还是向希望对算法有深入研究的程序员推荐下。
软件工程类:
Freeman的《Head First设计模式》:这是一本java程序员学习设计模式的绝佳入门书籍,它并没有涵盖GoF的《设计模式》中所有的23种设计模式,但是它还是有自己的独特一面,比如它介绍了几种在GoF的《设计模式》中没有提到的模式:简单工厂和空对象;而且它还会给出一些编程时十分优秀的建议。如果在读GoF的《设计模式》时感觉不好理解,建议先读读这本书;它就像一杯下午茶,能让你愉快地、轻松地进入设计模式的世界。
Martin Fowler的《重构 改善既有代码的设计》:重构可以说是程序员编程时做得最多的一件事,而这本书则是重构领域的王者之作;或许你会认为自己已经对重构十分熟悉了,不再需要任何书籍了;但是这本书还是非常值得读一读的,它给出了非常详细的重构的方法及过程,还介绍了如何去嗅出代码中的坏味道。
GoF的《设计模式 可复用面向对象软件的基础》:设计模式领域的王者之作,这本书详细地讲解了23种经典的设计模式及其应用场景;这本书绝对值得读好几遍。
Frederick P.Brooks的《人月神话》:这本书在软件工程领域的影响十分深远,它的内容来自于Brooks在IBM的OS/360的项目管理经验。Brooks在这本书中提出了两个十分经典的观点:1)向一个时间上已经落后的项目投入更多人力只会使得这个项目更加落后;2)没有银弹。其中第二个观点到现在还被大家热议。
Tom DeMarco的《人件》:这本书和《人月神话》并称为软件图书“双子星”;如果说《人月神话》介绍的是如何管理“软件”,那《人件》介绍的就是如何管理“人”;这本书思想前卫,观点深入,举例详细,是一本管理者必看的书籍;如果你的团队很低效,离职率高,创新能力差,那你一定要翻翻这本书,因为你很有可能从中找到解决之道。
Steve McConnell的《代码大全》:这本书涵盖了软件生命周期的每一个阶段,它不仅是写给开发人员看的,同时还适合需求和测试人员阅读;《代码大全》介绍的内容太多太全面了,我就不一一列举了;这里我简单提下它在“个人性格”一章中给出的几点建议:1)做一个谦虚诚实的程序员;2)如果你确信你是对的,那么要敢于和你的上司说不;3)每周坚持读几十页经典的书籍或技术文章,一段时间以后你会发现自己和身边的人不一样了(如果他们不这样做的话)。
j2se类:
Horstmann Gay S.的《Java核心技术》:这是一本绝佳的java入门书籍。有人说《Java编程思想》是java的最佳入门书籍,我可不赞同;个人认为《Java编程思想》更适合那些有编程经验的人来学习java;而对于没有任何编程经验的人来说,这本通俗易懂的书是最佳选择。另外这本书有上下两卷,第一卷介绍基础知识,第二卷介绍高级特性;我只看了第一卷,不敢对第二卷有任何评价;不过还是推荐大家去读一读第二卷;相信它不会让大家失望的。
Bruce Eckel的《Java编程思想》:这是一本全面、深入地介绍java特性的优秀书籍。因为这本书Bruce一度被评为影响java世界的十大人物之一。
Joshua Bloch的《Java解惑》:你可能在工作时掉入了一些java的陷阱,而这本书可以帮你走出来;《Java解惑》非常适合你感觉无所事事时拿出来翻翻,一旦打开它,你会发现它十分有趣。
Joshua Bloch的《Effective Java中文版》:当你读完这本书,你就会明白为什么Joshua能带领java走向辉煌。这本书给出了70多条java编程时的优秀建议;每位java程序员都应该买上一本并把它放在电脑桌旁作为参考书。下面这段话来自James Gosing的书评:“我很希望10年前就拥有这本书。可能有人认为我不需要任何Java方面的书籍,但是我需要这本书”。
Bill Venners的《深入Java虚拟机》:和前面几本书不一样,这本书介绍的并不是java特性,而是java实现机制和jvm。你可能知道怎么正确地去使用java,但是却不清楚为什么这么用,而这本书正能给你答案;强烈推荐大家去细细品味它。
Tim Lindholm的《Java虚拟机规范(Java SE 7版)》:这是一本介绍虚拟机规范的书籍,oracle官方发布的书籍(书籍封面是这么说的);它和《深入Java虚拟机》不同之处在于这本书介绍的内容比《深入Java虚拟机》要新,另外这本书是本介绍纯理论的书籍(几乎没有示例),所以需要耐心来阅读(建议先了解下汇编相关知识)。买一本吧(当然是作为参考书啦)。
Charlie Hunt的《Java性能优化权威指南》:这是一本介绍Java SE和Java EE性能调优的书籍,本书前几章介绍了JVM的一些特性、优化和垃圾回收机制(非常详细)等,中间几章介绍Java SE方面的调优,主要是围绕Windows、Llinux、和Solaris三种操作系统来介绍的,最后几章介绍了Java EE方面的调优,主要介绍了web应用、Web Service、EJB等方面的调优。本书被奉为java性能调优的圣经,James Gosling是这么评价这本书的:“本书是Java性能优化的圣经!如果你是一个细节控,那么这本书正适合你。”。
j2ee类:
Marty Hall的《Servlet与JSP核心编程》:这本书是学习servlet和jsp的绝佳书籍,它继承了优秀书籍的一贯传统:简单易懂和全面。这本书分为两卷,第一卷讲的是servlet和jsp的基础知识,第二卷讲的则是实战方面的知识。虽然这边书并没有介绍j2ee的主角EJB,但是它仍是java web开发的优秀参考书。
Rod Johnson的《expert one-on-one J2EE Development without EJB》:这本书客观地批评了传统的j2ee架构,更是把矛头指向了大名鼎鼎的EJB;它指出了EJB的几大缺点,比如学习周期长、可测试性差、实体bean的性能问题等等;他还介绍了EJB的替换框架:spring。
Ricbard Monson-Haefel的《Enterprise JavaBeans》:这是一本讲解EJB的优秀书籍,它填补了《Servlet与JSP核心编程》的空白;这本书十分详细而全面地讲解了EJB,是一本十分优秀的EJB入门书籍。
Michael Girdley的《J2EE应用与BEA WebLogic Server》:这是一本讲解J2EE的绝佳书籍,它涵盖了j2ee的所有方面,并给出了j2ee各个部分的最佳实践;推荐每位j2ee的开发人员都买上一本作为参考书。
Deepak Alur的《J2EE核心模式》:这是一本讲解j2ee架构的书籍,它把j2ee模式分为了三类:表现层模式、业务层模式和集成层模式;并且详细讲解了各种模式的设计技巧。很多公司的核心软件架构都是按照这本书的介绍来设计的(你以为我会告诉你我现在这家公司的整体架构就是按照这本书的介绍来设计的?)。每位j2ee程序员都应该买上一本作为参考书。
Linux:
Richard Blum的《Linux命令行与Shell脚本编程大全》:这是一本介绍linux和shell的绝佳入门书籍,它由浅入深地讲解了Linux和shell编程,非常适合初学者学习;然而书中还有大量的shell脚本示例,非常适合作为demo学习,当然也可以用于日常工作之中。
web前端类:
Andy Budd的《精通CSS 高级Web标准解决方案》:这是本讲解css的完美书籍,十分易读和全面,每位前端开发人员都应该买上一本作为参考书。
Dave Shea的《CSS禅意花园》:当你读完这本书,你会发现css是一门艺术,细细去品味它吧。
Nicholas C.Zakas的《JavaScript高级程序设计》:这是一本讲解js的经典书籍,你在js编程时遇到的问题几乎都能在这本书上找到答案。每位js程序员都应该买上一本作为参考书。
Ryan Asleson的《Ajax基础教程》:虽然这是一本讲解ajax的基础书籍,但不能掩盖它的经典。它的后端实例代码都是用servlet和jsp实现的,非常适合java程序员阅读。
我的学习重点是在后端,对前端研究不是很深,有些经典的书籍可能没有接触过,欢迎大家补充。Viaweb
非技术类:
Paul Graham的《黑客与画家:硅谷创业之父paul graham文集》:这并不是一本介绍技术的书籍(除了文末介绍的过滤垃圾邮件的方法),但它的吸引力十分惊人:下载完它的pdf文件后我花了两个通宵去读完了它(以至于我都没有时间去买这本书)。你是否有过创业的想法?如果有,一定要去阅读这本书;Paul在这本书中详解地介绍了Viaweb的创业过程以及其中遇到的困难,你一定会从中找到共鸣并受益匪浅。
个人认为,读书是程序员成长的一条捷径,但请不要变成“书呆子”:不要试图去记住书中的每一个知识点,而是应该在读懂一本经典的书籍后把它摆在电脑桌旁,有需要时再去查阅它。
有了一定基础后,推荐大家能多去看看一些开源软件的源码,这对自己的技术成长十分有利;然后可以尝试去为开源社区做些贡献:比如修复开源软件的一些bug或者共享自己的代码。