Computer science is the study of the theory, experimentation, and engineering that form the basis for the design and use of computers.
It is the scientific and practical approach to computation and its applications and the systematic study of the feasibility, structure, expression, and mechanization of the methodical procedures (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information. An alternate, more succinct definition of computer science is the study of automating algorithmic processes that scale. A computer scientist specializes in the theory of computation and the design of computational systems.
1. Design Patterns by Ralph Johnson (1997)
Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves. The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently.
2. Code Complete by Steve McConnell (2004)
Widely considered one of the best practical guides to programming, Steve McConnell’s original CODE COMPLETE has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practices-and hundreds of new code samples-illustrating the art and science of software construction. Capturing the body of knowledge available from research, academia, and everyday commercial practice, McConnell synthesizes the most effective techniques and must-know principles into clear, pragmatic guidance. No matter what your experience level, development environment, or project size, this book will inform and stimulate your thinking-and help you build the highest quality code. Discover the timeless techniques and strategies that help you: * Design for minimum complexity and maximum creativity * Reap the benefits of collaborative development * Apply defensive programming techniques to reduce and flush out errors * Exploit opportunities to refactor-or evolve-code, and do it safely * Use construction practices that are right-weight for yo…
3. Introduction to Algorithms, 3rd Edition by Thomas H. Cormen (2009)
Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.The first edition became a widely used text in universities worldwide as well as the standard reference for professionals. The second edition featured new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming. The third edition has been revised and updated throughout. It includes two completely new chapters, on van Emde Boas trees and multithreaded algorithms, substantial additions to the chapter on recurrence (now called “Divide-and-Conquer”), and an ap…
4. Compilers by Alfred V. Aho(2006)
Compilers: Principles, Techniques and Tools, known to professors, students, and developers worldwide as the “Dragon Book,” is available in a new edition. Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published. The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development. New chapters include: Chapter 10 Instruction-Level Parallelism Chapter 11 Optimizing for Parallelism and Locality Chapter 12 Interprocedural Analysis
5. Purely Functional Data Structures by Chris Okasaki (2011)
Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques so that programmers can develop their own functional data structures. It includes both classical data structures, such as red-black trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs can easily be adapted to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study.
6. Introduction To Algorithms by Thomas H Cormen (2001)
This title covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor. This second edition features new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming, as well as extensive revisions to virtually every section of the book. In a subtle but important change, loop invariants are introduced early and used throughout the text to prove algorithm correctness. Without changing the mathematical and analytic focus, the authors have moved much of the mathematical foundations material from Part I to an appendix and have included additional motivational material at the beginning.
7. Applying UML and Patterns by Craig Larman (2004)
“This edition contains Larman’s usual accurate and thoughtful writing. It is a very good book made even better.” -Alistair Cockburn, author, Writing Effective Use Cases and Surviving OO Projects”Too few people have a knack for explaining things. Fewer still have a handle on software analysis and design. Craig Larman has both.” -John Vlissides, author, Design Patterns and Pattern Hatching”People often ask me which is the best book to introduce them to the world of OO design. Ever since I came across it Applying UML and Patterns has been my unreserved choice.” -Martin Fowler, author, UML Distilled and Refactoring”This book makes learning UML enjoyable and pragmatic by incrementally introducing it as an intuitive language for specifying the artifacts of object analysis and design. It is a well written introduction to UML and object methods by an expert practitioner.” -Cris Kobryn, Chair of the UML Revision Task Force and UML 2.0 Working Group*A brand new edition of the world’s most admired introduction to object-oriented analysis and design with UML *Fully updated for UML 2 and the latest iterative/agile practice…
8. Programming Pearls by Jon Louis Bentley
“The first edition of Programming Pearls was one of the most influential books I read early in my career, and many of the insights I first encountered in that book stayed with me long after I read it. Jon has done a wonderful job of updating the material. I am very impressed at how fresh the new examples seem.” — Steve McConnell When programmers list their favorite books, Jon Bentley’s collection of programming pearls is commonly included among the classics. Just as natural pearls grow from grains of sand that irritate oysters, programming pearls have grown from real problems that have irritated real programmers. With origins beyond solid engineering, in the realm of insight and creativity, Bentley’s pearls offer unique and clever solutions to those nagging problems. Illustrated by programs designed as much for fun as for instruction, the book is filled with lucid and witty descriptions of practical programming techniques and fundamental design principles….
9. The Algorithm Design Manual by Steven S. Skiena (2008)
This expanded and updated second edition of a classic bestseller continues to take the `mystery` out of designing and analyzing algorithms and their efficacy and efficiency. Expanding on the highly successful formula of the first edition, the book now serves as the primary textbook of choice for any algorithm design course while maintaining its status as the premier practical reference guide to algorithms….
10. Concrete Mathematics by Ronald L. Graham(1994)
This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills — the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists — the authors themselves rely heavily on it! — but for serious users of mathematics in virtually every discipline. …
11. The Algorithm Design Manual: Text by Steven S. Skiena(1998)
This material has been developed over a period of several years in an upper-division course taught to computer science students at SUNY, Stony Brook, by Steve Skiena. A major goal of the author has been to take some of the “mystery” out of identifying and dealing with algorithms which these students will later use in the workplace, drawing heavily on the author’s own real-world experiences, the book stressing design and analysis. Thus the work takes on a very practical character, as reflected in its title: “Manual”. The Book is divided into two parts, the first being a general guide to techniques for the design and analysis of computer algorithms. The second is a reference section, comprising the catalog of algorithmic resources, implementations, and an extensive bibliography
12. Modern Operating Systems by Andrew S. Tanenbaum
13. Algorithms by Robert Sedgewick
This fourth edition of Robert Sedgewick and Kevin Wayne’s Algorithms is the leading textbook on algorithms today and is widely used in colleges and universities worldwide. This book surveys the most important computer algorithms currently in use and provides a full treatment of data structures and algorithms for sorting, searching, graph processing, and string processing — including fifty algorithms every programmer should know. In this edition, new Java implementations are written in an accessible modular programming style, where all of the code is exposed to the reader and ready to use. The algorithms in this book represent a body of knowledge developed over the last 50 years that has become indispensable, not just for professional programmers and computer science students but for any student with interests in science, mathematics, and engineering, not to mention students who use computation in the liberal arts
14. Eloquent Ruby by Russ Olsen
15. Advanced Programming in the UNIX Environment by W. Richard Stevens
16. Artificial Intelligence by Stuart Jonathan Russell
For one or two-semester, undergraduate or graduate-level courses in Artificial Intelligence. The long-anticipated revision of this best-selling text offers the most comprehensive, up-to-date introduction to the theory and practice of artificial intelligence. *NEW-Nontechnical learning material-Accompanies each part of the book. *NEW-The Internet as a sample application for intelligent systems-Added in several places including logical agents, planning, and natural language. *NEW-Increased coverage of material — Includes expanded coverage of: default reasoning and truth maintenance systems, including multi-agent/distributed AI and game theory; probabilistic approaches to learning including EM; more detailed descriptions of probabilistic inference algorithms. *NEW-Updated and expanded exercises-75% of the exercises are revised, with 100 new exercises. *NEW-On-line Java software. *Makes it easy for students to do projects on the web using intelligent agents. *A unified, agent-based approach to AI-Organizes the material around the task of building intelligent agents. *Comprehensive, up-to-date coverage-Includes a unified view of the field organized around the rational decision making pa
17. Project retrospectives by Norman L. Kerth
With detailed scenarios, imaginative illustrations, and step — by-step ins tructions, consultant and speaker Norman L. Kerth guides readers through productive, empowering retrospectives of project performance.Whether your shop calls them postmortems or postpartums or something else, project retrospectives offer organizations a formal method for preserving the valuable lessons learned from the successes and failures of every project. These lessons and the changes identified by the community will foster stronger teams and savings on subsequent efforts.
For a retrospective to be effective and successful, though, it needs to be safe. Kerth shows facilitators and participants how to defeat the fear of retribution and establish an air of mutual trust. One tool is Kerth’s Prime Directive:
Regardless of what we discover, we must understand and truly believe that everyone did the best job he or she could, given what was known at the time, his or her skills and abilities, the resources available, and the situation at hand.
Applying years of experience as a project retrospective facilitator for software organizations, Kerth reveals his secrets for managing the sensitive, often emotionally charged issues that arise as teams relive and learn from each project.
Don’t move on to your next project without consulting and using this readable, practical handbook. Each member of your team will be better prepared for the next deadline.
18. Object-oriented Analysis and Design with Applications by Grady Booch
19. The C# Programming Language by Anders Hejlsberg
20. The Mythical Man-month: Essays on Software Engineering by Frederick Phillips Brooks
Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system. Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice, both for readers already familiar with his work and for readers discovering it for the first time.
21. An Introduction to Database Systems by C. J. Date
22. Language Implementation Patterns by Terence Parr
23. Introduction to the Theory of Computation by Michael Sipser
24. LISP in Small Pieces by Christian Queinnec
25. Multiple View Geometry in Computer Vision by Richard Hartley
26. Artificial Intelligence by Stuart Jonathan Russell
27. Elements of Programming by Alexander A. Stepanov
28. Object Thinking by David West
29. Structure and Interpretation of Computer Programs by Harold Abelson
30. Computer Systems by Randal E. Bryant