Another clickbait title from yours truly. But you already got here, so stick around.
This is all over the Internet!
A lot of us are looking for answers to one basic question:
Which new "tool" should I learn this year?
We may have different reasons. Some of use love to learn something new every once in a while. Others want to be more hireable or more job-able or more client-able or more money-able. No matter our reasons, we need to get on the "juice" as quick as possible. We need to get our fix.
Here's the deal, there's no single, absolute answer to the above question or any of its variations. Whenever I get such a question, I give the consultant answer — It depends.
So, when I first saw the question, I was tempted to give the "Learn the basics" lecture. I have given that before, countless times.
A bit of backstory.
I always thought it's better to be a generalist. To know a bit of everything. Maybe it's me, maybe it's our national culture — a Romanian is good at almost everything — the thing is that I loved to be Mr. Know-It-All.
Not a big problem, but I was so absorbed by the generalist approach, I belittled people who were good at only one or two things. I did the same to people who believed knowing a bit of everything is not a good way to go about your work. And there was another problem: I wasn't Mr. Know-It-All, I was more Mr. Know-A-Small-Bit-Of-Everything — a mouthful, I know.
I realised I was wrong last year, when after a small depression in my consulting practice, I was forced to think about my weak and strong points. Never did that objectively. I always skimmed the surface and moved on. But I realised right then and there that introspection and being objective about one's skills, goals, and plans is crucial.
So along with realising I was being an A-hole to people, in mid-2017 I realised I got my tech strategy wrong.
For example: I wanted to deepen my Go knowledge. I figured out I just can't add Go to my speciality stack.
Why? Because I had too many!! I was full!!
Nobody would have ever believed I knew 7 programming languages, 15 frameworks, 20 testing tools, automation, DevOps, Agile and a ton of libraries around those languages and frameworks. And the truth is I didn't know. At least not well enough to be considered a specialist.
I am well aware of T-shaped people and E-shaped people concepts. The problem was I was more of an Underscore-shaped person. Like this: ____ . Broad base, no real specialty. My only advantage was that I'm a good critical thinker / problem solver and when I get stuck I push through with sheer force.
So I sat down to rethink my strategy. I created a list of things I know well. I continued with the things I know marginally well, all the way through to things I would like to learn.
Then I thought about the types of projects I worked on for the past two and a half years. I split them by asking the following questions:
- How enjoyable was working with the client?
- How much revenue did the project generate?
- What was the frustration level once the project was through?
- What did I learn during that project and how important was that for my growth?
I narrowed it down to a list of 6 items. From that, I generated three lists of technology-related items: frameworks, languages and concepts. For two whole weeks, I opened the note where I had the lists daily. I went through each one and tried to figure out what I needed to remove. I wanted to free up time, brain real-estate and be able to better target future software projects. During that time, I was also thinking about re-designing my personal website, because I felt that it did not represent me. I had used 3 types of static site generators by that time: Jekyll, Hugo and Middleman. For the personal website I used Middleman.
I kept hearing about this React-based static site generator called Gatsby.js but I always thought static sites with React are nonsense. What a stupid idea! I'm glad I didn't settle for that. One day, while working on my website, I realised I could narrow down my technologies list even further. I just had to focus on the things that are common to all the 6 projects from my list.
So I went one last time thought my initial list of projects and created a single list. One with all the technologies I used, without splitting them into frameworks, languages etc. If I found some technology in more than one place, I would add and extra "1" next to its name. Then I counted up the 1s and if any item had a score bigger than 3, I would add it to my 2018 stack.
This is how I managed to narrow down my technology stack to a simple list.
Remember that the title begins with "CLICKBAIT". But, if you'd like to know what framework I'm planning to use in 2018, it's React.
The reasons I chose React are simple:
- It has an amazing and vibrant community.
- There's a lot of nice tooling built around it — Check out this article I wrote, about Chrome extensions I use. There are some useful extensions for React development in there, as well.
- A large company sits behind it and can back development efforts.
- It is widespread and people know about React even if they're not developers.
- You can use it for both web and mobile.
- React Native is amazing for the type of mobile applications I usually build.
So yeah! This year I'm tripling down on React. If you'd like to see the full list of technologies I specialise in, head to the hire me page.
P.S. The commenting system actually works.
Here's a very interesting and detailed article on the topic, but without the clickbait 😩. I really like the fact that the author goes at length on each technology instead of just pasting some links and an "I really like this stuff" comment...
I forgot to mention that this year I will be focusing on learning Golang and Elm. I don't plan on learning any new front-end JS framework this year.
By the way, if you are using Webpack and you are messing around with code splitting, I published an article about a nasty memory leak I found in Webpack while using dynamic imports.