DEV Community

Cover image for Be good at one thing, not average at everything
Steven Yung
Steven Yung

Posted on • Updated on

Be good at one thing, not average at everything

(Credit to Jessica 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". 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 by Gary Keller

(I highly recommend reading The ONE Thing 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 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.

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 and SOLID in my codebase, learned about 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 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 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 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, Instagram and Github

Special thanks to: Abdoulaye, Samuel and Jean-Baptiste

Top comments (48)

Collapse
 
perrydbucs profile image
Perry Donham • Edited

< strokes white beard >

This is fine advice for your first year or so of your career. After that, you can quickly be pegged as 'that Laravel guy', and in the minds of your managers and colleagues, it's all you know. Moving up means that you have to move on, but you might not have a diverse enough CV to interest another employer.

My experience has been that the best colleagues have been those who have a really broad range of experience...they are able to pull from all of those when confronted with a new problem. IBM likes to talk about 'T'-shaped contributors, those who have broad, but not necessarily deep, experience, but are able to dive deep when they need to. That's the sort of person I would look for when hiring.

Collapse
 
ljuba_st profile image
ljuba stojanovic

I like this: "IBM likes to talk about 'T'-shaped contributors, those who have broad, but not necessarily deep, experience, but are able to dive deep when they need to".

Collapse
 
ben profile image
Ben Halpern

This is one of those very-well-described mental models. I just felt inspired to look up its origin:

The earliest reference is by David Guest in 1991.[1] Tim Brown, CEO of the IDEO design consultancy defended this approach to rΓ©sumΓ© assessment as a method to build interdisciplinary work teams for creative processes. In the 1980s and probably earlier, the term "T-shaped man" was used internally by McKinsey&Company for recruiting and developing consultants and partners, both male and female by then.

en.wikipedia.org/wiki/T-shaped_skills

Collapse
 
ssommerit profile image
Shawn Sommer

I think you're pretty right on with this comment Perry.

My first job was in a .NET environment, mostly writing and maintaining API integrations but my primary responsibility was improving/updating/maintaining an integration with an ERP system via a Windows service. I quickly became "the expert" in the ERP system integration and was the guy that got all of the calls escalated from support. I still occasionally get an email from the devs that took over the project for help.

My second job, I was looking for something different and ended up working in Salesforce. Completely different environment all the way down to the source control and OS I was working in. The lack of breadth hurt me moving to the new role.

Logic is logic, so that wasn't the hard part of the move. The hard part was picking up so many different technologies at once. It really was jarring and reshaped my thinking on the subject. Previously I focused on going as deep as I could with .NET to the detriment of my other skills. Currently I am focusing on gaining a broader understanding of the base technologies that are underpinning the majority of the "flavor of the week" technologies so I can pick them up faster in the future.

Collapse
 
ssteinerx profile image
Steve Steiner

I've done everything from hardware design to drivers in (many flavors of) assembly to large COBOL programs to C++ monstrosities to async webbish APIS and websites and that's why I can jump in at any level if needed. Usually, I just see how the pieces go (or could go) together better than anyone with the kind of "focus" recommended in this article ever could.

I agree, maybe you need to do this early on to remain employable, but it's a self-defeating long-term strategy in a fast and always faster moving industry.

Collapse
 
hamsterasesino profile image
Gabriel

From my experience, becoming good at a particular language or framework doesn't necessarily make you a better developer. Coding experience and building a good programmer mindset by learning from more experienced developers and reading books like Clean Code does make a difference.

I have been coding in many languages and, at some point, you realize that they are all just abstractions to solve common problems: get an element, call a service, print this string, update data, etc.

So I partially agree with you in that you should try to learn one thing at a time (three things max is my rule). But first and foremost focus on the fundamentals and don't be afraid to play around with new technologies and occasionally jumping off your learning path and try something entirely new (say, Machine Learning). You never know what new opportunities may come from it!

Collapse
 
jfrankcarr profile image
Frank Carr

Agree. As Bruce Lee put it...

Don't get set into one form, adapt it and build your own, and let it grow, be like water. Empty your mind, be formless, shapeless β€” like water. Now you put water in a cup, it becomes the cup; You put water into a bottle it becomes the bottle; You put it in a teapot it becomes the teapot. Now water can flow or it can crash. Be water, my friend.

Collapse
 
xstevenyung profile image
Steven Yung

I definitely think fundamentals are an essential thing to learn.
I guess the point I was trying to make is that if you work with, let’s say one framework, for a long enough time. You will eventually master the in and out of it. And when you reach that point, you will start to focus less on the framework itself and more on how it was built and how it solve common issues. And that’s when, at least for, I really got passed the framework and start working with real concept like design pattern for example.

Collapse
 
blouzada profile image
Bruno Louzada

For me what is working is trying to be good on software development not focusing on technology or frameworks, I'm focusing on multiple things but with a single objective, nice post thanks for

Collapse
 
xstevenyung profile image
Steven Yung

Really interesting choice ! I guess for me it was more centered around technology choices but focusing on one domain is definitely something I will look into !
However, for someone beginning, let say, video game development, which is a pretty big and complex domain. I would still advice them to focus on learning one framework like Unity and slowly but surely work towards other things gravitating around that same domain afterwards :)

Collapse
 
blouzada profile image
Bruno Louzada

Totally agree with you

Collapse
 
punyahere profile image
_punya

Aziz Ansari disagrees

Collapse
 
hkly profile image
hkly

I disagree with the title. This age-old saying is often misquoted, but is appropriate for how I feel:

"A jack of all trades is a master of none, but oftentimes better than a master of one."

However, I do agree with not spreading your focus too thin and avoiding overwhelming yourself with trying to learn everything all at once.

Collapse
 
jess profile image
Jess Lee

Wow, that is a big misquote! I had no idea. Thanks for sharing -- the negatives connotations of 'Jack of all trades, master of none' has always haunted me a little. Really happy to see the positive side of it, now armed with more context.

Collapse
 
psuplat profile image
Piotr Suplat

How come negative? I always thought about it as positive. I actually used that quote in few inerviews (that lovely question of "how would you describe yourself?" ) and often got the job because of it.

Thread Thread
 
lewiscowles1986 profile image
Lewis Cowles

I actually used that quote in few inerviews

Which means the jobs changed often, which long-term is unreasonable. You'll probably find the people that liked it had very little attention to detail.

I'm an unashamed generalist, I make that work for me but I wouldn't like someone saying they were a jack of all trades. Underpinning any generalist should be a good grounding in the core of problems they explore. It's okay to be ignorant of new ground if it's not relevant. It's not okay to be ignorant of the basics.

Collapse
 
salahhamza profile image
Hamza

As i don't have a single preference, i have been jumping from one technology to another, i keep telling myself that maybe this would be better and much more interesting and once i start it the same thing happens again.
How do i choose one thing to focus on?

I loved the post so much by the way.

Collapse
 
xstevenyung profile image
Steven Yung • Edited

Thanks for the kind word !

If you don’t have any particular affinity with a language or a framework, you can work torwards a specific goal you want to reach. Try starting small and specific like front-end development with [insert any javascript front framework], and grow from there to framework-agnostic front-end developer for example.

Collapse
 
microgold profile image
Mike Gold • Edited

I agree, to some extent. I've been a Microsoft technologist for 25 years, and understanding and keeping abreast of certain core technologies makes you very marketable. If I am interviewing someone, however, I would like to see some breadth with keeping up with the latest changes in the technology which often means new frameworks, COTS packages, databases, infrastructure. The other thing I look for in an interview is how well the developer can solve problems given to them and what is there approach at solving it. If they can solve it with their core skillset which i happen to be looking for, even better, but what I'm looking for is the interaction that takes place in solving the problem as well as the thought process. Also software is so much more than just a language these day. It's about design and architecture, testing, requirements processes, and delivery. I look for the developers understanding of the software process as well as the technical skill.

Collapse
 
sofianemias profile image
Sofiane

I had the same problem, and i decided to focus on back-end development so i agree with you in that point (learn one thing and master it then develop your skills and other skills if you want), i'm learning PHP and Laravel, could you give me some advises and how should i learn (tutorials and stuff) and i will be grateful ;) and many thanks for the post ;)

Collapse
 
xstevenyung profile image
Steven Yung

Thanks for the kind words!

If you try to learn Laravel, Laracasts is one of the best place to go. You have to pay for it but to me it’s worth every penny.

Collapse
 
xstevenyung profile image
Steven Yung • Edited

As said in the post, when you start to have a better understanding on the whole framework start building a project (something you think will be useful to you). this will expose you to issue and challenge you in a way tutorials can’t. you will have to search on your own without anyone grabing you by the hand and you will improve a lot along the way.

Thread Thread
 
sofianemias profile image
Sofiane

Laracasts are very helpful Thanks a lot

Collapse
 
leob profile image
leob

I think I have to agree with this article!

It can be very tempting to jump from one bandwagon/fad/language to the next, and you will be able to write "hello world" in 30+ languages. But getting really good at one language/framework will make you a better developer in the end: diving into the internals of the framework's source code, contributing to the ecosystem, solving "hard" problems, and so on.

I've also come to believe that choosing a "niche" wil actually make it easier to market yourself (for instance as a freelance dev), because it's immediately clear to a potential client what your expertise is, rather than the somewhat overused "full stack web dev" moniker.

Having said that, knowledge of a broad range of topics is also essential, because it gives you the context and background to be able to come up with solutions. So it's a bit of "and ... and", not "either": have general knowledge about a broad range of topics, and go deep in a few.

Collapse
 
itsjzt profile image
Saurabh Sharma

when you learn and become fluent with your tools, that's when you start learning to programme beyond the framework or language and start implementing general concept which will be universal to any technology you know.

πŸ‘

Collapse
 
eduardort profile image
Eduardo Reyes

I think you should always pursue what picks your interest, there's so much stuff out there to learn from other languages and technologies that even when choosing to overlap stuff you can learn so much.

But I do like what you said about learning stuff that complement you, for some people the goal is to be the best knife, for others the goal is to be a great Swiss army knife; it depends on your career goals as a developer, maybe learning some of everything would be of more benefit to you if you want to become a manager in the future.

Collapse
 
xstevenyung profile image
Steven Yung

Definitely agree. It’s all about you deciding what you want to work towards to. For me, it’s a more full-stack profile. For other it will be exclusively back-end with Node.js.
It’s up to you to set your own goal and always try to push forward :)

