diff options
Diffstat (limited to 'tmp/Teaching CS')
-rw-r--r-- | tmp/Teaching CS | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/tmp/Teaching CS b/tmp/Teaching CS new file mode 100644 index 0000000..2c21cc4 --- /dev/null +++ b/tmp/Teaching CS @@ -0,0 +1,97 @@ +==================================== +Notes on Teaching Computer Science +==================================== + +:author: Bryan Newbold <bnewbold@mit.edu> + +.. 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 + + |