Main | Business »

Wednesday, April 08, 2009

Agile Software Development

So it's been a while since I updated this. It's time for another book report.
I've been working through Agile Software Development, by Robert C. (Uncle Bob) Martin, of Object Mentor, Inc. This is not his latest work, and it was a long time in the oven as it was, so the book is somewhat dated. A couple of the larger examples are in C++ (which in on my backburner for now) and were written before Agile, XP, or Test-Driven Development.
But the beginning of the book is solid - the Principles on which he measures "good" OO software, and the Practices (Agile, mostly XP) that help to create it. This stuff is kind of like normalizing a data structure - the really good DBAs know how to normalize anything, but often don't in order to optimize something besides the remote chance that data could be duplicated and then corrupted. Uncle Bob knows how to write "perfect" OO software, but then tempers those design goals with the real world of performance and maintenance. He is not lazy, and doesn't encourage laziness. Instead, he points out the trade-off of code complexity vs. great design, and chooses simplicity more often than not.
I have a feeling that this book will bang around in my head quite a bit as I write code, and as I go on to teach others to write code.
Recommended, but not my highest recommendation yet. Looking forward to the next one of his that I have: "Clean Code."
In the meantime, I have started The Art of Agile Development, by James Shore and Shane Warden. Too bad I don't work at or for a F1000 company - this stuff is excellent, but too often irrelevant for just little old me.
Updates on GUIs and Frameworks in the next post.
Posted by Dave at 5:21 PM : Comments
Categories: Books

Thursday, February 19, 2009

Book Review: The Pragmatic Programmer

Well, I don't expect these to be comprehensive reviews, but just a few notes about the books I have finished.

I have begun a regimen where I read a chapter out of a book every day. This keeps a constant velocity, and lets me get through books that have been on my shelf for years. I have enough varying interests that I am reading 4 book chapters/day. This takes some time away from coding right now, but I am learning so much that I accept the cost. Eventually I will get disciplined enough to do my reading in the early morning, before the world awakes. I expect that will be later, though, when the log house is complete and I can stumble over to my office and sit in a comfortable chair.

The Pragmatic Programmer was written in 1999 by Dave Thomas and Andy Hunt. It has stood the test of time, mostly because it avoids too much specific technology and focuses on the principles of effective programming. I can see the influence of this book in the book I'm working on now, "Agile Software Development: Principles, Patterns, and Practices" by Robert Martin. "Pragmatic" has become a code word and has been branded as such in the industry. The "Pragmatic" authors have taken their own advice and started learning a new language every year, which is profitable for them, since they often get to write the book about said new language. They jumped on Ruby fairly early, if I recall. It makes sense: this book has a lot of Perl in it, and Perl is so 20th Century.

Metaprogramming is a big deal for them - getting scripts to write code. This has become standard in the industry, and .Net and Java annotations do this as part of their internal structure. However, that, and DRY (don't repeat yourself) are the big takeaways from this book.

They are fumbling about the agile way, but XP was just being articulated at the time, so things like Unit Testing and short iterations were still somewhat controversial. Now they are not controversial, just not done in practice. Hmmm.

Don't Repeat Yourself is a huge deal. If I could get my code to that level, I'd be ecstatic. Redundancy is a real enemy. It is the one thing that killed EJBs, I think. Spring is just so much more terse. It is also the reason I don't like Hibernate. I have a database schema that already exists; I don't want to repeat it in awkward XML. I also don't want to give a single application power over a database schema - often the data is much longer-lived than the application. So I want to work from the data out. That's what led me to the design for DBDB.

Getting good at an editor! What a good idea! I used to think in Emacs keystrokes, but I've been away from coding for long enough that the Mac way is more natural now. I don't know if that will stay, or if I'll get back to Emacs, which has so much more power available without lifting my fingers off of the keyboard. With this laptop, I have a touchpad not too far away, which makes things somewhat easier, but still, keeping the fingers on the home row is definitely a win overall.

I really appreciate the wisdom in "The Pragmatic Programmer," but I am nowhere near that level yet. I will keep working towards it - it feels like I may have to put this one in a rotation, and read it again in a year or so, to keep the target in front of me.

In the meantime, I have plenty of other books in front of me.

What did you think of "The Pragmatic Programmer?" What, you haven't read it yet? Or are you like I was, and felt so guilty about how you actually work that you never finished it?

Posted by Dave at 10:43 AM : Comments
Edited on: Thursday, February 19, 2009 10:46 AM
Categories: Books, Software

Thursday, February 05, 2009

Introduction

Welcome to the North Creek Blog. This will be a record of the creation of a new software development company in northern Alberta.

My name is David Block. I am starting the company I would like to work for (Thanks for the idea, Joel). It will use agile, Test-Driven Development, and it will assemble Open-Source tools and libraries to create custom applications for small businesses that have the capabilities of much larger, more expensive commercial software. I plan to stand on the shoulders of many other giants, and see what comes of the process.

I have a few ideas of my own. I like working off of a real database engine, so I will start with a general database schema that will store most of the nouns in the program. Then, I will build a workflow solution on top of that schema that thinks in terms of verbs. The verbs will lead to the dynamic generation of the interface needed.

I have a library of database interaction code that I have developed over several previous projects, for different employers. The latest name for it is DBDB. I will use it as the ORM for my application. It is very lightweight, and requires very little maintenance to adapt to dynamic database schemas. I don't like maintaining a big xml file - flashbacks to J2EE.

I will also use a lot of Spring for setting up the project.

I will try to post reviews of useful books, projects, and libraries as I try them out.

Currently, I'm trying to read some of the books that have been sitting on my shelf for a while: JUnit Recipes, The Pragmatic Programmer, and Uncle Bob's Agile Software Development. Now I have to try to apply those principles as a small business owner, working on my own.

Hopefully I'll see you around.

Posted by Dave at 6:21 PM : Comments
Edited on: Friday, February 06, 2009 12:12 PM
Categories: Books, Business, Methodology, Software