Section | 1 |
---|---|
Instructor(s) | Billingsley, Marty (mbilling) |
Location | JCL 011 |
Meeting Times | Wednesday 5:20pm - 7:20pm |
Fulfills | Core Systems Elective |
*This class will be available in person and online. The in-person component will be available for those students that can and want to come to campus. In-person sessions are not mandatory. This class can also be completed remotely.*
Course Description
This course is all about constructing your own knowledge of computer systems by building a general-purpose computer system from the ground up. The objective is to integrate key ideas from algorithms, computer architecture, operating systems, compilers, and software engineering into one unified framework. Along the way, we'll explore ideas and techniques used in the design of modern hardware and software systems, and discuss major trade-offs and future trends. Throughout this journey, you'll gain lots of cross-section views of the field of computer science, from the bare-bone details of switching circuits to the high-level abstraction of object-based software design. By the end of the course, you will have written a computer game in an object-oriented programming language; compiled that program into machine language using the compiler, the virtual machine language translator, and the assembler that you wrote; and run your program on (virtual) hardware that you designed.
Course Contents and Coursework
Week 1 (chapters 1-2 of the text)
Week 2 (chapter 3 of the text)
Week 3 (chapters 4-5 of the text)
Week 4 (chapter 6 of the text)
Week 5 (chapter 7 of the text)
Week 6 (chapter 8 of the text)
Week 7 (chapter 9 of the text) (chapter 10 of the text)
Week 8 (chapter 10 of the text)
Week 9 (chapters 11-12 of the text)
Week 10
Week 11
Textbook
This course uses the text "The Elements of Computing Systems; Building a Modern Computer from First Principles" by Noam Nisan and Shimon Schocken, and follows the "From Nand to Tetris" curriculum laid out on the web sitewww.nand2tetris.org. It's highly recommended that you bring a laptop to class each week.
Core Programming (completed or concurrently enrolled)
This is mostly a hands-on course, evolving around building a series of hardware and software modules. You can use any programming language you like to implement the software modules (popular choices are c, c++, java, and python), but you must be comfortable designing, writing, and debugging programs on your own; the guidance given in this course centers around what to program rather than how to program it.
This class is scheduled at a time that conflicts with these other classes: