2. How does learning and knowledge work in computing?

2.1. Git review

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

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

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.

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

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.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. How I expect this to work

2.7. 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. Review these notes, both rendered as html and the raw markdown in the repository.

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

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

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

    • check that you have Python installed with Jupyter, ideally with Anaconda

    • install jupyter book

    • install GitBash on windows (optional for others)

    • make sure you have Xcode on MacOS

    • install the GitHub CLI on all OSs

2.8. More Practice

Note

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

  • (optional) try mapping out using mermaid syntax, we'll be using other tools that will faciltate rendering later, or try getting it to render on your own.

  • (optional) read chapter 1 the programmmer's brain. Some of the ideas we talked about today are mentioned there, and it relates to where you're suppoed to be looking for things that you have done, but didn't really understand.

  • try adding something to this page or the glossary of the course site or link a glossary term to an occurence of it on the site.

Hint

terms on this page that could be added to the glossary include filesystem and operating system. The jupyter book docs show how to add to a glossary and link to the glossary from another page.

2.9. Questions After Class

2.9.1. How would I learn more about version control systems?

We will talk more about this in in the tools section of the course

2.9.2. How to use github to make more meaningful repositories, instead of just a mess of files that are not properly uploaded?

We will talk a bit about how git works to get some of this. Some of this will also be dependent on the type of code that you are working on. For example, organizing data science examples would be different than a data science library which would be different than a backend API, even if they were all in Python.

2.9.3. Are there any benefits to using git offline vs using it only in conjunction with github?

offline you can use more powerful code editing tools and run your code more frequently. Even offline, you can use it with GitHub.

Advantages to using git without GitHub, but with a different host could be privacy reasons- if you own your own server; that you want to track changes, but do not need a backup at all; that you want different hosting for their interface that provides different features; or that you don’t trust Microsoft(who bought GitHub). Some people also do not use GitHub because they have ICE as a customer.

2.9.4. When will we be establishing the grade contracts?

We will work on grading contracts in approximately the third week. They will be due on or after Feburary 13th. You will have at least one week from when you get the template to the first review.

2.9.5. How can I be better at communicating documentation

We are going to focus on the tools to produce documentation sites and for distributing documentation. To learn more about documentation, in terms of what to write and where, I have an outline here. I also learned a lot from this tutorial. In general, open source community resources tend to be where you can learn more about this. Also, most langauges’ official documentation will have information eg for python.

2.9.6. How often are we supposed to update our KWL Charts?

You will be prompted (either in class or as a class preparation) when I expect it at a minimum, but you can also add to it when you think of things.

2.9.7. Do we get a notification when you post the notes, or do we just check periodically?

The #siteupdates channel in slack shows when commits are pushed to the repository for the site, you can also create a more custom version of notification using either the GitHub watch or the GitHub bot in a slack DM to yourself, using /github help.


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.