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.1.2. Class template#

In class:

  1. Memory/ understanding check

  2. Review/ clarification as needed

  3. New topic demo with follow along, tiny practice

  4. Review, submit questions

Outside of class:

  1. Build your glossary and cookbook

  2. Review Notes

  3. Practice material that has been taught

  4. Activate your memory of related things to what we will cover

  5. Read/ watch videos to either fill in gaps or learn more details

  6. Bring questions to class

(practice extending will vary depending on what grade you are working toward)

2.1.3. Grade Tracking#

We will use a GitHub project to track your grade. Create a project on the course organization that is named grading-<username> where <username> is your GitHub username. We will help you populate it.

2.2. 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.

Systems programming is how to look at the file system, the operating system, etc.

From ACM Transactionson 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.

“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.

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.3. Mental Models and Learning#

2.3.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.

We can visualize with concept maps.

When we first learn new things, we first get the basic concepts down, but we may not know how they relate.

../_images/2022-01-27-mental_model_novice.svg

Fig. 2.1 a novice mental model is disconnected and has few concepts#

As we learn more, they become more connected.

../_images/2022-01-27-mental_model_competent.svg

Fig. 2.2 a compententmental model starts to have some connections, with relationships between the concepts.#

../_images/2022-01-27-mental_model_advanced.svg

Fig. 2.3 an expert mentla model is densley connected and has more concepts in it.#

We can visualize with concept maps. Which connect the ideas using relationships on the arrows.

../_images/2022-01-27-mental_model_git.svg

Fig. 2.4 a small concept map showing that git is an instance of both a file system and a version control system.#

2.4. Why do we need this for computer systems?#

Attention

This section contain points added here that were not discussed directly in class, but are important and will come back up

2.4.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.

https://drek4537l1klr.cloudfront.net/hermans2/Figures/CH01_F02_Hermans2.png

Fig. 2.5 An overview of the three cognitive processes that this book covers: STM, LTM, and working memory. The arrows labeled 1 represent information coming into your brain. The arrows labeled 2 indicate the information that proceeds into your STM. Arrow 3 represents information traveling from the STM into the working memory, where it’s combined with information from the LTM (arrow 4). Working memory is where the information is processed while you think about it.#

2.4.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.4.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.5. Review Today’s Class#

Note

You are responsible for these actions, but they will be checked at varying times

  1. review notes after they are posted, both rendered and the raw markdown

  2. 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. (optional) try mapping out using mermaid syntax, we’ll be using other tools that will faciltate rendering later

  3. fill in the first two columns of your KWL chart

2.6. Prepare for Next Class#

Note

This is what is required, before the next class and will be checked or if you don’t do it you will have trouble participating in class

  1. find 2-3 examples of things in programming you have got working, but did not really understand. this could be errors you fixed, or something you just know you’re supposed to do, but not why. Add them to our course Discussions in General. Start a new thread and/or comment on others if theirs are related to yours.

  2. Make sure you have a working environment for next week. Use slack to ask for help.

    • install GitBash on windows (optional for others)

    • make sure you have Xcode on MacOS

    • install the GitHub CLI on all OSs

2.7. Prepare for Next Class#

Note

Activities in this section are optional, but things that may help you prepare, or (in future classes) extend the idea.

  1. 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.

2.8. Questions After Class#

2.8.1. Homework#

2.8.1.1. what is today’s homework?#

Above, in the review, Prepare, and More Practice sections.

2.8.1.2. Are we filling out our KWL charts as homework?#

yes

2.8.1.3. what are rendered notes and raw notes?#

This is the notes. If you are viewing it at introcompsys.github.io/… this is the rendered version. If you are viewing it at https://raw.githubusercontent.com.introcompsys/… then it is the raw version. The source version is at github.com

2.8.1.4. Is chapter 1 of the programmer’s brain meant to just be part 1?#

Chapter 1 is “Decoding your confusion while coding” and it is also available to listen to.

2.8.1.5. How do we install the gitbash and the CLI.#

At the links above. There are different instructions per operating system, but those sites should give you the right verion.

2.8.2. Tools and Content#

2.8.2.1. Do we have to regularly update git and anything else that is local to our computers?#

Yes, but probably not within one semester. I usually update mine about each semester, so that I stay on the new version that I have students install. When I was not teaching, I only updated when I learned about new major updates somewhere.

2.8.2.2. What is mermaid syntax?#

It’s a plain text syntax for diagrams. Read more at the link.

2.8.2.3. When it comes to the programming aspects of this course, exactly what programming language(s) will we be using?#

We will not be writing a lot of code from scratch. You will observe things you do in other classes you are taking. We will write bash shell scripts. There will be a few programming problems where you can chose any language to write something out and a few where you have to modify code that you are given in C/++ or Python. We will also read machine code and assembly, but not write code in those languages.

2.8.2.4. are we just learning commands with xcode/gitbash to use it in combination with github#

We will learn command that we can use from a local terminal in bash to do a lot of helpful things. We will also learn git commands that can be used with GitHub or with any other git client. The git commands we learn will also change less frequently than the GitHub website or desktop applications.

2.8.2.5. Why do we need Gitbash for this course?#

GitBash is like a translator that allows windows computers to udnerstand bash, linux (including MacOS) automatically do. GitBash provides a bash terminal for Windows. Bash is the most common shell scripting language and while learning others can be useful, since bash is the most common, it’s the most useful. Also, it is old enough that most others will have similar structure, so being good at bash will help you learn other shell scripts as well.

Also, because teaching a class only works if we all use the same language.

However, you could instead use windows subsystem for linux or install linux on a flash drive

2.8.2.6. How is the git terminal different to the one I would use for my own other classes like for C++.#

We will use git on a bash-supporting terminal.

Also, understanding what a terminal is, is something we will come back to over the next few classes.

2.8.3. Grading#

2.8.3.1. How does the grading work?#

I will give you a tempalte, you will write a contract, I will approve or recommend edits. Once you have an approved contract, you do all of the work in th econtract, correctly and completely and you earn the grad you contracted for.

2.8.3.2. where do I get graded ?#

Most of your work will go into the KWL repo.

2.8.3.3. Do I create a separate repo for the glossary or should I wait till we get more info#

Wait for more info

2.8.3.4. I would like to know more about how the letter grade we choose will effect the workload of the course. For example if I were to choose the letter C and my friend chooses the letter A, will my friend get more assignments to boost the workload?#

Earning higher grades requires deeper understanding, so this does require some additional work to give me evidence of that deeper understanding.


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.