As I come closer and closer to graduation, I’m looking back at the Georgia Tech Computer Science program, the things it did well and not so well.
One piece I feel is missing in the curriculum is having students read good, high quality code. We’re asked to code alone and code in groups, code in labs and code in dorms, code on paper and code in IDEs.
It seems like the administration and professors think this skill just magically appears with practice. I disagree, and I think we can do better.
There’s no class dedicated to showing students good code and having them write some. Each one has some ulterior motive. Our CS1 class isn’t about learning Python. It’s about using computers to manipulate media, or robots. Our CS2 class isn’t about learning Java. It’s about writing code in an Object-Oriented style. Each successive class, a new concept: data structures, algorithms, hardware, systems, operating systems, networking.
But we have only one class that even makes an attempt at teaching coding practices: CS3300. And even in it, the focus is much less on reading good code, and more about hacking something together to pass a project demo.
Students shouldn’t be able to graduate with a Computer Science degree from Georgia Tech without being able to read and write production quality code. And what do Georgia Tech CS graduates do with their undergraduate degrees? Go to industry (and code) or go to academia (and code).
I know adding yet another mandatory course is unpopular, and if everyone with a passion made their pet project a degree requirement, we’d get out with a B.S. in seven years instead of four and a half.
So let’s either make a suggested course where building coding skills is the primary focus, or integrate the software engineering discipline throughout the curriculum.
The thought of professors actually show production code in class seems like glimpsing a foreign land. The only code I see on the projector is pseudocode or from a toy project.
Another potential solution is to have a class specifically dedicated to reading good code. With so many excellent open source projects freely available, I’m frankly a bit surprised I didn’t see them more often in lectures. This isn’t 1987 and gcc isn’t the only freely available compiler in town anymore.
Let’s take a guided tour through some of the more famous open source projects: gcc, Linux, Apache, MySQL, Python, Firefox, Audacity, GIMP, VLC, 7-Zip, Blender, memcached, node.js, socket.io, and many many more.
What design decisions did they make? What common patterns do we find? How easy are they to extend? What’s their build process like? What existed before they did?
I believe many students would find this course exciting, engaging, and incredibly useful for the types of jobs and graduate degrees I see my friends going into.
I teach my school’s CS2 class, Intro to Object Oriented Programming using Java. This is my seventh semester, as a TA, and I’ve seen a lot of bad homework. What might help students craft better code is seeing what it actually looks like.
So this is my question: Why is no one showing me the code?