Watch for Slow Trains

The other day I was listening to .NET Rocks episode 1327 and I heard an interesting quote. One of the guests, Jamie Dixon said:

It’s a slow moving train, but if you sort of stand there with your OO [object oriented] imperative code that train does … leave you behind every day

Now, this quote has been keeping me up at night a bit. Not because I’m afraid that I’ll be stuck writing object oriented, imperative code forever – I firmly believe that functional programming is the future – but because I don’t know which slow trains I’m on, and which slow trains I’m not on.

Health is a good example of a slow train. I know that I’ve gained a little weight since I started computer programming. Pants that were comfortable last summer still fit, but they’re not comfortable. It’s a slow train, but it is leaving me behind. So I decided to re-evaluate a little bit. I’m training for a 5k. That’s not exactly a marathon, but it is a start. It’s a slow train in a direction I want to go.

This blog is another example of a slow train in a direction I want to go. I check the stats every morning, in case a post went viral the night before, and it didn’t. I usually have only a few reads, and probably from people who know me personally, but it doesn’t matter. I’m building up a long history of posts, getting my name out, practicing my writing, and learning. I hope I’m even helping a few other people learn. Again, slow train headed in the right direction.

That slow train quote is a great example of the right little thing. It started me thinking. It was someone else’s aside, but turned into a major catalyst in my mind.

I think that’s it this week. I do have one announcement: I’ll be blogging every Monday and Wednesday morning, instead of just every Wednesday. (This blog train is moving a little slow for my taste.)

I also have a question for you:

What slow trains are you on, and do you like where they’re going?

Till next week, happy learning,

-Will

Mindset Post: Handling Discouragement

“If I don’t debug this graph search implementation tonight, I will be poor forever.”

I actually had that exact thought, verbatim, one night during year 2. I was up late. I felt like I was stuck; no matter what I did, I kept messing up the homework problem for one of the algorithms classes I was taking.

I was caught in the worst kind of programming vicious cycle; I would make minor changes I didn’t really understand, build, upload to the auto grader, watch in dismay as I either didn’t fix the problem or made it worse. I would repeat the process.

I let myself get stuck. I was more and more discouraged, and more and more frantic. How can this ever work? Does this mean I’m not a real programmer? Does this mean I should just quit?

There were a few things going on that, in retrospect, I should have changed immediately.

First, every “real” programmer, whatever that means, has certainly lost a few hours of his or her life to a stupid bug. It’s part of the job. (It’s not a good thing, of course, but it does come up.)

Second, life is long. The course I was taking was free. I had a job I liked. I was not out of retries yet. I could always try the course again, try the assignment again, sleep on it, whatever. Part of discouragement is thinking that any immediate failure represents complete failure. That is false. You can fail a lot (and probably will) and still do well. That is life.

I hate movie portrayals of hackers. There’s some kid who’s like twelve, and needs a shower and a haircut, who can make the world change by magically typing fast. That’s dumb. People who are good programmers study hard, learn a lot, do some work. It might not feel quite like work, because they often enjoy it so much, but it is not immediate. It might not happen in a classroom, and it might not look like the book studying that we saw in school, but everyone who’s good at something learned it somehow.

When you get discouraged, do not measure yourself against other people. That is inherently discouraging. It’s inherently discouraging because you see your own struggle, but the other person’s success. It’s like you’re measuring your worst day against their best; struggle is usually private, and success is often public.

Basically, when things are not going well, I have a few choices: I can (1) quit forever, or (2) quit for a little while, take a walk, get a good night’s sleep, and try again, or (3), press on. If you really want to do something, default to option 3, use option 2 when you need it, and never use option 1. That’s it.

I knew a guy who fixed a lot of things, like floors and sinks and whatever, and he had a good saying. Whenever a task was taking longer than he wanted, he would just say, “it can’t win” and keep working. He’s right – it’s not like the tasks you’re attempting actively oppose you. There are two outcomes: You succeed, or you quit. Notice that neither of those outcomes lies outside yourself.

So remember, when you’re discouraged, choose option 3, unless you’re really hungry or tired or your brain is full for the day, then choose 2. Don’t choose option 1.

Till next week, happy learning!

-Will

Mindset Post: The Efficient Learning Curve

I really like graphs, both the data structure and the run-of-the-mill, let’s put some stuff on some axes kind of graphs, so when I hear about learning curves, I think about something like this:

stuff graph

So let’s graph our topic of discussion. Here’s the “Steep Learning Curve”:

steep learning

I don’t hear about the other kind of learning curve very often, but I suppose it’s a “shallow learning curve”, and it looks like this:

shallow learning

Boy, look at the difference! In the first graph, after 18 times, whatever those are, you have almost 800 learnings! In the second graph, you only have about 21 learnings. Sadface.

Bogus units aside, this leads me to an interesting observation: Why do we talk about steep learning curves as if they were bad? Doesn’t the first one look more fun?

Here’s the thing: Learning is good. Time is limited. In every other situation where we graph our ability to attain something good against our expenditure of something limited, steep curves are good. We never talk about a revenue curve that’s “too steep”. (Darn! The graph of this investment’s value over time curves too steeply upward. Better sell!) We never talk about an acceleration curve that’s too steep. (My car just accelerates too quickly! I’m going to trade it in for a ’98 Ford Taurus with a shallower acceleration curve.) So why does the learning curve get picked on? Why is it the only “good stuff over time or effort” type graph that’s not allowed to be steep?

I think it’s because a lot of people label the x-axis wrong. They label it “effort” or “how much this will suck” or “parties I will have to miss while studying.” But if I can convey only one message with my blog, this is it: Learning is fun, and learning about computers and how they work and how to change how they work is especially fun. So let’s throw out our pessimistic x-axis labels and get to work. We can label the x-axis “hours of sustained concentration” if you want. Now steep curves are back to being efficient, not bad.

There’s something I like to say to myself, when I am working on something that’s hard, like taking an algorithms class, or trying to get a really tricky piece of code to behave. My saying is: “You are now entering an area of highly efficient learning.” Doesn’t that sound nicer than the steep learning curve?

My point is not to beat your head against the most difficult thing you can find; rather, my point is to start looking for opportunities to master something that’s a little beyond you. Sometimes, at the beginning of an online course or a programming book, I can tell that I’ll need to learn a whole new way of thinking to get through the course. That’s when I get excited! I say to myself, “You sir, have just entered an area of highly efficient learning! Clear out your schedule, and focus hard! This is an all-you-can-eat buffet of interesting thoughts and creativity!”

Occasionally, after this burst of enthusiasm, I discover that I really do need to calm down and study something easier for a bit. (For example, I once signed up for a hard physics course without taking the math prerequisites. That didn’t work.) But most of the time, this burst of enthusiasm is followed by really learning a lot, and then feeling very happy with what I’ve accomplished.

What was the last book, blog post, online course, or whatever, that you took, that gave you the feeling that you were going to learn exponentially fast to get through it? Post your answers in the comments!

Till next week, happy learning,

-Will