Many software developers have followed a non-traditional path to their profession. Coding is often something that is picked up on the side, learned through work projects, or through bootcamps and workshops. Yet, in learning to code, it is all too easy to overlook computer science itself. To be fair, working programmers are often focused more on plumbing than the need to actually implement a new algorithm, build a new data structure, or ponder the kinds of things that get taught in a typical computer science program. Nevertheless, computers are full of all kinds of awesome wizardry. This course is about that! It's a week of exploration and thinking that embraces the magic that lives inside the computer. This is the computer science course you wish you took.
This class is structured around four core topic areas: Information, Data Structures and Algorithms, Architecture, and Computation. In exploring each of these areas, you'll start from first principles and go on a journey of discovery that involves hands-on experimentation and discussion of the big ideas and questions. The goal is to bring computer science to life in a way that you simply won't find in a book.
This course is for programmers who want to deepen their understanding of how computers and computation works. It is primarily aimed at people who already know how to code, but who have never taken traditional computer science courses (or spent too much time sleeping through them in college). It might be useful for answering tricky job interview questions although surviving a job interview is not the main objective. This is a course for the curious programmer.
Each course day runs from 9:30am - 5:30pm and mostly consists of hands-on projects interspersed with some short presentations. The main goal is to "learn by doing." Most of the hands-on projects involve coding, but part of the course involves building digital circuits from switches, transistors, and integrated circuits. For that, all of the required materials and components will be provided.
Students should have a working knowledge of at least one programming language such as Python, Ruby, or C. At a minimum, you should be able to write and debug small programs and be generally familiar with common datatypes, control flow, and functions. Note: the primary focus of this class is on computer science, not advanced programming language features, software engineering methodology, or the use of frameworks.
The course aims to explore four core topic areas from computer science.
This course is not titled "Computer Science: All of It" and it's not meant to prepare you for entering a Ph.D. program in theoretical computer science. Instead, this is a week of "neat stuff" from computer science that we think will be mind-expanding, interesting, and fun. Over the week, you'll spend about 35-40 hours on the material--that's about the same about of time that a professor would spend lecturing in a 15-week semester. However, unlike the experience of listening to a professor in a lecture hall with several hundred students, our small class size of 6 people allows us to do things in a completely different manner. You'll learn by getting your hands dirty.
David Beazley is the author of the Python Essential Reference, 4th Edition (Addison Wesley) and Python Cookbook, 3rd Edition (O'Reilly Media). From 1998-2005, he was an assistant professor in the Department of Computer Science at the University of Chicago. He's been independently teaching computer science and software development courses through his company Dabeaz LLC since 2007.