Let me tell you about the least glamorous part of learning to code: the hours you spend completely stuck. Not stuck in a productive "I'm working through this" way. Stuck in a "I've tried everything I can think of and nothing makes sense" way. Initially, I spent two hours debugging an error message: TypeError: Cannot read property 'map' of undefined. Two hours. For what should have been a basic feature—displaying a list on a webpage.
This is what learning to code actually looks like. And nobody really tells you this before you start.
People ask me this a lot. Why not just relax during IB and learn programming properly at university with structured courses and professors?
The honest answer: I was too curious to wait.
I kept using apps every day—Instagram, Google Maps, online stores—and wondering: how do these actually work? What does that code look like? Could I build something like this? IB Computer Science taught me basics, but it felt theoretical. We solved textbook problems, not real ones. I wanted to build things people could actually use. So I joined Scaler, a rigorous software engineering program. I thought: "Great, now I'll learn to code properly." What I actually learned: I knew way less than I thought I did.
Arrays: Made sense. A list of items you can access by position. Fine.
Linked Lists: Completely lost me. The concept sounded simple—each item points to the next one. But implementing it? Writing code to reverse a linked list? I stared at that problem for an entire Sunday. I looked at solutions online afterward, and they made sense when I read them. "Obviously you need three pointers—previous, current, and next." But I never would have figured that out alone.
Time Complexity: In school, we wrote code that worked. Nobody mentioned whether it was efficient. "Why does it matter if something takes 0.01 seconds versus 0.001 seconds?" I thought. Then we ran my simple loop on a list of 1 million numbers. It took forever. Someone else's binary search found the answer instantly. That's when I realized: writing code that works isn't the same as writing good code.
Here's what shocked me: you spend more time fixing code than writing it.
I'd write perfectly logical code (or so I thought). Run it. Error. Fix it. Run it again. Different error. Fix that. Run it. Now it gives the wrong answer. Spend another hour figuring out why. During my internship at UnyKloud, I built a simple form—users enter data, click submit, it saves to the database. Should've taken an hour, maybe two.
I spent three hours debugging why the submit button didn't work. The problem? I wrote onClick={handleSubmit()} instead of onClick={handleSubmit}. One set of parentheses. Three hours to find it. When I finally figured it out, I didn't feel smart. I felt exhausted.
At my internship, I work with developers who've been coding for years. A feature that takes me a full day, they complete in two hours.
I once showed a senior developer a component I'd spent a week building. I was proud—it worked, it was organized. He looked at it for thirty seconds: "This will cause performance issues with lots of data. You're making too many API calls. Also, extract this repeated code into a reusable component." He rewrote it in twenty minutes. His version was cleaner, faster, half as much code. I felt impressed and slightly defeated at the same time."Everyone's code looks like this at first," he told me. "You learn by doing it wrong, getting feedback, doing it better next time."
Let me be honest about the gaps:
There's this feeling that everyone else gets it faster than you do. On Scaler forums, people ask sophisticated questions about optimization and edge cases. Meanwhile, I'm Googling "how to reverse a string in JavaScript" for the third time. At my internship, developers casually reference concepts I've never heard of. I nod along, then frantically Google them later. I mentioned this to a senior developer once. He said: "I've been coding for eight years. I still Google basic syntax. The difference is, I don't let it stop me from trying." That helped. Not completely—I still feel like I'm faking it most days—but enough to keep going.
Despite the frustration, there are moments that make it worth it. When I finally solved that recursion problem at 2 AM. Not because someone showed me—I worked through it myself. When the code ran correctly, I literally jumped out of my chair. When a feature I built at my internship worked on the first try. That almost never happens. I kept testing it, expecting bugs, but it just... worked. When a user said the UI component I built was "intuitive and easy to use." They had no idea how many hours I'd spent on it. To them, it just worked. That felt incredible. These moments are rare. But they're why I keep going.
Would university have been easier? Yes. Structured courses, clear explanations, classmates at the same level, time to focus. But starting at 17 has given me realistic expectations. I know how hard this is. When I get to university, I won't think I'll "learn to code in three months." I'll know confusion is normal. That debugging is most of the work. That feeling lost doesn't mean you're not cut out for this. Plus, I've built real things—applications people actually use. That context matters.
A few things I wish I'd known:
I've been coding seriously for about a year and a half. I'm not a software engineer. I'm not close. I'm a student learning to code while managing IB. Some days I feel like I'm progressing. Other days I feel like I understand less than last week. I still get stuck on problems experienced developers would solve in minutes. I still Google basic syntax. I still confuse concepts I thought I'd mastered.
But I can build things now that I couldn't a year ago. I can read code and roughly understand it. I can work through problems, even if it takes longer than it should. That error message at the start? I eventually fixed it. The problem: I was trying to map over data before it loaded from the API. Once I added a loading state, everything worked.
Took me three hours total. A senior developer probably would've spotted it in three minutes. But I figured it out. And next time, I'll know what to look for. That's progress. Slow, frustrating, humbling progress. But progress.