Benefit of Courses: Externally Imposed Deadlines

How many times have you written a research paper soon (ahem, ‘immediately’) before it was due? Now, in contrast, how many times have you written a research paper just because? Or well in advance? The answers here tell us something important: deadlines boost productivity.

Much like the steep learning curve, the deadline is an oft-maligned but incredibly helpful productivity tool. If we know when something has to be done, we tend to do it.

I think deadlines were a major reason I learned so much more during year 2 than I did during the previous years. Coursera imposed real deadlines. Deadlines made me get that extra hour of work in when I really didn’t feel like it.

But what about the effortless font of creativity? After all, Beethoven, in all the movies, is so caught up in love of music that it just flows out of him, whether he makes time or not. Aren’t we all supposed to be movie Beethovens of code?

I think not. I’m not an expert on the real Beethoven, but I bet, at least once or twice, he had a cold and practiced hard anyway. I bet there were times when his symphonies were 3/4’s done and he was sick of them, and he finished them anyway.

Now, if you find yourself with a boundless font of creativity, by all means, work away. My point is not that you ignore the natural enthusiasm; that enthusiasm is why I started writing code in the first place. My main point is this: If you only work when you feel like it, and only do what you feel like, you will get less done than people with external deadlines get done.

A simple case in point: I started this blog in June. I posted twice. Then it sat for months and months. I love writing; there were times over the summer when I could have written for hours, but I didn’t. It’s not that I had no natural creativity, no enthusiasm during that time; it’s that I didn’t make it a priority because no one was going to care if it didn’t get done.

So, if you have something you want to get done, and no one is making you do it, take a class. Or make a schedule, and tell people your schedule. Believe me, once you have a deadline that is not within your control, you will become a lot more productive.

I restarted my blog thanks, in large part, to Simple Programmer, and their course on blogging for programmers. And let me tell you, there’s nothing like an external deadline to put your publishing schedule on track.

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

Learning to Code, Year 2, part 2: Coursera Was My Job

After last year and the one before, I was off to a pretty good start. I had written a few automated processes that really made my life easier, such as a Python script that spat out vocab quizzes, and I had helped write a program that took old, gross ALL CAPS stories from a database and made them into non-screaming English.

Then the school year started. I missed the summer of writing code. I spent time when I should have been grading wondering how hard it would be to write a program that scored Latin translations. (Hint: it would be hard.) I got distracted during the day thinking about C# and Javascript. And then I realized that I really loved writing code.

A few minutes later, I realized that some people get paid for writing code. I could get paid for something I love to do! The problem I had was that I had limited money and no degree.

My first thought was to get a degree, then get a programming job. I got in touch with a computer science professor at the nearest university, and asked him what kinds of classes were pre-requisites to his program. He was very kind and helpful, and told me basically everything I would have to do in order to probably be admitted to a Master’s program in comp sci in  about a year.

Now the problem is that taking a year of random classes, part time, in order to then take two years of classes full time, is slightly less cost effective than selling home videos of your friends burning your house down.

But I had gained one important thing. I had this map of classes, what to take when, that would make me qualified to apply for an M.S. in computer science. I took this same map, and started trying to figure out how to cross it.

I discovered many of the same courses were available on Coursera for free. I thought that, maybe if I took some of them, I would be just as qualified for a programming job.

So I buckled down and made Coursera my job. I took algorithms classes that were too hard. I signed up for things left and right, kept the ones that worked and dropped the ones that didn’t.

To study, I did three things: I would get up an hour earlier than I had to for work, drive to the coffee shop nearest work, and study for an hour. After dinner, I would drive to the coffee shop nearest home, and study for an hour or two. And a third thing: On Saturday, I would drive to a coffee shop first thing, and work until I couldn’t stand it.

The hard thing about online courses is that you have to put in the hours. No one will ever ask you whether you did your homework. No one cares if you’re sick or absent. The awesome thing about online courses is that you get to take world-class courses from fantastic professors for free, from the most convenient coffee shop. That’s a fair trade, if you ask me. All that coffee was paid for in my first paycheck as a programmer, and I couldn’t be happier.

Year 2, part 2: Coursera Was My Job

After last year and the one before, I was off to a pretty good start. I had written a few automated processes that really made my life easier, such as a Python script that spat out vocab quizzes, and I had helped write a program that took old, gross ALL CAPS stories from a database and made them into non-screaming English.

Then the school year started. I missed the summer of writing code. I spent time when I should have been grading wondering how hard it would be to write a program that scored Latin translations. (Hint: it would be hard.) I got distracted during the day thinking about C# and Javascript. And then I realized that I really loved writing code.

