paint-brush
Essential Reading List for Enterprise Software Developers and Architectsby@bishr_tabbaa
1,821 reads
1,821 reads

Essential Reading List for Enterprise Software Developers and Architects

by Bishr TabbaaDecember 17th, 2017
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

The target audience for this reading list is enterprise software developers and architects. I chose to focus on system design, data modelling, security, devops, process, creativity, and computer science foundations which are essential and generally useful to most software engineers. Enjoy, happy reading, and let me know what you think!

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Essential Reading List for Enterprise Software Developers and Architects
Bishr Tabbaa HackerNoon profile picture

The target audience for this reading list is enterprise software developers and architects. I chose to focus on system design, data modelling, security, devops, process, creativity, and computer science foundations which are essential and generally useful to most software engineers. Enjoy, happy reading, and let me know what you think!

  1. Code Complete by Steve McConnell — This comprehensive, classic tome on software design, construction, and craftsmanship has stood the test of time. McConnell’s discussion of metaphors, architecture, debugging, quality assurance and ethics are excellent and still relevant in the context of the cloud, troubleshooting complex systems, fixing security defects, and collaborating with diverse teams. My favorite proverb therein is: measure twice, cut once. Visit the Construx blog for more information on nurturing a successful software development organization.
  2. Design Patterns by Erich Gamma, John Vlissides, et al — The Gang of Four popularized object-oriented design patterns in the 1990’s and the book’s style of documenting problems, solutions, and examples has been copied widely. If you need to write an OO API or SDK in a language such as C++, C#, Java, or Python, one must understand and practice these patterns of object creation (e.g. Factory, Singleton, Builder), structured relationships (e.g. Adaptor, Composite, Facade), and dynamic behavior (e.g. Command, Interpreter, Mediator, Observer, Strategy, Template, Visitor).
  3. Enterprise Integration Patterns by Gregory Hohpe — This book catalogs the design principles and implementation patterns for integrating information systems with a primary focus on messaging. As more applications are born in the cloud and integrate with other cloud systems, applying the concepts of message types (e.g. event, document, command), channels, pipes, filters, translators, routers, correlation ID,expirations, return addresses as callbacks, buses, brokers, bridges, wrappers, canonical data models, dead letter queues, wiretaps, and much more in the context of the Fallacies of Distributed Computing is essential.
  4. Data Model Patterns by David Hay — This relatively unknown gem covers entity-relationship data modelling and catalogs different business scenarios from accounting to inventory management to lab science and much more. The book is remarkably and mercifully brief, has clear, informative ERDs, and is a great introduction to logical database design, a building block skill for one’s software development career.
  5. Analysis Patterns by Martin Fowler — Fowler has authored many good books, but this last recommendation for functional system design is special for its catalog of actual object models in different business domains (e.g. accounting, inventory, scientific measurement, trading) and remarkable for its emphasis on the informed practice of SOLID principles. It is a perfect OO companion to the Data Model Patterns book mentioned earlier.
  6. Scalability Rules by Marty Abbott and Michael Fisher — This performance primer dispenses excellent advice on scaling platforms, people, and processes. Some of the most important tips are avoiding over-engineering, applying redundancy, separating functionality into microservices, leveraging caches, designing for statelessness, tolerating faults, communicating asynchronously, and learning from one’s mistakes. Visit my Medium review for more details.
  7. Secrets and Lies by Bruce Schneier — Security has moved from the back page to the front page since this excellent introduction to computer security was written. While its coverage of technology, process, and people issues may be too broad and dated for some, Schneier will get you thinking about security in its many dimensions and layers.
  8. Phoenix Project by Gene Kim — This book is a story about Agile, DevOps, and Lean, it is loosely based on The Goal written by Goldratt. It is both a meditation on the alignment (and oft-times lack thereof) of business and IT cultures and a reconciliation between keeping the lights on (Operations’ focus on reliability, security, and performance) versus building anew (Business and Development’s emphasis on innovation, growth, experimentation). Although the story is fiction, it rings truer than most case studies because it reflects the common experiences many have of doing more with less in the context of technical and organizational debt. It is a fun, quick read that will inspire you to improve IT operations and your business.
  9. DevOps Handbook by Gene Kim, Jez Humble, et al — This book is the engineering follow up to the Phoenix Project and goes into principles and practices of The Three Ways: Flow, Feedback, and Continuous Learning/Experimentation. These practices used by the top software companies in the world include selecting work by priority, making that work visible (e.g. Kanban boards), limiting work in progress (WIP), using small batch sizes and intervals, automating builds, tests, and deployments, instrumenting systems with telemetry, incorporating hypothesis and A/B testing, reserving time for system review and team learning throughout projects, and integrating security/compliance concerns throughout the SDLC.
  10. Lean Enterprise by Jez Humble and Barry O’Reilly — Applying Agile, DevOps, and Lean Startup principles to large enterprises is not easy, but this broad book written for product owners and service managers discusses the theory and praxis for rapidly exploring customer problems, experimenting with solutions, and delivering success over the long-run.
  11. Release It by Michael Nygard — Designing and developing IT systems is half the battle; the other half is releasing and operating it in the live, production environment. If you hate getting support calls at 3AM or on the weekend, then this book is for you. Its discussion of stability vs. fragility, patterns vs. anti-patterns, capacity planning, networking, security, availability, logging, and administration are technology agnostic and worth revisiting throughout the SDLC.
  12. Software Project Survival Guide by Steve McConnell — This evergreen book’s discussions of staged delivery plans, comprehensive checklists, “bills of rights” for customers and solution providers, signs of project thrashing, increasing team flow state and reducing distractions, gold plating, the cone of uncertainty, the Bermuda triangle of cost-quality-schedule, change control processes, regularly sharing good and bad news, and continuous management of requirements, risks, team personnel, and stakeholder communications are all still spot on. Although its suggested level of project ceremony is heavy and perhaps too much like waterfall when compared to the contemporary fashions of Agile and Scrum, there are many wise proverbs in this book and the checklists are especially helpful to technical leads and project managers.
  13. XP Explained by Kent Beck — This pithy and profound epigraph has influenced my daily thinking on software project management like few others in my career. It starts with values (communication, simplicity, feedback, courage, respect), expands into principles (options theory and economics, flow, quality, baby steps, diversity, harmony, balance) and then elaborates the supporting practices. While some find the latter controversial, my experience is that these practices improve productivity, reduce stress, and make work as fun as it can be: cross-functional teams that sit and remain together, sustainable work schedules without death marches, pair programming, bi-weekly sprints with quarterly milestones, descoping low priority items near deadlines instead of lead plating, automated builds with continuous integration, test-driven development (TDD), regular checkpoints with actual customers, evolutionary design and refactoring, and shared responsibility (not individual ownership) for code. My two cents regarding literalist misreadings of the text are that 2–3 sprints should be documented as written stories and that there should be some upfront design with the humble acknowledgement that Things Will Change.
  14. Don’t Make Me Think by Steve Krug — If you read just one book on usability, scoop up this classic that was recently updated for mobile and accessibility concerns. Short, smart, funny, and practical, this introduction to user-centered design and usability, will explain principles of web page design, DIY UX testing, cultivating user goodwill, and tips for avoiding religious debates that side track UI requirements discussions.
  15. Serious Creativity by Edward De Bono — The author popularized practices for creativity for the general public decades ago. Concepts such as Lateral Thinking, the 6 Hats, the Creative Pause, Provocation (escape, negate, distort, exaggerate, wishful thinking), challenge, random input, alternatives, stepping stones, filaments, and stratals are structured methods for generating and exploring new ideas for business processes and models.
  16. Database System Concepts by Abraham Silberschatz — This textbook goes beyond everyday SQL and ERD idioms and dives into RDBMS internals such as storage, indexing, query processing, transactions, concurrency control, and recovery. There are also advanced discussions of parallelism, distributed databases, and object databases. Many cloud systems and open source components use all of these ideas and it is important to understand them.
  17. Computer Networks by Daniel Tannenbaum — Understanding computer networks is a critical skill for designing, delivering, securing, and troubleshooting high performance enterprise IT systems, and even more so with distributed nodes in the cloud interacting across the Internet. This textbook details the entire 7-layer stack from the physical to the application layers, the Internet including DNS, HTTP, TCP/IP, and UDP, network security, as well as different choices in the physical layer (copper, fiber, radio, satellite, etc).
  18. Operating Systems by Abraham Silberschatz — This textbook covers core concepts of process management, memory/storage management, I/O, concurrency control, security, and distributed systems, and then walks through a series of illustrative case studies. The ideas in this excellent book have aided in reasoning about systems throughout my career.
  19. Data Structures and Algorithms by Cormen, Leiserson, and Rivest — This textbook and final recommendation has also been a pillar of top computer science curriculum for decades. It covers asymptotic notation, set theory, counting and probability, sorting, hash tables, trees, stacks, queues, list, graphs, as well as more advanced topics such as matrix operations, number theory, dynamic programming, greedy algorithms, string matching, NP-completeness, and much more. Few knowledge areas in our fast changing field are dually useful and long-lived, but the ideas in this book have assisted me in reasoning about computation throughout my career.

Enjoy the article? Follow me on Medium and Twitter for more updates.