Wednesday, October 10, 2012

Stuck in the Past or About to Be

Experienced software developers seem to get stuck in the past and less experienced developers repeat the same mistakes that caused the experienced developers to get stuck. This is not absolute truth but it is a pattern I see way too often. The sad thing is both groups bring good qualities to a project. The problem is both stop learning or maybe it would be better to say they value different learning.

Experienced software developers value what they already know or have experienced more than learning new ways to do things. They remember the problems they had but they do not always remember the exact context that caused them. This point of view will lead to several issues, for example:

  • language lockin
  • tool/framework lockin
  • dogmatic opinions that do not explain context
  • closed to new ideas
  • afraid of change in general
Less experienced developers value new tools, languages, frameworks, etc. more than the lessons learned from experience. They have not had years of supporting an application and/or have only experienced a limited number of context. This point of view also leads to several issues, for example:

  • so many languages in an environment it is difficult to maintain
  • multiple frameworks in the same application
  • I did it this way because I like it regardless of how it affects others
  • no standards at all
  • the language/framework allows it so I should be able to do it

The recent JavaScript semicolon debate is a partial example of both sides of these negatives of experience and lack of experience with very little benefit that both sides offer.

The developers working on things like node.js, npm and the supporting tools have really pushed some really great ideas, tools and techniques in JavaScript. This is a very good thing! But you can see their inexperience in some of their comments. They will have a nightmare to support in the future. It reminds me of some of the young and upcoming Ruby/Rails developers 10 years ago. Go read what they are saying about having to support applications where they did not learn from past good development practices.

Experienced developers also had issues. The way they made comments drove some of the less experienced developers to get stuck in their point of view because the response was so dogmatic and contextless at time. This is sad because they have really good reasoning behind their points and if the advice was heeded some really painful issues could be avoided in the future.

It seems every new language or tool has been declared not ready for production by some experienced and respected developer, Visual Basic, Java, Ruby, JavaScript, etc. Then along comes a creative individual, who does not have the experience that says it cannot be done, and does something that solves real peoples needs. But unfortunately this creative person repeats some mistakes of the past and after 10 years of maintain these projects is afraid to change and repeat those mistakes again and the cycle continues.

Somehow we need to value of both learning from experience and openness to new ideas, languages, etc. The two learnings complement each other. Luckily if you muddle through that JavaScript argument you will see both young new developers and experienced developers commenting and writing blog posts