Archive

Archive for the ‘Architecture’ Category

Programmers: What’s on your bookshelf?

February 23, 2013 Leave a comment

Here are programming books I really recommend. Most of these are technology agnostic and have value regardless of what language and technology you use:

1. Practice

If I had to pick one book that defines the practice of programming it would be Code Complete. It’s approaching 18 years in publication now but still has timeless advice (A second edition was published on the 10 year anniversary). For example, there’s a great section on Formal Code Inspections, something I believe should be utilized for all critical sections of code at least.

Code Complete: A Practical Handbook of Software Construction, 2nd edition
by Steve McConnell
http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670#_
http://cc2e.com/

2. Standards

This book discusses how to build your own framework, but I would say the advice applies to any object-oriented (or object-based) system design. It’s really easy to read, and I highly recommend it for everyone, particularly .NET developers. For example, how do you handle errors? Do you return error codes or raise exceptions? It’s in here. You’ll also gain insight into why certain decisions were made when designing the .NET Framework itself. It too is in its second edition.

Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition)
by Krzysztof Cwalina and Brad Abrams
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613

3. Architecture & Design

This is known as the book by the ‘gang of four’. It’s a big hit and everyone should read it and become familiar with these patterns. I bet you’re probably using the patterns even if you don’t know them by name – good to learn the lingo so you can communicate with team members. There’s also another book that covers the same patterns with a bit more color – I’ve used that one to drive study groups – I’ll list it below as an alternate.

Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612

Head First Design Patterns
by Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra, Elisabeth Robson
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=pd_sim_b_1

Domain-Driven Design: Tackling Complexity in the Heart of Software
by Eric Evans
http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215

And a few architecture books:

Patterns of Enterprise Application Architecture
by Martin Fowler
http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
by Gregor Hohpe, Bobby Woolf
http://www.amazon.com/Enterprise-Integration-Patterns-Designing-Deploying/dp/0321200683?

4. Algorithms

I got to tell you, I’m always on the lookout for good algorithm books, not the college level kind that someone new to programming finds daunting, but something that can explain in simple terms and illustrations, the problem space, solution, AND practical application. I can recommend the one I started with, many moons ago: Ready-to-Run Visual Basic Algorithms. Don’t let the VB name fool you. It covers all the basics from trees to hashing to Recursive Sierpinski Curves. I think the book’s now out of print. If you code gurus recommend something current, hit me up!

Ready-to-Run Visual Basic Algorithms, Second Edition
http://www.amazon.com/Ready-Run-Visual-Basic-Algorithms/dp/0471242683
by Rod Stephens

5. TDD

If I remember correctly you won’t find this topic in Code Complete, so another resource is needed. I’ve led a study group, chapter by chapter through Roy’s The Art of Unit Testing. More and more resources are appearing as this topic gains momentum.

The Art of Unit Testing, with examples in .NET
by Roy Osherove
http://www.amazon.com/Art-Unit-Testing-Examples-Net/dp/1933988274
http://artofunittesting.com/

6. Agile

Well I’ll list the one I’ve read which introduced me to a bunch of concepts and processes around agile software development. Of course there’s also a very popular book by Martin Fowler on refactoring. I must admit, I’ve never read it cover to cover, but I’ll include it based on its fame (watch for ‘bad smells’ in your code!).

Agile Software Development: The Cooperative Game (2nd Edition)
by Alistair Cockburn
http://www.amazon.com/gp/product/0321482751?ie=UTF8&tag=noopnl-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321482751

Refactoring: Improving the Design of Existing Code
by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts
http://www.amazon.com/gp/product/0201485672?ie=UTF8&tag=noopnl-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0201485672

See also this list of the top Agile books.

7. Database

Microsoft SQL Server ?2008 Internals
by Kalen Delaney, Paul S. Randal, Kimberly L. Tripp, Conor Cunningham, Adam Machanic
http://www.amazon.com/Microsoft%C2%AE-SQL-Server%C2%AE-2008-Internals/dp/0735626243/ref=wl_it_dp_o_pC_nS_nC?ie=UTF8&coliid=I3G1TGCEVM42MN&colid=3ONOW00RD5ADX

How about you? What do you recommend?

-Krip

How do you choose between architectural options?

July 7, 2011 Leave a comment

What process do you use to make architectural decisions? Do you know what goals are traded off against each other when choosing those options?  Is the process repeatable?  Is it well documented?

If you’re not already familiar with LAAAM, I think it’s worth 15 minutes of your time to watch this introductory video.

LAAAM stands for Lightweight Architecture Alternative Assessment Method.  It’s the brainchild of Jeromy Carriere and derived from Carnegie Mellon’s Architecture Tradeoff Analysis Method (ATAM).

Basically a hierarchical tree is constructed with a few major system goals at the top, like Performance, Maintainability, and Flexibility.  These are broken down into one or two levels.  At the leaves are “scenarios” – specific and concrete descriptions of features or function that map up through the tree associated with the goals.  Items at each level are prioritized (you can’t share the same priority), and then some math applied to compute preferential options.

For more in-depth training, watch the Tech Ed 2009 session: ARC314 Using LAAAM to Make Good Architectural Decisions, Fast!

-Krip

P.S. A whole load of Architecture Presentation’s from the Software Engineering Institute (SEI) can be found here.

P.P.S source