From bddda1613c461aa96a3f5ee01b48f2456cdd6c62 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Sun, 13 Nov 2022 20:55:11 -0800 Subject: more tmp and misc stuff to scratch --- tmp/teaching-cs.page | 102 --------------------------------------------------- 1 file changed, 102 deletions(-) delete mode 100644 tmp/teaching-cs.page (limited to 'tmp/teaching-cs.page') diff --git a/tmp/teaching-cs.page b/tmp/teaching-cs.page deleted file mode 100644 index d441985..0000000 --- a/tmp/teaching-cs.page +++ /dev/null @@ -1,102 +0,0 @@ ---- -format: rst -categories: cs -toc: no -... -==================================== -Notes on Teaching Computer Science -==================================== - -:author: Bryan Newbold - -.. note:: Incomplete, just a structure of starting topics - -.. contents:: - -In thinking about how to teach somebody new "how to program" or "about -computers", it seems like getting the rough big picture is the best first step. - - -Engineering and Scientific Philosophies ------------------------------------------ -keywords: computation, computability, hierarchy, interface, implementation - -In approaching computer science it is important to note an arbitrary division -of the field between "computation" and "computability" that has arisen over -the years. Similar to the "theory" vs "experiment" schisms in other scientific -fields like physics, "computation" puts emphasis on actually generating -hardware and software to run in the real world, while "computability" focuses -on what can be computed and generalizations of specific computations. Of course -they are two sides of the same coin and should be appreciated together. - -It is almost impossible to deal with computer systems (hardware or software) -without breaking them up into modules and layers. Perhaps more so than in any -other field, conceptual barriers are reflected in the actual design and -implementation of systems, which can make it hard to learn how things work -because their inner workings are shielded from view both literally and -figuratively. For example, a software developer writing a web browser doesn't -have to know about what kind of monitor the user is sitting in front of, -what kind of physical link to the internet they have (or even how this -connection is managed), the details of their computer architecture, how their -application is delegated computing resources, what kind of mouse is being used, -etc etc. - -A more formal example is the ethernet protocol, which is used to -pass data between nodes in a relatively unstructured network. The ethernet -protocol itself lies above the physical "link layer", which means the same -protocol can be used for wireless radio communications or with conducting -wires. It lies below any sort of higher network layers and far below the -"application layer", so large amounts of data can be streamed over it between -two nodes, or messages between dozens of nodes can be passed over it, or it -can be only one link in a very large web of interconnections. This flexibility -has made it ubiquitous and is the protocol most network devices use without -a hitch, but occasionally it's imperfections can lead to problems at higher -levels which are hard to track down. - -Turing Completeness ------------------------------------------ -keywords: finite state machine, deterministic - -Personal Computer Hierarchy ------------------------------------------ -keywords: CPU, RAM, hard disk, peripherals, network, BIOS, motherboard, - operating system, serial, parallel, interrupts, multicore, register - -UNIX Operating Systems ------------------------------------------ -keywords: file system, kernel, driver, threading, - -UNIX is the Latin of operating systems: there were operating systems that came -after, and the average user isn't running a UNIX operating system, but it's -design is simple, functional, and has represents the dominant paradigms for -modern (non-experimental or special use) operating systems. - -As some context, Microsoft Windows is not directly based on UNIX. Apple OSX -and subsequent versions is built on top of a UNIX core. Linux is an open source -implementation of UNIX. BSD was the free UC Berkeley distribution of UNIX which -has branched off into open source implementations like FreeBSD, OpenBSD, and -NetBSD. "UNIX" got started as a Bell Labs research project in the 70's (?) - - -The Internet ------------------------------------------ -keywords: IP (internet protocol), ARP, MAC, routing, servers, backbone, - protocol, email, http, html - - -Software Development Tools ------------------------------------------ -keywords: compiler, lexical analysis, library, language, interpreter - - -Data Formats, Structures, and Algorithms ------------------------------------------ -keywords: string, integer, bit, list, pointer, tree, sort, P/NP - - -Design Paradigms ------------------------------------------ -keywords: server/client, object oriented, wrappers, KISS, parallelization, - resource locking, serialization, buffer - - -- cgit v1.2.3