Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

What every computer science major should know by Mind Map: What every computer science
major should know
5.0 stars - 11 reviews range from 0 to 5

What every computer science major should know

http://matt.might.net/articles/what-cs-majors-should-know/

build a portfolio

publicly browsable code

per-project page

github or Google code

Technical communication

An engineering core

physics through electromagnetism

take up through multivariate calculus

differential equations

probability

linear algebra

statistics

The Unix philosophy

emphasizes linguistic abstraction and composition in order to effect computation

command-line computing

IDE-less software development

text-file configuration

recommendations

navigate and manipulate the filesystem

compose processes with pipes

comfortably edit a file with emacs and vim

create, modify and execute a Makefile for a software project

write simple shell scripts

Systems administration

Install and administer a Linux distribution

Configure and compile the Linux kernel

Troubleshoot a connection with dig, ping and traceroute

Compile and configure a web server like apache

Compile and configure a DNS daemon like bind

Maintain a web site with a text editor

Cut and crimp a network cable

Programming languages

best way to learn how to learn progamming languages is to learn multiple programming languages and programming paradigms

difficulty of learning the nth language is half the difficulty of the (n-1)th

every computer science major should implement an interpreter

Ideally, every computer science major would take a compilers class

specific languages

Racket (dialect of Lisp)

C

Javascript

Squeak

Java

Satandard ML

Prolog

Scala

Haskell

C++

Assembly

recommendations

generative programming (macros)

lexical (and dynamic) scope

closures

continuations

higher-order functions

dynamic dispatch

subtyping

modules and functors

monads as semantic concepts distinct from any specific syntax

Discrete mathematics

formal mathematical notation

sets

tuples

sequences

functions

power sets

trees

graphs

formal languages

automata

learn enough number theory to study and implement common cryptographic protocols

Data structures and algorithms

how to design algorithms

greedy

dynamic strategies

know both the imperative and functional versions of each algorithm

hash tables

linked lists

trees

binary search trees

directed and undirected graphs

Theory

Computational complexity

understand the difference between P, NP, NP-Hard and NP-Complete

models of computation

finite-state automata

regular languages (and regular expressions)

pushdown automata

context-free languages

formal grammars

Turing machines

lambda calculus

undecidability

Architecture

understand a computer from the transistors up

standard levels of abstraction

transistors

gates

adders

adders

flip flops

ALUs

control units

caches

RAM

GPU model of high-performance computing

recommendations

design and simulate a small CPU

Operating systems

recommendations

print "hello world" during the boot process

design their own scheduler

modify the page-handling policy

create their own filesystem

kernel

system calls

paging

scheduling

context-switching

filesystems

internal resource management

Networking

network stack and routing protocols within a network

mechanics of building an efficient, reliable transmission protocol (like TCP) on top of an unreliable transmission protocol (like IP)

understand the trade-offs involved in protocol design--for example, when to choose TCP and when to choose UDP

understand exponential back off in packet collision resolution and the additive-increase multiplicative-decrease mechanism involved in congestion control

recommendations

protocols, 802.3 and 802.11, IPv4 and IPv6, DNS, SMTP and HTTP

implement, an HTTP client and daemon, a DNS resolver and server, a command-line SMTP mailer

network sniffing w wireshark

Security

social engineering

buffer overflows

integer overflow

code injection vulnerabilities

race conditions

privilige confusion

Cryptography

Understand

symmetric-key cryptosystems

public-key cryptosystems

secure hash functions

challenge-response authentication

digital signature algorithms

threshold cryptosystems

recommendations

breaking ciphertext using pre-modern cryptosystems with hand-rolled statistical tools

implemment RSA

create their own digital certificate and set up https in apache

write a console web client that connects over SSL

know how to use GPG

know how to use public-key authentication for ssh

know how to encrypt a directory or a hard disk

Software testing

User experience design

Visualization

Parallelism

architecture

multicore

caches

buses

GPUs

CUDA

OpenCL

map-reduce

Software engineering

version control

debugging tools

Formal methods

be at least moderately comfortable using one theorem prover

Graphics and simulation

Simple ray tracers can be constructed in under 100 lines of code

Data structures like BSP trees and algorithms like z-buffer rendering are great examples of clever design

It's good mental hygiene to work out the transformations necessary to perform a perspective 3D projection in a wireframe 3D engine

Machine learning

Bayesian networks

clustering

decision-tree learning

Databases

Relational algebra

relational calculus