I’ve noticed a rather interesting thing about best practices and trends in software development, they tend to oscillate from one extreme to another over time.\n\nSo many of the things that are currently trendy or considered “good” are things that a few years back were considered “bad” and even further back were “good.”\n\nThis cycle and rule seems to repeat over and over again and is prevalent in almost all areas of software development.\n\n
It has three dimensions
\n\nDon’t misunderstand my point though, we are advancing. We really have to look at this from a 3 dimensional perspective.\n\nHave you ever seen one of those toys where you rock side to side in order to go forward?\n\n
\n\nSoftware development is doing this same thing in many areas. We keep going back and forth, yet we are going forward.\n\nLet’s look at some examples and then I’ll tell you why this is important.\n\n
JavaScript!
\n\nIs JavaScript good or bad?\n\nDepends on who you ask, but it is definitely popular right now.\n\nIf we go back about 5 years or so, you’ll get a totally different answer. Most people would suggest to avoid JavaScript.\n\nNow, JavaScript itself hasn’t changed very much in this timespan, but what has changed is how we use it.\n\nWe learned some tricks and the world changed around us. We figured out how to solve the biggest problem of all for JavaScript…\n\nWorking with the DOM!\n\nJQuery made it extremely easy to manipulate the DOM, the pain was removed.\n\nYet, new pains emerge, hence backbone.js is born.\n\n
Thick client or the web?
\n\nTake a look at how this has changed back and forth so many times. First the web was a toy and real apps were installed on your machine.\n\nThen it became very uncool to develop a desktop app, everyone was developing web apps.\n\nBut soon we ran into a little problem – those darn page refreshes. Gosh!\n\nSo what did we do? We sort of made the browser a thick client with AJAX.\n\nThat created so much of a mess that we really needed clean separation of views from our models and our logic (at least on the .NET side), so we went back to rendering the whole view on the server and sending it down to the client with MVC. (Yes, you could argue this point, but just pretend like you agree and bear with me.)\n\nThen we decided that we needed to start moving this stuff back to the client so we could do much more cool things with our pages. We started pumping JavaScript into the pages and ended up creating thick clients running in browsers running on JavaScript and HTML5.\n\nAnd now we are seeing traditional thick clients again with iOS and Android devices and even those will probably eventually migrate to the web.\n\n
Simple data vs descriptive data
\n\nCheck out this sine wave!\n\n
\n\nFirst we had fixed-length records where we specified the length of each column and exactly what data went there.\n\nThen we moved over to CSV, where we had loose data separated by commas.\n\nThen we thought XML was all the rage and beat people up who didn’t define XSDs, because data without definition is just noise you know!\n\nNow we are sending around very loosely structured JSON objects and throw-up whenever we see angle brackets.\n\n
So many other examples
\n\nTake a look at this list:\n\n
- \n
- Static vs dynamic languages
- Web services ease of use vs unambiguity (SOAP and REST)
- Design upfront vs Agile (remember when we just wrote code and deployed it, it was kind of like Agile, but different)
- Source control, constant collaboration vs branching
- Testing and TDD
- Databases, stored procs vs inline SQL
- <% %> vs Controls
- …
\n
\n
\n
\n
\n
\n
\n
\n
\n\nIt goes on forever\n\n
So why is this important?
\n\nIt is not just important, as a developer, it is CRITICAL for you to understand.\n\nWhy?\n\nBecause whatever happens to be “cool” right now, whatever happens to be the “right” way to do things right now, will change.\n\nNot only will it change, but it will go the complete opposite direction.\n\nIt won’t look exactly the same as it did before – we will learn from our previous mistakes – but it will be the same concepts.\n\nAdvancement follows this sine wave pattern. Don’t try and fight it so hard.\n\nYou have to be balanced. You have to be able to understand the merits, strengths and weaknesses of both sides of a technology or best practice choice in development.\n\nYou have to understand why TDD improved our code until it led us into overuse of IoC and pushed C# and Java developers to the freedom of dynamic languages like Ruby.\n\nYou have to understand that eventually the course will correct itself yet again and head back to the direction of the new static language or even an old static language that will be resurrected.\n\n
This is how you will grow
\n\nIt is also very important to realize that this is exactly how you will grow.\n\nJust as the technological world around you is in a constant forward progressing pendulum swing, so are you, at a different pace, to a different beat.\n\nI know that through my personal development journey, I have switched sides on a topic countless times.\n\nYou might call me a “waffler,” but I call it progress.\n\nLife is a game of overshooting and adjusting.