summaryrefslogtreecommitdiffstats
path: root/tmp/Teaching CS.page
diff options
context:
space:
mode:
Diffstat (limited to 'tmp/Teaching CS.page')
-rw-r--r--tmp/Teaching CS.page97
1 files changed, 97 insertions, 0 deletions
diff --git a/tmp/Teaching CS.page b/tmp/Teaching CS.page
new file mode 100644
index 0000000..2c21cc4
--- /dev/null
+++ b/tmp/Teaching CS.page
@@ -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
+
+