Why Programming Feels So Hard (And How to Actually Learn It)

12 min read

"Tanay Sir, I want to learn React but I haven't been able to understand for many days."

I get this message a lot. Different students. Same problem.

They watch tutorials. Understand everything. Then sit down to code and... nothing happens.

So I asked a bunch of students: What don't you understand?

"The thing is, React. I understand everything when I watch the tutorial. But when I go to code it, I don't understand."

OK. What don't you get?

"I'm not able to write my own code."

This is the most common problem in programming. You watch, you understand, you nod along. Then you open VS Code and your brain goes blank.

But why?

The Real Problem

I asked these students a simple question: How many days, how many weeks, how many months have you spent learning JavaScript?

"Uhh... I followed through a JavaScript tutorial. Solved some questions. I went into React pretty early."

There it is. That's the problem.

React is nothing. Web development is nothing. MongoDB, Express, React, Node - MERN - is nothing.

The game lies in JavaScript. And before that, the game lies in programming.

If you don't know programming at all and you only try JavaScript for 2, 4, 5 days - or you directly jump into React tutorials - you won't be able to do programming or development. Period. Doesn't matter how much time you spend after that.

Think about it like a building. If you don't spend time building a strong foundation, it doesn't matter how tall you build. The building will fall. There's no support below.

The 5-Hour Trap

Here's what we do: We don't even give JavaScript 4-5 days. We want to understand it in a few hours.

"Okay, I watched a 5-hour video. I must have understood programming completely. Now I know what a variable is. Now I know what an array is."

But what difference does it make when you know?

Nothing happens when you know.

The whole game is being able to do it. It's not about knowing. It's about doing.

So What Should You Do?

Spend a lot of time. I know, obvious answer. But hear me out.

"So much time on what and where?" - valid question.

Here's the thing: React has a lot of JavaScript inside. A lot of vanilla JavaScript and functional programming.

React itself has just one concept - UI is a function of state. That's it. One concept.

Everything else in React? JavaScript. Functional programming in JavaScript.

To do functional programming well, you need to be really good at the basics:

  • How to use arrays
  • How to use objects
  • How to use arrays of objects

And before you reach those topics, you need to understand datatypes. You need to know how to write logic.

Wait, Logic?

When we think about logic, we make a huge mistake.

We think logic means DSA. Or logic means palindrome problems. Or LCM. Or recursion. Or double for-loop star patterns.

That's not what logic means. Not at all.

We've been making this mistake for 40 years. Since we started training software engineers.

We don't train people like software engineers. We train from a computer science perspective.

That's why there's so much buzz about DSA today. That's why so many students - who know there are jobs, who know there's money in tech - come flooding in and then crash against the wall of DSA.

Their blood starts flowing.

No matter how easy you make the course, it won't work out. Because DSA can't be taught in the beginning.

What You Should Learn Instead

In the beginning, you should only know the basics:

  • How to store data in an array
  • How to store data in an object
  • How to use variables

And logic. Simple logic like:

  • If A's age is 18, should they be allowed to watch this movie?
  • If B's age is greater than 60, how much discount do they get at the ticket counter?
  • If C worked over 40 hours, how is their overtime calculated?

Most of the time in software engineering, this is what happens. You go to the ticket counter. You go to the movie hall. You scan something. That's it. That's what's happening in the software.

It's not like data structures are being used every day. They are used, but behind the scenes. The software engineer writing code? They're using if-else, functions, arrays, objects.

But we spend very little time on these basics. And that's where we make the mistake.

The Book Problem

I've done a lot of work on this recently. I went back to books I used when I learned programming.

"Let Us C" - the book I learned from. I made so many questions from it. Recently I bought it again. Then I bought "Eloquent JavaScript". Then "You Don't Know JS".

Let me tell you about all three:

Let Us C - Good basic book, but we reach advanced level too fast.

Eloquent JavaScript - I personally like this book. But it's for people who want to learn JavaScript as a language. Not as a first programming language. There's a difference.

If you don't know what a function is, how to use for loops, what arrays are, what objects are, what if-else is, what AND and OR operators are - Eloquent JavaScript is a very bad book for you.

You Don't Know JS - I don't even want to talk about this one. If someone recommends this as a beginner book, immediately unfollow them. This is a book you read after becoming a senior developer. Two or three years later.

But these are the books everyone recommends for JavaScript.

What I Did About It

After a lot of research, I found "JavaScript for Dummies". I bought it. I don't buy pirated books, don't read them.

That book was generally good. A little different. But even here I had a problem.

Why do programming books want to tell you everything on Day 1?

You learn for loop. Then immediately they teach you do-while loop and while loop. Then for-each and for-in.

Why? Learn one loop. Master it. Move on when you're ready.

This isn't just about loops. It's everywhere. We try to teach a wide range. We don't try to get students to actually do much.

The Gym Analogy

Think about going to the gym.

The trainer doesn't say: "Check this out, chest has 5 exercises, 6 here, 10 exercises for this. And for biceps there's this. And this is for triceps. And this is for shoulders."

That would be insane. You'd say: "Brother, help me do something. I came to the gym, not to study."

At the gym, you lift weights. That's how your muscles grow.

