This article describes three fictional characters as they all learn how various tools and methodologies work in the world of technology, internets and programming.
Tom works with some massive clients these days and has been in the industry for 10+ years, seeing various tools, frameworks and methodologies come and go. He is very used to the "right tool for the job" idea and is happy to switch between tools, languages and workflows based on the project he is working on, and the team he is working on that project with.
Tom has recently decided to learn about InternetThingX, after he saw somebody give a great talk about it. In part his interest is down to his love of learning new things, but he also thinks it might solve a problem he has run into on a few other projects, and thinks it will help in some cases in the future.
Tom is an eager learner, an explorer and is motivated by playing with new things. He also has a real penchant for teaching, and after learning and successfully implementing InternetThingX in a project or two Tom starts to recommend that others take a look too.
Harry - like Tom - is interested in learning new things too, but is a little less experienced. He is also incredibly busy, being a respected Symfony and Drupal developer. He makes enough money to get all of his bills paid, and does not have much time outside of that due to his clients never ending demands.
Harry only knows PHP but never saw a problem with that. He sometimes uses Drupal when he needs a CMS, Symfony when he needs a framework, and his web stack uses XAMPP because he is on Windows.
Harry saw Tom give a talk about InternetThingX, and loved it. Harry struggled for a while with InternetThingX because it was quite new, but after finding some more documentation he eventually realized it's a really useful tool for some of his projects.
He has added this to his reasonably small tool-belt for occasional use, and will actively recommend it to others because he is proud about learning a new thing. After all, it's not often Harry has the chance to learn new technologies with all those bloody clients blowing up his phone around the clock.
Dick has only been a programmer for about a year. He is very confident in his skill-set and has built a few sites, but his tool-belt is restricted to just one of each type of thing, which he has learned as he needed to use it. Dick is actively looking for things to learn so that he can become a better developer.
Dick sees Harry suggesting that InternetThingX is good, so InternetThingX goes straight on Dicks todo list.
It takes Dick a really long time to get the hang of InternetThingX. InternetThingX is quite a bit more complicated than InternetThingA but Dick keeps at it because he saw Harry saying that it was good. Harry missed out some of the "InternetThingX in useful in this context…" because he was just proud about learning the tool, and so Dick just keeps on chugging away trying to learn it. He never used InternetThingA anyway, so he can't give up now after spending so much time to wrap his brain around it.
When Dick has finally learned all about InternetThingX he feels like a superstar for mastering it, and now uses it for absobloodyutelyeverygoddamnthing.
After spending that long trying to learn it, why wouldn't he? It has more features than that other thing and it can theoretically help Dick avoid some big scary problems that happen at large scale. Problems sound bad, so… cool!
Dick now goes around recommending it to everyone who mentions trying to do something near the problem space, not even necessarily in it. He doesn't have many options available so he proudly shouts about the closest one and it will technically work. If Dick spots anyone talking negatively about InternetThingX he pounces, telling them they're wrong. He might not even realize it's a defense mechanism, but whatever, they're stupid. They don't understand.
Dick screams at Tom when Tom suggests at a conference that InternetThingX might not always be the right tool for the job. Why the hell would Tom go spreading stupid shit like that? Dick remembers that it was complex to learn and took him a while, but maybe that was just because he was fairly new to things. Really it was good for Dick jumping in at the deep end. If others drown in missed deadlines due to not learning the tool quick enough then… well that is their fault. It's make or break. In the long run Dick feels better off for for doing things the complicated way.
Dick is well intentioned, but has been mislead to believe a meal must always be a four-course culinary masterpiece, when sometimes a basic meat and two veg will satisfy the criteria. He is likely to run around forcing beginners to get confused by overly complex solutions to problems that they (and he) do not have yet, and might not have for years.
Everyone has to start somewhere, but don't be a Dick.
Harry is a good lad, but he should have explained the use-cases a little better in the blogs he released.
Maybe Tom is just a know-it-all with too much time on his hands due to charging his clients through the nose.
Nobody is perfect.
In this story, InternetThingX could have been:
- The "Repository" Pattern
These two were mentioned on Reddit as a joke, but they fit in here perfectly too:
Learn what you reasonably can in the time you have available. You can't learn everything, but you should learn more.
Try to learn when something is useful, but more importantly learn when not to use something. You don't need to use Vagrant for every project ever.
For example, Vagrant is excellent. I wrote about how excellent Vagrant is and how it can avoid obscure problems on production. I forgot to write that I use MAMP for basic CMS projects because the CMSs have all been built to abstract away those differences, and most of the time it doesn't matter.
I also forgot to mention that sometimes clients don't really feel like paying you the day/week it takes to get their architecture moved over, and all of their other staff upgraded and switched over.
Vagrant is cool. Use it when it fits. Don't bother if its trouble.
PaaS is cool. Use it when it fits. Don't bother if its trouble.
Laravel is cool. Use it when it fits. Don't bother if its trouble.
The "Repository" Pattern is cool. Use it when it fits. Don't bother if its trouble.
TDD is cool. Use it when it fits. Don't bother if its trouble.