I cycle through a lot of books each year on software development, project management, design, patterns, architecture … etc. While many are throw aways, some of the books have stood the test of time. I continue to turn to them time and again. Here’s a list of my favorite software books::
- Microsoft 2.0: How Microsoft Plans to Stay Relevant in the Post-Gates Era – (Mary Jo Foley) – This is a relatively new book in my collection. It’s a thought proving book with insight into Microsoft’s future. It includes thoughts on leadership, potential products, management, product development styles, licensing issues, rising stars, and business models,
- Agile Project Management: How to Succeed in the Face of Changing Project Requirements – (Gary Chin) – Learn practical strategies for taking charge of crucial but unpredictable projects. Lear how to develop a strong and supportive project management infrastructure and culture. Learn how to improve communication between project teams and business decision-makers. Learn how to improve the productivity of fast-paced projects without increasing risk.
- Agile Software Development, Principles, Patterns, and Practices (Alan Apt Series) – (Robert C. Martin) – Learn how to use Agile Development for getting projects done on time, and on budget. See real-world case studies to learn how to plan, test, refactor, and pair program using eXtreme Programming. Learn how to apply UML and Design Patterns to solve customer-oriented systems problems.
- Refactoring: Improving the Design of Existing Code (Addison-Wesley Object Technology Series) – (Martin Fowler) – Learn expert techniques to improve the structural integrity and performance of existing software. Learn how to take a bad design and rework it into well-designed, robust code. Provides a detailed catalog of more than seventy proven refactorings with tips on when to apply them, step-by-step instructions for applying each refactoring, and an example that shows how the refactoring works.
- Scaling Software Agility: Best Practices for Large Enterprises (Agile Software Development Series) – (Dean Leffingwell) – Learn how to apply agile methods to enterprise-class development. Learn an overview of Agile, learn seven agile team practices that scale, and learn how to achieve Enterprise agility.
- A Practical Guide to Enterprise Architecture (Coad Series) – (James McGovern, Scott W. Ambler, Michael E. Stevens, James Linn, Vikas Sharan, and Elias K. Jo) – Learn which strategies work and why for Enterprise architecture. Learn proven product-line practices for streamlining the design of enterprise software. Learn how to translate key business drivers into enterprise architecture output. Learn agile architeture and modeling techniques. Learn how to create a reusable base of core assets. Learn how to transition to agile methods.
- Designing Software Product Lines with UML: From Use Cases to Pattern-Based Software Architectures (Addison-Wesley Object Technology Series) – (Hassan Gommaa) – Learn product line engineering process. Learn how to model the common and variable functionality of a product line. Learn how to model common, optional, and alternative product line features. Learn software architectural patterns for product lines.
- Enterprise Architecture Using the Zachman Framework (MIS) – (O’Rourke, Fishman, Selkow) – Learn a complete introduction to the fundamental concepts of enterprise architecture. Learn a framework that promotes holistic thinking, teamwork, individuality, and responsibility.
- Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series) – (Martin Fowler) – Learn how to divide an application into layers. Learn the major approaches for organizing business logic. Learn how to map between objects and relational databases. Learn how to use Model-View-Controller. Learn how to handle concurrency for data that spans multiple transactions. Learn how to design distributed object interfaces.
- Software Architect Bootcamp – (Raphael Malveau, Thomas J. Mowbray, Ph.D.) – Learn how to choose the right architetural model for your project. Learn how to manage complexity, scalability, reliability, security, latency, and flexibility. Learn how to make the most of abstraction, refactoring, and architectural prototyping. Leverage proven design patterns and anti-patterns. Learn effective prototyping, business-case development, and project leadership. Learn how to manage your own career as a software architect.
- Software Architecture in Practice (2nd Edition) (SEI Series in Software Engineering) – (Len Bass, Paul Clements, Rick Kazman) – Learn how to perform architecture design and analysis. Learn how to capture quality requirements and achieve them through quality scenarios and tactics. Learn how to use architecture reconstruction to recover undocumented architectures. Learn how to document architecture using UML.
- Secrets of Consulting: A Guide to Giving and Getting Advice Successfully – (Gerald M. Weinberg) – Learn how to price and market your services, measure your effectiveness, and deal with client resistance. Learn memorable rules, laws, and principles for effective consulting.
- About Face 2.0: The Essentials of Interaction Design – (Alan Cooper, Robert Reimann) – Learn Goal-Directed Design, how to design behavior and form, how to apply visual design principles, effective user interaction, and how to communicate with users effectively.
- The Design of Sites: Patterns, Principles, and Processes for Crafting a Customer-Centered Web Experience – (Douglas K. Van Duyne, James A. Landay, Jason I. Hong) – Learn proven solutions to common Web design problems, including naviation, content management, e-commerce, and site performance. The book is organized as collections of patterns and uses visual examples from actual sites on the Web.
- Code Reading: The Open Source Perspective (Effective Software Development Series) – (Diomidis Spinellis) – Learn how to identify good (and bad) code, how to read it, what to look for, and how to use the knowledge to improve your own code.
- The Pragmatic Programmer: From Journeyman to Master – (Andrew Hunt, David Thomas) – Learn how to write flexible, dynamic, and adaptable code, bullet proof your code, capture real requirements, effective testing, delight your users, build teams of pragmatic programmers.
- Write Great Code: Volume 1: Understanding the Machine – (Randall Hyde) – Learn the foundation upon which all great software is built. Learn how computer systems execute programs and how abstractions in programming languages map to the machine’s low-level hardware.
Interviews / Jobs
- How Would You Move Mount Fuji? Microsoft’s Cult of the Puzzle – How the World’s Smartest Company Selects the Most Creative Thinkers – (William Poundstone) – Learn “puzzle interview” techniques and examples that challenge your intelligence, imagination, and problem-solving ability.
- My Job Went to India: 52 Ways to Save Your Job (Pragmatic Programmers) – (Chad Fowler) – Learn 52 ways to keep your job, despite the changing tech landscape. Learn a decision-making process for choosing wich technologies to focus on and which business domains to master so that you invest your time and energy in the right areas. Learn how to develop a structured plan for keeping your skills up-to-date so that you can complete with both the growing stable of developers in so-called low-cost countries as well as your higher-priced local peers. Learn how to shift your skillset up thte value chain, from an offshore-ready commodity to one in high demand. Learn how to market yourself both inside your company and to the industry in general.
- Programming Interviews Exposed: Secrets to Landing Your Next Job (Programmer to Programmer) – (John Mongan, Noa Suojanen) Learn how to ace programming interviews. Learn how to gain critical interviewing skills, how to ask effective questions, how to best approach a problem, and what to do when you get stuck.
- Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results (Coad Series) – (David J. Anderson) Learn how to develop management disciplines for all phases of the engineering process, implement realistic financial and production metrics, and focus on building software the delivers maximum customer value and outstanding business results. Learn how to make the business case for agile methods. Learn how to choose an agile method for your next project. Learn how to apply Critical Chain Project Management and constraint-driven control of the flow of value.
- Antipatterns: Identification, Refactoring, and Management (Auerbach Series on Applied Software Engineering) – (Phillip A. Laplante, Colin J. Neill) Learn 48 bad management practices and environments common to software development, IT, and other organizations. Learn how to correctly identify problems in your own work environment and take action to correct them.
- How to Run Successful Projects III: The Silver Bullet (3rd Edition) – (Fergus O’Connell) Learn the Ten Steps of Structured Project Management. Learn how to do the least amount of project management possible and still be sure of a successful outcome. Learn how to identify and monitor your project’s vital signs. Learn a quick and easy way to assess project plans and proposals so you can catch potential disasters before they happen. Learn daily, weekly, and monthly routines.
- Managing the Design Factory – (Donald G. Reinertsen) Learn a methodical approach to consistently hit the “sweet spot” of quality, cost, and time in developing any system. Combines the powerful analytic tools of queuing, information, and system theories with the proven ideas of organization design and risk management.
- Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers – (Steve McConnell) – Learn effective software development practices. Learn how to create career paths for software professionals. Learn the impact of personnel and processes. Learn how much difference there is between the worst software companies and the best.
- Software Architecture: Organizational Principles and Patterns (Software Architecture Series) – (David M. Dikel, David Kane, James R. Wilson) Learn how to establish product-line architectural frameworks and vision that managers, administrators, and developers can buy into. Learn how to implement architectures that anticipate and predict change, and can easily adapt to new business requirements. Learn how to address the organizational issues that make or break enterprise software architectures.
- Successful Project Management – (Gido, Clements) Learn the essential concepts and processes to work successfully in a project management environment. Learn how to organize and manage effective project teams. Learn how to document and communicate project developments within and outside the team.
- The Project Manager’s Pocket Survival Guide – (James P. Lewis) – Learn how to keep your projects and your career on track. Learn the nitt-gritty realities of project management as politics, personalities, motivation, teamwork, and leadership.
- Under Pressure and On Time (Pro-Best Practices) – (Ed Sullivan) – Learn practical strategies and a proven model for developing great teams and world-class software. Learn how to recruit, interview, and retain the right people, build the right organizational structure, and create the right corporate culture for a great software-development effort. Learn how to acquire the best development tools and establish the correct processes for quality assurance and release engineering. Learn how to manage the relationship between your requirements, usability model, technology foundation, and schedule.
- Agile Modeling: Effective Practices for Extreme Programming and the Unified Process – (Scott W. Ambler) – Learn how to model on an XP project. Learn how to model to explore an issue or to facilitate communication. Learn how to write agile documents to reduce your documentation burden. Learn how to use simple modeling tools, such as index cards, and whiteboards.
- Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition) (Sun Core Series) – (Deepak Alur, John Crupi, Dan Malks) Learn the 21 patterns in the J2EE Pattern Catalog. Learn effective patterns, strategies, and refactorings. Learn design strategies for the presentation, business, and integration tier. Learn how to refactor to improve existing designs using patterns.
- EJB Design Patterns: Advanced Patterns, Processes, and Idioms – (Floyd Marinescu) Learn effetive architectural, transaction, concurrency, client-side, and primary key generation patterns. Includes a catalog of twenty advanced EJB patterns. Learn strategies for applying the patterns, best practices for J2EE development, and useful EJB tips and techniques.
- Head First Design Patterns (Head First) – (Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates) Learn the patterns that matter, when to use them and why, how to apply them to your own designs, when not to use them, and OO design principles that patterns are based.
- J2EE Design Patterns Applied – (Cragy A. Berry, John Carnell, Matjaz B. Juric, Meeraj Moidoo Kunnumpurath, Nadia Nashi, Sasha Romanosky) – Learn how to apply patterns to construct a robust and manageabile web tier. Learn how to apply patterns to construct a resuable persistence framework. Learn how to apply patterns to improve your application’s performance and scalability. Learn how to apply patterns to manage your application’
s security. Learn how to apply patterns to enable enterprise integration.
- Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML, 2nd Edition, Volume 1 – (Mark Grand) Learn seven fundamental design patterns, six creational patterns, three partitioning patterns, nine structural patterns, eleven behavioral patterns, and eleven concurrency patterns. Includes practical, hands-on examples of pattern implementation in Java.
- Code Optimization: Effective Memory Usage – (Kris Kaspersky) Learn typical mistakes. Learn how to eliminate problems with effective patterns and practices. Learn how to perform algorithmic optimization.
- Concurrent Programming in Java(TM): Design Principles and Pattern (2nd Edition) (Java Series) – (Doug Lea) – Learn key concepts of concurrent programming including: confinement and synchronization, deadlocks and conflicts, state-dependent action control, asynchronous message passing, and control flow, coordinated interaction, and how to structure web-based and computational services.
- Java 2 Performance and Idiom Guide – (Craig Larman, Rhett Gurthrie) – Learn how to optimize for speed and space. Learn design-level optimization principles. Learn environment and tool strategies. Learn algorithm and data structure strategies. Learn language and library specific optimization techniques.
- Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software (Addison-Wesley Object Technology Series) – (Connie U. Smith, Lloyd G. Williams) – Learn proactive versus reactive performance management. Learn how to use UML for software performance engineering. Learn how to specify key performance scenarios and performance objectives. Learn how to construct and solve performance models. Learn how to plan and conduct performance measurements. Learn principles for performance-oriented design. Learn patterns for achieving responsiveness and scalability. Learn anitpatternsthat illustrate what not to do and how to fix a problem when you find it. Learn effective performance tuning strategies. Learn how to integrate software performance engineering into the life cycle.
- Web Performance Tuning, 2nd Edition (O’Reilly Internet) – (Patrick Killelea) – Learn principles and patterns for thinking about the performance of your web site. Includes case studies of performance problems and solutions. Learn how to measure performance. Learn performance tuning in depth.
- Software Engineering: A Practitioner’s Approach – (Roger S. Pressman, Ph.D) Learn the software process. Learn modern analysis, design, and testing methods. Learn how software engineering practices can be adapted to Web applications. Learn how to plan, manage and control a software project. Learn formal methods. cleanroom software engineering, component-based approaches, and reengineering.
- Software Engineering Processes: With the UPEDU – (Pierre N. Robillard, Philippe Kruchten) Learn the essentials of the software development process. Learn the methods, tools, and concepts of the software life cycle. Learn the core engineering and management disciplines. Learn the quality aspects of the software process. Learn a software process metamodel that is the a theoretical foundation for any software process.
- Managing Software Requirements: A Use Case Approach (2nd Edition) (Addison-Wesley Object Technology Series) – (Dean Leffingwell, Don Widrig) Learn the five steps in problem analysis. Learn business modeling and system engineering. Learn techniques for eliciting requirements from customers and stakeholders. Learn how to establish and manage project scope. Learn how to apply and refine use cases. Learn product management. Learn how to transition from requirements to design and implementation. Learn how to transition from use cases to test cases. Learn agile requirement methods.
- Mastering the Requirements Process (2nd Edition) – (Suzanne Robertson, James Robertson) – Learn the requirements process. Learn how to bring rigor, traceability, and completeness to requirements. Includes checklists to help identify stakeholders, users, non-functional requirements, and more. Learn how to exploit use cases to determine the best product to build. Learn how to reuse requirements and requirement patterns.
- Requirements-Led Project Management: Discovering David’s Slingshot – (Suzanne Robertson, James Robertson) Learn how to use requirements as input to project planning and decision-making. Learn how to determine whether to invest in a project. Learn how to deliver more appropriate products with a quick cycle time. Learn how to measure and estimate the requirements effort. Learn how to define the most effective requirements process for a project. Learn how to set requirements priorities. Learn how to manage requirements across multiple domains and technologies. Learn how to use requirements to communicate across business and technological boundaries.
- Scenarios, Stories, Use Cases: Through the Systems Development Life-Cycle – (Ian F. Alexander, Neil Maiden) Learn a rang of scenario techniques from light, sketchy and agile, to careful and systematic.
- Writing Better Requirements – (Ian F. Alexander, Richard Stevens) – Learn how to write simple, clear requirements. Learn how to organize requirements as scenarios. Learn how to review requirements.
- Writing Effective Use Cases (Agile Software Development Series) – (Alistair Cockburn) – Learn a proven methodology for taking advantage of use cases. Learn the key elements of use cases, including actors, staeholders, design scope, scenarios, and more. Includes a use case style guide with action steps and suggested formats. Learn time-saving use case writing tips.
- Secure Coding: Principles and Practices – (Mark G. Graff, Kenneth R. van Wyk) Learn effective security principles and practices for design, coding, and operations.
- The Best Software Writing I: Selected and Introduced by Joel Spolsky – (Joel Spolsky) – Experience well-writen essays on ideas in software, edited and introduced by Joel Spolsky.
- Weinberg on Writing: The Fieldstone Method – (Gerald M. Weinberg) Learn secrets for gathering, organizing, and discarding ideas.
What’s your favorite software books?