Why don't we think of programming the same way?

Programming itself is simple. The more you focus on simple exercises - 2kg, 2.5kg, 5kg - gradually your muscles increase. Then you move to 10kg, then 15kg. Then you can do complex exercises.

This is what should happen in programming too.

When you take your first steps, you walk a little. First 500m. Then 1km. Then someday 5km, 10km.

It takes time. But we don't want to put in the time. We want to understand everything, study everything, learn everything - but not build anything.

That's our major problem.

The Gandhi Story

Once, a man came to Gandhi Ji. He said, "Gandhi Ji, my kid eats a lot of sweets. His health is deteriorating. He doesn't listen to me. But he respects you a lot. Please talk to him once."

Gandhi Ji said, "I won't speak today. Come back in a week."

A week later, they came back. Gandhi Ji made the child sit. He said, "Hey kid, you shouldn't eat this many sweets. Control your intake or your health will deteriorate."

The kid says, "OK Gandhi Ji, thank you."

Then the man asks, "Gandhi Ji, to speak only one line, why did you call me a week later?"

Gandhi Ji said, "The advice I'm giving, I can only give when I've applied it myself. If I haven't applied it, I shouldn't give advice to your child. So in the last week, I stopped eating sweets completely. And after that, I gave advice to the child."

What I Applied

I'm telling you: if you want to do something, spend a lot of time on it. Apply it practically.

And this idea I had - that programming should be taught a certain way - where did I apply this myself? When did I spend time on it?

Before making this realization public, I spent a lot of time.

First, I created a small course. JavaScript only. Taught my way.

Then I called 200 students. Taught them through this course. Took all their feedback. Fixed the flaws. Improved it.

They came in batches of 10. By the end, the completion rate was very good. The learning was very good.

I made a lot of exercises. How many? Try to imagine:

For every topic, there's classwork. Then 2 homeworks. And within each topic, there are sub-topics.

Just on "String Concatenation" - 50 exercises.

Because this is like a gym. If you don't work out, how will you build muscles?

Just on operators - haven't even started if-else yet - look at how many exercises there are.

And from these small operator exercises, students created dashboards. They created reports.

Then they dove into if-else. Look at how many exercises.

First I explained why "if" is "if". Then explained "if" with "else". Then "if-else-if". Then the ladder pattern.

It should be like this.

I wasn't getting anything like this anywhere. So I made it myself. Tested it.

Because if I don't test what I'm saying, if I don't spend my time on a problem, how will I bring a solution to you?

The Results

This isn't 10 minutes or 20 minutes of thinking. This is months and years of work.

For years I've been thinking about this problem: Programming isn't really that tough. So why does it take so much time?

The answer: we aren't spending enough time with students. We can't get them to do enough work. There aren't enough exercises for kids to practice and learn step by step.

I made the course like school taught us: what is not taught won't be asked.

Whatever is in the classwork, the homework question is the same - just the variable name and data changed.

You'll ask, "What will this do?"

That's how we learn. Isn't that how we learned in school? Made a little classwork. A little homework. Made it a bit same.

The 200 students who came? Nobody refused to work hard. Well, some people said, "I already know programming, I thought you'd teach something advanced."

That's fine. No problem.

But those who didn't know programming and wanted to understand? They wrote beautiful feedback:

"I never thought I would learn JS in this structure and with so much practice skill. Now my confidence has increased."

How much time did this take? 15 days full-time.

Imagine - in 15 days full-time, you can learn the basics of JavaScript. A lot more to go still. But you'll have learned enough that you can create reports. HR reports. So many reports.

And the student learned concepts we never explicitly taught. Like map, filter, reduce. We didn't use these words anywhere. But the kid is doing it. When the total gets calculated, reduce works itself out.

The Bigger Picture

I feel that books on programming languages - not just in India, but in the entire world - are really bad.

I know that sounds arrogant. But it's the truth.

They all come from a computer science perspective. They don't come from a software engineering angle.

They came from a time when very few people entered programming. Even scientists wanted to get in.

Now we have to make many engineers.

If we want to boost India's economy drastically, our biggest strength is making many software engineers and deploying them.

If my experiments can be successful, many kids will be able to learn programming.

What's Next

Now my plan: Get into HTML/CSS using this method. Create a lot of exercises. Put in a lot of time.

After teaching via video and doing a lot of coding, then we go into vanilla JavaScript.

After that - think about it, after doing so much - then I'll teach how to do API calls.

At least after a month of teaching, I'll get into API calls. Promises. Try-catch. I haven't gotten close to teaching "async" yet.

And I don't think we need to. The moment we get into JavaScript, kids start chanting: "Callback, callback, callback. Promise, promise, promise."

Why? What's the hurry?

Let's do it slowly. If this continues, React will come 2 months later. And in React also, in the same slow manner, we'll teach with a lot of practice.

This is the plan. This is an experiment. This is an idea that programming should be learned like this. JavaScript should be learned like this. React should be learned like this.

As we achieve a little success, I'll tell you how to study the next part.

And if you want to try this approach? Check out neoG Camp. That's where I'm putting all of this into practice.

Because the best way to learn isn't watching tutorials. It's doing. Over and over and over.

Until your muscles remember.