Рекомендуемая литература от Google

Google разрешил мне опубликовать список литературы, которые мы рекомендуем к прочтению сотрудникам. Если вдруг вы думали, что бы вам такого почитать, то вот вам отличный источник вдохновения!

* Indicates books authored by our fellow Googlers

Agile

  • Planning Extreme Programming, Kent Beck and Martin Fowler

C++

  • Accelerated C++, Andrew Koenig and Barbara E. Moo
  • The C++ Programming Language (4th Edition), Bjarne Stroustrup
  • The C++ Standard Library, Nicolai M. Josuttis
  • C++ Templates: The Complete Guide, David Vandevoorde and Nicolai M. Josuttis
  • Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library, Scott Meyers
  • Effective C++: 50 Specific Ways to Improve Your Programs and Design (3rd Edition), Scott Meyers
  • * Generic Programming and the STL: Using and Extending the C++ Standard Template Library, Matthew H. Austern
  • More Effective C++: 35 New Ways to Improve Your Programs and Designs, Scott Meyers
  • Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14, Scott Meyers

Code Quality

  • Working Effectively with Legacy Code, Michael Feathers.
  • Clean Code, Robert C. Martin

Computer Science

  • *Artificial Intelligence: A Modern Approach, Stuart J. Russell and Peter Norvig
  • Elements of Programming, Alexander Stepanov and Paul McJones
  • The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Trevor Hastie, Robert Tibshirani and Jerome Friedman
  • Foundations of Statistical Natural Language Processing, Christopher D. Manning and Hinrich Schutze
  • Introduction to Algorithms, Thomas H. Cormen, et al.
  • Kernel Methods for Pattern Analysis, John Shawe-Taylor and Nello Cristianini
  • Machine Learning, Tom M. Mitchell
  • A Practical Guide to Data Structures and Algorithms Using Java, Sally A. Goldman and Kenneth J. Goldman

Data Structure Selection

  • A Practical Guide to Data Structures and Algorithms Using Java, Sally A. Goldman and Kenneth J. Goldman

Databases

  • High Performance MySQL, 3rd edition, Baron Schwartz, Peter Zaitsev, Vadim Tkachenko
  • MySQL, Paul DuBois
  • MySQL Cookbook, Paul DuBois

Go

  • *The Go Programming Language, Alan A. A. Donovan and Brian W. Kernighan

Java

  • Core J2EE Patterns: Best Practices and Design Strategies, Second Edition, Deepak Alur, et al.
  • *Effective Java Programming Language Guide, Joshua Bloch
  • Java Concurrency in Practice, Brian Goetz et al.
  • Java in a Nutshell, Fourth Edition, David Flanagan
  • The Java(TM) Programming Language (4th Edition), Ken Arnold, et al.

JavaScript (also see “Web Programming” below)

  • JavaScript: The Definitive Guide by David Flanagan
  • *Closure: The Definitive Guide by Michael Bolin

Linux

Networking

  • Interconnections, Radia Perlman. One of the best introductions to networking ever written.
  • TCP/IP Illustrated, Volume 1, W. Richard Stevens. Probably the most well-written book at the TCP stack ever. Every network engineer and SRE should read this book.
  • Routing TCP/IP Vol. I, Jeff Doyle. Good nuts and bolts overview of how routing works in the big ‘I’ Internet.
  • *Building Internet Firewalls, Simon Cooper, Elizabeth D. Zwicky and D. Brent Chapman. A little old, but still an excellent reference on network security, starting with the fundamentals.
  • Computer Networks, Andrew S. Tanenbaum. Still the seminal work for people who want an overview of networking technology from top to bottom.
  • DNS and BIND, Cricket Liu an Paul Albitz.
  • *IPv6 Network Administration, Niall Richard Murphy and David Malone
  • Network Algorithmics, George Varghese. Good overview of network algorithms.
  • UNIX Network Programming, W. Richard Stevens. Focused more on writing applications using the sockets API.

Other

  • Google Hacks, Tara Calishain and Rael Dornfest
  • Managing Gigabytes: Compressing and Indexing Documents and Images, Ian H. Witten, et al.
  • Network Security with OpenSSL, John Viega, et al.
  • *Search Engines: Information Retrieval in Practice, Bruce Croft, Donald Metzler, Trevor Strohman
  • Secure Coding: Principles and Practices, Mark G. Graff and Kenneth R. Van Wyk
  • Software Project Survival Guide, Steve McConnell

Patterns/Design

  • Design Patterns, Erich Gamma, et al.
  • Refactoring to Patterns (Addison-Wesley Signature Series), Joshua Kerievsky