A few minutes later, I realized that some people get paid for writing code. I could get paid for something I love to do! The problem I had was that I had limited money and no degree.

My first thought was to get a degree, then get a programming job. I got in touch with a computer science professor at the nearest university, and asked him what kinds of classes were pre-requisites to his program. He was very kind and helpful, and told me basically everything I would have to do in order to probably be admitted to a Master’s program in comp sci in  about a year.

Now the problem is that taking a year of random classes, part time, in order to then take two years of classes full time, is slightly less cost effective than selling home videos of your friends burning your house down.

But I had gained one important thing. I had this map of classes, what to take when, that would make me qualified to apply for an M.S. in computer science. I took this same map, and started trying to figure out how to cross it.

I discovered many of the same courses were available on Coursera for free. I thought that, maybe if I took some of them, I would be just as qualified for a programming job.

So I buckled down and made Coursera my job. I took algorithms classes that were too hard. I signed up for things left and right, kept the ones that worked and dropped the ones that didn’t.

To study, I did three things: I would get up an hour earlier than I had to for work, drive to the coffee shop nearest work, and study for an hour. After dinner, I would drive to the coffee shop nearest home, and study for an hour or two. And a third thing: On Saturday, I would drive to a coffee shop first thing, and work until I couldn’t stand it.

The hard thing about online courses is that you have to put in the hours. No one will ever ask you whether you did your homework. No one cares if you’re sick or absent. The awesome thing about online courses is that you get to take world-class courses from fantastic professors for free, from the most convenient coffee shop. That’s a fair trade, if you ask me. All that coffee was paid for in my first paycheck as a programmer, and I couldn’t be happier.

Learning to Code, Year 2: *Not* an internship

Hello again, World.

Last time, I talked about my first years learning to program, mostly practicing syntax on codecademy.com and then writing some simple scripts, mostly in Python and R, to automate parts of my day job, which was teaching high school.

During these two years, I had not decided to become a computer programmer. I was playing with tools I found entertaining and sometimes helpful. This attitude had two effects: First, I had no stress. I didn’t expect the code to change my life, so if I got frustrated, I would just take a day off. Second, I learned very slowly. If you are bound and determined to learn programming right now, you can learn much more quickly than I did.

During year 2, I was talking to a friend in a bar. He told me that the company he worked had piles and piles of data in SQL servers that was plain English strings stored in ALL CAPS. THIS IS A BAD WAY TO STORE TEXT, BECAUSE EVERYONE THINKS YOU’RE SCREAMING AT THEM. The records in all caps were simply too numerous to pay someone to edit, so they were trying to make a program that would take all caps English and return normal English; this would lower the average blood pressure of people reading their search results, leading to customers with longer, happier lives, and a lower incidence of heart disease.

As I talked to my friend, I realized that I could describe, in fairly rigorous terms, the rules for when a letter is capitalized in English. I asked him whether I could intern for the summer and work on this problem. He asked his company, and they said “yes, but no interns.” Apparently someone had been sued for getting free labor out of over-stressed interns, so we couldn’t use that word. But it still worked out, and now I’m the only person I know with “Volunteer C# Programmer”  on my résumé. it makes me a little proud.

So how does this apply to you? You’re saying, “My friends don’t complain about their databases in bars, I don’t know of any problems to solve, and no one will give me an internship over a weird idea.” Well, first, if you lack friends who will complain about SQL problems with you in bars, make more friends; people are better at teaching you then blogs, books, or websites will ever be. Second, find a good problem. The capitalization problem was good for me because I knew everything about it except the code. I knew the rules for English capitalization. I was implementing a process I already understood. Look for a project like that. What do you know the rules of? Grammar? Tennis? Longboard manufacturing? Find a project that lets you take a set of rules you already know and represent them in code. Third, ask about the internship. Basically, I went up to this company and said, “my friend said you have a problem, and I think I can solve it. I will try to solve it for free, just for the learning experience.” Maybe you’ll run into a manager who thinks you’re an industrial spy or something, but in my case, they thought, “well hey, if this kid solves the problem, great! We got a free solution. If not, well, we didn’t lose any money.” From the company’s perspective, this is a pretty good deal. Just make sure you do a good job; when you try to get paid for programming, the company hiring you will want to hear good things from the internship company.

Have a good idea for a beginner project? Post it in the comments!

Happy learning!

-Will

Year 2: *Not* an internship

Hello again, World.

Last time, I talked about my first years learning to program, mostly practicing syntax on codecademy.com and then writing some simple scripts, mostly in Python and R, to automate parts of my day job, which was teaching high school.

