As I sit here working on a project in lieu of going to class for the umpteenth time, I realized with sudden clarity that perhaps the current way that Computer Science is taught in universities is not the optimal way. Large lecture halls, clunky languages– it’s a bad sign when even a die-hard “learning for learning’s sake” student skips class on a regular basis.
anyway, a few thoughts on how I would change the structure of Computer Science courses to maximize efficiency + interest and minimize pain:
STOP TEACHING JAVA.
Seriously. I have never, ever been required to interview in a specific language at any company (even the “big names”), and if the people you’re talking to are deadset on Java, you probably don’t want to work there anyway. C is a much, much better “lower” level language for really grasping the way programming works, and Python is a much, much more fun language if you want to lower the barriers to entry and get students making things right away.
MAKE GRADES ENTIRELY PROJECT BASED FOR NON-THEORETICAL CLASSES
For classes like data structures, advanced programming, OOP, etc., etc. students tend to learn a great deal more and invest much more time and interest in coding projects. These should be the heart of the course, and is what matters in “the real world”, anyway. No one’s going to give you a bonus for remembering the difference between inheritance and polymorphism: let’s face it, you’d take the 5 seconds to Google the
definitions and move on. Big projects, tight deadlines, collaboration: this is where the real learning is.
IF YOU MUST MAKE STUDENTS TAKE EXAMS, STOP ASKING LANGUAGE-SPECIFIC SYNTATICAL QUESTIONS
In my opinion, you should not administer written exams in technical classes (see above). However, if you must, for heaven’s sake, please, please do not ask us things like the difference between strcmp and strncmp. Sometimes coding by hand with pencil and paper is good practice for interviews, but the code should be judged for logic and not syntax. Exams should be theory-based. Technical evaluations should be project-based. EOM.
IF YOU MUST HAVE LECTURE COURSES, PLEASE LIMIT THE SIZE OF THE CLASS
Size matters. This one is a given. Of course small seminars are best, but it’s understandable that budget might not allow for it. Lectures for intro courses only, and please, please try to cap them: there is a huge difference in ambiance and quality of learning between a lecture of 50 and of 250. I’m talking to you, Columbia. When I’m in a room with 300 other students learning about the difference between * argv and ** argv I immediately want to fall asleep or eat.
THAT’S ALL I CAN THINK OF FOR NOW.
then again, it’s entirely my fault for taking up class time to write in English instead of C++.
P.S.: Shout out to everyone in AP lecture who’s on Facebook right now. Hello! Now I feel less guilty for skipping class. At least I’m “working” in the library.
P.P.S.: For the record, I do believe that Jae is a great professor and administers valid albeit perhaps too difficult exams. Personally, I enjoy tough exams (sink or swim time/everyone failed so I feel less bad for not studying). The main clincher here is a) the size of lecture (TOO BIG) and b) little grade weight on projects. Neither of these can really be blamed entirely on the professor, cough *administration* cough cough
P.P.P.S.: Yes, perhaps strcmp and strncmp + polymorphism are not the best examples, as esp. the polymorphism question is more theoretically important. But you get the gist of the idea.
P.P.P.P.S. It is probably true that if I took 10 minutes to edit my posts I would not have to use postscripts, but what’s the fun in that?
Tags: computer science, education