Dot Net Rocks is certainly one of the most influential and valuable podcasts for .NET developers and their recent show (#476) was a compelling discussion about whether software development has become too complex. Recorded at DevLink in Nashville, the panel members included Billy Hollis, Kathleen Dollard, Jim Holmes and Josh Holmes (bios on the DNR page).
I found myself frustrated listening to this discussion, however because the consensus appeared to be that as an industry we were letting things get too complex for the hobbyist user* to get started programming in the way that was much easier a generation earlier. In fact, it seemed that many felt that Microsoft in particular has befuddled many a professional programmer by having so many technologies.
*Hobbyist was defined as a person whose first job is not programming, e.g., a doctor writing a program to make his practice run more smoothly.
[As an aside, I can’t imagine a company like Microsoft making everyone happy about this. There appear to be 3 possible paths:
- if you don’t advance you are neglecting the needs of developers
- if you advance and deprecate the old technology you are abandoning people
- if you advance and don’t deprecate, you end up with a lot of concurrent technologies.
It was argued that Microsoft (and others) are pushing new technology for revenue, but my question is: would you rather write your next product using Silverlight/WPF and C# or using C and your original copy of Petzold? For me, the question you have to ask is whether the new technology is better enough to overcome the cost of learning the new technology. For me the answer has been ‘yes’ but I know a whole lot of folks who have started to say ‘no – I’ll stick with what I know.’ ]
How Can We Reduce The Cost Of Entry?
My frustration was not with the panel; I think they covered the issue extremely well, especially with the corners filled in by the extraordinary comments from the audience. My frustration was that there seemed to be a consensus that it was very hard to find what you need and learn how to use it. Clearly we need to be doing a lot more to direct folks to the available material; and we need to broaden the material.
This is an issue I’ve been struggling with for a very long time. A number of my books (e.g., Programming .NET 3.5), my Getting Started posts, were attempts to create a “drop line” approach to learning the newest technologies. (By drop-line, I mean the most direct and least complex approach.)
I think we can agree that we do prefer the new technologies (e.g., Silverlight, .NET, etc) to the old (COM?!). On the other hand, I certainly understand why a programmer trying to get started with .NET may well be overwhelmed by the plethora of choices (data access being the canonical example).
Now, clearly Microsoft is working on this problem on a dozen levels: redesigning our sites, providing Getting Started pages, videos, tutorials, seminars, white papers, etc. etc. And while this is working in many ways, you can’t listen to the panel and not think more has to be done.
So, I offer four ideas of things we (as an industry) need:
- A gizmo to help developers figure out what technology they need to accomplish their task. As a start, that gizmo could easily be a Silverlight application that not only asks you questions and makes recommendations, but tells you why it has recommended that technology as opposed to another: “For your data retrieval we recommend you use Entity Frameworks because your project needs yada yada yada. The realistic alternatives include LinqToSql which can do blah but won’t meet your need to do yada yada. You could also use Data Services which will provide blah blah, but won’t give you yada yada.” [This might be a good project for AgOpenSource]
- An index of all the learning material that is highly searchable
- The ability to go to one web page that has everything you need to get started with your technologies of choice. This goes back to the first idea. Once the user reviews the recommendations she picks the technologies (check boxes?) and then clicks a button that assembles a web page that has links to the latest version of each of the required tools.
- Examples of creating applications from design to delivery that discuss these choices, and demonstrate every aspect from obtaining the tools to implementing the application. As a first attempt, I offer the Turing Project. Many others have done this, many more will, and we’re learning more and more about how to do it in a way that greases the skids.
There is much more to say on this topic, but I’m very grateful to DNR for starting the discussion. I look forward to reading your comments.