Python

  • *Python Cookbook, Alex Martelli, et al.
  • Python Essential Reference (4th Edition), David Beazley
  • *Python in a Nutshell, Alex Martelli
  • *Dive Into Python 3 by Mark Pilgrim
  • *Core Python by Wesley Chun is a book that is meant for the technical professional already literate in one high-level programming language who needs to learn Python as quickly and as in-depth as possible. (The Core Python Applications Programming book is a sequel for those who already know Python and want to use it to build a variety of applications with.)
  • *Dive Into Python by Mark Pilgrim is a book for an engineer who needs to learn Python as quickly as possible but prefers to have hands-on projects with which to learn from.
  • *Programming Google App Engine by Dan Sanderson is the reference book for programming Google App Engine, Google’s cloud computing service that lets users create and deploy web applications using Python or Java, and have it be hosted on Google’s scalable high-traffic server infrastructure.
  • *Python Fundamentals (LiveLessons DVD) by Wesley Chun is the DVD version of Core Python Programming boiled down into 10 discrete lessons with audio/video (Wesley’s narration and slide presentation).
  • *Python Web Development with Django by Forcier, Bissex, and Chun, is a user-friendly book for introducing both Python and how to use it to create web applications using Django, Python’s most popular web framework. There is even a section on how to get your Django apps to run on Google App Engine (although that info is outdated now… look up django-nonrel at http://allbuttonspressed.com).

Technical Writing

  • Technical Writing for Engineers and Scientists, Barry Rosenberg

Threading/Concurrency

  • *Java Concurrency in Practice, Brian Goetz, Tim Peierls, Josh Bloch, Joseph Bowbeer, David Holmes, Doug Lea
  • Programming with POSIX(R) Threads, David R. Butenhof

Web Programming

  • Cascading Style Sheets: The Definitive Guide, Eric A. Meyer
  • Closure: The Definitive Guide, Michael Bolin
  • Dynamic HTML: The Definitive Reference, Danny Goodman
  • HTTP: The Definitive Guide , David Gourley and Brian Totty
  • *HTML5: Up and Running by Mark Pilgrim
  • JavaScript: The Definitive Guide, David Flanagan
  • *JavaScript: The Complete Reference, Thomas Powell and Fritz Schneider
  • JavaScript and DHTML Cookbook, Danny Goodman
  • Programming Collective Intelligence: Building Smart Web 2.0 Applications by Toby Segaran

* indicates books authored by Googlers

Starter Books

Book List and Descriptions

  • Code Complete by Steve McConnell is for not only a new developer seeking a sound introduction to the practice of software development, but also a veteran exploring strategic new approaches to problem solving. You’ll find code examples.both good and bad.in C++, Microsoft Visual Basic, C# and Java, though the focus is squarely on techniques and practices.
  • Design Patterns by Erich Gamma et al. is the classic book about how to design programs. No matter what language you program in, this book is a “must read.”
  • Effective C++ by Scott Meyers describes fifty ways to shoot yourself in the foot with C++. Extremely practical advice, easy and quick read. While you’re at it, please read our C++ style guidelines. At Google, we deliberately restrict our use of C++ to make code more readable and less error-prone. After reading this book, you’ll know why.
  • Effective Java by Joshua Bloch focuses on how to use Java better, since there are fewer ways to shoot yourself in the foot. Even if you’ve programmed in Java for five years, you’ll learn a ton from reading this book. Highly recommended.
  • The Go Programming Language by Alan Donovan and Brian Kernighan is the authoritative book for any programmer who wants to learn Go. See gopl.io.
  • Pragmatic Unit Testing by Hunt and Thomas gives a very good introduction to the theory and practice of unit testing in Java using JUnit. It’s very clearly written, with plenty of code examples, and covers the range of techniques (mock objects, test-driven development, etc.) that will let you hop on board the test train. Unit testing is a professional best practice and is required on most projects at Google.
  • Python in a Nutshell by Alex Martelli is an excellent reference for writing Python code, covering the language through Python version 2.5. Python is one of Google’s “Big Three” programming languages, preferred over Perl because it’s much more readable, it’s fully object-oriented, and it scales well to large applications.
  • Software Project Survival Guide by Steve McConnell covers the concepts and strategies needed for mastering the development process, including planning, design, management, quality assurance, testing and archiving. It includes techniques to create reliable framework for project management success, and is for anyone who has a stake in the outcome of a development project. Especially recommended for tech leads, managers, and project managers.
  • User Interface Design for Programmers by Joel Spolsky proposes simple, logical rules that can be applied without any artistic talent to improve any user interface, from traditional GUI applications to websites to consumer electronics. After reading this book, you’ll know how to design interfaces with the user in mind. You’ll learn the important principles that underlie all good UI design, and you’ll learn how to perform usability testing that works.
  • The Web Testing Companion: The Insider’s Guide to Efficient and Effective Tests by Lydia Ash is a hands-on tutorial and reference that explains why, when, what, and how to test. It is filled with practical advice that can be immediately applied to any client-server application, and concentrates on proven solutions. The material is presented in a way that will improve the productivity of all testers.
  • Foundations of Security: What Every Programmer Needs To Know by Neil Daswani, Christoph Kern, and Anita Kesavan (foreword by Vint Cerf) takes a principled approach to helping you design and implement your applications to be secure from the ground up, and illustrates these principles using running examples of web applications throughout the book. It is written for both new and existing software professionals, and shows how to defend against some of the most significant, current-day attack types that Google faces, such as cross-site-scripting (XSS).