loading...
Cover image for Be good at one thing, not average at everything

Be good at one thing, not average at everything

nvio profile image Steven Yung ・5 min read

(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

Posted on by:

Discussion

pic
Editor guide
 

< 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.

 

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".

 

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

 

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.

 

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.

 

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.

 

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.

 

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!

 

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.

 

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.

 

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

 

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 :)

 

Totally agree with you

 

Aziz Ansari disagrees

 

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.

 

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.

 

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.

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.

 

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 ;)

 

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.

 

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.

Laracasts are very helpful Thanks a lot

 

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.

 

This is a good advice for those who just graduated college and/or for those who are just starting a career in programming. Because that was my experience. I focused on one thing so I can earn a living out of it.

But if the point of this article is about LEARNING, then I totally disagree. People learn differently. There are those who learn more and faster by hacking into different technologies, frameworks, languages, etc. And that includes me. Until now, it continuously improves my ability to adapt to a new technology, language, and start working on it fast. My employer commended me for that. They threw me to different projects and I can work on it. They're happy about it.

;-)

 

i had just got to this point in my journey to be a freelance front-end dev , all these shiny new tools and then i came across this article that just set me strait.. appreciate the lesson and will definitely meditate on my current goal instead.

 

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.

 

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.

 

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.

 

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 :)

 

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.

 

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...

 

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.

👍

 

The main issue is HOW to focus on 1 and only one thing?!
There are so many interesting things going on in tech now and technical debt is bigger and bigger and there is less and less time every day... :(

Besides, we need to get social, exercise, invest in our relationship and spend time with family...

 

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

 

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)

 

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!!

Keep on the positive vibe, I'm sure you will make it 💪😊

 

I think I agree with you! I'm trying to learn more from PHP and Laravel. There's this feeling that I have to learn lots of frameworks and programming languages because there's so much work out there. However, it does not sound bad to become good at one thing before getting to learn another.

Although, as Gabriel says, it's a good idea to try to learn three different things at the same time if you will. I mean, there's so much code and stuff on the internet that we don't have the time to study all of that.

I'm watching some videos on Youtube, Styde.net, Udemy, Codecademy, etc. They have lots of videos an examples to study and learn but I think if I focus on one or two things, I could overcome that goa and go for the next one.

Don't you agree?

 

Totally agree, that was the point of this article even if I think the title was somewhat misleading, implying that you should stick to one thing forever, while what I meant was really to push that extra mile to learn deeper before jumping to something new !

Glad this was understood !

 

I have the same thought too. I used to jump to different stacks before, but when I started learning web development and learned a lot from my senior, I told myself "This is not enough, I'll try my best to learn deeper!". Since then, I started reading about patterns of development and always ended-up wanting to satisfy myself by applying what I've read and improve my coding style.

Now, I am looking to try something new, something more challenging. I hope I get enough time to focus on it.

 

You can get away with being average at one thing, if no one else on your team knows it or is interested in learning it.

I've built a career on that principle!

 

First, let me say 'good' and 'average' are basically the same words. If I were to reframe it, I'd say 'expert' vs. 'competent.'

That said. There are so many opportunities for folks who are competent at a bunch of things, and I fit into this category. If I were to decide tomorrow to choose an expertise, and let everything else fall off my map, I'd be out of a job. I'm, as someone said in a comment above, a 'generalist.' Because, frankly my org (and most orgs I'd want to work for in the nonprofit space) can't afford even one developer, nevermind a team of them. They need folks who can do everything well.

So I fill a niche. It's one I'm really happy filling, and there's a space for us in this industry.

Just my opinion.

 

This is good advice, but only if you are a junior developer with less than 2-3 years of experience.

If you want to advance professionally, you have to not care about tools, frameworks, languages, etc.

I think you're on the right path, you just have to force yourself to keep learning new languages, don't stick your head in the sand.

When you have 15 years of experience in programming, you are able to introduce new languages to yourself and to the company with no problems, identify idiomatic ways of using them, and teaching your collegues about it.

In the end, you'll notice that it's not something special. A new language takes about 2 weeks to master, and 2 more weeks to learn its idioms, afterwards continuous "lifelong" learning but in small steps about its ecosystem.

 

Good Read ! :) Thank you !

 

This is the best article , so far I have read about career planning.

 

Great article, now tell me how do I manage this kind of focus being a JavaScript developer? I always feel like being accused of not knowing this or that tool!!

 

Great article :)

 

I aim to be perfectly mediocre instead of gutter level crap 👀

 

Great post. Very good especially in this ever changing times.

Question would be what if the knowledge, current you have learned becomes outdated?