How to Become a (Decent) Software Developer

Posted on: June 25, 2025
If you play your cards right, it might not take as long as you think.
Of course, the standard path is:
- 1. Be good at math at school
- 2. Enroll in university in a bachelor of science program majoring in computer science
- 3. Grind leetCode, make a portfolio website, be active on github
- 4. Do some co-op (or just) internships
- 5. Get hired as a junior.
So, 4 years, give or take.
OR, if you are a genius programmer, become self-taught, master all the skills and gather all the knowledge. Contribute to some open-source projects, make a name for yourself and get hired. Good luck! Or is there another way?
6 Months
I've seen it a million times. Bootcamps promising you the world. "Become a programmer in 6 months!". All that bullshit.
But is it?
Let's break it down: what is a programmer? A programmer is anyone who writes code to build/maintain/update software. Can you become a programmer in 6 months? Of course you can! In fact, you can become a programmer in a couple of hours, as long as you wrote code and built software.
Now, if they promised you to become a "decent" or "good" or "hireable" or "junior" software developer, now that's a different story. In order to become any of the above, you should be able to build/maintain/update GOOD software. And by good software, I mean software that actually has users with a low churn rate. If they are willing to pay, even better. So what does it take to become a "decent" or "good" or "hireable" or "junior" dev? Can it be done in 6 months?
Fundamentals of Programming vs Fundamentals of Computer Science
The eternal debate. What do I teach my students first? Computer architecture, logic gates, latches, flip-flops, multiplexers, clocks, datapaths, busses, registers, the ALU, decoder, cache, main memory, microarchitecture, instruction sets, and assembly code? Or data types, ints, floats, booleans, strings, characters, constants, variables, control flows, loops, functions, classes and objects? The answer is: it depends.
If your student is more inclined to learn the theory behind computer science, then it makes sense to start by teaching them computer architecture, data communication, algorithms and operating systems. They will be doing very little code, but their understanding of computing will become excellent.
But from my experience, it's better to teach them something more interactive. Something they can write, and run, and see their code in action. Learning the theory can wait. In fact, if they are passionate and motivated to become software engineers, they will naturally be driven to learn how their code runs.
Curriculum
Spoiler alert: yes, you can become at least a decent, possibly hireable junior dev in 6 months. Here's how:
You first teach them the fundamentals of programming. Learn Python because it's a loosely typed, dynamically written interpretted language. Then, learn OOP with Java (I hate Java by the way), and that way you learn strictly typed, statically written compiled code. And you also get to experience object-oriented programming shoved down your throat because you have no other choice with Java. What a bliss for functional programmers. Then, you teach them procedural programming with C. Welcome to bit manipulation, pointer manipulation, memory manipulation, data structure and segfault hell.
I'm just kidding, don't teach them C yet. They're not ready for that. Unless you want to be mean. You really should teach them HTML and CSS for the joy of frontend development and seeing your code colorfully decorate your screen. Then, teach them JavaScript. This should be a bliss after learning Java. Your student is now ready to learn React. Frameworks, and a gazillion npm packages, yay! You might as well teach them Tailwind here. Then comes backend development. Choose your poison. Flask, Django, Spring Boot, Gin Gonic, ASP.Net, Node, Express, they all fly. Be careful! You also want to make sure they understand SQL (and MongoDB if you want, I guess).
Your student is now a full stack developer! They can build and deploy CRUD apps, possibly even having mastered authentication. But let's face it, this is not enough. Neither their frontend nor their backend can be considered "decent".
You really want them to master modern, blazingly-fast, safe technology. Show them the ropes around using advanced libraries and frameworks. Get them to start using Linux distributions. Get them to use TypeScript, no more JS. Move them away from Node onto Bun. Create-react-app? no, no, Tanstack router and query. Hono. Zod. End-to-end safety using a monorepo. This is how you get them to become decent developers. You now want them to build advanced applications, like instant messaging using web sockets, binary file handling with s3. You might even consider UDP for voice calls and video calls. Add a sprinkle of UI/UX design knowledge for good measure.
But wait. Your student is very good at programming, but they have no understanding of computer science. So now, it's time to teach them computer architecture, data communication, TCP, OSI, algorithms and operating systems. And thus, they are now ready to dive into C and all of its goodness.
It's now time for your student (or you) to start building programs. The learning is now over (unless you want to deepen your knowledge in science or another specialized field of expertise to apply to your application). It's now time for them to apply their skills and build their portfolio. They have the talent to dig deeper in any specialization they wish, be it HCI, embedded programming, frontend, backend, full stack, or game development. You can even teach them to improve DX by, for example, teaching them Vim Motions and Vim!
Here is my full curriculum, if I can get the student to contribute 8 hours a day, 5 days a week, for 24 weeks (6 months).
- 1. Fundamentals of programming with Python (week 1: 40 hours)
- 2. Fundamentals of OOP with Java (week 2: 40 hours)
- 3. Fundamentals of frontend development with HTML and CSS (week 3: 40 hours)
- 4. Fundamentals of web development with JavaScript (week 4: 40 hours)
- 5. Front end development with React and Tailwind (week 5: 40 hours)
- 6. Back end development with Node (or Flask, Django, Spring Boot, ASP.Net, Gin Gonic) and SQL (week 6: 40 hours)
- 7. Advanced full stack development with TypeScript, Tanstack, Bun, Hono, Zod, UI/UX design (week 7: 40 hours)
- 8. Fundamentals of Computer Science with Computer Architecture (week 8: 40 hours)
- 9. Fundamentals of Computer Science with Data Communication (week 9: 40 hours)
- 10. Fundamentals of Computer Science with Algorithms (week 10: 40 hours)
- 11. Fundamentals of Computer Science with Operating Systems (week 11: 40 hours)
- 12. Procedural Programming with C (week 12: 40 hours)
- 13. Portfolio building with application development (and Vim?) (week 13: 40 hours)
- 14 until 24. Portfolio building with application development (weeks 14 to 24: 440 hours), the student should be deploying and updating applications that either they choose to develop or the instructor tells them to. Team projects can be an option. Can involve product owners, project managers and designers.
If, by the end, your student is not a decent programmer, I don't know what else can be done. At this point, it's up to them to find ways to become a developer, not you.