One Year of Learning to Code: Reflections and Lessons

It’s been almost a year since I started learning programming seriously. I want to reflect on this journey while it’s still fresh.

March 2021: The Beginning

I started university and began learning programming. I knew almost nothing about code.

I remember thinking: “Can I actually learn this? Am I smart enough?”

December 2021: Where I Am Now

I can build full-stack web applications. I understand JavaScript, React, Node.js, databases, Git, and more.

I’ve built dozens of projects. I’ve solved hundreds of bugs. I’m learning how to learn.

I’m not an expert, but I’m no longer a beginner.

What I’ve Learned (Technical)

Frontend:

  • HTML, CSS (Flexbox, Grid, responsive design)
  • JavaScript (ES6+, async/await, DOM manipulation)
  • React (components, hooks, state management)

Backend:

  • Node.js and Express
  • REST APIs
  • Authentication basics
  • MongoDB and Mongoose

Tools:

  • Git and GitHub
  • VS Code
  • Chrome DevTools
  • Command line basics

Concepts:

  • How the web works
  • Client-server architecture
  • Databases and data modeling
  • Async programming
  • Debugging strategies

What I’ve Learned (Non-Technical)

Learning how to learn: The most valuable skill. I can pick up new technologies quickly now.

Problem-solving: Breaking down complex problems into smaller, manageable pieces.

Persistence: Not giving up when things get hard.

Asking for help: Knowing when to struggle alone and when to ask for help.

Reading documentation: This is a skill that improves with practice.

Managing time: Balancing university, self-study, and life.

Projects I’ve Built

I’ve built many projects this year. Most I’ve deleted after learning from them. Here are the ones that mattered:

Todo apps (multiple versions): Everyone builds these, but they’re teaching me a lot about CRUD operations, state management, and UI.

Weather app: Teaching me about APIs, async JavaScript, and handling external data.

Note-taking app: My first full-stack application with authentication.

Portfolio website: Showcasing my work and practicing design.

Various experiments: Countless small projects to learn specific concepts.

Biggest Challenges

Imposter syndrome: Constantly feeling like I don’t know enough. This still happens.

Information overload: There’s so much to learn. It’s overwhelming.

Balancing depth and breadth: Should I master one thing or learn many things?

Staying motivated: Some days I don’t want to code. I have to push through.

Debugging frustration: Spending hours on bugs is mentally exhausting.

Comparing myself to others: Seeing people who seem “better” is discouraging.

Biggest Breakthroughs

Understanding async JavaScript: When this clicks, so many things make sense.

Building my first full-stack app: Seeing all the pieces work together is amazing.

Learning React: Understanding component-based architecture is changing how I think about UIs.

Systematic debugging: Moving from random changes to systematic problem-solving.

Realizing I can figure things out: I don’t need to know everything. I just need to know how to find answers.

What’s Working

Daily practice: Coding almost every day, even if just for an hour.

Building projects: I’m learning more from building than from tutorials.

Learning fundamentals first: Understanding JavaScript deeply before jumping to frameworks.

Using multiple resources: YouTube, documentation, courses, articles different explanations help.

Writing about what I’m learning: Explaining concepts is helping me understand them better.

Not giving up: Pushing through frustration and confusion.

What Isn’t Working

Tutorial hell: Watching tutorials without building my own projects.

Jumping between topics: Trying to learn too many things at once.

Perfectionism: Spending too much time making projects perfect instead of moving forward.

Comparing myself to others: Everyone’s journey is different.

Not asking for help sooner: I’m struggling alone when I could ask for help.

Mistakes I’m Making

Delaying Git: I should have learned Git earlier.

Not writing tests: I still don’t write tests regularly. I need to learn this.

Ignoring CSS: I’m focusing on JavaScript and neglecting CSS. Design matters.

Building too many todo apps: I should build more diverse projects.

Not contributing to open source: I’m intimidated, but I should try.

What I Wish I Knew at the Start

It’s supposed to be confusing: Confusion is part of learning, not a sign of failure.

Everyone struggles: Even experienced developers Google basic things.

Build immediately: Don’t wait until you “know enough.” Start building on day one.

Fundamentals matter: Don’t rush to frameworks. Understand the basics deeply.

Learning never stops: There’s always more to learn. That’s okay.

Quality over quantity: One good project is better than ten mediocre ones.

It gets easier: The first few months are the hardest. It gets better.

Advice for Beginners

Start now: Don’t wait until you feel ready. You’ll never feel completely ready.

Be consistent: Code a little bit every day rather than a lot once a week.

Build things: Projects teach you more than tutorials.

Don’t compare: Focus on your own progress, not others’.

Ask for help: Join communities, ask questions, don’t struggle alone.

Embrace confusion: It’s temporary. Keep pushing through.

Celebrate small wins: Every bug fixed, every feature completed is progress.

Learn fundamentals: Don’t rush to frameworks. Understand the basics first.

Read documentation: It’s a skill that improves with practice.

Take breaks: Rest is part of learning.

What’s Next (2022 Goals)

Technical goals:

  • Master React and learn Next.js
  • Learn TypeScript
  • Understand testing (unit tests, integration tests)
  • Learn about deployment and DevOps basics
  • Build more complex, real-world projects
  • Maybe learn a second language (Python or Go)

Career goals:

  • Build a strong portfolio
  • Start freelancing or find internships
  • Contribute to open source
  • Network with other developers
  • Keep learning and improving

Learning goals:

  • Focus on depth, not just breadth
  • Write more about what I’m learning
  • Help other beginners
  • Stay consistent with daily practice

Reflections

This year has been hard. Really hard.

There are days I feel stupid, days I want to quit, days I think I’ll never understand.

But there are also days I feel like a genius when something clicks, days I’m proud of what I’ve built, days I can’t believe how far I’ve come.

The key is showing up every day, even when I don’t feel like it.

The Journey Continues

One year in, I’m still very much a learner. There’s so much I don’t know.

But I’m a completely different person than I was a year ago.

A year ago, I couldn’t build anything. Now I can build full-stack applications.

A year ago, errors terrified me. Now I debug systematically.

A year ago, I didn’t know if I could do this. Now I know I can.

That’s progress.

Thank You

To everyone who’s helping me this year:

  • The creators who make free content
  • The developers who answer questions on Stack Overflow
  • The communities that welcome me
  • My family who supports me
  • Everyone who believes in me

Thank you.

To Anyone Starting Their Journey

If you’re just starting to learn programming, here’s what I want you to know:

It’s hard. You’ll be confused. You’ll want to quit.

But if you keep showing up, if you keep building, if you keep learning, you’ll make it.

One year from now, you’ll look back and be amazed at how far you’ve come.

Keep going. It’s worth it.

Here’s to year two.