(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)
< 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:
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.
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:
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.
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.
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.
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.
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 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.
π