Question
Answer
Last Friday I opened my inbox to yet another message that started with, “I don’t have a CS degree, but I want to write code for a living.” That was me fifteen-odd years ago, minus the courage to ask strangers on the internet for advice. So, yes, seeing newcomers jump in still gives me that “welcome to the club” grin—our industry could use a few hundred thousand more engineers anyway.
You’re probably wondering whether a diploma is mandatory. Short answer: plenty of teams hire skilful self-taught engineers. Longer answer: some big names—Google used to be notorious for this—still filter by degrees, so research the companies you’re aiming for. (I wish someone had told me that before I spent a month tailoring a résumé that never made it past an automated screen.)
Think of code as a language, sure, but remember even native speakers wrestle with grammar forever. Intro CS courses at Berkeley report attrition rates somewhere around 25%—and they’re taught by professors who genuinely want students to stay. Point is, the difficulty curve isn’t a verdict on your potential; it just takes time.
Your entire curriculum lives online—YouTube playlists, free MIT lectures, weird blog posts from 2012 that still rank for “pointers explained.” Pick one beginner series and stick with it for a bit. The actual language matters less than finishing something. If the recommendation system drags you into “C++ metaprogramming in 48 minutes,” close the tab (been there, lost an evening).
🏄 Heads-up: “free” means no tuition invoices, not zero cost. You’ll pay with evenings, weekends, and the occasional existential crisis.
Structure helps. I block two 45-minute slots in Google Calendar for learning even when the week is chaos (well, especially then). One slot is pure theory—videos, docs, note-taking. The other is hands-on: typing code that breaks, fixing it, committing whatever finally runs. Consistency is boring but undefeated.
Have a project in mind. A tiny one. A portfolio generator, a Raspberry-Pi temperature logger, the classic “to-do list but with cats”—doesn’t matter. I’ve watched learners burn out on React tutorials, switch to Python automation scripts, and suddenly fly through tasks they’d avoided for weeks. Novelty revives motivation.
Those projects become portfolio pieces. Recruiters—at least the ones I talk to—usually skim GitHub before they read cover letters. I can’t promise every company does that, but having a repo with a clear README and a gnarly bug you eventually squashed beats a polished résumé that says “passionate about synergy.” Keep a short changelog of what stumped you and how you got past it; interview stories write themselves later.
Communities matter more than algorithms. A Discord server where people post their failing unit tests at 1 a.m. can save you hours. Meetup groups, Hacktoberfest, whatever Slack channel your city uses—jump in. Someone will point out a smarter approach, and occasionally you’ll return the favour. (I’m not entirely sure this scales beyond small groups, but it has worked for every mentee I’ve had.)
The day impostor syndrome shows up—and it will—remember that experts still Google “how do I exit Vim” during demos. Mastery takes years, not months. Expect plateaus, celebrate the small deltas.
About internships: real-world tickets in a backlog teach faster than any tutorial. Paid gigs are ideal; unpaid roles sit in an ethical grey zone and, in some places, a legal one. Check local labor laws and university policies if you’re enrolled anywhere. If compensation is “exposure” or “possible future equity,” read the fine print twice.
The path from sales (or hospitality, or music theory) to shipping production code is winding, but it’s navigable. Every bug fixed, every pull request reviewed, nudges you forward. If progress feels slow, that’s normal—it’s supposed to. Keep shipping, keep asking questions, keep the calendar blocks sacred.
See you in the commit history,
Vadim
More questions from users:
Worried your codebase might be full of AI slop?
I've been reviewing code for 15 years. Let me take a look at yours and tell you honestly what's built to last and what isn't.
Learn about the AI Audit →No-Bullshit CTO Guide
268 pages of practical advice for CTOs and tech leads. Everything I know about building teams, scaling technology, and being a good technical founder — compiled into a printable PDF.
Get the guide →
2 Comments
Starting to code can feel like you’re learning to swim by being thrown into the deep end. I’ve been there, and trust me, it’s normal to feel overwhelmed. One piece of advice that really changed the game for me was focusing on understanding the problem before diving into the solution. It’s easy to jump straight into coding without fully understanding what you’re trying to solve. This often leads to frustration and wasted time. Also, remember that Google and StackOverflow are your best friends. They’re not just for finding answers to specific problems; they can also teach you how to ask the right questions. That skill alone can set you apart in the tech world. Lastly, don’t underestimate the power of taking breaks. Sometimes stepping away for a bit is all you need to see the solution you’ve been missing.
I started learning to code by tackling small, fun projects that caught my interest. Joining GitHub early on helped me practice and connect with other coders. Whenever I hit a roadblock, I dove into forums and discussions for solutions, which surprisingly boosted my confidence. Keeping the habit of coding regularly, even with simple tasks, gradually built my skills.