Collapse
 
lilyyanglt profile image
Lily

Hi Steven!
Your article is really helpful for me because I am actually in my 7th week teaching myself to code, and when I started, I really had no clue what I wanted to do other than that I like building things and solving problems, so I started with the basic HTML, CSS and Vanilla Javascript, now 7 weeks in, and I have the foundational knowledge of JavaScript, I started to follow tutorials to building a Tetris game, trying to build a portfolio, and to practice on CodeWars, Leetcode, but whenever I look at someone else's code, and tried to follow, I would have no idea why and how they are writing the blocks of code. I know what the code is doing, but just don't know how they were able to come up with code like that..and get discouraged when I can't come up with code like that...I also have started learning C++ because I am starting school in January and the focus will be on back-end code, so now I feel like I really should focus on C++ (one thing at a time) but worried that I'll forget the front-end stuff I learned..so just really overwhelmed... :'(. My friend suggested C++ because it's a hard language to learn and if I learn it on my own first, then everything else will become easier when school starts, so that's why I started C++. Reading your article though, I feel like I should focus on learning C++ for now...If you have any tips or advice for me, I'd really appreciate it!!
Thank you,
Lily

Collapse
 
xstevenyung profile image
Steven Yung

Hello Lily,

Regarding your issue on reading someone else code, I think it's normal that you have difficulties following someone else code, particularly when you start coding. Even I have difficult time understanding but I have the reflex to look for function I don't understand now. It's a normal step in the learning process so don't get discourage too much about this. Like in languages, there is a few words you will not understand but still understand the general meaning of the sentence. If you manage to at least understand the general meaning of the code, it's already a good step forward.

