As a teacher and speaker one of the questions I’m often asked is which language/technique/etc should an aspiring developer learn first to get a job as fast as possible. Most of these folks are ambitious and capable but, in following many over the course of the years, I find few ever become great at what they do simply because they aspire to be a “super generalist,” that is, a developer who can write any code for any project on any timetable without question. What they aspire to is not to be a successful developer but to imitate, often in only months to a year or two, the careers of mentors and teachers who while having been in the industry for many more years are not up to the standards the student is expecting themselves.
It isn’t their fault
The idea of the generalist seems to be a badge of honor in an industry like tech where a list of required skills and knowledge for an entry level job can read as if the single position is for an entire team rather than a single, often underpaid, developer. In the 10 years since I quit flying I’ve seen developers who claim to specialize in one technology one day and another the next all while building projects that never seem to have any goal other than the initial launch and, as long as it “works” any slop code put together is just fine.
Yes, tech is an industry that requires constant learning and refinement of our skill sets both to push the boundaries of our creations as well as simply to keep pace in an ever evolving landscape. This evolution requires both an open mind and the ability to learn and adapt to a variety of languages, libraries, tools and techniques over the course of a career that, in the end, can often be characterized as “generalist” when viewed through the lens of a single point in time. The reality though is that these are skills that do take time to do right. To really learn a library or a complex language is something that takes considerable time and investment to master even if it might be possible to just muddle through with the help of Google and a few questions on Stack Overflow. While the projects might be technically completed the amount of technical debt incurred along with the risks of security and scalability, among others, of code that was scratched together isn’t, in my humble opinion, the result of a professional but that of an opportunist. As a result I fear, in the present environment, that it is the latter most pad developers aspire to as opposed to the former. This does not help our craft.
While we must stay agile we must also, as professionals, take the time to specialize and master our craft. This means trying new things while not just tolerating but embracing and, above all, improving in foundational skills in which a true professional can demonstrate his or her expertise as something far beyond that which can be learned in a day or two on Google. We must “go deep” with our technology and focus on the core using that as a basis for building our knowledge while still staying a true professional until such a time as the previous technology is rendered obsolete or, if done right, until such a time where we can demonstrate true expertise in a new area.
The answer is more nuanced
So back to the original question: when asked what someone should learn first my answer is, and will be, the fundamentals of learning, communication and code. It’s amazing how many times I’ve run across developers that can use a jQuery selector but not a proper conditional. They can set a variable but not in the place where they need it resulting in inefficient code and other problems. They might be able to make a design look great but, put it under a little bit of load, and it will quickly bring the whole site or product to the ground. This is not the mark of a professional developer.
On the other end, becoming a professional developer does not require a university degree in computer science either. Of course a degree will never hurt but it both possible and common for a true professional to earn his or her position outside of the classroom. That said, learning on your own isn’t an excuse for not knowing concepts such as polymorphism, recursion, inheritance or any of the other basic concepts of the discipline.
3 things every professional developer should learn
After answering the question of where to start there are 3 things I tell all aspiring developers. These are three skills that will not just allow a developer to get their first job but will help them continue to improve their craft to that of a professional, senior level developer.
- How to study and learn individually
While this might sound self-evident all too many people are simply not capable of learning on their own as a result they rarely grow beyond their first position. This doesn’t mean one has to be taking formal courses or anything like that but, more often than not, simply manifests itself as simple interest in what they do and ambition to do more with it. Picking up side project outside of one’s comfort zone is a great way to learn and improve over time, but in new skills and even in tricks and techniques for one’s core competencies.
- How to communicate effectively
If you can’t communicate what you’re doing and what you need help with you cannot grow as a developer. From simple code commits to documentation to project issues with other stakeholders many developers never become great simply because they cannot communicate with others around them.
- The fundamentals of modern code
In conclusion: the case for specialization
Of course learning to communicate well and knowing all the fundamentals still doesn’t translate to a job. If it did nearly every Computer Science student in the world would be a professional programmer by default and, as we all hear too many times, many can’t handle even their first job. While there are a lot of reasons for this it isn’t just a problem that affects graduates either but something I see in many hobbies developers as well. Call it wanderlust, the love of “shiny and new” or something else but the inability of a developer to focus can be as much a hindrance as a developer who doesn’t right code. Know the buzzwords isn’t enough, anyone who is around the industry for a while knows the trends and the lingo. Instead getting good at part of what you do, namely a specialization you find interesting, is what will often lead to bigger and better jobs as well as opportunities such as speaking and others. Given that it’s fine to be a “backend developer” or an “Angular developer” and really sell yourself in your specialization. Doing so will lead you past the open position to being sought after for jobs that you won’t find on any social media or job posting but are, instead, often recruited for based on your expertise and experience as a true professional in what you do.