该问题来自于 stackoverflow[1]。目前状态已经关闭,排名第一的答案获得了 1745 的投票,给出的书单非常的经典,供 94 本,虽然是英文,但是你很容易知道是哪本书。
这里从中挑出 10 本最经典的,推荐大家去阅读,如果需要电子版的,可以加我微信「somenzz」,回复对应的书名即可,我会在方便的时候发你电子书。
1.《代码大全2》,作者:史蒂夫·麦康奈尔
自从有了《代码大全2》,程序员就分两种:一种是看过《代码大全2》的,一种是没有看过的。犹如蒙娜丽莎的微笑,本书从语言基础到创建高质量代码,到变量、语句、代码优化、系统考量和软件工艺,全方面涵盖关于软件构建的种种细节,细节是决定卓越与平庸的分水岭,不管是卢浮宫琥珀色的古老建筑与钻石般夺目的玻璃金字塔,还是卓有成效的程序员。
这本书很经典,公众号回复「送书」抽奖包邮送一本。
2.《程序员修练之道》
本书适合各层次软件开发人员阅读,也适合高等院校计算机专业学生和教师阅读。本书之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特定语言、框架和方法。时隔20年的新版,经过全面的重新选材、组织和编写,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。本书极具洞察力与趣味性,适合从初学者到架构师的各阶层读者潜心研读或增广见闻。
3.《计算机的构造和解释》
《计算机程序的构造和解释》成型于美国麻省理工学院(MIT)多年使用的一本教材,1984年出版,1996年修订为第二版。在过去的二十多年里,该书对于计算机科学的教育计划产生了深刻的影响。
在第二版中,大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。
经典中的经典,必读。
4.《算法导论》
美国的本科生教材,这本书应该也是中国计算机学生的教材。
在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。
全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。
5.《设计模式》
这本书是面向对象设计的经典书籍,结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。
书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同系统中多次使用过的成功设计。
6.《重构》
书中清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了60多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。本书提出的重构准则将帮助开发人员一次一小步地修改代码,从而减少了开发过程中的风险。
7.《人月神话》
在软件领域,很少能有像《人月神话》一样具有深远影响力和畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司SYSTEM/360家族和OS/360中的项目管理经验,该项目堪称软件开发项目管理的典范。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄、中、韩等多种文字,全球销售数百万册。确立了其在行业内的经典地位。
8.《代码整洁之道》
软件质量,不但依赖架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。本书提出一种观点:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自实际项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。
9.《Effective C++》/《More Effective C++》
C++ 中两本经典得不能再经典的书。也许你觉得 C++ 复杂,但这两本书中带来对代码稳定性的探索方式让人受益,因为这种思维方式同样可以用在其它地方。以至于各种模仿者,比如《Effective Java》也是一本经典书。
10. 《Unix 编程艺术》、《Unix 高级环境编程》
也是经典。
以下是原书单,序号不代表优先次序:
Code Complete (2nd edition) by Steve McConnell The Pragmatic Programmer Structure and Interpretation of Computer Programs The C Programming Language by Kernighan and Ritchie Introduction to Algorithms by Cormen, Leiserson, Rivest & Stein Design Patterns by the Gang of Four Refactoring: Improving the Design of Existing Code The Mythical Man Month 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 Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin Effective C++ More Effective C++ 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 Surely You're Joking, Mr. Feynman! Effective Java 2nd edition Patterns of Enterprise Application Architecture by Martin Fowler The Little Schemer The Seasoned Schemer Why's (Poignant) Guide to Ruby The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity The Art of Unix Programming Test-Driven Development: By Example by Kent Beck Practices of an Agile Developer Don't Make Me Think 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 Modern C++ Design by Andrei Alexandrescu 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) Thinking in Java by Bruce Eckel The Elements of Computing Systems Refactoring to Patterns by Joshua Kerievsky Modern Operating Systems by Andrew S. Tanenbaum The Annotated Turing 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 The C++ Programming Language (3rd edition) by Stroustrup Patterns of Enterprise Application Architecture 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 Alice in Wonderland by Lewis Carol 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 The Tao of Programming 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 Effective Java by Joshua Bloch Computability by N. J. Cutland Masterminds of Programming The Tao Te Ching The Productive Programmer The Art of Deception by Kevin Mitnick The Career Programmer: Guerilla Tactics for an Imperfect World by Christopher Duncan Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp Masters of Doom Pragmatic Unit Testing in C# with NUnit by Andy Hunt and Dave Thomas with Matt Hargett How To Solve It by George Polya The Alchemist by Paulo Coelho Smalltalk-80: The Language and its Implementation Writing Secure Code (2nd Edition) by Michael Howard Introduction to Functional Programming by Philip Wadler and Richard Bird No Bugs! by David Thielen Rework by Jason Freid and DHH JUnit in Action
最后的话
书这么多,这辈子估计都看不完,不过,时间挤一挤总是有的,可以先列一个代读清单,排排优先级,然后一个一个划掉,随着时间的流逝,书中的知识也被我们吸收。
先关注公众号「Python七号」,然后回复「送书」抽奖。
参考资料
stackoverflow: https://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read