2018-02-23 18:58:03 +00:00
|
|
|
|
---
|
|
|
|
|
created_at: '2013-07-25T00:03:54.000Z'
|
|
|
|
|
title: A Practical Computer Science Primer (2008)
|
|
|
|
|
url: https://learn-cs.pbworks.com/w/page/15774601/FrontPage
|
|
|
|
|
author: barce
|
|
|
|
|
points: 66
|
|
|
|
|
story_text: ''
|
|
|
|
|
comment_text:
|
|
|
|
|
num_comments: 8
|
|
|
|
|
story_id:
|
|
|
|
|
story_title:
|
|
|
|
|
story_url:
|
|
|
|
|
parent_id:
|
|
|
|
|
created_at_i: 1374710634
|
|
|
|
|
_tags:
|
|
|
|
|
- story
|
|
|
|
|
- author_barce
|
|
|
|
|
- story_6100034
|
|
|
|
|
objectID: '6100034'
|
2018-06-08 12:05:27 +00:00
|
|
|
|
year: 2008
|
2018-02-23 18:58:03 +00:00
|
|
|
|
|
|
|
|
|
---
|
2018-03-03 09:35:28 +00:00
|
|
|
|
**David Weekly's Practical Computer Science Primer**
|
2018-02-23 18:19:40 +00:00
|
|
|
|
|
2018-03-03 09:35:28 +00:00
|
|
|
|
|
2018-02-23 18:19:40 +00:00
|
|
|
|
|
2018-03-03 09:35:28 +00:00
|
|
|
|
**April 14, 2008 onwards: free in-person group study & lectures Monday
|
|
|
|
|
nights 7-11pm in South Bay, CA. Bring food & drink to share.**
|
2018-02-23 18:19:40 +00:00
|
|
|
|
|
2018-03-03 09:35:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This evolving online curriculum is designed for a motivated and
|
|
|
|
|
intelligent college graduate with no formal training in computer science
|
|
|
|
|
to efficiently learn CS theory and culture in about a year of part-time
|
|
|
|
|
study. If this appeals to you, please [join the Google
|
|
|
|
|
Group](http://groups.google.com/group/learn_cs) to discuss, particularly
|
|
|
|
|
if you are in the San Francisco Bay Area and would like to attend the
|
|
|
|
|
in-person meetings.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This curriculum is loosely based on [the CS core at
|
|
|
|
|
Stanford](http://www.stanford.edu/class/cs106x/) but also draws upon
|
|
|
|
|
MIT's "[Course
|
|
|
|
|
Six](http://courses.csail.mit.edu/6.01/spring08/general-information.html)"
|
|
|
|
|
and "post collegiate web CS," such as
|
|
|
|
|
[memcached](http://en.wikipedia.org/wiki/Memcached),
|
|
|
|
|
[MapReduce](http://en.wikipedia.org/wiki/MapReduce), and
|
|
|
|
|
[Paxos](http://en.wikipedia.org/wiki/Paxos_algorithm). Portions of the
|
|
|
|
|
traditional CS curriculum less relevant to modern practice are
|
|
|
|
|
deliberately omitted (students will not be required to build their own
|
|
|
|
|
OS and compiler or build skip lists and red-black trees) and will
|
|
|
|
|
include some non-traditional curriculum (such as a datacenter tour). The
|
|
|
|
|
class is being offered without cost, but students are expected to devote
|
|
|
|
|
meaningful time to study, help fellow students with the curriculum,
|
|
|
|
|
share notes online, and bring food to the Monday night meetings.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Books are listed below with links to their Amazon pages and current
|
|
|
|
|
prices; these books are considered canonical in their subject area and
|
|
|
|
|
students particularly excited by a given topic are encouraged to
|
|
|
|
|
purchase the textbook, especially as most are very well-written and
|
|
|
|
|
approachable even from a layman perspective. Students are not expected
|
|
|
|
|
to purchase all or even most of the books when taking the overview
|
|
|
|
|
version of the course, as the overview will only quickly touch on the
|
|
|
|
|
key subjects from each topic. Lectures will be recorded and uploaded in
|
|
|
|
|
MP3 format as well as being summarized on this wiki.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The pace for the in-person lectures is deliberately aggressive, seeking
|
|
|
|
|
to compress about a semester's worth of college learning into each 2-3
|
|
|
|
|
hour lecture / peer learning experience. This class has a secondary
|
|
|
|
|
purpose of being a learning lab, experimenting with more effective and
|
|
|
|
|
efficient ways to educate smart people. David's ultimate goal is to
|
|
|
|
|
[found a university](http://david.weekly.org/university/) based on the
|
|
|
|
|
findings from experiments like these. Other classes, such as compressing
|
|
|
|
|
an MBA into a few weeks of part time study, may be explored in 2009.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"...but why study computer science? There are many other interesting
|
|
|
|
|
things to study, like French Literature."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Knowledge of practical computer science will let you leverage your
|
|
|
|
|
ideas and pave your own destiny.** There is almost no other field that
|
|
|
|
|
with basic training and minimal resources will let a person make such
|
|
|
|
|
widespread, rapid, and effective change in other people's lives. You can
|
|
|
|
|
take an idea from concept to use by thousands of people in a matter of
|
|
|
|
|
hours and use by millions of people in a matter of a year. Jobs in
|
|
|
|
|
computer science typically pay well ($70k-120k a year) and include a
|
|
|
|
|
wealth of benefits and exciting opportunities. There is a severe and
|
|
|
|
|
likely long-term shortage of programmers in the US - you'll have your
|
|
|
|
|
pick of work environments, in addition to the possibility of starting
|
|
|
|
|
your own venture or joining someone else as a technical co-founder.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"...but I'm not good at math\!"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
That's okay\! **Most computer work has very little to do with math.** It
|
|
|
|
|
has everything to do with logic and philosophy. If you can write a
|
|
|
|
|
recipe and make a good argument from well-stated premises, you've got
|
|
|
|
|
the right kind of mind for computer science.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
****
|
|
|
|
|
|
|
|
|
|
1. [BASICS](#BASICS)
|
|
|
|
|
2. [COMPUTER ARCHITECTURE](#COMPUTERARCHITECTURE)
|
|
|
|
|
3. [ALGORITHMS](#ALGORITHMS)
|
|
|
|
|
4. [LANGUAGES & COMPILERS](#LANGUAGESampCOMPILERS)
|
|
|
|
|
5. [OPERATING SYSTEMS](#OPERATINGSYSTEMS)
|
|
|
|
|
6. [GRAPHICS](#GRAPHICS)
|
|
|
|
|
7. [AUDIO](#AUDIO)
|
|
|
|
|
8. [ARTIFICIAL INTELLIGENCE](#ARTIFICIALINTELLIGENCE)
|
|
|
|
|
9. [CRYPTOGRAPHY](#CRYPTOGRAPHY)
|
|
|
|
|
10. [NETWORKING](#NETWORKING)
|
|
|
|
|
11. [SECURITY](#SECURITY)
|
|
|
|
|
12. [DATABASES](#DATABASES)
|
|
|
|
|
13. [MODERN WEB APPLICATION
|
|
|
|
|
PROGRAMMING](#MODERNWEBAPPLICATIONPROGRAMMING)
|
|
|
|
|
14. [GOING BIG: PRACTICAL SCALING](#GOINGBIGPRACTICALSCALING)
|
|
|
|
|
15. [MOBILE APPLICATIONS](#MOBILEAPPLICATIONS)
|
|
|
|
|
16. [SOFTWARE ENGINEERING](#SOFTWAREENGINEERING)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# BASICS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Why is computer science an interesting field? Where did it come from?
|
|
|
|
|
Who are the notable figures and what did they do? What is the culture of
|
|
|
|
|
computer science? While many parts of computer science continue to
|
|
|
|
|
unfold anew, a surprising breadth of innovation and discovery in
|
|
|
|
|
symbolic processing began as early as 1822, and most modern computer
|
|
|
|
|
science theory had been firmly hashed out by the 1970's. Indeed, Douglas
|
|
|
|
|
Englebart's famous demo, given in 1968, demonstrates many technologies
|
|
|
|
|
that would still be considered quite modern / advanced.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## FIELD TRIP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# COMPUTER ARCHITECTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Most modern computers are made from several silicon chips that interface
|
|
|
|
|
on a "motherboard". Knowing how these chips operate to perform the
|
|
|
|
|
function of a computer and the fundamentals of logic involved is
|
|
|
|
|
important for designing systems that make the most out of their hardware
|
|
|
|
|
and software working in unison.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- Vacuum Tubes & Tansistors
|
|
|
|
|
- Logic Gates
|
|
|
|
|
- Signal Processing
|
|
|
|
|
- Hard drives
|
|
|
|
|
- Processors & Cache, Multicore Processors
|
|
|
|
|
- Motherboards: North Bridge / South Bridge
|
|
|
|
|
- RAID
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ALGORITHMS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Algorithms are programming pattterns used to organize, store, and solve
|
|
|
|
|
certain classes of problems. There are a whole set of different
|
|
|
|
|
algorithms, for instance, to sort a list of numbers from lowest to
|
|
|
|
|
highest. They are all correct, but some may be faster than others in
|
|
|
|
|
certain (or all) circumstances. Knowing what algorithms are out there
|
|
|
|
|
and when to use each is at the core of a computer scientist's
|
|
|
|
|
competence.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
Variable Types
|
|
|
|
|
|
|
|
|
|
- arrays
|
|
|
|
|
- hash tables
|
|
|
|
|
- floating & fixed point
|
|
|
|
|
|
|
|
|
|
Lists, queues, stacks & circular buffers
|
|
|
|
|
|
|
|
|
|
- adding & deleting
|
|
|
|
|
- sorting
|
|
|
|
|
|
|
|
|
|
Trees
|
|
|
|
|
|
|
|
|
|
Relational Databases (more later)
|
|
|
|
|
|
|
|
|
|
Indexes
|
|
|
|
|
|
|
|
|
|
[State Machines](http://en.wikipedia.org/wiki/Finite_state_machine)
|
|
|
|
|
|
|
|
|
|
[Big O Notation](http://en.wikipedia.org/wiki/Big_O_notation)
|
|
|
|
|
|
|
|
|
|
[Dynamic Programming](http://en.wikipedia.org/wiki/Dynamic_programming)
|
|
|
|
|
|
|
|
|
|
[Dijkstra's
|
|
|
|
|
Algorithm](http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# LANGUAGES & COMPILERS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
While CPUs have a native instruction set of 1's and 0's called "machine
|
|
|
|
|
code", humans communicate more efficiently and naturally with
|
|
|
|
|
instructions written in a human language. Because human languages can be
|
|
|
|
|
ambiguous in meaning and overly broad in scope, "computer languages"
|
|
|
|
|
were invented to allow humans to enter commands for the computer in a
|
|
|
|
|
human-readable format but one that the computer could also unambiguously
|
|
|
|
|
interpret. The process of turning a program written in a computer
|
|
|
|
|
language into machine code is called "compiling" and is usually done by
|
|
|
|
|
a separate program called a "compiler". Many different computer
|
|
|
|
|
langauges have been developed, but they generally fall into a relatively
|
|
|
|
|
small number of families. Understanding the strengths and weaknesses of
|
|
|
|
|
different languages and language families allows a programmer to
|
|
|
|
|
correctly select a language for use in a project. A deep enough
|
|
|
|
|
understanding of the design and implementation of computer languages
|
|
|
|
|
will allow the student to design their own computer language.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
Overview of Language Families
|
|
|
|
|
|
|
|
|
|
- **direct**: assembly,
|
|
|
|
|
brainfuck
|
|
|
|
|
- [**imperative**](http://en.wikipedia.org/wiki/Imperative_programming):
|
|
|
|
|
[C](http://en.wikipedia.org/wiki/C_%28programming_language%29),
|
|
|
|
|
[C++](http://en.wikipedia.org/wiki/C%2B%2B), FORTRAN, Pascal
|
|
|
|
|
- **message-based**: Smalltalk & Objective/C
|
|
|
|
|
- **interpreted**: Perl, Python, Ruby, BASIC, Javascript, Lua
|
|
|
|
|
- **web-integrated**: PHP, Coldfusion, ASP
|
|
|
|
|
- **managed**: C\#, ASP.NET, Java
|
|
|
|
|
- **functional**: Scheme, Lisp, Erlang
|
|
|
|
|
- **domain specific**: MatLab, R, Mathematica, SQL, ActionScript
|
|
|
|
|
|
|
|
|
|
**Frameworks**: Rails, Symphony
|
|
|
|
|
|
|
|
|
|
**Extending Languages**: BOOST, CPAN, Prototype
|
|
|
|
|
|
|
|
|
|
**Grammars & Parsers**: lex & yacc, bison
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# OPERATING SYSTEMS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
While historically computers simply ran one program at a time that had
|
|
|
|
|
access to all of the resources of the computer, it was later found that
|
|
|
|
|
it would be more useful to have multiple processes that could run at the
|
|
|
|
|
same time. Advanced techniques were required to keep these processes
|
|
|
|
|
from harming each other. The "master program" that oversees the running
|
|
|
|
|
of subprograms is called the "operating system". Operating systems
|
|
|
|
|
provide a number of useful services to running programs, most notably
|
|
|
|
|
abstracting away many of the particularities of the computer on which
|
|
|
|
|
the program is running. This allows the same program to be run on many
|
|
|
|
|
different computers with different accessories without having to be
|
|
|
|
|
rewritten. Understanding how operating systems function and allow
|
|
|
|
|
programs to run is a critical component of a modern CS curriculum.
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
The Boot Process
|
|
|
|
|
|
|
|
|
|
Schedulers
|
|
|
|
|
|
|
|
|
|
- ring 0
|
|
|
|
|
- prioritization & timeslicing
|
|
|
|
|
|
|
|
|
|
drivers
|
|
|
|
|
|
|
|
|
|
filesystems
|
|
|
|
|
|
|
|
|
|
network filesystems
|
|
|
|
|
|
|
|
|
|
virtual memory / swap
|
|
|
|
|
|
|
|
|
|
strace
|
|
|
|
|
|
|
|
|
|
building a kernel
|
|
|
|
|
|
|
|
|
|
processes vs threads
|
|
|
|
|
|
|
|
|
|
interrupts & signals
|
|
|
|
|
|
|
|
|
|
select(), poll(), epoll
|
|
|
|
|
|
|
|
|
|
32-bit vs 64-bit
|
|
|
|
|
|
|
|
|
|
virtualization & virtual machines
|
|
|
|
|
|
|
|
|
|
realtime operating systems
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# GRAPHICS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The main way that people receive information from computers is through
|
|
|
|
|
visually presentation on a flat, vertical surface in front of the user.
|
|
|
|
|
It's important for a computer scientist to understand how computers
|
|
|
|
|
prepare text, pictures, movies, and 3D information for a human user's
|
|
|
|
|
consumption and at a basic level how display devices work.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
raster versus vector, CRT vs LCDs
|
|
|
|
|
|
|
|
|
|
anti-aliasing, shape-drawing, Painter's Method, z-buffering
|
|
|
|
|
|
|
|
|
|
fonts & typography, kerning, postscript, ClearType
|
|
|
|
|
|
|
|
|
|
camera sensors, RAW format
|
|
|
|
|
|
|
|
|
|
perceptual coding & compression
|
|
|
|
|
|
|
|
|
|
picture encoding - BMP, GIF, JPG, PNG
|
|
|
|
|
|
|
|
|
|
video encoding - MPEG, AVI, MOV
|
|
|
|
|
|
|
|
|
|
3D: raytracers vs rasterizers, shaders
|
|
|
|
|
|
|
|
|
|
- matrix transforms
|
|
|
|
|
|
|
|
|
|
modern graphics cards
|
|
|
|
|
|
|
|
|
|
graphing information
|
|
|
|
|
|
|
|
|
|
usability & user-centric design
|
|
|
|
|
|
|
|
|
|
# AUDIO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
While graphics form the principal method for computers to present
|
|
|
|
|
information to humans, most modern computers are equipped with the
|
|
|
|
|
ability to generate audio. It is useful to understand how computers
|
|
|
|
|
record, compress, transmit, and play audio.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- MIDI
|
|
|
|
|
- WAV, sampling rate / bit depth
|
|
|
|
|
- band-pass filters
|
|
|
|
|
- basics of perceptual coding
|
|
|
|
|
- fourier transforms
|
|
|
|
|
- fft & dft, mdct
|
|
|
|
|
- signal processing & compression
|
|
|
|
|
- MP3
|
|
|
|
|
- Speech compression (ACELP.NET, GSM)
|
|
|
|
|
- 5.1 sound
|
|
|
|
|
- THX
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ARTIFICIAL INTELLIGENCE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
While computer intelligence works in a very different fashion than human
|
|
|
|
|
intelligence, we can teach computers to attack complicated problems in
|
|
|
|
|
logical ways. We can even teach computers to self-improve, modelling
|
|
|
|
|
decision functions after neurons. Knowing how to make computers
|
|
|
|
|
"artificially intelligent" and good decisionmakers is an important tenet
|
|
|
|
|
of modern computer science.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- Markov Chains
|
|
|
|
|
- Baysian Networks
|
|
|
|
|
- A\* Search
|
|
|
|
|
- Heuristics, Local Minima
|
|
|
|
|
- Neural Networks
|
|
|
|
|
- Simulated Annealing
|
|
|
|
|
- Genetic Algorithms
|
|
|
|
|
|
|
|
|
|
# CRYPTOGRAPHY
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
While techniques for keeping messages secret and verifying their
|
|
|
|
|
correctness and authenticity extend back thousands of years, new
|
|
|
|
|
mathematical techniques have become available in the past few decades
|
|
|
|
|
that enable much more powerful methods for verifying the identity of
|
|
|
|
|
someone you've never met before and even exchanging secret information
|
|
|
|
|
without having to have a meeting in advance to agree on a private
|
|
|
|
|
protocol. Knowing how data can be made secure against tampering or
|
|
|
|
|
discovery is a critical component of any system that handles
|
|
|
|
|
confidential data.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- Caesar Ciphers & ROT-13
|
|
|
|
|
- One-time pads
|
|
|
|
|
- Hashes (MD5 & SHA-1)
|
|
|
|
|
- Symmetric Cryptography
|
|
|
|
|
- Public Keys
|
|
|
|
|
- Galois Fields & ECC
|
|
|
|
|
- Digital Signatures
|
|
|
|
|
- Kerberos
|
|
|
|
|
- Zero-knowledge proofs
|
|
|
|
|
- Mixmasters
|
|
|
|
|
- Steganography
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## SEE ALSO
|
|
|
|
|
|
|
|
|
|
# NETWORKING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Most modern computer owners know that a computer is a lot less valuable
|
|
|
|
|
when not connected to thet network. The rapid exchange of information,
|
|
|
|
|
personal connections, and ideas through computer networks allow people
|
|
|
|
|
to be in touch with each other and participating in a global economy of
|
|
|
|
|
ideas on a continuous basis. Understanding how different kinds of
|
|
|
|
|
information are transmitted across a computer network will help students
|
|
|
|
|
build systems that make effective use of networks and diagnose problems
|
|
|
|
|
with network applications.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- Ethernet
|
|
|
|
|
- OSI 7-layer stack
|
|
|
|
|
- Switches, Hubs, Routers & Managed vs Unmanaged
|
|
|
|
|
- IP: DHCP & BOOTP
|
|
|
|
|
- UDP: DNS & NTP
|
|
|
|
|
- TCP: 3-Way Handshake, Windows, Buffers, Nagle's Algorithm, Lingering
|
|
|
|
|
CLose
|
|
|
|
|
- SMTP & Email infrastructure
|
|
|
|
|
- HTTP & Proxies
|
|
|
|
|
- SSL / HTTPS
|
|
|
|
|
- BGP, Routing
|
|
|
|
|
|
|
|
|
|
# SECURITY
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Now that you know about how computer systems are designed to operate, it
|
|
|
|
|
is important to study how accidents (even small things overlooked) in
|
|
|
|
|
the design of computer systems can lead to their compromise by
|
|
|
|
|
intelligent attackers armed with tools of increasing sophistication.
|
|
|
|
|
Attacks are possible on many levels, including physical penetration,
|
|
|
|
|
social engineering, internal compromise, password guessing, and
|
|
|
|
|
network-level attacks.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## PROGRAMS
|
|
|
|
|
|
|
|
|
|
- [WireShark](http://www.wireshark.org/) (sniffer, free download,
|
|
|
|
|
formerly known as Ethereal)
|
|
|
|
|
- [Tor](http://www.torproject.org/) (onion router, free download)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- Viruses
|
|
|
|
|
- Worms
|
|
|
|
|
- Keysniffers & Dongles
|
|
|
|
|
- Man in the Middle
|
|
|
|
|
- [Phishing](http://en.wikipedia.org/wiki/Phishing)
|
|
|
|
|
- Brute Force Attacks
|
|
|
|
|
- Stack Smashing
|
|
|
|
|
- [Fuzzing](http://en.wikipedia.org/wiki/Fuzz_testing)
|
|
|
|
|
- Phreaking &
|
|
|
|
|
[Redboxing](http://en.wikipedia.org/wiki/Red_box_%28phreaking%29)
|
|
|
|
|
- Traffic Analysis
|
|
|
|
|
- Proxies & Onion Routing, [Tor](http://www.torproject.org/)
|
|
|
|
|
- Social Hacking
|
|
|
|
|
- Sniffers
|
|
|
|
|
- IDS
|
|
|
|
|
- Tripwire
|
|
|
|
|
- Kernel Hardening
|
|
|
|
|
- [XSS](http://en.wikipedia.org/wiki/Cross-site_scripting) &
|
|
|
|
|
[XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
|
|
|
|
|
- [DNS Poisoning](http://en.wikipedia.org/wiki/Dns_poisoning)
|
|
|
|
|
- Zombies & Botnets
|
|
|
|
|
- Hacker culture: IRC, Defcon, 2600
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# DATABASES
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Relational databases like Oracle, MySQL, Postgres, and DB2 underlie
|
|
|
|
|
nearly every significant information repository on the planet.
|
|
|
|
|
Understanding how these databases work and how to efficiently store and
|
|
|
|
|
retrieve data is critical for modern programmers.
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
# MODERN WEB APPLICATION PROGRAMMING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Modern web application programming requires use of new tools and
|
|
|
|
|
techniques to address the peculiarities of client-server programming in
|
|
|
|
|
the land of the browser. Browsers are adopting more comprehensive
|
|
|
|
|
standards of higher quality and are more rigorously adhering to them,
|
|
|
|
|
allowing developers to make ever-more sophisticated applications
|
|
|
|
|
available to users.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
The DOM, DHTML, CSS
|
|
|
|
|
|
|
|
|
|
Javascript
|
|
|
|
|
|
|
|
|
|
AJAX (dojo, mootools, prototype, yui)
|
|
|
|
|
|
|
|
|
|
- Examining Google Maps & GMail
|
|
|
|
|
|
|
|
|
|
Comet
|
|
|
|
|
|
|
|
|
|
- Examining Meebo
|
|
|
|
|
|
|
|
|
|
Widgets (flash, iframe, and js)
|
|
|
|
|
|
|
|
|
|
OpenID & OAuth
|
|
|
|
|
|
|
|
|
|
webhooks
|
|
|
|
|
|
|
|
|
|
RSS & Atom
|
|
|
|
|
|
|
|
|
|
Facebook applications
|
|
|
|
|
|
|
|
|
|
Standalone: TiddlyWiki
|
|
|
|
|
|
|
|
|
|
Offline: Google Gears & AIR
|
|
|
|
|
|
|
|
|
|
SEO: sitemaps & robots.txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# GOING BIG: PRACTICAL SCALING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Once an application is built and begins to become popular, the
|
|
|
|
|
techniques required to make the application available to a large number
|
|
|
|
|
of people, be resilient to attacks, and maintain a low per-user
|
|
|
|
|
operational cost comprise one of the most rapidly-evolving fields of
|
|
|
|
|
computer science.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
loadbalancers
|
|
|
|
|
|
|
|
|
|
filers
|
|
|
|
|
|
|
|
|
|
hosting & colocation
|
|
|
|
|
|
|
|
|
|
distributed transations
|
|
|
|
|
|
|
|
|
|
robust queues
|
|
|
|
|
|
|
|
|
|
virtualization
|
|
|
|
|
|
|
|
|
|
partitioning
|
|
|
|
|
|
|
|
|
|
heartbeats / round-robin
|
|
|
|
|
|
|
|
|
|
[Paxos](http://en.wikipedia.org/wiki/Paxos_algorithm)
|
|
|
|
|
|
|
|
|
|
Modern Cluster Tools
|
|
|
|
|
|
|
|
|
|
- LJ: mogilefs, memcached, perlbal
|
|
|
|
|
- GOOG: [BigTable](http://labs.google.com/papers/bigtable.html),
|
|
|
|
|
[GFS](http://labs.google.com/papers/gfs.html),
|
|
|
|
|
[MapReduce](http://labs.google.com/papers/mapreduce.html),
|
|
|
|
|
[Chubby](http://labs.google.com/papers/chubby.html)
|
|
|
|
|
- AMZN: [EC2](http://aws.amazon.com/ec2),
|
|
|
|
|
[S3](http://aws.amazon.com/s3)
|
|
|
|
|
- YHOO: [Hadoop](http://hadoop.apache.org/core/)
|
|
|
|
|
|
|
|
|
|
Resisting Abuse
|
|
|
|
|
|
|
|
|
|
- DDOS Mitigation
|
|
|
|
|
- CAPTCHAs
|
|
|
|
|
- Reputation Systems
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# MOBILE APPLICATIONS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Making computer programs available for use on highly portable computers
|
|
|
|
|
requires knowledge of new protocols and techniques unique to the "cell
|
|
|
|
|
phone" industry. Learning how to effectively integrate cell phones into
|
|
|
|
|
an application can greatly enhance your application's reach and
|
|
|
|
|
usefulness.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- what is spectrum / RF?
|
|
|
|
|
- antennas
|
|
|
|
|
- bandwidth
|
|
|
|
|
- GSM / CDMA
|
|
|
|
|
- WiFi / 802.11n / WiMAX
|
|
|
|
|
- SMS
|
|
|
|
|
- WAP
|
|
|
|
|
- Java apps
|
|
|
|
|
- iPhone Dev Kit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SOFTWARE ENGINEERING
|
|
|
|
|
|
|
|
|
|
While Computer Science concerns itself with the theory of software,
|
|
|
|
|
Software Engineering concerns itself with the real-world pragmatics of
|
|
|
|
|
building large software systems, attempting to answer the question of
|
|
|
|
|
how you can build the highest-quality software in the shortest time with
|
|
|
|
|
the most limited of resources. A programmer is the person who actually
|
|
|
|
|
implements such systems. By way of analogy to building bridges, the
|
|
|
|
|
programmer is a metalworker, the software engineer is an architect who
|
|
|
|
|
designs the bridge and ensures its proper construction, and the computer
|
|
|
|
|
scientist is the materials scientist who researches better steel.
|
|
|
|
|
|
|
|
|
|
## READING
|
|
|
|
|
|
|
|
|
|
## TOPICS
|
|
|
|
|
|
|
|
|
|
- Process Development
|
|
|
|
|
- Defect Tracking
|
|
|
|
|
- Change Management
|
|
|
|
|
- Testing (Unit Tests, Whitebox Testing, Blackbox Testing, Load Tests)
|
|
|
|
|
- Continuous Integration
|
|
|
|
|
- Extreme Programming
|
|
|
|
|
- Agile Development
|
|
|
|
|
- Scrum
|