Description
The goal of this course is to introduce the students to the big picture of the computer science with an important constraint: teaching nothing as a black box.
Given the huge multitude of online resources to learn how to code any specific task, this workshop's focus would be in the theoretical, but intuitive, concepts of computing; the attendees are called to discover the simplicity of the computing internals, from the restricted set of machine instructions to the - ideal - simplicity in a CPU cycle and on top of that build their tools to make the most of a computer - either a tiny microcontroller or the largest supercomputing cluster.
Each lecture will be structured with the duality of theoretical and practical; on the theoretical side the concepts are planned to be presented as a journey from a mere ideal Turing machine, through the physicality of the current in the processor to the illusion of parallelism provided by an operative system.
On the practical front the course will start with some warming up exercises; later a component of challenges - given the name - and team working will be proposed through the three games; those will part of the final presentation.
Outcomes
At the end of the course the students will know a little about how to program in Python and some basic C; but more importantly they should be able to take a problem and think of a computational solution, to be implemented in any language.
Moreover, the attendees will have the introductory concepts of multiple fields within computer science.
Calendar
Add to BU Google Calendar Download in .ical format
Both classrooms assigned to this course are in CAS (725 Commonwealth Ave)
Note: this
Date | Classroom | Concepts | Hands on |
---|---|---|---|
June 20th | 273 | Computation; problems and their solution | Setting up the environment; variables; hello world |
June 21th | 273 | Processor and instructions | Conditional executions and iterations; non-intuitive implementations |
June 22th | 273 | Memory, addresses, representations | Game 0: a space odyssey |
June 23th | 273 | Languages, compilation and interpretation | Functions and types; Hello world - again - but in C, compilation, Makefile |
June 26th | 273 | Structures, objects, classes, messages | Refactoring, recursion, exceptions |
June 27th | 273 | Operative systems, events, networks I | Game 1: battleship! [team vs team] |
June 28th | 273 | Networks II, User interaction | Design simple GUI - with jupyter widget |
June 29th | 273 | Complexity, graphs, security - the remaining miscellaneous | Game 10: Visual battle! [team vs team] |
June 30th | 216 | Final presentation |
About me
Francesco Ciraolo
PhD student - Computer Science
Cyber-physical systems
Email: fciraolo at bu dot edu