#1 — Take your damn time
Let me start by making a few things clear:
- I am not actively working as a developer. I am currently a “Lead M365 Engineer” for a managed service provider, which is an inaccurate title for what I do every day. I typically define my daily work as “Doing the Needful.”
- I do not have a Computer Science degree. However, I did obtain a B.S. in Cybersecurity while serving in the US military because the school I got it from gave me the most credits toward that major when I started.
- I have no formal programming/development experience past the use of PowerShell to make my daily work tasks a little bit easier. I’ve tried learning to code in the past, but it took a backburner to my military service and my promotion to the world’s best job: Dad.
All that to say, I’m fresh on my journey to becoming a full-time developer. As I’ve gotten older and as my family has grown, I’ve come to realize that I no longer desire a career spent climbing the corporate ladder to attain such lofty titles like “CISO” — a goal I previously set for myself as I was considering my transition from active duty. I don’t want to work 80 hours a week at a startup building the next big thing. I don’t necessarily want to lead huge teams of people, something I’ve done before as a part of my service.
My desired career outcome boils down to two main requirements:
- Be a master of a craft that lets me build the things I want to build. Which, for me, is anything related to the web.
- Work in a role that respects that I will always put my family first. If that means you only get my normal 40 hours/week because raising my kiddo is more important than lines of code written? So be it.
With those criteria in place, I’ve started making slow moves to finally put my career goals first and teach myself the skills necessary to transition into web development. It may not be the sexiest of careers, but it’s the one for me, and I’m okay with that. You can keep your compilers; you can build your new LLMs to compete with Chat-Jippity (if you know, you know); you can even build flying cars. I’ll be over here trying to figure out how to make web applications that get the job done.
This self-taught journey, however, is not as sexy as the social media “Get a job in Six Months” influencers would have you believe. Sure, I can go learn React for the next few weeks and maybe land myself a junior dev position somewhere, cluelessly struggling to keep my head above water as I try and compete in a saturated market of bootcamp and college grads who watched the same “React Masterclass” as me. I could even go so far as lying on my resume in hopes that I could learn just enough to be valuable and risk figuring it all out once the job was in the bag.
To me, all of that is a recipe for burnout and disaster. I wouldn’t be good at my job; I’d be constantly stressed out about my lack of performance, and I wouldn’t feel any closer to the mastery I want out of my skill set. The result would be a very dissatisfying career and a fall backward into a job I don’t actually want anymore. In opposition to our favorite bounty hunter, this is not the way.
I have a few pieces of advice for those of you who have similar goals and are tired of the disingenuous advice of the programming productivity bro mindset that has pervaded social media, selling courses and bootcamps to every person looking for a shortcut to the big bucks. Just keep in mind that this advice comes from someone who isn’t yet in the field, and isn’t an expert, and is simply sharing my observation and previous struggle with the job hunt. It’s in no way intended to be comprehensive, either.
1. Take your damn time.
Look, I get that some of you are in a hurry. Maybe you were laid off recently, and you’re trying to transition into a developer career because your current field is tough to get hired in. That’s totally okay. If that’s you, and you made it this far, maybe you can stop here and ignore me because my advice won’t be for you.
For the rest of you who have the time to learn but still want the shortcut? You need to chill out. Do you know why these online course bros who promise to make you a developer in six months make so much money? They make it off those of you who are in such a hurry to change careers that you won’t stop to care about what you’re actually learning, just that you know enough to maybe get through a practical interview.
So now you’ve wasted some of your hard-earned money and still can’t get a job. How do I know, you ask? Well, because I’ve been that guy. I’ve bought the courses and their promises, and you know what I do for a living? Not what the course told me I would be doing. I’m doing now what I did in the military because I spent ten years working at the same craft, and I have the skill set to be in the role I have.
I have nothing against buying a course. Hell, I recently bought a subscription to Frontend Masters because I took one of their free courses and fell in love with the level of effort put into every lesson. They also aren’t promising me a job in six months. I’ve even worked through a lot of The Odin Project, which is more focused on helping people get the skillset necessary to break into a developer career, but they include an entire lesson in their introductory section about growth and mindset and how this journey is a long one.
Slow down. Take your time. The road is long and full of information to learn and obstacles to overcome. The more time you take to learn the fundamentals, get into the weeds about how things really work, and practice your skills on as many different problems as you can, the more successful you’ll ultimately be. In the words of Robert Greene:
Mastery is not a function of genius or talent. It is a function of time and intense focused applied to a particular field of knowledge.
These jobs aren’t going anywhere, by the way. According to the U.S. Bureau of Labor and Statistics, software developer jobs will rise 25% from 2021 to 2031. For context, the average job growth is 5%.
2. Go deep on the tools of your trade.
I want to be a web developer when I grow up. Sure, I’m 30, and I’m a dad, but the point stands. One day I want to work full-time writing web applications that do neat things. Frontend, backend, or fullstack, I have no idea yet. I’m still figuring that out. One fact is true about all of these, however, and it comes down to the use of one very important tool that still reigns supreme:
JavaScript.
Whoa, whoa. Relax. I know that Rust™ now has Yew and Leptos. Go has Gin. Python has Flask and Django. C# has…. well, no one really cares about that one. We are in an age where we can use “better” tools to write more performant applications in languages that are known to be “blazingly fast.” That doesn’t change the fact, however, that JavaScript still operates about 98% of all client-side applications. Given the goal of becoming a web developer and one day having the chance at a job, I’m left with the obvious choice of learning and understanding as much about the intricacies of JavaScript as I can.
The point here isn’t “Go Learn JavaScript.” I don’t think I can safely make that recommendation. What I can recommend is to learn the tools of your trade inside and out and in as much granular detail as possible. Here’s an example: take a cab driver who has been driving in New York City for 20 years. From an outsider’s perspective, you probably think to yourself, “How hard can it really be to drive a cab around the city, especially if I have a GPS and a driver’s license?” You know what that veteran cabby has that you don’t? Intuition. A deep knowledge of the city’s layout. A gut for traffic patterns. They know the bottlenecks, the construction zones, the traffic timing, the alternate routes, and all the other intimate details that make them great at what they do. Veteran developers are not much different.
You won’t build up this “gut” overnight, but you can start by getting into the weeds about the tools you choose to work with. Does a beginner learning JavaScript need to understand the difference between the Global Execution Context and the Function Execution Context or how these contexts are placed onto the call stack? Maybe not right away, but it does make it a lot easier to debug your code a little further down the road. If you don’t understand the tools of your desired trade early on, at least to a degree commensurate with your current skill level, you’ll spend a lot more time and energy later, painfully trying to fill that gap.
3. Immerse yourself.
I have been, for a long time, an avid gamer. I put a ton of time into World of Warcraft and a lot of other MMORPGs in my time. In high school, I thought I would go pro in Starcraft 2. Even after my daughter was born, I still spent a lot of time gaming. Gaming isn’t inherently bad. What is bad, however, is immersing yourself too deeply in activities that take time away from the end goal.
Since I want to be a developer one day, I’ve had to rewire the way I think about my free leisure time. After a long day of work, it can be really tempting to kick back and just play a video game for a few hours, or binge-watch that new show you found on Netflix or doom scroll on TikTok (just avoid those NPC live streams, for your own sanity), but none of these activities are helpful on my personal path to my ideal career. Instead, I’ve had to push myself to realize that immersing myself in topics related to web development is as enjoyable, or more so in some cases, than those other low-quality leisure activities.
Want to play a video game? Trying to solve some Code Wars problems and treat them like puzzles in an RPG. Better yet, check out Screeps and write code to play an actual game!
Feel like watching Netflix? Maybe see if there is an interesting talk on YouTube from a recent tech conference. If you want something more interactive, see if there is a developer working on an interesting project live on Twitch! The software and game dev category has become a lot more popular in recent years.
Big fan of scrolling through TikTok? Try to cater the content around the subject you’re trying to learn more about. Or simply find something else to do, since TikTok and other forms of social media are terrible for your attention span.
Find ways to take the chore out of learning and turn it into an adventure. Have goals and benchmarks you want to achieve clearly written somewhere you can review them. Work towards building something you WANT to build, not just what the online tutorial tells you to build. Use your desire to improve at this skill to replace negative habits that otherwise drain your ability to make progress. Immerse yourself in your tools and the community surrounding it. This isn’t to say you should never play another video game or partake in a leisure activity, but maybe you should ask yourself if you’ve put in enough work towards your goals today before you grab the controller.
The longer you spend doing a thing, you have no choice but to improve at that thing. Want to be a developer one day? Give yourself the best chance possible and spend as much time surrounded by the things that will get you there.
Summary
I’m no expert. None of this article was written with the intent that anyone should do exactly as I do. Maybe I get to the end of this journey one day and realize that I royally screwed it up, and there really were a few shortcuts I could have taken.
Maybe I’ll succeed.
All I want is for other people to realize that being self-taught can be a great thing, but it isn’t the sexy badge of honor the course-slinging YouTube bros make it out to be. It’s a lot of hard work. A lot of mistakes. A lot of trying to “figure it the hell out.” I want others to understand that there are no shortcuts but that we can still make it with enough grit and determination to be the best at what we do.
Take it or leave it. Hopefully one day, I’ll be writing an article from my new developer job, and I can tell just how much of what I’ve said has held true.
There Are No Shortcuts on the Path to Becoming a Successful Self-Taught Developer was originally published in Better Programming on Medium, where people are continuing the conversation by highlighting and responding to this story.