<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!
Recent posts:
- So you want to build a social network?
- Mastering Project Estimation
- Typescript Validators Jamboree
- Revolutionize Animation: Build a Digital Human with Large Language Models
- View more posts...
Back to top