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
Recommended workload distribution#
Note
General badge deadlines are on the detailed badge procedures page.
To plan your time, I recommend expecting the following:
30 minutes, twice per week for prepare work (typically not this much).
1.5(review)-3(practice) hours, twice per week for the dated badges (including revisions).
For each explore:
30 min for proposal
7 hours for the project
For each build:
1.5 hour for the proposal (including revisions)
22 hours for the project
30 min for the final reflection
This is a four credit course, meaning we have approximately 4 hours of class + lab time per week(\(75 \times 2+105 = 255\) minutes or 4.25 hours). By the accredidation standards, students should spend a minimum of 2 hours per credit of work outside of class over 14 weeks. For a 4 credit class, then, the expected minimum number of hours of work outside of class you should be spending is 112 hours(2 * 4 * 14). With these calculations, given that there are 26 class sessions and only 18 review or practice are required, it is possible to earn an A with approximately 112 hours of work outside of class and lab time.
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 |