At the beginning of March this year, I decided it was time to stop talking about learning programming like every layman living in San Francisco and just learn programming already. Besides half a semester of BASIC in high school and too much Excel use at previous job, I have had basically zero formal or related experience in the field. I thought I knew what I was doing and what I wanted to know coming out of it– that was, until I really started learning. At that point, I quickly discovered that I was so horribly uninformed that I didn’t even truly grasp what the subject was about. What I thought programming/CS was rapidly changed with each new learning experience I had– and it had a lot to do with the trajectory of self-learning that I went through.
Why is that important? It’s important because if you are a non-hacker-type novice like me, your first exposure to ‘programming’ or ‘CS’ could really affect how you feel about the subject and whether you find the interest and motivation to keep pursuing it. If somehow the experience is successful in teaching you the spirit/big picture of the subject, you are much more likely to persist through the numerous difficulties that are bound to come up. Below, briefly, is a sequence of the things I have watched so far in an effort to self-teach. I’ll explain why they are significant in a second. So far, I’ve watched:
Khan Academy —
Introduction to Programming (4-5 hours, Python)
Python Essential Training (6 hours, Python)
Stanford SEE —
Programming Methodology/CS106A (15 hours so far, Java)
Human Computer Interaction Seminar (10 hours)
So I moved onto Lynda.com, with its great repertoire of tutorials on all sorts of programming languages + softwares. My boyfriend has been raving about lynda for a while now, and I thought to myself– great, I’ll get everything I need here! At this point, my mindset was still focused on mastering a programming language– so I quickly delved into the Python tutorial since that was what Sal Khan used in his. I very quickly realized that Lynda was no KA– the platform is for professional and technical development, i.e. teaching skills rather than teaching knowledge– if that makes sense. While I did learn some new stuff from the tutorials, I quickly realized that was not really what I wanted to learn. KA had instilled in me a motivation for something more– even though at that point in time, I still didn’t quite realize what that was.
And that was when I came upon Stanford SEE– the open introductory CS106A course (among others). Just 15 minutes into the first video, I was hooked and realized that this was exactly what I wanted. The weird thing is that I had known about open learning resources at the likes of Stanford and MITx for a long time– but it didn’t at all occur to me that this material was accessible to me until then. Accessible not in the sense of being able to download a video and watch it– but the content being somehow relevant to me.
What does this trajectory mean, why do I believe it is significant in thinking about how people learn this subject?
1) People think that programming is about programming languages
This is a perception that is partly perpetrated by media and the business-types in Silicon Valley today. So much emphasis is put on people picking up Python or Ruby or whatnot and building web applications– that programming is, for good reason, easily perceived as being about mastering a programming language. You see– the entire time that I thought I had wanted to learn programming, it didn’t truly occur to me that perhaps computer science as a topic was relevant and kind of the point of programming. Of course I knew that CS was where programming resides and originates– but I had somehow thought that learning CS at this point would be too difficult and counterproductive to efforts of learning to program. I had thought that CS was too abstract & rigorous, and wouldn’t be relevant to me if what I wanted was to build stuff right away.
As it turned out, learning about programming beyond a specific language was much more engaging and enlightening than simply focusing your efforts to master the syntax of a specific language. The effects are threefold for me: 1) it helps you to understand what the point of programming truly is 2) once you do, it is much easier to want to keep going when you are bogged down by syntax 3) it will help you to ultimately become a better programmer to understand the core principles.
2) Getting to the heart of knowledge, and the passion for it
This is somewhat related to the last point, but I mean it both on the technical abstractions of the subject as well as this more elusive passion for the knowledge itself. To use an analogy of painting a picture, the lynda videos teach you how to use a brush, the KA videos teach you about the mechanics of painting and what you can do with it, and CS106A teaches you what the point of painting a picture is and why you should love it. This is a rough categorization, and certainly, you can’t thoroughly teach someone what the point of painting a picture is without also teaching the lower level techniques. But there is a distinct level of hierarchy in the knowledge and passion imparted here across the 3 mediums. I was very lucky that I watched the KA videos, because they intrigued me just enough that I wanted to learn more– but I didn’t really understand what the subject was about until I got to CS106A.
What is amazing to me is that in both the KA and CS106A videos, the instructors’ passion and intelligence come through even in these passive platform– and at the core of it, I really think that’s what make these experiences so great. The instructors’ passion for the topic is what can elevate discourse and learning to another level. This is true in every subject, but I think perhaps even more relevant in something that is as challenging and abstract as CS. The fact that it is not taught at an earlier age also means that you really need that extra energy and clarity to help some students cross the finish point.
Lynda’s videos made me think “hmm, I can learn programming.” KA’s videos made me think “gosh, I want to learn programming!” And CS106A’s videos made me think “maybe I could actually get a CS degree someday.”
**Disclaimer: I know HTML/CSS are not comparable to programming, but I do also kind of consider them to be good ‘gateway languages’ for non-technical wannabes