<center> # The Full-Stack Developer Checklist *Originally published 2017-08-25 on [reddit.com/r/cscareerquestions](https://www.reddit.com/r/cscareerquestions/comments/677yf5/the_skills_required_to_be_a_fullstack_engineer/) as a self-post.* This is a follow-up to my earlier comment breaking down [all the possible CS-related job titles](https://www.reddit.com/r/cscareerquestions/comments/36kbe3/what_are_the_main_different_type_of_programming/creq1x8/). </center> --- This is a partial list of things I think are important to explore on the journey to becoming a senior "full-stack" engineer. It's similar to this [great comment](https://www.reddit.com/r/cscareerquestions/comments/1wkwg5/what_do_employers_expect_an_entry_level_developer/cf3e9o0/?utm_content=permalink&utm_medium=front&utm_source=reddit&utm_name=cscareerquestions) by /u/algaerithm, but with more structure. If you don't know what some of these things are, don't worry, you can still be a real developer! If asked me right now to write the code for a triangle in SVG, I wouldn't be able to do it, but I'd know where to start googling to find out how. This list is a rough map of buzzwords that make up the peaks of the CS terrain. You don't have to *know* everything about each subfield, but you should at least know they exist. If you know more things than this, awesome, comment with your suggestions! --- I learned these in the order #4, #5, #3, #1, #2, #6, #7, but I think CS students in a university will typically learn them in the 1-7 order, which is pretty bonkers to think about. 1. Algorithms & data structures implementation, time complexity, & ability to use these in at least a couple languages - arrays - vectors - graphs & trees - hash tables & sets - tries & indexes - queues - bogosort (bonus) 2. Compilers - turing completeness - types of languages - parsing - lisp & macros - virtual machines & bytecode - static optimizing & JITs - basic type theory - OCaml/Haskell/fortran (bonus) 3. Design Patterns - Object-oriented - functional - declarative/reactive vs imperative - concurrency (locks,threads,fork) - state machines - queue & dispatch model - MVC 4. DevOps - basic familiarity with linux, BSD, & DOS style systems - bash/zsh/fish - (gnu) core utils - apt/homebrew/yum/nix, npm/pip/cargo/etc. - git - ssh, sftp, port-forwarding - nginx/apache/etc. Thorough understanding of at least one kind of webserver's operation. - alerting & logging - VMs, chroots, containers - ansible/puppet/chef/dockerfile etc. 5. Webdev - Backend - Thorough undertanding of at least one backend stack, e.g.: Django, Bottle, Flask, Rails, Clojure, etc. - Unit testing & CI - HTTP/HTTPS/HTTP2 (see networking section below) - webservers, cdns, & caching proxies - CGI/WSGI/FPM/etc. - SQL and/or an ORM - data migrations - redis & kv stores - caching & invalidation - Frontend - HTML, CSS, & the DOM - JS (ES6) - Responsive Design - basic Canvas & SVG - Accessibility - Security - unix permissions model (sudo make me a sandwich) - firewalls - fail2ban - log management - nc, nmap, hydra, jacktheripper, etc. - RSA, diffie hellman, elliptic-curve, etc. cryptography - HTTPS, TLS, SSL, SSH - xss, csrf & injection attacks - CSP, refferers, HSTS, and other headers - rate limiting - DoS protection (bonus) - Networking - Ethernet & multiplexing - IPv4 & IPv6 - TCP/UDP & broadcast/multicast/unicast - HTTP - request/response lifecycle - cookies & headers - REST vs SOAP vs JSON - gzip, byte-range requests (bonus) - websockets/webrtc - iptables & routing 6. Math & Science - discrete math - basic stats? (I don't know much stats unfortunately...) - basic linear algebra - linear regression & the concept of exploring/transforming input spaces - neural networks - backpropagation - RBMs & page-rank - ipython & jupyter - proof of stake - bloom filters - etc. comment with suggestions 7. Systems & DBs - consensus - transaction isolation levels - how CPU cores and memory work together - shared memory & multi-leveled caches - blockchains & proof-of-work (bonus) - raft & paxos (bonus) - double-indexes (bonus) - distributed indexes (lucene) - SQL vs NoSQL tradeoffs Bonus Points: - make a hello world app on android - make a hello world app on iOS - hello world GUI apps on macOS/windows/linux - implement something in a macro language - implement a new language w/ a parser - create an web-app using only JS and SQL as a backend - hardware! - current, power, voltage, etc. - semiconductors - resistors, capacitors, transistors, etc. - adders, shift registers, timers, etc. - microcontrollers - dealing with IO, serial ports, debouncing, etc. - LEDs, lasers, etc. --- **As you learn CS, make lists like this on your own!** Mapping out your knowledge helps you retain it, and it's good practice for teaching!