Be good at one thing, not average at everything
Tags: learning, tools, devtips, advice
Published: 2018-01-10 13:20:50

---
title: Be good at one thing, not average at everything
published: true
description: For any newcomers, learning programming is pretty scary, and it becomes quickly overwhelming.
tags: learning, tools, devtips, advice
cover_image: https://thepracticaldev.s3.amazonaws.com/i/5138p5rqah9j9jz0unju.jpg
---

*(Credit to [Jessica](https://goo.gl/EHsSdH) for the photo)*

The web is constantly evolving and improving over time and there is already so much to learn and much more as time goes by.

For any newcomers, this is pretty scary, and it becomes quickly overwhelming.

I started as a working student in a web agency 2 years ago with no concrete experience and not a clue how real web development was done. My first day, I was excited to discover new things but mostly afraid by the daunting task ahead of me.

The worst part (or best, depending on whether you are a half-full or half-empty glass kind of person) is that the more you discover about the various aspects of web development, the more you realize how little you actually know.


## Trying to learn everything

One of the most common pitfalls that new developers fall into is trying to understand and do a lot because, let's admit it, everybody seems ahead of you and the level you have to reach to be "good" seems further and further away.

As a developer, it’s pretty easy to lose focus and get caught on "[The Shiny Object Syndrome](https://www.quora.com/Whats-shiny-object-syndrome)". The grass is always greener on the other side of the fence and programming is no exception as there is always new ways to build stuff, one more exciting than the other.

During my first year, I started learning on my free time to improve as a Symfony developer, but I lost my focus trying to play with everything I could get my hands on. From C compiler to Node.js. I learned everything but Symfony because anything else was new and more exciting.

And I could have gone on, and on, and on, and on for as long as new trends were popping out on Github. I spent countless hours watching, reading, learning and breathing code.

In hindsight,  I spread my focus too thin. Learning is never a waste of time, of course. It's always good to try out new technology and be aware of the new trending things in your ecosystem at the moment.

However, you really start pushing your limit and the limit of your tools when you focus on one thing: **one** framework, **one** language, **one** project, etc. And you will get deeper knowledge along the way.


## From average at everything to good at one thing

*"Success demands singleness of purpose. You need to be doing fewer things for more effect instead of doing more things with side effects."* - [The ONE Thing](https://www.audible.fr/pd/Ang-Business/The-ONE-Thing-Livre-Audio/B00FOXX83O/ref=a_search_c4_1_1_srImg?qid=1515172427&sr=1-1) by Gary Keller

(I highly recommend reading [The ONE Thing](https://www.audible.fr/pd/Ang-Business/The-ONE-Thing-Livre-Audio/B00FOXX83O/ref=a_search_c4_1_1_srImg?qid=1515172427&sr=1-1) by Gary Keller not your usual programming book but incredibly interesting and eye-opening)

During my last year as a working student, I started shifting the way I was seeing "improvement" from "The more technologies and languages I know, the better I am" mentality to "The better I understand the technologies and languages I already know, the better I am".

So I focused on what little I already knew: back-end development in PHP. Back-end development with [Laravel](https://laravel.com) to be precise.

Soon after understanding the basics and getting a general feel of the framework, I focused more on building things with my current knowledge instead of learning the next trending thing on [GitHub](https://github.com).

I started building stuff, useful stuff (at least, useful for me) and that's when I started realizing, I kept learning new things, but instead of learning to use new tools, I learned to get the best out of those I already had.

I've improved my code reusability, started using design patterns, implemented core concepts like [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) and [SOLID](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)) in my codebase, learned about [Test-Driven-Development](https://en.wikipedia.org/wiki/Test-driven_development), etc.

Overall, I became a better PHP back-end developer but also a better developer in general. Because, when you learn and become fluent with your tools, that's when you start learning programming beyond the framework or language and start implementing general concept which will be universal to any technology you know.

As I made my way and became an okay-ish [Laravel](https://laravel.com) developer, I also started my own business as a Laravel freelance developer, and to focus on what I knew and keep improving, I would work on the back-end of any project and send any front-end or not suitable work to another freelancer.

That way, I really focused my attention on one thing at a time while still moving my freelance skill forward and I wasn't limited to my own knowledge to work on a project. I could keep doing and improve what I knew while learning some valuable lessons outside of programming like project management and remote teamwork.


## An incremental approach to learning

When you reach the point where you feel confident about your ability to use your current tools, you can start incrementally implementing new skill into your developer portfolio, but not a random skill, in the best case scenario a skill that will complete yours, the goal remains the same, "become better with what you already know" and you can achieve that with complementary skill.

The final goal is to always learn with the purpose of improving current knowledge to improve as a whole. And with this approach, you can easily start using your current stack and implement what your new tool is.
For me, it was learning [Vue.js](https://vuejs.org) to work toward a more full-stack developer profile for my freelance activity.
For back-end developer, it could be adding server administration to his portfolio to understand how to implement a full web app on his own.
For a front-end developer, setup and use [PostCSS](http://postcss.org) to improve code quality and his workflow.

The options are endless and the goal is always the same: improve your strength toward a specific goal.

*Like this article? Want to see what I'm up to? You can follow me on [Twitter](https://goo.gl/fJiHjJ), [Instagram](https://goo.gl/Y77U6M) and [Github](https://goo.gl/m7WMo1)*

*Special thanks to: [Abdoulaye](https://goo.gl/2Ezjbz), [Samuel](https://twitter.com/AukRaiser) and [Jean-Baptiste](https://github.com/veronj)*