We were starting to get sick of the “X# Design Websites That Web Designers Need To Follow!!11!!” articles and other similar items pertaining to web development design coming through the pike on the social news sites like Digg and Delicious (we won’t even bring up reddit… try reducing the stories to programming), so we decided to do something about it. There is nothing wrong with those articles, but every once in a while it would be good to see a resource that talks about enterprise design; unfortunately, not everyone is a freelance web-developer.
So we decided to put together a list of books that we thought you should read to make you a better software engineer…
1. Patterns of Enterprise Application Architecture
Author(s): Martin Fowler
Publisher: Addison-Wesley Professional
This book serves as a good base for enterprise application architecture and comes highly recommended. The book is written in 2 parts: the first part of the book serves as a tutorial and foundation for developing enterprise applications (things like MVC, business logic organization, concurrency, object registries, Object Relational topics, etc), the second part is a pattern catalog. A list of the patterns and short descriptions/UML can be found on the author’s website.
For those of you unfamiliar with Martin Fowler, you need to be. He is a brilliant speaker, writer and software architect that works for the ThoughtWorks consulting firm. His website has a plethora of information and articles that are worthwhile reading; moreover, his blog (er um “bliki”) has some very thought-provoking articles.
2. Core J2EE Patterns
Author(s): Deepak Alur, Dan Malks, John Crupi
Publisher: Prentice-Hall (2nd Edition)
This book serves as the goto-book for the patterns used in the J2EE spec; it covers the different components in the J2EE Model-View-Controller architecture such as front-controller, data-access-object (DAO), view-helpers, application-service, session-facade, etc…
The book divides the patterns into the three application tiers: presentation tier, business tier, and integration tier. This serves as a much better source for the patterns than trying to dig through Sun’s J2EE tutorial. If you don’t buy the book, at least make pattern cards for those patterns!
3. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
Author(s): Gregor Hohpe, Bobby Woolf
Publisher: Addison-Wesley Professional
This was another wonderful book for those that are interested in learning about enterprise messaging. The obvious choice for this is using Java’s JMS system (or the JMS extended counterparts: Websphere MQ (MQSeries), JbossMQ, MSMQ, etc); however, the book does talk about other systems of messaging: file-based, RPC, shared DB, etc.
Messaging is great for enterprise applications because it offers an easy solution (not necessarily by code or setup) to any problem that needs both/either synchronous and/or asynchronous communication. The book talks about many topics dealing with messaging: systems, channels, construction, routing, control, endpoints, transaction, delivery and other topics.
4. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development
Author(s): Craig Larman
Publisher: Prentice-Hall (3rd Edition)
Some people would scoff at us for including this book in the list; well, we did anyways because it is worth it. If you are a beginner to mid-level software engineer/developer and you don’t know what any of these terms are: agile, Unified Process, UML, OOA&D, GRASP, and GoF… then this is the book for you.
Larman does a pretty good job of describing an agile software development process and some of the basic documentation needed for designing a robust application/system (patterns, requirements gathering, iterations, planning, diagramming, use-cases). He uses UML (Unified Modeling Language) and the Unified Process to walk you through the foundational concepts of object-oreinted analysis and design, and he includes a fake case-study as an example.
He also mentions and describes the use of the design patterns developed by the GoF (Gang of Four = Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides) and what are known as the GRASP patterns: General Responsibility Assignment Principles (Information Expert, Creator, Controller, Low Coupling, High Cohesion, Polymorphism, Pure Fabrication, Indirection, Protected Variations). The GRASP patterns (developed by Larman) describe ways and best-practices for assigning responsibilities to an object during design. The book goes into detail but you can read the highlights on Wikipedia.
5. Introduction to Algorithms
Author(s): Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
Publisher: MIT Press (2nd Edition)
If you were ever looking for an algorithm dictionary, this would definitely be it. Don’t let the word “Introduction” in the title scare you away from this book; it’s the exact opposite.
To rattle off just a few of the topics and algorithms covered: master method, randomization, heapsort, quicksort, asymptotic runtime analysis, medians and order statistics, stacks, queues, linked lists, hash tables, perfect hashing, binary search trees red-black trees, dynamic programming, huffman codes, greedy algorithms, minimum spanning tree, optimal subset, amortized analysis, b-trees, splay trees, binomial heaps, fibonacci heaps, disjoint sets, strongly connected components, rank and path compression, graphs, all pairs shortest paths, breadth first search, depth first search, topological sort, minimum spanning trees, kruskal’s algorithm, prim’s algorithm, dijkstra’s algorithm, ford-fulkerson method, maximum flow min cut, edmonds-karp algorithm, comparison networks, bitonic sorting network, matricies, strassen’s algorithm, solving systems of linear equations, linear programming, polynomials, discrete and fast fourier transform, RSA public-key cryptosystem, primality testing, string matching, rabin-karp algorithm, knuth-morris-pratt string matching, computational gemotry, line and segment intersection, vertex cover, convex hull, np-complete problems, traveling salesman.
The pseudo-code is a little annoying if you are used to counting from 0…n-1 because they start from counting from “1″ instead.
As a side note, I’d like to see them write the non-introductory version of this 1184 page book!
6. Design Patterns: Elements of Reusable Object-Oriented Software
Author(s): Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
Publisher: Addison-Wesley Processional
Whenever you hear the words “software” and “pattern” used in a sentence together, you’ll likely hear this book title or the synonym for the group of authors thrown in somewhere in the mix because this is the definitive source for software patterns. Whenever someone mentions GoF or Gang-of-Four or buying their book, this is what they are talking about (referring to the “gang” of the four authors of this book)
The book is divided into two parts. The first part talks about object-oriented programming in general and includes a case study on a WYSIWYG editor using pseudo-code and UML diagrams; the second part is the detailed description of the following 23 patterns…
- Abstract Factory, Builder, Factory Method, Prototype, Singleton
- Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
- Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor
This book is a must-get just for the collection of patterns alone.
7-15. Any Other Book from the Addison-Wesley Signature Series
Publisher: Addison-Wesley Professional
Honestly, all of these books can add be added to your list of things to read they are all completely amazing in the fields that they cover. Martin Fowler and Kent Beck signed off on the books that were put in this series. Some of the books that are listed…
Give Me More!!!
Go have a ball with Wikipedia’s List of Important Publications In Computer Science
Update: Code Style
So I have noticed that my article mentions software engineer; I am sorry for my selection of diction. Maybe I should have said software developer as to not piss people off.
However, since we are on the topic… I thought that I might add a few more books having to do with code style to help you out!
The Elements of Java Style
Author(s): Allan Vermeulen, Scott W. Ambler, Greg Bumgardner, Eldon Metz, Trevor Misfeldt, Jim Shur, Alan Vermeulen, Patrick Thompson
Publisher: Cambridge University Press
This is a very short book that serves as Java style conventions in several areas: formatting, naming conventions (variable, class, package, method, etc), programming conventions (type safety, construction, execption handling, synchronization, etc), and documentation conventions. If you are looking for a common convention for you or your group to follow. This is a start.
It’s also worth it to check out the rest of the SIGS Reference Library.
There are two more books that follow the same flow that I would like to recommend:
Now I know that someone is going to say… UML ISN’T CODING! They would be correct, but I felt that since you should be able to generate code from UML and UML from code, I figured that I would throw it on there as well; moreover and more importantly, it will force you to find a style!!!