How Can Full Stack Developers Learn So Many Skills?
Why Great Developers Really Only Focus on Two Skills — How to Learn and Mastery of Fundamentals
It’s true that full-stack developers are knowledgeable about a wide variety of discrete technologies and tasks; however, these bits of knowledge are temporal in nature — they come and go depending on a developer’s ever-changing needs. The great developers don’t try to retain every bit of software knowledge that they use at one point or another — there are simply too many languages, tools, frameworks, design patterns, etc. for a single person to learn. Rather, the great developers are great because they are skilled in two areas that are vastly more important than any individual bit of knowledge — learning how to learn, and mastery of fundamentals. With these two skills, a full-stack developer can tackle just about any challenge put before them.
Great developers are very adept at quickly locating and learning new information as it is needed.
Mastering effective learning is the most important skill that a developer needs because it enables on-demand knowledge acquisition. Great developers are very adept at quickly locating and learning new information as it is needed. This gives the illusion that they know a huge number of different things when behind the scenes they are actually just picking them up on the fly.
To illustrate the importance of effective learning, imagine that you are a professional software engineer. You come into work one morning and your manager tells you that she is temporarily shifting you to another team. You arrive at the other team only to learn that they are working in a language that you don’t know, deploying their code to a system that you have never used, and tracking progress with a tool that you have never heard of. What do you? If you aren’t a good learner, then it’s going to be a really tough week for you. However, if you have learned how to learn effectively, then you won’t have any trouble. You will know where to look for information, how to scan it for the important parts, how to practice using it in a way that builds fluency, and how to ask your colleagues good questions.
The above scenario is extremely common in a full-stack developer’s life. That’s why focusing on good learning techniques is much more effective than attempting to predict what knowledge you will need in the future. Like any other skill though, learning how to learn requires practice. You need a structured approach that reinforces effective techniques while discarding ineffective ones. This takes discipline and requires mentors that can help you along the way. In the long run though, learning how to learn has a much higher payoff than learning the syntax of a dozen programming languages (half of which may not even be useful in five years.)
If you have a solid grasp of programming fundamentals then very little will surprise you.
Mastery of Fundamentals
The other part of this equation is mastery of programming fundamentals. Being a great learner is important, but if you’re building on shaky foundations then you’re likely to find that most of the bits of knowledge that you acquire are lacking in context. This is why a good full-stack developer needs to first spend time mastering the fundamentals. If you have a solid grasp of programming fundamentals then very little will surprise you.
Let’s go back to our scenario where you are transferred to a new team. On arrival, your new teammates explain that they have taken an object-oriented approach in their code. For your first assignment, they ask you to use a certain base class to write several subclasses that have slightly different behaviors but nonetheless share some key attributes. If you don’t have strong foundational knowledge about what classes and objects are, and how to use inheritance to share behaviors, and how to override parent behavior with subclass-specific implementations, then you’re going to have a lot of catching up to do. Now, not only do you have to learn the syntax of a new language but you also have to learn fundamental design concepts. If, on the other hand, you are already well versed in object-oriented design, then all you have to do is start writing code and look up the language-specific syntax along the way.
Mastering fundamentals is not an easy task. It’s a slow path that requires deep exploration of important concepts. There is no quick fix for mastery, but over the course of a career it saves you time, makes you more effective, and allows you to write significantly better code. Good developers understand that fundamentals will always serve them well and that’s why they devote a significant amount of time to mastering this skill.
All of this is a way of saying that the best full-stack developers know to focus on mastering effective learning techniques and building a solid foundation of fundamental skills. This is how they give off the impression of having so much knowledge, when in reality, they have just mastered the ability to find and employ knowledge as needed. At Launch School, where I am an instructor, I spend a lot of time talking about this with students. Many new developers fret about how they should go about learning all the technologies that they hear about from friends or read in job listings. I tell them that none of those things matter — not in the beginning. Sure, you may eventually have to learn React, or Elixir, or one of myriad other tools; however, those are bits of knowledge that you can pick up if and when necessary — but only if you already have a solid foundation of fundamentals and effective learning techniques.
If you’re wondering how to go about learning these vital skills — I highly recommend you consider a mastery-based learning approach. We use this pedagogy at Launch School and have found that there is no better way to help students learn how to learn effectively, master fundamentals, and launch careers as software engineers.