DEV Community

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

Be good at one thing, not average at everything

Steven Yung on January 10, 2018

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

Collapse
 
gene profile image
Gene

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.

;-)

Collapse
 
ewoks profile image
Beeblebrox • Edited

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

Collapse
 
lobsterpants66 profile image
Chris Shepherd

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!

Collapse
 
renieldev profile image
renielDev • Edited

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.

Collapse
 
manuelsayago15 profile image
Manuel Sayago • Edited

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?

Collapse
 
xstevenyung profile image
Steven Yung

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 !

Collapse
 
flavius profile image
Flavius Aspra

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.

Collapse
 
dfellini profile image
Dan Fellini

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.

Collapse
 
jenc profile image
Jen Chan

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

Collapse
 
usmanard profile image
usman arshad

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

Collapse
 
tharakamadhusanka profile image
Tharaka Madhusanka

Good Read ! :) Thank you !

Collapse
 
yujinyuz profile image
Yujin

Great article :)

Collapse
 
tareq89 profile image
Muhammed Tareq Aziz

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

Collapse
 
hawicaesar profile image
HawiCaesar • Edited

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

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