Okay, so what have we learned this week? We’ve learned that working two fulltime jobs does not leave any time for learning, nor for blogging. I’ve managed to get started reading Headfirst C (link when I actually talk about it), but haven’t actually done any real programming practice since the last post. Luckily, I’ve given my two-weeks’ notice at my first job, so I’ll have time soon.
First, a little housekeeping: The other Khan-Academy-like site that I was trying to remember in my introduction was Udacity. They seem to have a similar approach to Khan Academy in that they put most of their effort into videos organized into lesson cycles, but they also seem to take it a little more seriously. The lessons are more focused (for instance, the computer science intro is actually geared towards making a search engine as a capstone project), more serious, and more limited. That’s not a bad thing; the “limited” part simply derives from the “focused” part. A couple of their courses (unfortunately, none for which I think I’m currently qualified) are even geared towards earning collge credit, so long as you put in the time and money to apply for the relevant courses at the appropriate colleges.
Also, I didn’t really explain my reasoning for starting with C very well, so I’ll let Carl Herold of Computer Science for Everyone explain it for me.
Now, on to business.
It took me a while to get around to recording my progress, so you’re coming to me fairly late in the lessons. On the other hand, my reaction to most of the early lessons was probably neither particularly interesting, nor useful to people as early in programming education as I am. I’m currently on Computer Science for Everyone, Course 2, Unit 4. At about this point,the lessons turn towards something that most programming books and tutorials seem to gloss over: Planning. Now, this isn’t exactly a UML tutorial, but it is a suggestion to go over your goals, first and foremost, and to a certain extent it includes a piece of planning theory that I’ve been amusing myself by explaining to my friends for the last few months. Nice to see someone else thinks like I do, although I did know that it couldn’t possibly be an original idea.
Welcome one and all to the New Gardens of Knowledge! Yeah, okay, so the title’s a little cheesy, but I didn’t feel like buying a new domain, and I already had this from a restaurant I used to work at that went under. (I was supposed to be the webmaster, but the owners were so apathetic towards the effort that I never got past designing a version that looked vaguely tolerable solely in Chrome on my laptop. Then again, they were kind of apathetic towards running the restaurant in the first place, which is kinda why it closed.)
Anyway, the cheesy title kind of works for what I plan to do here. See, I’m the kind of guy who really likes learning, but I tend to drift from subject to subject. I figure, if I’ve got someone to be somewhat accountable to (that means you, dear reader!), I might be able to stay on target in some way. So, herein shall I document my struggles to learn about things such as programming, new languages, science, whatever. You may occasionally see tangents into history or linguistics, but those are more related to what I already know, rather than what I am learning.
I will attempt to publish at least one update per week, but hopefully more than that. As of the writing of this post, I am currently in the throes of three learning projects: the C programming language; chemistry beyond my high school classes (I really don’t remember much at all from my college class); and a mathematics refresher, hopefully leading to something beyond the little bit of calculus I got to in school. Why do I want to learn these things? Well…
- I am currently a waiter. I hate being a waiter. I like computers, and I hope that I can learn enough about programming within a couple of years to get into working with computers full-time. Remember this, kids: Taking college courses that interest you is not enough to get by in life, not even if you can negotiate it into a major. My Classics and Linguistics studies have done nowhere near as much to get me a job as the fact that I’ve been working in food service since I was a kid.
- I like math, and have always been somewhat disappointed in myself for stalling around calculus. I aced the course in high school, but wound up in the business version instead of the science one in college (university, for any non-Americans), and the shift in emphasis dragged me down a lot. That plus the fact that I couldn’t really fit too many math courses into my schedule along with all the language and linguistics courses kept me from getting as far into mathematics as I wanted. At this point, I think I’ve let it atrophy enough that I’m going to start off with a trigonometry refresher. Math should also be helpful for computers.
- Chemistry strikes me as a great place from which to branch off into either low-level biology or particle physics, both of which interest me. I know just enough to be frustrated by how little I know. If I get into graphics programming, it could also be fun to get into molecular modeling.
Monetary resources being somewhat limited, I’m using mostly what I can find online for free. That’s not quite as bad as it sounds. Here are some of the places I’m going for inspiration:
- Khan Academy: Khan Academy is a free online learning resource. Specifically, most of their lessons consist of video lectures on a subject with discussion available in the comments below. Their programming lessons are actually interactive and relatively language agnostic (specifically, they use the Processing programming language via processing.js, but the concepts taught appear to be fairly generalized), but unfortunately I can’t seem to find any love for the lessons myself. I am getting some use out of the math and chemistry sections, however, and I think I could recommend the Khan Academy programming lessons for anyone coming to the subject with zero knowledge, especially children. Basically, the same kind of people for whom Scratch and its basic programming language Squeak is a useful learning tool.
- Computer Science for Everyone: I’ve found that most programming tutorials are either too basic or too sink-or-swim for me; Carl Herold’s CSfE straddles the line between these fairly well. The first half of the lessons are available in both video and text format; the second half are currently only available in text format, but more videos are still being added. I find it particularly interesting that Carl wants to introduce people to computer science through the C language, which straddles the line between most modern programming and scripting languages (in the basic look and feel) and what the computer actually does (which is translatable nearly line-for-line into various assembly languages, which C manipulates directly… sorta). The tutorial does sometimes feel pedantic and repetitive for me, but I am perfectly aware that it only feels like that to me because Carl is trying to impart knowledge of how a computer works along with how to tell it what to do, while I already know most of what he’s saying about how the computer works. If I skim a bit, I can still pick up some interesting tidbits about how the software and hardware systems interact without getting too bored.
- Learn Code the Hard Way: Learn Code the Hard Way is an interesting concept: That you learn through practice, repetition, and general doing. I got about halfway through the Python tutorial when I realized that I was getting irritated for two reasons: 1) because I had just enough knowledge of Python to get too ambitious with my practice program, which resulted in a horrible snarl of a text-based adventure game with a parser (I think better knowledge of classes would have saved it, but that’s actually within a couple lessons of where I got stuck) and 2) I realized that I really wanted to learn to use programming languages rather than scripting ones. Many of the concepts carry over, so once you know how to program, it’s not that hard to learn how to script, especially with a user-friendly language like Python. Learn C the Hard Way is a little less polished (while Python is technically a book that’s also available in HTML for free, C is a book-in-progress whose draft is available in HTML), and it also claims that you should have equivalent programming knowledge to what you’d get by finishing Learn Python the Hard Way before starting it, so I plan to finish CSfE first just to have that background.
- Teach Yourself C++ in 21 Days: I haven’t looked much at this one yet, but it’s (cautiously) recommended by Shamus Young, who wasn’t entirely certain what to recommend, being entirely self-taught. Obviously, there’s only so much you can do in C (although fiddling with the Linux kernel is probably reason enough to learn it), but pretty much everything you can do in C you can also do in C++, and C++ seems to be the go-to language for writing actual programs that don’t need any external environmental factors to run (as opposed to, say, Java or Python). I plan to move from C into either C++ or assembly (depending on whether I get more into nuts and bolts or higher-level programs), or maybe both, and this seems like a good place to get started.
- C++ for Dummies: I like honest-to-god, dead-tree, physical books. It actually belongs to my roommate, but he’s not using it right now. It’s also an older edition than the one for sale on Amazon. I’ll probably read through C++ for Dummies when I get to the C++ portion of my learning, but given that most of C is in C++, it also makes a good reference.
- Stack Overflow: Whenever I run into an issue, Stack Overflow is there to help. Do I ask questions on SO? Of course not! I’m so squeaky new at programming that every single issue I run into has already been brought up there. I just search and hey, presto, there you go, you’re supposed to do xyz, not yzx, problem solved. Seriously, that happens a lot.
- MIT Open Courseware: MIT does this awesome thing where they put course lectures and materials online for anyone to use for free! I’ve gone through a few of their programming lessons, and I plan to put their math lessons to good use as well. MIT isn’t the only college/university to do this, but it was the first one I found, and I also find their interface a little easier to use than, say, Stanford’s. Plus, they’ve got a course on programming in Lisp (specifically, MIT Scheme), which is awesome, and something I want to get back to when I feel able to figure Lisp out better. I’ll also just call this a catch-all for any university open courseware site because there’s really a whole lot of them now.
- A bunch of other stuff I can’t think of right now. There’s one specific one that’s on the tip of my tongue (fingers, whatever) that I really just can’t remember, but it reminds me most of Khan Academy, and my bookmarks are too disorganized to get at it right now. I’ve also got a couple of books on programming languages that I know I can’t quite wrap my brain around right now, such as assembly (specifically, the Intel-flavored NASM) and Lisp (particularly in the Clisp dialect of Common Lisp), as well as a fun little thing on computer architecture whose bits about the physical structure I found easy, but I kind of got hung up on the assembly parts.
While we’re at it, here’s a few other things you may eventually find me learning about:
- Physics, both classical and quantum
- Lisp, both Scheme and Common
- C++, as outlined above
- Assembly, probably Intel (via NASM), although I may try to learn some AT&T syntax as well.
- German: I took two semesters in college, and I still kinda suck at it.
- Latin: Yeah, I was a Classics major, and I took something like 21 credits of Latin. I still suck at it. I did far better at, and far more in, Classical Greek.
- Aramaic: Classical/Biblical/Imperial Aramaic was available for precisely one semester at my college. The professor was in the process of writing pretty much the first teaching grammar in the subject since Rosenthal’s (my copy was from 1927, and I’m pretty sure that wasn’t the first edition), but was promoted to department head at the end of the semester and no longer had time for his pet course. I’d love to learn the language more thoroughly/properly. Yes, I’m talking about the language Jesus spoke, the language the book of Daniel was written in (well, most of it, anyway), the lingua franca of the Achaemenid Persian Empire.
- Korean: I don’t know why, Korean just interests me. I may love anime, but you’re probably not going to find me learning Japanese; Korean, on the other hand, I’ve learned a tiny bit of, and I’ve also got some ability to read, write, and type in 한글.