Are you interested in a Computer Science course in which you will build your own computer (in a simulator), your own assembly language, compiler, operating system, and an application on top of all this? Please read on...?
In a typical Computer Science program, we learn many key topics such as algorithms, computer architecture, operating systems, compilers, software engineering, etc. However, almost always, we learn all of these topics in isolation. This leaves a student with much throretical knowledge, but kind of clueless about how all this is integrated.
The Elements of Computing Systems - is a course which takes a student across the entire computing stack in a hands on manner. In this course, students start with the primitive NAND gate, and using a hardware simulator and HDL, they build basic gates, using which they build an ALU (Arithmatic Logic Unit), going on to building an actual computer (in simulation). Then they create an assembly language for this computer, followed by a high level language, an operating system, and finally a game using the language they created, on the machine they created.
In the process, students explore many ideas and techniques used in the design of modern hardware and software systems, and discuss major trade-offs and future trends.?
This course is a one of a kind course which unifies the most important concepts a student learns in Computer Science, in a fun and hands on way. The hands on approach is important because many of the topics covered in this course are dealt only at a theoretical level in most university courses.
DIYComputerScience will soon be introducing this course in their new section - The School of Applied Computer Science (coming soon...). ?
The course will be a 14 week online course, where you can learn at your own pace (well almost, but there are some weekly schedules) with supportive peers and facilitators. The course schedule will be somewhat like this:
Week 1 - Designing elementary logic gates fro a NAND gate using Hardware Description Language
Week 2 - Building and ALU (Arithmatic Logic Unit)
Week 3 - Designing Registers, RAM, etc
Week 4 - Designing an assembly language
Week 5 - Building the entire computer (in simulation) with the ALU, Registers, RAM, and the assembly language
Week 6 - Building an Assembler for the assembly language we created
Week 7 & 8 - Building a Virtual Machine (similar to the JVM - though much smaller in scope)
Week 9 - Introducing a high level, object oriented programming language
Week 10 & 11 - Writing a compiler for the high level language
Week 12 & 13 - Writing an Operating System for our computer, using the high level language we created
Week 14 - Some more fun (discussing improvements, and future directions)
This course was originally created by Professor Shimon Shoken. Here is a link to the home page for his course, and this is the book (The Elements of Computing Systems: Building a Modern Computer from First Principles) which was written by Professor Shimon Shoken, and Noam Nisan as a reference for this course. The Elements of Computing Systems: Building a Modern Computer from First Principles
If you find this interesting and would like to participate in the course (which should be online next month), then please leave a comment, and we will inform you as soon as the course is published.
Many thanks to Shimon Shoken, and Noam Nisan for creating this course, and making it publicly available, so others can learn and teach it.?