Schedule#

Overview#

The following is a tentative 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 questions than we can tackle in one class, but will give the general idea of how the class will go.

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 getting started with the programming tools.

What tools do Computer Scientists use?#

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. While studying the tools and how they work, we will get to see how some common abstractions are re-used throughout the fields and it gives a window and good motivation to begin considering how the computer actually works.

Topics:

  • bash

  • linux

  • git

  • i/o

  • ssh and ssh keys

  • number systems

  • file systems

What Happens When I run code?#

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

Tentative Timeline#

Warning

This section is not yet updated for spring 2024.

This is a rough example.

This is the planned schedule, but is subject to change in order to adapt to how things go in class or additional questions that come up.

import pandas as pd
pd.read_csv('schedule.csv',index_col='date').sort_index()
question keyword conceptual practical social activity
date
2023-09-07 Welcome, Introduction, and Setup intro what is a system, why study tools GitHub basics class intros create kwl repo in github, navigate github.com...
2023-09-12 Course Logistics and Learning logistics github flow with issues syllabus working together and building common vocab set up to work offline together, create a folder
2023-09-14 Bash intro & git offline terminal start git structure, paths and file system bash path navigation, git terminal authentication why developers work differently than casual users navigate files and clone a repo locally
2023-09-19 How can I work with branches offline? gitoffline git branches github flow offline, resolving merge conflicts commuication is important, git can help fix mi... clone a repo and make a branch locally
2023-09-21 When do I get an advantage from git and bash? why terminal computing mental model, paths and file structure bash navigation, tab completion collaboration requires shared language, shared... work with bash and recover from a mistake with...
2023-09-26 What *is* a commit? merge conflicts versions, git vlaues merge conflicts in github, merge conflicts wit... human and machine readable, commit messages ar... examine commit objects, introduce plumbing com...
2023-09-28 How do programmers communicate about code? documentation build, automation, modularity, pattern matching, generate documentation with jupyterbook, gitig... main vs master, documentation community make a jupyterbook
2023-10-03 What *is* git? git structure what is a file system, how does git keep track... find in bash, seeing git config, plumbing/porc... git workflows are conventions, git can be used... examine git from multiple definitions and insp...
2023-10-05 Why are these tools like this? unix philosophy unix philosophy, debugging strategies decision making for branches social advantages of shared mental model, diff... discussion with minor code examples
2023-10-12 How does git make a commit? git internals pointers, design and abstraction, intermediate... inspecting git objects, when hashes are unique... conventions vs requirements create a commit using plumbing commands
2023-10-17 What is a commit number? numbers hashes, number systems git commit numbers, manual hashing with git number systems are derived in culture discussion and use hashing algorithm
2023-10-19 How can can I release and share my code? git references pointers, git branches and tags git branches, advanced fixing, semver and conv... advantages of data that is both human and mach... make a tag and release
2023-10-24 How can I automate things with bash? bash scripting bash is a programming language, official docs,... script files, man pages, bash variables, bash ... using automation to make collaboration easier build a bash script that calculates a grade
2023-10-26 How can I work on a remote server? server server, hpc, large files ssh, large files, bash head, grep, etc hidden impacts of remote computation log into a remote server and work with large f...
2023-10-31 What is an IDE? IDE IDE parts compare and contrast IDEs collaboraiton features, developer communities discussions and sharing IDE tips
2023-11-02 How do I choose a Programming Language for a p... programming languages types of PLs, what is PL studying choosing a language for a project usability depends on prior experience discussion or independent research
2023-11-07 How can I authenitcate more securely from a te... server use ssh keys, hpc system strucutre ssh keys, interactive, slurm social aspects of passwords and security configure and use ssh keys on a hpc
2023-11-09 What Happens when we build code? building building C code ssh keys, gcc compiler file extensions are for people, when vocabular... build code in C and examine intermediate outputs
2023-11-14 What happens when we run code? hardwar von neuman architecture reading a basic assembly language historical context of computer architecures use a hardware simulator to see step by step o...
2023-11-16 How does a computer represent non integer quan... floats float representation floats do not equal themselves social processes around standard developents, ... work with float representation through fractio...
2023-11-21 How can we use logical operations? bitwise operation what is a bit, what is a register, how to brea... how an ALU works tech interviews look for obscure details somet... derive addition from basic logic operations
2023-11-28 What *is* a computer? architecture physical gates, history interpretting specs social context influences technology discussion
2023-11-30 How does timing work in a computer? timing timing, control unit, threading threaded program with a race condition different times matter in different cases write a threaded program and fix a race condition
2023-12-05 How do different types of storage work together? memory different type of memory, different abstractions working with large data privacy/respect for data large data that has to be read in batches
2023-12-07 How does this all work together review all end of semester logistics group work final review quiz, integration/reflection questions
2023-12-12 How did this semester go? feedback all grading how to learn better together discussion

Tentative Lab schedule#

pd.read_csv('labschedule.csv',index_col='date').sort_index()
topic activity
date
2023-09-08 GitHub Basics syllabus quiz, setup
2023-09-15 working at the terminal organization, setup kwl locally, manage issues
2023-09-22 offline branches plan for success, clean a messy repo
2023-09-29 tool familiarity work on badges, self progress report
2023-10-06 unix philosophy design a command line tool that would enable a...
2023-10-13 git plumbing git plumbing experiment
2023-10-20 git plumbing grade calculation script, self reflection
2023-10-27 scripting releases and packaging
2023-11-03 remote, hpc server work, batch scripts
2023-11-10 Compiling C compiling experiments
2023-11-17 Machine representation bits and floats and number libraries
2023-12-01 hardware self-reflection, work, project consultations
2023-12-08 os hardware simulation