This summer I’ve been spending a lot more time in San Francisco and in contact with people involved in the Silicon Valley tech scene (mostly my friends working as interns). Between this and the data structures class I’m taking right now, I’ve noticed a few things about programming and computer science in general.
First of all, I think self-studying programming is really really hard. Unlike many other disciplines, most of us still don’t know the first thing about computer science even when we graduate high school. If you want to teach yourself discrete math, or organic chemistry, you can crack open a book on the subject and understand virtually all of the words, if not the more abstract concepts. However, since a computer science education is non-standard in our primary education, any auto-didactic expeditions into the subject are much more difficult. I remember when I tried to teach my self Python with the book, Learn Python The Hard Way last summer and fall, before I took CS61A. I would come across a word I didn’t understand, and when I tried to google the unfamiliar concept I would come across an explanation using even more new concepts I didn’t understand. Upon investigating each of those foreign concepts, I unearthed yet even more concepts explained by other concepts. I had opened up a maze of interdependent knowledge, and I hadn’t even made it to the second chapter.
Eventually I learned to tune out the extraneous information and accept the simplified models offered in the book to at least learn something first. However, the knowledge acquired through my endeavors with this approach of learning was very shaky and unreliable. Without one consolidated trusted authority I could direct my questions to, I often experienced a lot of cognitive dissonance as different Stack Overflow users gave conflicting answers to questions I had.
After completing CS61A, which covered everything in Learn Python the Hard Way and more, I was astounded by how much difficulty I had in learning Python and the fundamentals of computer science by myself. In comparison to grinding my nose against Stack Overflow for hours at a time trying to learn the different between objects and classes, learning in 61A felt effortless. Now halfway into CS61BL, aka data structures taught in Java, I’m still surprised by how much quicker I learn asking my GSI questions versus searching through the textbook at home.
Though as a second year undergrad I am in no position of authority to issue resolutions on CS pedagogy, my conclusion is as follows. It it much easier to learn from someone than it is to learn from something, and when offered the choice between self study or a class, for now I plan to take the class.