tags : Design Patterns
Pragmatic
Invariants
An invariant is any logical rule that must be obeyed throughout the execution of your program that can be communicated to a human, but not to your compiler.
- Invariants are bad. Every invariant of this kind that you remove from your code is an improvement, because it lowers the cognitive load of working with it.
- See What are invariants
- What is an Invariant?
Opinions
What a well rounded engineer should know
Source: The Well Rounded Engineer - Speaker Deck
- Get rid of the trial and error method, instead take the analytical approach
- Learn to read research papers
- In general, proficiency is about understanding trade-offs
- Language
- Be proficient in two paradigms. (Eg. FP and OOP)
- DB
- Basic skills: Model your data, Be performance aware, Write raw SQL
- Advanced skills: Idiomatic design, Be operations aware, Grok SQL
- Protocol
- Be proficient in using two protocols (Eg. TCP/IP, HTTP, TLS)
- Understand: How it works, How to debug it, Design considerations
- SW Arch
- Understand how to design commonly used systems (Eg. Workers, Queues, Async Systems, Data pipeline, Load balancers)
- Compilers
- Ability to write toy compilers, interpreters, parsers is helpful
- Start with parsers, then interpreters and then compilers
- Recursive Descent parsers open you up to a whole new coding style
- Write simple games
- Changing requirements and specific set of rules
- Make small games
- Try from first principles, Avoid frameworks
- Once you write the game, write a bot that plays the game
- Algo&DS
- Understand fundamental approach of solving problems recursively
- Understand master method to analyse recursive solutions
Systems Engineering
- Be explicit about what you are building
- Be explicit about how you are building it