Job Requirements

  1. Has mastered the fundamentals and is deepening their technical knowledge
  2. Abides by and enforces standards on a team
  3. Knows at least two programming languages
  4. Is developing a discipline for writing tests, particularly for complicated code

Learning Roadmap

Learning Roadmap in rough priority order:

  1. Learn both JavaScript and Python
  2. Learn Domain-Driven Design and practice it on a software project
  3. Learn about the different types of tests, how to write them, and practice writing them:
    1. Unit Tests
    2. Integration Tests
    3. End-to-end (e2e) Tests
  4. Learn computing and programming history
    1. Origins of computing: Babbage, Von Neumann, and Turing
    2. Timeline of programming language development and major languages
    3. History and development of Object-Oriented Programming
    4. History of the Internet/Prominent People
      1. Paul Graham, founder of Viaweb and Y Combinator
      2. Brendan Eich, creator of JavaScript
      3. Guido van Rossum, creator of Python
    5. History, development, and prominent figures of software development methodologies
      1. Martin Fowler
      2. Kent Beck
      3. Robert Martin
      4. Fred Brooks
    6. Other people to know/follow
      1. Alan Kay
      2. John Carmack
      3. Joel Spolsky
  5. Virtualization, Containerization and tools
    1. Oracle VirtualBox
    2. VMWare
    3. HyperV
    4. Docker
    5. Kubernetes
  6. Load testing and tools
    1. Loader.io
    2. JMeter
    3. Siege
    4. Apache Bench
  7. Encryption Topics
    1. Symmetric/Asymmetric keys
    2. Hashing & Signatures
    3. SSL/TLS
    4. RSA
    5. GPG
  8. The “two generals” problem and idempotency
  9. Atomic transactions
  10. Set up a live error monitoring tool
    1. Sentry
    2. Rollbar
  11. Set up a live uptime and performance monitoring tool
    1. Pingdom
    2. New Relic
  12. Learn useful programming maxims and practice applying them. Understand that they are useful for decision-making, but are dangerous if not used thoughtfully:
    1. The Zen of Python
    2. Don’t repeat yourself
    3. Premature optimization is the root of all evil
    4. Flat is better than nested
    5. Favor object composition over inheritance
    6. A foolish consistency is the hobgoblin of little minds...
    7. … and you’ll find plenty more on Google
  13. Understand profiling and instrumentation and tools
    1. New Relic