The Self Taught Developer Myth
I have a problem with the phrase “self taught developer”. It’s not that I take issue with autodidacts. Far from it; I find the phrase redundant. Every developer is a self taught developer.
Some of us may take courses in school and may learn to write code under the tutelage of a brilliant, perhaps eccentric professor. Others might learn via after school programs or online courses. But the nice guided path of professors and courses never lasts. Eventually, whether for work or for personal interest, you have to teach yourself.
This is true to an extent with all fields. Laws change; medicine evolves; engineering techniques improve. But programming is unique in a few ways. It’s unique in the speed and intensity of its evolution. New libraries, new languages, new paradigms seem to pop up every week. Programming is also a field where schools don’t teach the precise skills necessary to be a programmer. Most CS students graduate, for better or for worse, as fairly incompetent developers. This isn’t their fault. Schools simply don’t teach software development workflows, agile, deployment techniques, software architecture, visual design, object oriented patterns, etc. Nor should they. Because software evolves constantly, it’s impractical to teach it. One year’s cutting edge code is another year’s outdated legacy.
At some point in your development career, you will have to teach yourself. The earlier you accept that, the better you will do. On the flip side, if you don’t like teaching yourself, then you will not have a great time as a programmer.
Some may respond that I’m merely a youngster echoing a sentiment specific to web development, an area bursting with other young, overeager programmers. I’ll concede that web development does have an unusually high rate of churn and that not all areas of programming necessarily require you to perpetually teach yourself. But even the most stagnant of the stagnant require some self teaching. Even if you decide to learn COBOL and spend your life maintaining 50 year old codebases, you’ll still have to teach yourself COBOL! Your school (probably) doesn’t offer a class on it.
It’s okay if you’re bad at self learning by the way. A lot of people have never been taught how to learn on their own. It may seem daunting to teach yourself without any structure, without a syllabus or assignments. But it’s also freeing. You don’t have to learn at any particular pace. You can breeze through topics or abandon them at will. You can learn out of order or learn imperfectly.
I’ve realized that I don’t learn by doing homework, by studying for tests or by listening to lectures. I learned by doing. I learned compilers by building a compiler. I learned web development by building a web app. Whenever I’ve tried to learn something solely by reading a book or a tutorial, I’ve failed. Inevitably I need to make something. This may not be true for you. You may learn in a more rigid, school-like fashion. That’s okay! The whole point is that you can design your own journey.
This is also why, paradoxically, the best CS teachers are those who know when not to teach. I took a software development course in high school. The teacher would give us lessons on some core concepts, but he also would teach by showing us where we could find information, and letting us figure it out ourselves. At the time students would complain that he didn’t teach or was lazy, but in retrospect, it was an explicit strategy on his part. If he were to explicitly lecture on how to write a web application, on how to write JavaScript, he would be doing his students a disservice. The lesson here was not the specific technologies, but the act of learning them on the fly from documentation.
So when people tell new programmers to do projects or to teach yourself a new language, it’s not out of some abstract notion of work ethic. It’s because reading about a new language and using it to write a web server is as close as you can get to real world programming. Especially if you have to spend hours reading confusing documentation, scrolling through GitHub Issues and rereading your code. That is ultimately the essence of programming: constant, ad-hoc, seat-of-your pants self-teaching.
This is also why it’s not worth hemming and hawing about the specific programming language or front-end library to learn. The point is not that you learned React or that you learned Vue. The point is that you taught yourself and figured it out. That’s what matters.