Learning vs. building
Photo credit: flickr user joewatrach.
In all kinds of industries, there are systemic disconnects between what students are trained on, and what the actual industry demands. As a CS student who has made somewhat of a break from the academic world, I want to shed some light on the problem of why there are so many great programs teaching ostensibly useful things that just fail to turn out good devs.
At least from my experience at DePaul, students learn:
- physical computer science (lots of cryptic stuff from the 1980s that is certainly important but my god, does this really have to be all we learn?!);
- how to optimize loops and how to use the right data structure or algorithm at the right time;
- basic UNIX OS and network programming; and
- lastly, how to feel inferior to the game design majors, who do very little theory and tend to just get their hands dirty making games (at least from my limited experience).
Maybe my perception is skewed as a guy who’s a bit disconnected, but the real problem as I see it is that DePaul, and I think many CS programs in general, emphasize learning the ancient tenets handed down by the masters rather than breaking things and building things. Now I’m not saying theory isn’t important. I’m saying the working world doesn’t have time for it; if you wanted to think about fluffy topics and write essays, you wouldn’t have gone for CS. By one’s third year, we should be committing patches to open-source projects, building Twilio apps, or trying to white-hat scrape our online courses system.
Quite recently, in one of my final exams, I had to hand-write complex unix system calls over and over again as part of a code-completion exercise. The function documentation was printed right on to the test- I found myself simply flipping back and forth, literally just performing an arcane imitation of copy-and-paste that would have taken me 20x less time if I was at a computer. Did this help me learn the material? Of course not, I was in the middle of a test and sweating bullets.
I think CS programs need to teach the following:
- How to think independently as a coder and find answers yourself;
- How to sell what you’re doing as an idea or process to your boss or your team members so that everyone knows you can be trusted to deliver;
- How to hack; that is, how to **build real stuff** quickly and efficiently. In other words, why aren’t we having hackathons?
- How to work as a team! CS schools and workplaces alike have developers of all different skill sets. “Learning to learn” from and trust your peers is key to working successfully.
I leave you with this final anecdote that illustrates the problem quite nicely: I was in a class where the professor mentioned that the Django web framework was developed in a building across the street from our school. Only 3 people in the room knew what it was, but more importantly: nobody cared. I felt like rockstars were nearby or something but that passion was quickly stifled when I saw that nobody thought that was cool. There was just a total non-plussed reaction.
Anyway, that killed my excitement and we quickly moved on. Why aren’t these people our rockstars? Why wasn’t that more exciting? Why don’t almost any of my classmates know what Y Combinator is? Maybe I’m kind of a groupie. Still, I think our teachers could do a better job of instilling the spirit of learning by building. Build to learn, learn to build.