In last issue's editorial, “Can a Fish Use a Bicycle?” I discussed a statement made by Billy Hollis and relayed by CODE columnist Ted Neward that “Agile is treating the symptoms, not the disease.” This statement made in a conference session discussed the complexity of today's development stack. I stated that Agile has absolutely nothing to do with the complexity of dealing with today's development “stack”. So how do you as a developer make your life simpler when dealing with today's Cheesecake Factory-like menu of software development choices? (If you've never seen the menu at Cheesecake Factory, try it; they offer an almost overwhelming number of choices.)
I have spent the last 20 years of my career writing software for personal computers. When I started in this business, developers had limited choices. WordPerfect was word processing king, Lotus 1-2-3 owned rows and columns, dBase III+ was the database tool and Netware owned the networking space. During that time I wore the hats of both network administrator and database application developer. Not long after I started, developers like me faced numerous other technology choices: Microsoft Word challenged WordPerfect, Microsoft Excel entered the spreadsheet space with Quattro Pro and Lotus 1-2-3, and FoxBase+, Clipper and Paradox gave dBase a run for its money. The amount of innovation in the consumer and software development space has accelerated over the last 20 years with no real end in sight (think Microsoft Access, Visual Basic, Visual FoxPro and ASP Classic).
One advantage of working in this business for so long is that I have been able to incrementally learn these new technologies. In my mind, today's developers have to master a lot more technologies to be proficient for what many companies demand for their software projects. Table 1 illustrates the litany of choices facing today's developers:
You can see how many technologies developers must master today. So how do you solve the issue of an ever exploding technology stack? It's actually really simple. You need to “box” your problem.
As many of you may already know, I was a long time Visual FoxPro developer. I absolutely that Visual FoxPro let me create a fully functional yet rich application with zero reliance on third-party add-ons. Visual FoxPro had all of the tools I needed: a form designer with a set of controls that rivaled what took Visual Studio three versions to match, a report writer, a label generator, an object-oriented language that had a built-in SQL syntax (this is where the ideas for LINQ originated) and finally, a self-contained database format. The applications I helped to build did have one external dependency - We built on SQL Server once version 7 shipped. I learned that it is nice to be able to build applications with “just the tools in the box.” We only had to learn Visual FoxPro (and a little SQL server). For developers like me, our problem was boxed.
In order to apply this to today's development environment, you need to box your problem. Or simply put, you need to focus on one thing at a time. One of my current projects is teaching my 12-year old daughter to program. She has never programmed before and it will be a challenge to teach her how to be a developer and how to keep her interested. So what is my strategy for my daughter? Should I try and teach her OSX, MySQL, C#, ASP.NET MVC, HTML/CSS and JavaScript at the same time? No. Here's my current syllabus for her:
- HTML/CSS
- JavaScript/jQuery
- Ruby
- Ruby On Rails
- MySQL
Yup, I'm going to teach my daughter to be a Rails programmer, but first I need to teach her the basics of HTML and CSS. Then we'll augment that with some JavaScript and jQuery. Then we'll move into a dynamic language: Ruby. Finally, we'll put it together into a full development stack by adding Rails and MySQL. She will be the only kid on the block that can buy her own car because she will be working for my clients!
Remember it's all about building blocks. You need to start small and focus on one thing at a time. To try and do more is a recipe for disappointment.
Image licensed under Creative Commons License
http://www.flickr.com/photos/tagez/190979910/
Table 1: So many development choices to master.
OS | Database | Data Access | Transport | Interface | Other Stuff |
---|---|---|---|---|---|
Windows | SQL Server | nHibernate | WCF | WinForms | Windows Workflow |
Linux | Oracle | Entity Framework | Web Services | WebForms | Dynamics |
OSX | MySQL | LINQ to SQL | REST | Silverlight | Amazon Cloud |
Postgres | ADO.NET | Flash | Azure | ||
Couch Db | WPF | ||||
Ruby On Rails | |||||
ASP.NET MVC | |||||
SharePoint |