Over my years of experience:
- The languages have changed (usually relatively slowly).
- The range of problems which can be practically solved has grown (somewhat faster);
- The size and complexity of the solutions has increased (relatively quickly);
- There has been something that is the
flavor of the day (sometimes good, often bad).
As noted on a discussion on patterns, the gang of four did not invent patterns. They came up with terminology and templates for solutions which where already being applied.
Unlike many other fields there is still a lot that is not common practice. I have seen lots of cutting edge stuff come and go. Many of these were rephrasing of techniques already in practice, and those usually succeeded to some extent. Others have more or less gone away, and most where new approaches. (Anyone seen a 5th generation language lately?)
The programmers I have seen who are most effective can select and assemble proven components into a working solution. This rarely involves anything cutting edge, which generally would increase the project risk. The ability to build on work that has already been done, allows us to increase the scope of what is possible.
Programming languages tend to fall into relatively few families. Familiarity with one language in a family makes working with similar languages easier. Understanding the libraries available in the language and leveraging them can greatly increase productivity and reliability. In general, I would choose an older language with appropriate libraries over a newer language without appropriate libraries.
When applying new technologies is important to avoid the
Because We Can syndrome. Adding a new technology because it is the flavor of the year, tends to cause more problems than it solves. Knowing when the technology will solve a real problem, and when it will just add complexity is a useful skill.
A really good programmer will solve the new problems, and use existing solutions for the rest. Few companies need bleeding edge technology, all need solid solutions.
I usually regret sliding down the razor blade. I don't recall ever regretting using a proven technology. However, a lot of what is described as
new is repackaging of something existing. Usually, this repackaging makes things easier to understand and apply appropriately.