During these two years, I had not decided to become a computer programmer. I was playing with tools I found entertaining and sometimes helpful. This attitude had two effects: First, I had no stress. I didn’t expect the code to change my life, so if I got frustrated, I would just take a day off. Second, I learned very slowly. If you are bound and determined to learn programming right now, you can learn much more quickly than I did.

During year 2, I was talking to a friend in a bar. He told me that the company he worked had piles and piles of data in SQL servers that was plain English strings stored in ALL CAPS. THIS IS A BAD WAY TO STORE TEXT, BECAUSE EVERYONE THINKS YOU’RE SCREAMING AT THEM. The records in all caps were simply too numerous to pay someone to edit, so they were trying to make a program that would take all caps English and return normal English; this would lower the average blood pressure of people reading their search results, leading to customers with longer, happier lives, and a lower incidence of heart disease.

As I talked to my friend, I realized that I could describe, in fairly rigorous terms, the rules for when a letter is capitalized in English. I asked him whether I could intern for the summer and work on this problem. He asked his company, and they said “yes, but no interns.” Apparently someone had been sued for getting free labor out of over-stressed interns, so we couldn’t use that word. But it still worked out, and now I’m the only person I know with “Volunteer C# Programmer”  on my résumé. it makes me a little proud.

So how does this apply to you? You’re saying, “My friends don’t complain about their databases in bars, I don’t know of any problems to solve, and no one will give me an internship over a weird idea.” Well, first, if you lack friends who will complain about SQL problems with you in bars, make more friends; people are better at teaching you then blogs, books, or websites will ever be. Second, find a good problem. The capitalization problem was good for me because I knew everything about it except the code. I knew the rules for English capitalization. I was implementing a process I already understood. Look for a project like that. What do you know the rules of? Grammar? Tennis? Longboard manufacturing? Find a project that lets you take a set of rules you already know and represent them in code. Third, ask about the internship. Basically, I went up to this company and said, “my friend said you have a problem, and I think I can solve it. I will try to solve it for free, just for the learning experience.” Maybe you’ll run into a manager who thinks you’re an industrial spy or something, but in my case, they thought, “well hey, if this kid solves the problem, great! We got a free solution. If not, well, we didn’t lose any money.” From the company’s perspective, this is a pretty good deal. Just make sure you do a good job; when you try to get paid for programming, the company hiring you will want to hear good things from the internship company.

Have a good idea for a beginner project? Post it in the comments!

Happy learning!

-Will

Hello world, and Year 1 of Learning to Code

Hello,

Since this is a programming blog, it would be sacrilegious to change the title. (I did remove the exclamation point.)

Right now, I’m a high school teacher. In two days I’ll be unemployed, and three days after that I’ll be a full-time computer programmer. I mostly taught myself. This blog will be about how I did that: What worked for me, what didn’t work for me. Maybe I’ll be enough help that future self-taught programmers will have an easier time learning.

Year 0:

I spent a lot of time on codecademy.com. I think of this as year 0 because I wasn’t really programming yet – I didn’t know how to debug or compile, I didn’t even know what an IDE was, let alone how to use one. I was really just happy I could type away in Javascript or HTML or whatever and see immediate results. The courses there are very easy – they basically tell you what to type and then make you type it – but they do make you type it. And then you leave out a semicolon and they complain. The nicest part is that they complain specifically. They say, “hey genius, you left out a semicolon in line 5. That won’t work” instead of spitting out an incomprehensible, 300-line stacktrace and glaring at you with spartan disapproval.

Here’s the thing: Correcting you when you make stupid mistakes does you a huge favor. It keeps you from typing all day and then finding out nothing works. It keeps you from being one of those terrible, weirdly-written, incomprehensible Stack Overflow questions that gets downvoted into oblivion 5 seconds after it’s posted. It lets you practice double-checking some details before you’re in a position to really screw up. I recommend codecademy, I just don’t recommend it be used exclusively.

Year 1: Automating parts of my day job.

During the year after I did tons of random codecademy courses, but kept my day job as a high school teacher, I spent a lot of time automating things. My school uses Google Apps for Education, which meant that all my school documents and spreadsheets could be accessed by Google Apps Script. This used the same syntax as all the Javascript from codecademy, so I went to town and automated the creation of vocab quizzes and other rote tasks. I set up forms that email me when they’re submitted, or update the contents of the document. I saved a lot of time for myself as a teacher, but mainly, this was an important baby step. It was still a pretend IDE. I was still just typing in a web browser and hoping things worked. I still had fairly usable error messages and documentation. Also, Google Apps Script is a bit of a play pen – it has simple commands like MailApp.SendEmail() which are intuitive and simple to use, but which you don’t need to understand.

During Year 2, I started doing a lot more programming, so that year will need its own post.

Till then, happy learning!

-Will