2. Course Logistics and Learning#
2.1. Syllabus Review#
Read the navigation on the left carefully
2.1.1. Scavenger Hunt#
Note
The goal here is to make sure you know where to find basic things, not that you have memorized every bit of information about the course
Where can you find when office hours are?
Where can you find the detailed list of what to prepare for today’s class?
Where is the regrading policy?
Something went wrong in an assignment repo on GitHub, what should you check before asking for help?
the git and GitHub section under FAQ
2.2. How does this work?#
2.2.1. In class:#
Memory/ understanding check
Review/ clarification as needed
New topic demo with follow along, tiny practice
Review, submit questions
2.2.2. Outside of class:#
Build your cookbook with your team
Review Notes
Practice material that has been taught
Activate your memory of related things to what we will cover
Read/ watch videos to either fill in gaps or learn more details
Bring questions to class
(practice extending will vary depending on what grade you are working toward)
2.2.3. Grade Tracking#
We will use a GitHub project to track your grade. Create a project on the course organization that is named <username> grade tacking
where <username>
is your GitHub username. We will help you populate it.
Important
If you missed class, create a project and link it
In your repository, edit the: /.github/workflows/getassignment.yml
file to remove either the two lines about practice or the two lines about review since you can only earn one or the other of these two types of badge per date.
Warning
This is different from in class
delete the /.github/workflows/track.yml
file, we will add items to the project a different way.
2.3. What does it mean to study Computer Systems?#
“Systems” in computing often refers to all the parts that help make the “more exciting” algorithmic parts work. Systems is like the magic that helps you get things done in practice, so that you can shift your attention elsewhere. In intro courses, we typically give you an environment to hide all the problems that could occur at the systems level.
Important
In this course, we will take the time to understand all of this stuff. This means that we will use a different set of strategies to study it than we normally see in computer science.
Systems programming is how to look at the file system, the operating system, etc.
From ACM Transactions on Computer Systems
ACM Transactions on Computer Systems (TOCS) presents research and development results on the design, specification, realization, behavior, and use of computer systems. The term “computer systems” is interpreted broadly and includes systems architectures, operating systems, distributed systems, and computer networks. Articles that appear in TOCS will tend either to present new techniques and concepts or to report on experiences and experiments with actual systems. Insights useful to system designers, builders, and users will be emphasized.
We are going to be studying aspects of computer systems, but to really understand them, we also have to think about how and why they are the way they are. We will therefore study in a broad way.
We will look at blogs, surveys of developers, and actually examine the systems themselves.
2.4. Mental Models and Learning#
2.4.1. What is it like to know something really well?#
When we know something well, it is easier to do, we can do it multple ways, it is easy to explain to others and we can explain it multiple ways. we can do the task almost automatically and combine and create things in new ways. This is true for all sorts of things.
a mental model is how you think about a concept and your way of relating it.
Novices have sparse mental models, experts have connected mental models.
2.5. Why do we need this for computer systems?#
2.5.1. Systems are designed by programmers#
Computer Science is not a natural science like biology or physics where we try to understand some aspect of the world that we live in. Computer Science as a discipline, like algorithms, mostly derives from Math.
So, when we study computer science, while parts of it are limited by physics1, most of it is essentially an imaginary world that is made by people. Understanding how people think, both generally, and common patterns within the community of programmers2 understand how things work and why they are the way they are. The why can also make it easier to remember, or, it can help you know what things you can find alternatives for, or even where you might invent a whole new thing that is better in some way.
Important
Some of this was not discussed in class
2.5.2. Context Matters#
This context of how things were developed can influence how we understand it. We will also talk about the history of computing as we go through different topics in class so that we can build that context up.
2.5.3. Optimal is relative#
The “best” way to do something is always relative to the context. “Best” is a vague term. It could be most computationally efficient theoretically, fastest to run on a particular type of hardware, or easiest for another programmer to read.
We will see how the best choice varies a lot as we investigate things at different levels of abstraction.
2.6. Admin#
Warning
I created your issues for you, but GitHub’s server is in a different time zone so the issue titles have the wrong date. You can change it, or not, your choice
Remember you can create branches to work on each badge from the issue
2.7. Review today’s class#
review notes after they are posted, both rendered and the raw markdown include links to each in your badge PR
map out your computing knowledge and add it to your kwl chart repo. this can be an image that you upload or a text-based outline in a file called prior-knowledge-map. (optional) try mapping out using mermaid syntax, we’ll be using other tools that will faciltate rendering later
fill in the first two columns of your KWL chart
complete the syllabus quiz. If you get less than 100%, submit an FAQ for the course website in your KWL repo in a file named syllabus-faq.md about something that confused you with your best guess at the correct answer. If you get 100%, make a note in your badge PR.
2.8. Prepare for Next Class#
Find the glossary page for the course website. Preview the terms for the next class: shell, terminal, bash, git, GitHub
Check your kwl repo before class and see if you have recieved feedback,reply or merge accordingly.
Make sure you have a working environment, see the list in the syllabus. Use the discussions to ask for help
2.9. More Practice#
review notes after they are posted, both rendered and the raw markdown include links to each in your badge PR
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 and how, if at all, it changes how you think about debugging and learning to program.
map out your computing knowledge and add it to your kwl chart repo in a file called
prior-knowledge-map
. Use mermaid syntax, to draw your map. GitHub can render it for you including while you work using the preview button.complete the syllabus quiz. If you get less than 100%, submit an FAQ for the course website in your KWL repo in a file named syllabus-faq.md about something that confused you with your best guess at the correct answer. If you get 100%, make a note in your badge PR.
2.10. Experience Report Evidence#
If you missed class today, there is no separate evidence beyond updates to your repo.
2.11. Questions After Today’s Class#
Important
Comming soon!
This list is content related and timely questions only, many of the syllabus questions were added to the syllabus faq page so they’re in a more logical place to find them when you might need them later.
2.11.1. Can you use other files besides .yml files as scripts?#
In other places, yes, but no on GitHub Actions.
2.11.2. why did we delete the bottom half of the track.yml file?#
I had put two copies of it in there thinking it had to work in two different ways, but we do not need the second one.
2.11.3. Can we go over the badge creation and submission process again#
Yes, we will
2.11.4. Which shell is best for windows?#
This is a really big question that I cannot answer authoritatively, but I can say that bash is the most common on unix, which a lot of servers use, so we will use that. To use bash on Windows, I recommend Git for Windows (GitBash) or Windows subsystem for linux
2.11.5. Also, if pre-class work needs to be attached to experience badges, is the experience (in class) action supposed to be selected before each class to attach the requested work, or will it all be attached at the end of class?#
Attach at the end. We will learn more ways to manage things so this gets easier as we go. You can do the work in advance on its own branch and then make a PR from that prepare branch to the experience branch. This PR you can merge without approval.
2.11.6. Will you notify us when a badge is able to be completed or will we have to know oursleves.#
You will get announcement
2.12. What should I do if I fall behind in class?#
Raise your hand, go talk to Marcin (or waive for him to come to you) or send a message on prismia. It can even be as short as “help”. Also, check prismia because mostly, I will be posting the steps there too
2.12.1. Where do I see what I need to submit?#
At the bottom of the notes, the pages in the activity section of this website and the issues that will be created on your kwl repo will all have the same information.
2.12.2. When can there be office hours so that I can make sure I am doing things correctly?#
TA office hours are now posted! Also, as we go through and give feedback, we will be able to tell you if you did it right or not and help you. That’s a good thing about what we have done so far: All of it is fully visible to us and we can help fix it.
2.12.3. Do students like how this class is graded?#
This is the first semester with these badges. The other system students liked some parts and found some parts made it too easy to fall behind and hard to know if work was all done. The badges were designed to make it easier to keep track of your work, while still offering choices.
I use a similar system in CSC/DSP310, students who pay attention to how flexible it is, tend to like it. Students who stay confused and do not ask for help tend to think that my other course is more strict than it actually is and do not like it.
2.12.4. Do we ahve to do all the prepare class takss to get the experience badge or just some of them.#
You need to do all of them, but my goal is that prepare for class tasks should take about 30 minutes per class session. Sometimes they may be longer (espeically setup/install ones, for reasons beyond my control). When I can anticipate that one may be a longer one, I will post it early with a marker that it advanced notice, like “start thinking about x” or similar. I will then post it again on the class before like, “Make sure that x is done”.
2.12.5. Is it possible to implement github actions to automate some components of version control from your local machine?#
Sort of! we will use the GitHub CLI to authenticate next class and it can also help you write scripts to do git actions and to interact with parts of GitHub. You can also use it within GitHub actions.
2.12.6. Questions we will address later#
Does github has a compiler to run code?
How do we setup a workflow?
Make an issue or PR
Add your question directly to the course website as an issue or a PR.
To make a PR, use the “suggest edit” button behind the icon at the top. It will have you make a fork which is a copy of the repo that lives on your own account instead of the organization and then you can submit a PR>
Doing this will not always be worth a community badge, but I hit a challenge in the way I had planned to, so I’m giving you an extra opportunity.
- 1
when we are really close to the hardware
- 2
Of course, not all programmers think the same way, but when people spend time together and communicate, they start to share patterns in how they think. So, while you do not have to think the same way as these patterns, knowing what they are will help you reading code, and understanding things.