For your issue with learning C++, be careful that your school will actually teach you C++ as it seems weird to me that C++ will be used in backend. Maybe you mixed up with C# ?

Anyway whatever technologies will be taught to you, if you attend school, focus on what the school is teaching you. Programming is already overwhelming as is. Don't add up more complexity by spreading focus, particularly in the beginning.

If you have any questions or anything on your mind, feel free to reach out to me on Twitter (twitter.com/stvnyung).
or via email (stevenyung@icloud.com)

Collapse
 
lilyyanglt profile image
Lily

Thank you Steven for replying!!!! Maybe I am confused now at what my friend told me...It is so overwhelming to learn this but it's rewarding! I am so happy to have found a community like this one to get help and really really appreciate the information you shared! I will keep going and will for sure reach out to you if I ever get stumped on anything! Hope you don't mind!

much much thanks!!

Thread Thread
 
xstevenyung profile image
Steven Yung

Keep on the positive vibe, I'm sure you will make it πŸ’ͺ😊

Collapse
 
lewiscowles1986 profile image
Lewis Cowles

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.

I suppose it depends on how much focus you apply, and what you define as one thing, one framework.

You can get really skilled at hammering if you dedicate yourself to it. The problem is that there are better tools for all but the most narrow of tasks, and all of a sudden the notion of one-thing, one-framework, one-language disintegrates like cheese through a grater. Of course, if you disingenuously assume carpentry is one thing, then I suppose you're right in that alternate reality you created where sawing wood and hammering is all you need, it probably would do to focus on that one thing and not medieval sword crafting for example.

I'd strongly suggest if you do keep at PHP, you do not remain tied to a framework, but pick something less open to the whims & fortunes of developers. Perhaps you'll still use Laravel, but you'll pick PHP itself as your specialisation, or network applications, or performance engineering PHP. Something that is more likely to survive the next HackerNews article.

Collapse
 
metcoder profile image
Carlos Fuentes

Great and interesting article. Nice job!

Contributing to your article, I agree totally with you. I think are not only one way to be a better developer, are so many ways to reach that goal.

If you like PHP and you want to be better at that programming language, focus on that language, learn everything about that (i.e. frameworks, design patterns, better practices, more, more and more).

If you like Javascript and have the same goal, do exactly the same thing.

If you like Machine Learning, do exactly the same thing.

What I think it makes some dev a better developer or a great developer or a ninja developer. . . is the capability to solve problems. Think in this, everything that a developer does is related to solve problems for the people and even for the same devs. That ability to solve complex problems and create effective solutions with order, with good practices and making the things easy for his users with no matter what language or framework, is what makes us better developers. Because at the end, we are all developers solving problems and is the only thing that matter.

Collapse
 
engberrg profile image
Niklas Engberg

Good post. I recently wrote an article about how to stay focused as a software engineer that also is some kind of advocera-guide. Check it out :) hackernoon.com/find-your-circle-of...