I was talking with a guy some days ago and it went like this:

  • he told me “I really would like to start improving myself and I need a pet project..
  • I said “great idea! But where do you want to improve?
  • he said “..that’s the problem: I still don’t know what I want to use. There are so many things out there that I would like to learn … and I don’t know where to start…

This made me think about a book I read some time ago called “The Paradox of Choice: Why More Is Less” (the author gave also an awesome TED Talk about it). Basically the book talks about the relationship between the huge amount of choices we have nowadays with our happiness and freedom. People tend to think that having more choices (e.g.: more jeans in the shop to choose from, more books in the library, more courses on a learning platform, etc..) means that we have more freedom, you are free to choose the thing that is more appropriate for you. The more the things we can choose from, the more free we are.
The author debunks this myth showing that the fact to have so many different choices doesn’t lead people to feel more free, but instead it leads them to a paralysis (in their mental choice process) and to a constant feeling of regret: you buy a book and you soon regret to not have bought the other one in your wish list (”perhaps it was better”).
Constant dissatisfaction instead of happiness.

The same thing is happening nowadays with technology and, more specifically, with programming. There are so many choices out there to choose from that people, like the guy I was talking to, don’t know where to start. Javascript? Well, good luck. AngularJS? Oh wait, which one? Angular 2 is coming. Java 8? Wait wait, Java 9 is scheduled for next year. Machine Learning? No no, the next big-thing-I-am-sure will be Server-less architecture. Go, Haskell, Scala, Kotlin, Rust … and if you want to pick just one platform to learn you can choose among Coursera, HackerRank, TopCoder, EggHead, CodeAcademy, CodeSchool, Udemy, Udacity ….
UNLIMITED-OPTIONS-AVAILABLE! The consequence is that people don’t know where to start if they try to follow this entropy.
The bad news is that Software Engineering is a field that changes so rapidly that all these things listed above will change in a couple of years. Again. So, it’s time to stop your mental chaos. How?

Stop choosing

The book provides a simple solution to this paralysis: stop choosing. Do not spend mental energy regretting your choice because maybe the other one could have been better. If the difference is not so relevant (in terms of price, time, etc..) stop feeling bad and start to fully enjoy what you already have. There will be always something absolutely better out there, but what you have is already good enough.
What does it mean for developers?

Ask yourself the right question

There’s only one way to face the increasing entropy: a solid knowledge of the basics of Software Engineering. Stop choosing the next programming language or technology to learn. The question you should ask yourself should not be “should I choose between X and Y?”, but instead it should be “What I want to become? A professional developer or a simple coder?”.

Ask yourself how well do you know things like design patterns, software design, cohesion, coupling, data structures, algorithms…are you able to have a discussion about these things with other technical people? Do you think to have enough knowledge to decide the good strategies to write clean and testable code?
If your answer is no or you’re not sure, well you’ve narrowed your options. Do a step back, that’s where you have to improve.
Welcome to the 2nd stage of the Four Stages of Competence: conscious incompetence (you’re not alone, I’m there with you!).

Technologies change every time. Having strong knowledge foundations is what makes the difference between a professional developer and a simple coder.

Choose one of them.