layout | title |
---|---|
lecture |
Why we are teaching this class |
During a traditional Computer Science education, chances are you will take plenty of classes that teach you advanced topics within CS, everything from Operating Systems to Programming Languages to Machine Learning. But at many institutions there is one essential topic that is rarely covered and is instead left for students to pick up on their own: computing ecosystem literacy.
Over the years, we have helped teach several classes at MIT, and over and over we have seen that many students have limited knowledge of the tools available to them. Computers were built to automate manual tasks, yet students often perform repetitive tasks by hand or fail to take full advantage of powerful tools such as version control and text editors. In the best case, this results in inefficiencies and wasted time; in the worst case, it results in issues like data loss or inability to complete certain tasks.
These topics are not taught as part of the university curriculum: students are never shown how to use these tools, or at least not how to use them efficiently, and thus waste time and effort on tasks that should be simple. The standard CS curriculum is missing critical topics about the computing ecosystem that could make students' lives significantly easier.
To help remedy this, we are running a class that covers all the topics we consider crucial to be an effective computer scientist and programmer. The class is pragmatic and practical, and it provides hands-on introduction to tools and techniques that you can immediately apply in a wide variety of situations you will encounter. The class is being run during MIT's "Independent Activities Period" in January 2020 — a one-month semester that features shorter student-run classes. While the lectures themselves are only available to MIT students, we will provide all lecture materials along with video recordings of lectures to the public.
If this sounds like it might be for you, here are some concrete examples of what the class will teach:
How to automate common and repetitive tasks with aliases, scripts, and build systems. No more copy-pasting commands from a text document. No more "run these 15 commands one after the other". No more "you forgot to run this thing" or "you forgot to pass this argument".
For example, searching through your history quickly can be a huge time saver. In the example below we show several tricks related to navigating your shell history for convert
commands.
How to use version control properly, and take advantage of it to
save you from disaster, collaborate with others, and quickly find and
isolate problematic changes. No more rm -rf; git clone
. No more
merge conflicts (well, fewer of them at least). No more huge blocks
of commented-out code. No more fretting over how to find what broke
your code. No more "oh no, did we delete the working code?!". We'll
even teach you how to contribute to other people's projects with pull
requests!
In the example below we use git bisect
to find which commit broke a unit test and then we fix it with git revert
.