Online Mind Mapping and Brainstorming

Create your own awesome maps

Online Mind Mapping and Brainstorming

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

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

recommendations

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

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

models of computation

Architecture

understand a computer from the transistors up

standard levels of abstraction

GPU model of high-performance computing

recommendations

Operating systems

recommendations

kernel

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

Security

social engineering

buffer overflows

integer overflow

code injection vulnerabilities

race conditions

privilige confusion

Cryptography

Understand

recommendations

Software testing

User experience design

Visualization

Parallelism

architecture

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