This is the first in a series of articles on a programming project that I am working on. I thought it would be interesting to share some of the aspects of the project as I go along. Some of the articles will be technical in nature and some of them will not be.
A career of projects handed to me
The great majority of my career people have told me the projects that I am going to work on. It started in college when you were given the input files and told exactly what the program should do and it was your job to craft the program to get the desired results. I feel no ill will against the professors for doing this, as someone who was a professor’s aid and had to grade the programming projects, I can tell you it is a lot easier when everyone is working on the exact same thing. You can see quickly see if they got the program to compile and run, got the correct output and spend the majority of your time looking at the fit and finish of the program (“Has Ricky ever heard of comments?”). The nice thing is that college prepared me for the typical Information Technology career where you are handed your assignments.
I spent about 1/2 of my career in consulting and about 1/2 of it in industry (with a year off to teach). For the most part there is little difference in the 2 sides of the profession, there are business problems to solve and they bring in resource use technology to solve the problem. A lot of the projects that you get assigned to are existing applications that need to be modified, we call those legacy. Occasionally you are assigned a project that is a new project, these are highly desirable. Even better is when you get to be on a project where they have not made any decisions about the technology or the business process to be solved, this is pretty much the pinnacle of the projects. I have been lucky enough to work on two of these in my career.
The only think that is better than the project where only the business problem to solve is decided is when you get to pick the problem to solve. To get this you have to be really lucky, create a startup or work on a side project. I have picked the side project route.
I am not a very creative person; I alluded to this in my recent article on crayons and creativity. It is tough work for me to think of ideas that are true stream of consciousness. My innate lack of creativity and years of projects being handed to me have really stunted my inspiration. I really envy people who come up with “an idea a minute” (My buddy Josh Holmes is really good about that – he amazes me with how many ideas he comes up with).
One of the most inspired people I know is my wife Jodie. It is not software related, but she will take something that she sees and turn it into the most incredible window displays at her work. She will buy an antique camera at a garage sale for $1 and turn it into a wonderful story. Me, I go right for the screwdriver and try to get the camera working. When I asked her about how she finds the inspiration she told me:
There is art everywhere; you just have to open your eyes
Patterns for Inspiration (about programming projects)
I have been thinking a lot about different projects that I can tackle and I have noticed that the general ideas fall into one of a few patterns. By no means is this a complete list, but I think most inspiration can fall into one of these patterns:
I can do that better – Probably one of easiest ways to become inspired is to see something implemented and to recreate the idea, but to do it in a “better” way. Better is a very suggestive term, because one person’s better is another person’s awful. Sometimes the difference between the applications is merely cosmetic.
I can use that idea, but in a different way – This is where you see an application of technology and think about other ways you can use the technology (or idea). A great example of this is seeing data (such as hotel locations) displayed on a map in a web application and you think of other map based data that you can overlay on a map in a similar fashion.
How would I do that in – This is when you see something implemented, but wonder how you would do it in another technology. Don’t confuse this with the “I can do it better” pattern; this is implementing the same idea in a radically different way using a different platform.
Seeing a problem and fixing it – This is the first one on the list that does not involve a reference implementation, thus it gets a lot harder to implement than the previous ones. This is taking a pure business problem and dreaming up the solution and implementing it.
Radically changing how things are done – The previous pattern was about changing and improving the way things are done (sometimes by leaps and bounds). This last pattern is about destroying and totally recreating something.
Stay tuned for the idea I am going to work on (I have narrowed it down to a couple of choices).