| Contents |

3 Growth Mindset

This is a tough one for me, personally. I don’t like failing at things, even if no one can see me doing it, and especially when people do. It knots my stomach and then I say all kinds of bad things to myself that I wouldn’t ever say to anyone else.

And I do this even though I know it’s a losing game and it contradicts the exact advice I give in this section.

What should I be doing, instead?

Psychologist Carol Dweck10 popularized the term growth mindset.

The gist of it is:

That kind of thing.

It’s the opposite of what I tend to do when I lose my bazillionth game of Go12. How could I have made so many stupid mistakes? I’ll never be good at this!

But that’s what Dweck would refer to as a fixed mindset. It’s my mistaken belief that no matter how much I play the game, I’m up against my own intrinsic limitations that I’ll never get past no matter if I study for 500,000 hours!

And when I put it that way, it’s kinda silly. No one can spend 500,000 hours doing anything without getting better at it.

Lose your first 50 games as quickly as possible.

—Go proverb

So what about 50,000 hours? 500 hours? 50 hours? 5 hours?

Come to think of it, it seems like any amount of practice is going to be an improvement.

Even when you’re completely stuck, you’re still exploring avenues. Even if they turn out to be dead-ends, you’ve at least learned that they are!

“Isn’t it the same thing, like ‘flammable’ and ‘inflammable’? Boy, I learned that one the hard way.”

—Woody, Cheers

“Great. Another f---ing learning experience.”

—My sarcastic mother

Every success is a learning experience. Every failure is a learning experience. Every learning experience improves your skills. Don’t fear failure—use it to level up.

3.1 Tenacity

“The master has failed more times than the beginner has even tried.”

—Stephen McCranie

I think this is one of the main attributes of anyone who grows to excel at anything. (How’s that for a generalization?)

Who is going to get farther, the person who gives up after a failure, or the person who fails and fails and fails and fails and keeps getting up, dusting themselves off, and trying again?

This is what separates the exceptional devs from the unremarkable devs. The exceptional devs have had their asses kicked over and over and over, and they kept attacking and attacking and attacking until they solved the problem. And they learned something from every single failure.

“I have not failed. I’ve just found 10,000 ways that won’t work.”

—Thomas Edison

And something that’s related here that students might not realize: your instructors failed and failed and failed and failed, too! Sure, they can live-code the linked list delete in class and have it work on the first try… except that wasn’t the first try, was it? It was, like, the 100th time they’ve done it. You code up a linked list delete from scratch 100 times and you’ll be getting it right on the first try, too!

When watching an instructor make something look effortless, you might become disheartened because this material seems so impossible for you. And you start to think that your instructors and some of your peers have a natural ability to code that you simply weren’t born with. What magical skill were they endowed with in the womb that you will never have? (Hear that fixed mindset talking?)

But here’s the secret: there’s no difference between you and your instructors other than the number of failures you’ve had. You’ll need to fail a lot more to get as good as they are!

Very, very few people are “natural” coders. 99.999% of the rest of us have to work really hard to learn this stuff.

Relentless tenacity is one of the prime qualities of the top coders of the world.

3.2 You Gotta Want It

When I was thinking about getting a PhD (I didn’t), my adviser advised, “You gotta want it.” The implication was that it was so much work to get a PhD that I had to have enough drive to put in the time.

And I think this is good advice in general about learning Computer Science.

There’s so much really hard stuff to figure out, you have to have enough drive to do it. It’s not easy. At all.

I like to use the example of me being an accountant. I know I’m smart enough to do it (math minor!) but I also know I hate it. My old roommate became an accountant and I had the misfortune of cracking open one of her study guide books. Never again will I make that mistake.

My brain just shuts down the minute people start talking about it. Imagine something that bores you to tears that you hate. Now imagine spending four years studying it in excruciating detail.

Speaking for myself and projecting broadly, I think it’s a lot harder to motivate to put in the work to do something you hate.

I caught a lot of flak on Hacker News for this assertion a while ago. Several people commented that they hated programming and still managed to have a career at it.

First, that’s a… bummer. But secondly, I still argue that people who love computer science have an easier time getting their degree than people who hate it.

And the people who seem to be “naturals” are the ones who really love it. They think about computer science all the time (because who wouldn’t?) and, as such, get a lot of practice in. Rather a lot more than the people who hate it tend to.

So, while it’s clearly possible to have a career in a lucrative field you dislike, it’s (a) going to be harder for you than for people who like it and (b) maybe you should consider a field that you do like?

You gotta want it. Do you want it enough to go through the tremendous amount of effort it takes to learn it? Maybe you hate programming, but you want the money enough. Maybe you don’t care about the money, but you want to program every second of the day.

Just make sure you have the drive to make it happen.

3.3 It’s Not Easy

As you read this scroll
You will smoley begot
Confused by the printed worts

—“Scroll of Learning Disability”, Dragon Magazine

Computer Science is hard. Like really hard. If you’re used to things being relatively easy because you were the smart one in class, it might be a shocker to get to some of these topics and get your ass handed to you.

But it’s this hard for everyone. You’re not blessed with a special lack of ability to learn computer science. You just have to keep hammering away just like everyone else.

You wouldn’t doubt that juggling 11 balls at once is difficult for everyone, would you? And yet, people can do it13.

“You know how to get to Carnegie Hall?”
“Practice!”

—Joke of unknown origin

Reps, reps, reps, reps.

When you’re at school, you actually have it even worse than at a job. In school, you’re continuously learning new things and, just when you barely have a grasp of a topic, you move on and try to learn something else that’s incredibly challenging. An undergrad degree is four solid years of just barely being able to hang on to the massive amount of perpetually novel material you’re presented with.

And when you do finally get your degree and a job, the first three months of that job are also a high-paced barely-hanging-on learning experience.

But then after three months, you start to get a handle on the code. And it gets easier. The feeling of hanging on by your fingernails does start to abate. And—I know this might be hard to believe now—eventually the job might actually get so easy as to be boring. And then you’ll look for another one with new, exciting challenges to tackle.

3.4 Chapter Reflection


| Contents |