Archive for the ‘Research’ Category

Just Finished Reading: Design Patterns Explained: A New Perspective on Object-Oriented Design

Sunday, July 24th, 2011

This was really an excellent book. I’m hesitant to say if it is really better than other books I’ve read on design patterns simply because I question how much reader experience plays a role in getting a book like this. This is not the first book I’ve read on Design Patterns and OOP programming. However, it is the first one that I’ve really felt that I got. Now there are two possible reasons why I think I got it. First is that it is a clear well-written, well-organized book. Second, is that I actually have some experience to apply to the concepts in the book.

First off, it was indeed a good book. Theory was balanced well with examples. Theory was related with clarity, and the examples were relevant to the theory. I particularly liked the focus not on functionality, but on responsibility. I feel it gives the program more of a human quality than just a machine. Beyond the way it changes one’s perception of the program, it really I think gives more meaning to the program. The reality is that after spending months working on a program I do become somewhat attached to it. Handing that program off to someone else to maintain is not always easy. I’ve noticed that after reading this book I’ve looked at my programs as less of a set of functionality that solves a problem, and more as a set of workers, each with there own set of responsibilities, that, at a high level, solves a given problem. I kind of view it as my classes have a responsibility. That class is decomposed into the functionality necessary to perform that responsibility. At this point testing now involves straight unit tests of pieces of functionality, and something more that tests that a responsibility is performed. This seems above unit testing, but not quite integration testing. Above all, my development style has not really changed, only my way of thinking about it.

Which brings me to my next observation. Which is how my experience affected my perception of the book. I’ve read a number of OOP books that revolve around the explanation and promotion of design patterns. However, I read all of them during my first year of real day-in day-out development. They sort of planted the seeds, but I remember going into the books with so much excitement, only to come out on the other end confused and wondering what just happened.

I think I now understand though. I didn’t come out of this one dazed and confused, and I’m not convinced that it is because it was a much better book. Instead what I found throughout this book was a constant connection with my experience. As he explained the Adapter Pattern, I would think that I used this all the time, I just didn’t realize it had a name. When explaining the Bridge Pattern I’m thinking of how I could have written better applications if I had understood then what I know now. A number of years have passed between reading my first Design Patterns books and now. And those few years have been spent developing software full-time. As such Design Patterns now make sense to me. Explanations seemed to clarify or give names to what I already know conceptually, or provide ways to improve designs I have or am already working on. I feel that for me at least I had to spend time designing software without patterns to really understand how patterns can provide consistency, maintainability, and a common dictionary of ideas for developers to communicate more effectively. Overall, very much worth the read.

Just Finished Reading: 97 Things Every Programmer Should Know

Friday, June 10th, 2011

This is a very good book for providing high-level insight into both the technical and the procedural aspects of programming. By procedural I mean in general the software development lifecycle process. There are 97 chapters, each roughly a page in length on a topic every programmer should know. The short concise chapters actually made this a very easy and quick read.

The book did what I would want any book to do. It taught me a lot of things I didn’t know, and confirmed a lot of things I thought I knew. I enjoyed the chapters on tips for programmers interacting with and working with QA departments. I feel that it is very important for both teams to understand each others approach. I also felt like there was a lot of common sense in the book. The advice given in many cases was good practical tips that could be applied independently of organizational structure. Essentially, most of what I found could be practiced by both the cowboy coding freelancer and the programmer working within the confines of structured processes.

Lastly I’ll note that I thought it was pretty cool that some topics were covered multiple times from different perspectives. Not to the point of contradiction, but enough to indicate the context sensitivity of certain topics. Again, a good read. I certainly feel like I came out of the book a better programmer.

Just Finished Reading: Head First Python

Sunday, June 5th, 2011

I’m usually a huge fan of the Head First series of books. They are, in general, written in a way that is geared towards efficient learning. I almost always take great joy in some of their puzzles and subtle humor. This book, was no exception up to the chapter on mobile development with Python.

At some point in this chapter nothing seemed to work. I ended up doing a lot of research trying to understand how to do now what the book was instructing me how to do then. The problem was essentially that the Android API for Python had been updated and changed fairly substantially it seems since the book was written. While this is natural for APIs and programs in general it can really ruin the teaching / learning experience for someone really new to the topic.

The resulting issue was that each of the following chapters (which I believe was three) were very difficult to follow since they were building on the mobile app development chapter that had fallen to pieces.

In the end I learned a lot about Python outside of the Android API, but there may be better general python references out there to check out.

Just Finished Reading: Django – Visual QuickPro Guide

Wednesday, June 1st, 2011

I am pretty familiar with the MVC structure and have been writing Python for a while now mostly within the context of unit and integration testing. I started to think that maybe it was time to begin looking into web development with Python. In the past I’ve done a little work with python and CGI, but decided to look into Django as a framework for building Python sites.

I read a number of reviews on this book before picking it up and many of the complaints seemed to revolve around the fact that the book does not consistently build an application throughout the chapters. While true, I believe it adds to the learning experience in that it drills the basics of creating a Django application into your head. The book has 10 chapters and each chapter is a new application. While many of the applications are simply expanded versions of the application built in the previous chapter the author to go through again the process of creating the application. While probably annoying for the advanced Django programmer, the beginner leaves the book with the ability to set up a Django application in his or her sleep. Ultimately repetition is the best way to learn, and this book is full of repetition.

The writing style was clean and concise. No real issues with versioning. All of the code seemed to work as illustrated. Overall, I was looking to get a broad idea of what Django was all about, and on a high level what I could get out of it. If you’re at all advanced with the Django framework this book will probably bore you out of your mind, but if your a Django newbie I think you’ll find this book very informative.

If I had one criticism of the book, it would be that on a very basic level the book continued to be very instructive in how to accomplish certain tasks. I like the idea that I have to create a new application and set up a new database for each chapter. But I also think that it is good to force the user to begin doing it themselves without instructions. For example after chapter 6 or so the instructions should have indicated to the user that they should create an application named ‘thisApplication’ with a database named ‘thisDB’ instead of going through detailed instructions each time.

Overall good book, and well worth the time to read.

Just Finished Reading: Object-Oriented Programming in ColdFusion

Thursday, January 6th, 2011

I’m really glad to see this book (by Matt Gifford) mostly because it’s a book with a somewhat narrow focus around Coldfusion.  When I say ‘narrow’ I’m certainly not implying that CF or OOP is a narrow topic, but more or less that this is a book about Coldfusion programming that focuses its scope giving it more depth than a comprehensive study of how to program using CF.  You know, it’s not often that a new CF book rolls through my ‘Just Released’ column on my Safari library account.  So I was very pleased to see this one slide up the list.  On the other side of the token however, CF has an incredible blogging community that almost single-handedly serves as the gold mine of CF knowledge.

I’ll just quickly throw out first the negative critique to get it out of the way so no one dwells on it.  Minor at best, I noticed a number of editorial mistakes around grammar and spelling, especially towards the end of the book.  Nonetheless, as stated, trivial at best.

To be a book on programming, I found it to be an easy read with simple and cleanly explained concepts that can be pretty difficult to explain.  I particularly loved the focus on the use of components.  I myself am a 99% fan of CFCs and a 1% fan of a few custom tag wrappers that I’ve really liked.  The flow and organization of the book really worked for me.  The first three chapters are critical in that you should be able to formulate a stable self-documenting CFC that fully encapsulates its logic before learning how to use a set of CFCs in the larger scheme of an application.  Hence, the focus of the remaining four chapters.

Overall, I’m glad I took the time to read it and I definitely feel I have a more stable grounding in not only implementing an OO application, but more so understanding what it is I’m doing and why.