Schedule

Overview

The following is a rough outline of topics in an order, these things will be filled into the concrete schedule above as we go. These are, in most cases bigger quetions than we can tackle in one class, but will give the general idea of how the class will go.

This plan accounts for 1 less week than we actually have. We will either go over somewhere or we’ll use the last week for sharing projects, reflection, or an additional topic that comes up during the semester.

How does this class work?

one week

We’ll spend the first two classes introducing some basics of GitHub and setting expectations for how the course will work. This will include how you are expected to learn in this class which requires a bit about how knowledge production in computer science works and a bit of the history.

How do all of these topics relate?

approximatley two weeks

We’ll spend a few classes doing an overview where we go through each topic in a litte more depth than an introduction, but not as deep as the rest of the semester. In this section, we will focus on how the different things we will see later all relate to one another more than a deep understanding of each one. At the end of this unit, we’ll work on your grading contracts.

We’ll also learn more key points in history of computing to help tie concepts together in a narrative.

Topics:

  • bash

  • man pages (built in help)

  • terminal text editor

  • git

  • survey of hardware

  • compilation

  • information vs data

What tools do Computer Scientists use?

approximately four weeks

Next we’ll focus in on tools we use as computer scientists to do our work. We will use this as a way to motivate how different aspects of a computer work in greater detail.

Topics:

  • linux

  • git

  • i/o

  • ssh and ssh keys

  • number systems

  • file systems

What Happens When I run code?

approximately five weeks

Finally, we’ll go in really deep on the compilation and running of code. In this part, we will work from the compilation through to assembly down to hardware and then into machine representation of data.

Topics:

  • software system and Abstraction

  • programming languages

  • cache and memory

  • compiliation

  • linking

  • basic hardware components

Finalized Order

Content from above will be expanded and slotted into specific classes as we go. This will always be a place you can get reminders of what you need to do next and/or what you missed if you miss a class as an overivew. More Details will be in other parts of the site, linked to here.

Table 1 Schedule

Date

Key Question

Prepation

Activities

2021-01-25

What are we doing this semester?

Create GitHub and Prismia accounts, take stock of dev environments

introductions, tool practice

2021-01-27

How does knowledge work in computing?

Read through the class site, notes, reflect on a thing you know well

course FAQ, knowledge discussion

2021-02-01

How do I use git offline?

review notes, reflect on issues, check environment, map cs knowledge

cloning, pushing, terminal basics

2021-02-03

Why do I need to use a terminal?

review notes, practice git offline 2 ways, update kwl

bash, organizing a project

2021-02-08

What are the software parts of a computer system?

practice bash, contribute to the course site, examine a software project

hardware simulator

2021-02-10

What are the hardware parts of a computer system?

practice, install h/w sim, review memory

hardware simulation

2021-02-15

How does git really work?

practice, begin contract, understand git

grading contract Q&A, git diff, hash

2021-02-17

What happens under the hood of git?

things

git plumbing and more bash (pipes and find)

2021-02-22

Why are git commit numbers so long?

review, map git

more git, number systems

2021-02-24

How can git help me when I need it?

reveiw numbers and hypothesize what git could help with

git merges

2021-03-01

How do programmers build documentation?

review git recovery, practice with rebase, merge, revert, etc; confirm jupyterbook is installed

templating, jupyterbook

2021-03-03

How do programmers auotmate mundane tasks?

convert your kwlrepo

shell scripting, pipes, more redirects, grep

2021-03-08

How do I work remotely ?

install reqs, reflect on grade, practice scrip

ssh/ ssh keys, sed/ awk, file permissions

2021-03-10

How do programmers keep track of all these tools?

summarize IDE reflections

IDE anatomy

2021-03-22

Skipped

2021-03-24

How do Developers keep track of all these tools?

[compare languages you know]

2021-03-29

How do we choose among different programming languages?

[install c compiler]

2021-03-31

What happens when I compile code?

2021-04-05

Why is the object file unreadable?

[what are operators]

bits, bytes, and integers/character representtion

2021-04-07

What about non integer numbers?

floating point representation

2021-04-12

Where do those bitwise operations come from?

[review simulator]

gates, registers, more integer

2021-04-14

What actually is a gate?

physics, history

2021-04-19

How do components work together?

memmory, IO, bus, clocks,

2021-04-21

2021-04-26

2021-04-28