Practice badges are a chance to first review the basics and then try new dimensions of the concepts that we cover in class. After each class, you will need to review the day’s material. This includes reviewing prismia chat to see any questions you got wrong and reading the notes. The practice badge will also ask you to apply the day’s material in a similar, but distinct way. They represent the minimum bar for B-level understanding.
Badges will be posted as issues and instructions will be here as well. 2025-09-04¶
Activities:
make sure you have joined the existing team to get access to more features in our course organization.
Read the notes from today’s class carefully
Fill in the first two columns of your KWL chart (content of the PR; named to match the badge name)
Create a profile readme and include a link to your profile in your PR comment. Your readme can be super minimal or more elaborate, your choice.
Post an introduction to your classmates on our discussion forum (include link to your comment in PR comment, must accept above to see)
2025-09-09¶
Activities:
the text in () below is why each step is assigned
review today’s notes after they are posted, both rendered and the raw markdown versions. Include links to both views in your badge PR comment. (to review)
“Watch” the course website repo, specifically watch Releases under custom (to get notifications)
read Chapter 1, “Decoding your confusion while coding” in The Programmer’s Brain add a file called brain.md to your kwl repo that summarizes your thoughts on the chapter. Do you think this information will help you approach learning more effectively? why or why not? How, if at all, does it changes how you think about debugging and learning to program? Give examples of how you have encountered the different types of confusion in your prior programming experiences. (to help you get good strategies and prime for things we will see in the next few weeks)
map out your computing knowledge and add it to your kwl chart repo in a file called prior-knowledge-map.md. Use mermaid syntax, to draw your map. GitHub can render it for you including while you work using the preview button. (what we will learn will connect a lot of ideas, mapping out where you start, sets you up for success)
Read more about version control in general and add a “version control” row to your KWL chart with all 3 columns filled in. (git is version control, but not the only one)
2025-09-11¶
Activities:
Any steps in a badge marked lab are steps that we are going to focus in on during lab time. Remember the goal of lab is to help you complete the work, not add additional work. The lab checkout will include some other tasks and then we will encourage you to work on this badge while we are there to help. Lab checkouts are checked only for completion though, not correctness, so steps of activities that we want you to really think about and revise if incorrect will be in a practice or review badge.
Read the notes. If you have any questions, post an issue on the course website repo.
Using your terminal, download your KWL repo. Include the command used in your badge PR comment.
Try using setting up git using your favorite IDE or GitHub Desktop. Make a file gitoffline.md and include some notes of how it went. Was it hard? easy? what did you figure out or get stuck on? Is the terminology consistent or does it use different terms?
lab Explore the difference between git add and git commit: try committing and pushing without adding, then add and push without committing. Describe what happens in each case in a file called gitcommit_tips.md. Compare what happens based on what you can see on GitHub and what you can see with git status. Write a scenario with examples of how a person might make mistakes with git add and commit and what to look for to get unstuck.
2025-09-16¶
Activities:
Create a merge conflict in your KWL repo on the branch for this badge and resolve it using your favorite IDE, then create another one and resolve it on GitHub in browser (this requires the merge conflict to occur on a PR). Describe how you created each conflict, show the files, and describe how your IDE helps or does not help in merge_conflict_comparison.md. Give advice for when you think someone should resolve a merge conflict in GitHub vs using an IDE. (if you do not regulary use an, IDE, try VSCode) You can put content in the file for this step for the purpose of making the merge conflicts for this exercise.
Learn about GitHub forks and more about git branches(you can also use other resources)
In branches-forks.md in your KWL repo, compare and contrast branches and forks; be specific about their relationship. You may use mermaid diagrams if that helps you think through or communicate the ideas. If you use other resources, include them in your file as markdown links.
2025-09-18¶
Activities:
badge steps marked lab are steps that you will be encouraged to use lab time to work on. For this one in particular, I am going to give you the messy repo in lab.
Update your KWL chart with any learned items.
(option) Get set up so that you can pull from the course website repo and push to your own fork of the class website by cloning the main repo, then forking it and adding your fork as an additional remote. Append the commands used and the contents of your
fall2025/.git/configto a file in your KWL reop called terminal_practice.md (hint:historyoutputs recent commands and redirects can work with any command, not only echo). Based on what you know so far about forks and branches, what advantage does this setup provide? (answer in theterminal_practice.md)(option) Get set up so that you can contribute to the course website repo from your local system. Note: you can pull from the
compsys-progtools/fall2024repo, but you do not not have push permission, so there is more to do than clone. Append the commands used and the contents of your localfall2025/.git/configto a git-remote-practice.md. Then, using a text editor (or IDE), wrap each log with three backticks to make them fenced code blocks and add headings to the sections.
clone (fork in browser)
git remote addwith any name and their fork
lab Organize the provided messy folder (details will be provided in lab time). Commit and push the changes. Clone that repo locally.
Organize a folder on your computer ( good candidate may be desktop or downloads folder), using only a terminal to make new directories, move files, check what’s inside them, etc. Answer reflection questions in a new file, terminal_organization_adv.md in your kwl repo. Tip: Start with a file explorer open, but then try to close it, and use only command line tools to explore and make your choices. If you get stuck, look up additional commands to do acomplish your goals.
# Terminal File moving reflection
1. How was this activity overall Did this get easier toward the end?
2. How was it different working on your own computer compared to the Codespace form?
3. Did you have to look up how to do anything we had not done in class?
4. When do you think that using the terminal will be better than using your GUI file explorer?
5. What questions/challenges/ reflections do you have after this?
6. Append all of the commands you used in lab below. (not from your local computer's history, from the codespace history)2025-09-23¶
Activities:
Explore the tools for conventional commits and then pick one to try out. Work on the branch for this badge and use one of the tools that helps making conventional commits (eg in VSCode or a CLI for it)for a series of commits adding “features” and “bug fixes” telling the story of a code project in a file called commit-story.md. For each edit, add short phrases like ‘new feature 1’, or ‘next bug fix’ to the
commit-story.mdeach time, but use conventional commits for each commit. In total, make at least 5 different types of changes (types per conventional commits standard) including 2 breaking changes and at least 10 total commits to the file.learn about options for how git can display commit history. Try out a few different options. Choose two, write them both to a file, gitlog-compare.md. Using a text editor, wrap each log with three backticks to make them “code blocks” and then add text to the file describing a use case where that format in particular would be helpful. do this after the above so that your git log examples include your conventional commits
Find the detailed view of the commit that added today’s notes to the website in github.com and locally. In
commit-detail-compare.mdinclude the url to the commit in github and the contents of the commit object with a description (pseudocode or bullets) of what Github would have to do to create its detailed view page from the commit object.
2025-09-30¶
Activities:
Review the notes from today
Read about different workflows in git and add responses to the below in a workflows.md in your kwl repo. Two good places to read from are Git Book and the atlassian Docs
Update your kwl chart with what you have learned or new questions in the want to know column
Find the hash of the content of your completed workflows.md file and put that in the comment of your badge PR for this badge. Try to do this from your local CLI, but full credit even if you use the website interface
## Workflow Reflection
1. Why is it important that git can be used with different workflows?
1. Which workflow do you think you would like to work with best and why?
1. Describe a scenario that might make it better for the whole team to use a workflow other than the one you prefer. 2025-09-30¶
Activities:
Review the notes from today
Read about different workflows in git and add responses to the below in a workflows.md in your kwl repo. Two good places to read from are Git Book and the atlassian Docs
Update your kwl chart with what you have learned or new questions in the want to know column
Find the hash of the content of your completed workflows.md file and put that in the comment of your badge PR for this badge. Try to do this from your local CLI, but full credit even if you use the website interface
## Workflow Reflection
1. Why is it important that git can be used with different workflows?
1. Which workflow do you think you would like to work with best and why?
1. Describe a scenario that might make it better for the whole team to use a workflow other than the one you prefer. 2025-10-02¶
Activities:
Review the notes from today
Review the notes, jupyterbook docs, and experiment with the
jupyter-bookCLI to determine what files are required to makejupyter-book buildrun in your kwl repo. Make your kwl repo into a jupyter book, by manually adding those files. Do not add the whole template to your repo, make the content you have already so it can build into html. Set it so that the_builddirectory is not under version control.Add
docs.mdto your KWL repo and explain the most important things to know about documentation in your own words using other programming concepts you have learned so far. Include in a markdown (same as HTML<!-- comment -->) comment the list of CSC courses you have taken for context while we give you feedback.1. Review the notes from todayLearn about the documentation ecosystem in another language that you know using at least one official source and additional sources as you find helpful. In
docs.mdinclude a summary of your findings and compare and contrast it to jupyter book/sphinx. Include a bibtex based bibliography of the sources you used. You can use this generator for informal sources and google scholar for formal sources (or a reference manager).
2025-10-07¶
Activities:
Review the notes from today
Read more details about git internals to review what we did in class in greater detail. Make a file gitplumbingdetail.md and create a a table or mermaid diagram that shows the relationship between at least three porcelain commands and their corresponding plumbing commands (generally more than one each).
Create gitislike.md and explain main git operations we have seen (add, commit, push) in your own words in a way that will either help you remember or how you would explain it to someone else at a high level. This might be analogies or explanations using other programming concepts or concepts from a hobby.
2025-10-09¶
Activities:
Review the notes from today
Use git bisect to find the first bad commit in the toy bug repo, save the command history and the bad commit hash to git_debug.md
Determine how many of the tags in the course website are annotated vs lightweight using. (You may need to use
git pull --tagsin your clone of the course website)
# Tags
<!-- short defintion/description in your own words of what a tag is and what it is for -->
## Comparing tag types
<!-- include your experiment terminal history and interpretation -->
## Inspecting tags
Course website tags by type:
- annoted:
- lightweight:
<!-- include lists of tags for each type -->2025-10-14¶
Activities:
Review the notes from today
Analyze the xor hashing algorithm in the notes to determine which properties of a cryptographic hash are/not met. Include your analysis in xorhash.md
find 2 more real world examples of using other number systems (either different bases or different symbols and bases) not mentioned in class that are currently used. Describe the number system and its usage in numbers.md. Include links to your sources and be sure that the sources are trustworthy.
Calculate the maximum number of git objects that a repo can have without requiring you to use more than the minimum number of characters to refer to any object and include that number in gitcounts_scenarios.md with a title
# Git counts. Describe 3 scenarios that would get you to that number of objects in terms of what types of objects would exist. For example, what is the maximum number of commits you could have without exceeding that number? How could you get to that number of objects in the fewest number of commits? What is the maximum number of files you can edit per commit and still take have at least 128 commits? Assume normal git use with porcelain commands, not atypical cases with plubming commands. If you get stuck, outline what you know and then request a review.Read about the Learn more about the SHA-1 collision attach
Learn more about how git is working on changing from SHA-1 to SHA-256 and answer the transition questions below gittransition.md
gittransition¶
# transition questions
1. Why make the switch? (in detail, not just *an attack*)
2. What impact will the switch have on how git works?
3. Which developers will have the most work to do because of the switch?2025-10-16¶
Activities:
Review the notes from today
Update your KWL Chart learned column with what you’ve learned
prevent
badges.jsonandbadges.ymlfrom being tracked by git in your kwl repowrite a bash script that prevents
jupyter-bookfrom giving warnings about files not having a heading by using the file name as a temporary title. (see the previous badge where you should have converted your repo, or do that one first, this counts as an extension on that if you have not done it)
Hint: Use sed’s insert option and head as needed.
Explore idea¶
modify your script to use a small llm from ollama to automatically insert a sensible title by summarizing the file. using a commercial chat interface does not qualify, but using an llm locally does
2025-10-21¶
Activities:
Review the notes from today
Write a C program to compare values as doubles and as float (single precision/32bit) to see that this comparison issue is related to the IEEE standard and is not language specific. Make notes and comparison around its behavior and include the program in a code cell in cdouble.md
In floatexpt.md design an experiment using the
fractions.Fractionclass in Python that helps illustrate why.1*3 == .3evaluates toFalsebut.1*4 ==.4evaluates toTrue. Your file must include both code and interpretation of the results.
2025-10-23¶
Activities:
Review the notes from today
Answer the following in hpc.md of your KWL repo: (to think about how the design of the system we used in class impacts programming and connect it to other ideas taught in CS)
1. What kinds of things would your code need to do if you were going to run it on an HPC system? 2. What sbatch options seem the most helpful? 3. How might you go about setting the time limits for a script? How could you estimate how long a script will take?
2025-10-28¶
Activities:
Review the notes from today
configure ssh keys for your github account
Find 2 other encyrption algorithms that could be used wiht ssh (hint: try
man sshor read it online) and compare them in encyryption_compare. Your comparison should be enough to advise someone which is best and why, but need not get into the details.Read through this rsa encryption demo site site and use it to show what, for a particular public/private key pair (based on small primes) it would look like to pass a message, “It is spring now!” encrypted. (that is encypt it, and decrypt it with the site, show it’s encrypted version and the key pair and describe what would go where). Put your example in rsademo.md.
2025-10-30¶
Activities:
Review the notes from today
On Seawulf, modfiy main.c from class to accept the integer as a command line argument instead of via input while running the program. See this tutorial for an example.
Write a bash script demo_test.sh that runs your compiled program for each integer from 10 to 30 (syntax for a range is
{start..end}so this would be{10..30})Write an sbatch script, batchrun.sh to run your script on a compute node and save the output to a file. The sbatch script should compile and link the program and then call the script. see the options
use scp to download your modified main, script files, and output to your local computer and include them in your kwl repo.
Create some variations of the
hello.cwe made in class. Make hello2.c print twice with 2 print commands. Make hello5.c print 5 times with a for loop and hello7.c print 7 times with a for loop. Build them all on the command line and make sure they run correctly.Write a bash script, assembly.sh to compile each program to assembly and print the number of lines in each file.
Put the output of your script in hello_assembly_compare.md. Add to the file some notes on how they are similar or different based on your own reading of them.
2025-11-04¶
Activities:
Review the notes from today
Run and examine how rect.hack and max.hack in the
projects/05/folder of the CPU Emulator work. Make notes and answer the questions below in assemblyexplore.md.1. What does rect.hack do? 2. What did you learn trying to figure out how it works? 2. Write an excerpt of code in a high level compiled language that would compile into this `max.hack`. Try writing multiple different versions.Use the simulator to figure out what the program
mystery.hackthat is on the notes for today does.
2025-11-06¶
Activities:
Review the notes from today
While we saw many types of gates today, but we actually could get all of the operations needed using only NAND gates. Work out how to use NAND gates to implement a half adder and describe it in nandhalf.md
In addertypes.md compare ripple adders and lookahead adders.
1. Give a synopsis of each adder type 2. Compare them in terms of time (assume that each gate requires one unit of time) 3. Compare them in terms of space/cost by counting the total number of gates required.Experiment with bitwise operators in python to derive 3 generic rules. Submit in
bitwise_expt.mdthat has code in cells and the output (eg like the notes). An example (that you cannot get credit for) is any number xor with itself is 0, ora^a =0.
hover over the explore ideas below and to make an issue if you want to work on that explore
explore: Learn about the alternative to these operations for quantum computing and compare and think about how we would need to change computing operations for quantum compared to the traditional gates we have been using
explore: for another application of bitwsie operations, design and describe an activity
2025-11-18¶
Activities:
Review the notes from today
Update your KWL chart.
If you were to use something from this course in an internship for an interview, what story could you tell?
Learn about the system libraries in two languages (one can be C or Python, one must be something else). Find the name(s) of the library or libraries. In systeminteraction.md summarize what types of support are shared or different? What does that tell you about the language?
In a language of your choice, use the timing library in the languge to compare two different ways of doing something to see which is faster. Choose two implementations that you think should take different times based on your understanding of how the computer executes things.
2025-11-18¶
Activities:
Review the notes from today
Update your KWL chart.
If you were to use something from this course in an internship for an interview, what story could you tell?
Learn about the system libraries in two languages (one can be C or Python, one must be something else). Find the name(s) of the library or libraries. In systeminteraction.md summarize what types of support are shared or different? What does that tell you about the language?
In a language of your choice, use the timing library in the languge to compare two different ways of doing something to see which is faster. Choose two implementations that you think should take different times based on your understanding of how the computer executes things.
2025-11-20¶
Activities:
Review the notes from today
Research examples of programs using multi-threading besides splitting up a single calculation for time reasons, include three examples in whymultithread.md.
Examine the assembly for the
sq_sum_threaded.cwe wrote in class and find the lines that show why the race condition occurs. Describe how you figured it out and include the relevant lines in race.md.Read about systems abstractions in CACM and answer reflection questions below in systemsabstractions.md based on the systems abstraction reading:
1. What are your overall thoughts on this article? (include how much is neew vs familar, easy vs hard to understand, etc)
2. How has you undertanding of these changed during this course.
3. Do you think you understand this article more now than you would have at the beginning of the semester
4. Write 3 questions and their answers that could be a quiz to see if someone understood or had misconceptions about the abstractions in this article.2025-11-25¶
Activities:
Review the notes from today
Describe a type of project where it would be worth it for you to learn a language you have never used before in newlanguage.md This should be based in what types of features for the language your project would require and/or what would contribute to the long term health of the project. Your justifiction must come from sources used in class and be based in factual evidence about the language.
Learn about one of the following languages that you have not used before: R, Julia, Clojure, Zig, Go, erlang, Elixir or another language you are curious about that appeared in the Developer survey. For example you might be interest in the top paying languages. Use the official documentation. Answer the following questions in languagelearning.md:
1. What is this language designed for? 2. What Programming paradigm(s) does it support? 3. Give at least 1 example of a programming language that experience in would make it **easy** to learn this language and explain why. 4. Give at least 1 example of a programming language that experience in would make it **hard** to learn this language and explain why. 5. What is its most unique feature(s)?
hint: for questions 3 & 4, for example learning Python first does not make it easy to learn C++, but learning C makes it very easy to learn C++ (but I have not filled in explanations).
Explore badge option¶
Actually try out one of the langauges above in a new repo created from this asssignment.
work on a branch and commit after each step
Setup the devcontainer to provide the compiler/interpreter for the language of your choice. See features
Add top extensions related to the language to the devcontainer.
Add a gitignore file for that language
Write a hello world type program in the language and make sure it runs.
Use the official documentation to figure out a common task in the language and write an example program that completes something typical for that language (eg a sort data analysis in R). You may use GitHub Co-pilot in the code space to help write the code, but you should justify the task you ask it to do. Commit any generated code immediately with the message “code from copilot via ” and your prompt filled in.
Test your understanding of the code by trying to modify it, and make commits describing what you changed and why.
Fill in the prompts in the README (follow the comments) and Answer the questions in the README of the template repo.
2025-12-02¶
Activities:
Review the notes from today The first two tasks are the practice task, the thirds is a pre-approved explore badge. Hover it on your issue to create an independent issue to track it. Title the new issue
Explore: IDE. On the explore badge, when it is ready for submission, request a review from Dr. Brown.In bestide.md, compare two IDEs using your group’s table from class, to evaluate each of them. Your review should have an introduction that justifies the ranking and defines the criteria, a section describing each IDE with respect to all of the criteria and your overall experience with that IDE, and a conclusion that explains which of the 3 is the best based on your evaluation.
Configure your VS Code preferences to your github account. add settingssync.md with a description of what settings you customized and synced and reflect on why this is an important feature and what prerequisites to it might be.
(explore badge opportunity) Create a small repo owned by compsys named
ide-USERNAMEwhereUSERNAMEis your gh username with some example code, a vscode/codespace devcontainer file that installs CodeTour and your favorite extension(s). Write a CodeTour that walks someone through using your favorite extension to do something with the code. The example code can be any language, can be very simple, can even have a bug in it if that helps your example. You can use an-IDE integrated LLM (eg GitHub Co-pilot, not the chat version) to generate some code for this purpose if you do not have some available to you already, but you cannot share solutions to a course assignment without that instructor’s permission.