Information Technology

Comienza Ya. Es Gratis
ó regístrate con tu dirección de correo electrónico
Information Technology por Mind Map: Information Technology

1. Systems administration

1.1. Install and administer a Linux distribution

1.2. Configure and compile the Linux kernel

1.3. Troubleshoot a connection with dig, ping and traceroute

1.4. Compile and configure a web server like apache

1.5. Compile and configure a DNS daemon like bind

1.6. Maintain a web site with a text editor

1.7. Cut and crimp a network cable

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

3. Data structures and algorithms

3.1. how to design algorithms

3.1.1. greedy

3.1.2. dynamic strategies

3.2. know both the imperative and functional versions of each algorithm

3.3. hash tables

3.4. linked lists

3.5. trees

3.6. binary search trees

3.7. directed and undirected graphs

4. Programming languages

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

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

4.3. every computer science major should implement an interpreter

4.4. Ideally, every computer science major would take a compilers class

4.5. specific languages

4.5.1. Racket (dialect of Lisp)

4.5.2. C

4.5.3. Javascript

4.5.4. Squeak

4.5.5. Java

4.5.6. Satandard ML

4.5.7. Prolog

4.5.8. Scala

4.5.9. Haskell

4.5.10. C++

4.5.11. Assembly

4.6. recommendations

4.6.1. generative programming (macros)

4.6.2. lexical (and dynamic) scope

4.6.3. closures

4.6.4. continuations

4.6.5. higher-order functions

4.6.6. dynamic dispatch

4.6.7. subtyping

4.6.8. modules and functors

4.6.9. monads as semantic concepts distinct from any specific syntax

5. Discrete mathematics

5.1. formal mathematical notation

5.2. sets

5.3. tuples

5.4. sequences

5.5. functions

5.6. power sets

5.7. trees

5.8. graphs

5.9. formal languages

5.10. automata

5.11. learn enough number theory to study and implement common cryptographic protocols

6. build a portfolio

6.1. publicly browsable code

6.2. per-project page

6.3. github or Google code

7. User experience design

8. Visualization

9. Cryptography

9.1. Understand

9.1.1. symmetric-key cryptosystems

9.1.2. public-key cryptosystems

9.1.3. secure hash functions

9.1.4. challenge-response authentication

9.1.5. digital signature algorithms

9.1.6. threshold cryptosystems

9.2. recommendations

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

9.2.2. implemment RSA

9.2.3. create their own digital certificate and set up https in apache

9.2.4. write a console web client that connects over SSL

9.2.5. know how to use GPG

9.2.6. know how to use public-key authentication for ssh

9.2.7. know how to encrypt a directory or a hard disk

10. Security

10.1. social engineering

10.2. buffer overflows

10.3. integer overflow

10.4. code injection vulnerabilities

10.5. race conditions

10.6. privilige confusion

11. Theory

11.1. Computational complexity

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

11.2. models of computation

11.2.1. finite-state automata

11.2.2. regular languages (and regular expressions)

11.2.3. pushdown automata

11.2.4. context-free languages

11.2.5. formal grammars

11.2.6. Turing machines

11.2.7. lambda calculus

11.2.8. undecidability

12. Architecture

12.1. understand a computer from the transistors up

12.2. standard levels of abstraction

12.2.1. transistors

12.2.2. gates

12.2.3. adders

12.2.4. adders

12.2.5. flip flops

12.2.6. ALUs

12.2.7. control units

12.2.8. caches

12.2.9. RAM

12.3. GPU model of high-performance computing

12.4. recommendations

12.4.1. design and simulate a small CPU

13. The Unix philosophy

13.1. emphasizes linguistic abstraction and composition in order to effect computation

13.2. command-line computing

13.3. IDE-less software development

13.4. text-file configuration

13.5. recommendations

13.5.1. navigate and manipulate the filesystem

13.5.2. compose processes with pipes

13.5.3. comfortably edit a file with emacs and vim

13.5.4. create, modify and execute a Makefile for a software project

13.5.5. write simple shell scripts

14. An engineering core

14.1. physics through electromagnetism

14.2. take up through multivariate calculus

14.3. differential equations

14.4. probability

14.5. linear algebra

14.6. statistics

15. Parallelism

15.1. architecture

15.1.1. multicore

15.1.2. caches

15.1.3. buses

15.1.4. GPUs

15.2. CUDA

15.3. OpenCL

15.4. map-reduce

16. Software engineering

16.1. version control

16.2. debugging tools

17. Formal methods

17.1. be at least moderately comfortable using one theorem prover

18. Graphics and simulation

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

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

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

19. Databases

19.1. Relational algebra

19.2. relational calculus

20. Machine learning

20.1. Bayesian networks

20.2. clustering

20.3. decision-tree learning

21. Technical communication

22. Operating systems

22.1. recommendations

22.1.1. print "hello world" during the boot process

22.1.2. design their own scheduler

22.1.3. modify the page-handling policy

22.1.4. create their own filesystem

22.2. kernel

22.2.1. system calls

22.2.2. paging

22.2.3. scheduling

22.2.4. context-switching

22.2.5. filesystems

22.2.6. internal resource management

23. Software testing

24. Networking

24.1. network stack and routing protocols within a network

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

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

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

24.5. recommendations

24.5.1. protocols

24.5.1.1. 802.3 and 802.11

24.5.1.2. IPv4 and IPv6

24.5.1.3. DNS, SMTP and HTTP

24.5.2. implement

24.5.2.1. an HTTP client and daemon

24.5.2.2. a DNS resolver and server

24.5.2.3. a command-line SMTP mailer

24.5.3. network sniffing w wireshark