21 KiB
Table of Contents
- Professional Programming
- Must read books
- Must-read articles
- Other general material
- Topics
- Algorithm and data structures
- Attitude, habits, mindset
- Career growth
- Characters sets
- Coding
- Computer science
- Databases
- Debugging
- Design (visual, UX, UI)
- Design patterns & anti-patterns (OOP)
- Dev environment & tools
- Dotfiles
- Editors & IDE
- Incident response (alerting, outages, firefighting)
- Internet
- Interviewing
- Learning
- Programming language
- Reading
- Releasing & deploying
- Security
- Shell
- System architecture
- Testing
- Version control (Git)
- Webdesign
- Writing for performance
- Concepts
Professional Programming
Give me six hours to chop down a tree and I will spend the first four sharpening the axe. (Abraham Lincoln)
A collection of full-stack resources for programmers.
The goal of this page is to make you a more proficient developer. You'll find only resources that I've found truly inspiring, or that have been become timeless classics.
Must read books
I've found these books incredibly inspiring:
- The Pragmatic Programmer: From Journeyman to Master: hands-on the most inspiring and useful book I've read about programming.
- Code Complete: A Practical Handbook of Software Construction: a nice addition to The Programatic Programmer, gives you the necessary framework to talk about code.
- Release It!: this books goes beyond code and gives you best practices for building production-ready software. It will give you about 3 years worth of real-world experience.
- Scalability Rules: 50 Principles for Scaling Web Sites
- The Linux Programming Interface: A Linux and UNIX System Programming Handbook: outside of teaching you almost everything you need to know about Linux, this book will give you insights into how software evolves, and the value of having simple & elegant interfaces.
There are some free books available, including:
- Professional software development: pretty complete and a good companion to this page. The free chapters are mostly focused on software development processes: design, testing, code writing, etc. - and not so much about tech itself.
- List of free programming books
Must-read articles
- Practical Advice for New Software Engineers
- On Being A Senior Engineer
- Lessons Learned in Software Development: one of those articles that give you years of hard-earned lessons, all in one short article. Must read.
- Signs that you're a good programmer
- Signs that you're a bad programmer
Other general material
- The Imposter's Handbook - $30. From the author: "Don't have a CS Degree? Neither do I - That's why I wrote this book."
Topics
Algorithm and data structures
- Read the CLRS. You can watch and download the course on OCW - there are newer courses as well.
- Or The Algorithm Design Manual
- Try out some algorithms on Project Euler
Let's be honest: algo can be a pretty dry topic. This quora question lists some funnier learning alternative, including:
Attitude, habits, mindset
- Mastering Programming, Kent Beck.
- The traits of a proficient programmer
- The tao of programming: a set of parables about programming.
Biases
Biases don't only apply to hiring. For instance, the fundamental attribution bias also applies when criticizing somebody's code written a long time ago, in a totally different context.
- Cognitive bias cheat sheet. #hiring
Career growth
- The Conjoined Triangles of Senior-Level Development looks into how to define a senior engineer.
- [
Characters sets
Coding
- Write code that is easy to delete, not easy to extend
- Lessons learned writing highly available code
- The Ten Commandments of Egoless Programming
Computer science
Databases
- A plain english introduction to CAP Theorem
- NOSQL Patterns
- NoSQL Databases: a Survey and Decision Guidance
- Safe Operations For High Volume PostgreSQL (this is for PostgreSQL but works great for other db as well).
- Zero downtime database migrations (code examples are using Rails but this works great for any programming language)
- SQL styleguide
Debugging
- Rubber Duck Problem Solving
- Rubber Ducking
- Five Whys
- The Infinite Hows: this provides a strong criticism of the five whys method.
- Linux Performance Analysis in 60,000 Milliseconds
Design (visual, UX, UI)
I highly recommend reading The Non-Designer's Design Book. This is a pretty short book that will give you some very actionable design advices.
- If you're working on data, Edward Tufte's The Visual Display of Quantitative Information is considered a classic.
- The Universal Principles of Design will give you enough vocabulary and concepts to describe design challenges into words.
- Microsoft's Rest API guidelines
- Book recommendations from HackerNews
Design patterns & anti-patterns (OOP)
Here's a list of good books:
- Design Patterns: Elements of Reusable Object-Oriented Software: dubbed "the gang of four", this is almost a required reading for any developer. A lot of those are a bit overkill for Python (because everything is an object, and dynamic typing), but the main idea (composition is better than inheritance) definitely is a good philosophy.
- Patterns of Enterprise Application Architecture: learn about how database are used in real world applications. Mike Bayer's SQLAlchemy has been heavily influenced by this book.
- SourceMaking's Design Patterns seems to be a good web resource too.
- O'Reilly's How to make mistakes in Python
- 101 Design Patterns & Tips for Developers
- Python Design Patterns: For Sleek And Fashionable Code: a pretty simple introduction to common design patterns (Facade, Adapter, Decorator). A more complete list of design patterns implementation in Python on Github. Also a book here.
I maintain a list of antipatterns on another repo. This is a highly recommended read.
- Inheritance vs. composition: a concrete example in Python. Another slightly longer one here. One last one, in Python 3.
- Composition Instead Of Inheritance
- 10 Modern Software Over-Engineering Mistakes
Dev environment & tools
Tools
- Glances: An eye on your system
- HTTPie: a CLI, cURL-like tool for humans
- jq: command-line JSON processor
- tmux: terminal multiplexer
- htop: an interactive process viewer for Linux
Dotfiles
Articles
Editors & IDE
- Sublime Text essential plugins and resources
- vim-awesome
- Bram Moolenaar (Vim author), Seven habits of effective text editing (presentation).
Incident response (alerting, outages, firefighting)
Internet
Interviewing
- All the best advice we could find on how to get a job
- System design interview for IT company
- Technical Interview Megarepo: study materials for SE/CS technical interviews
- How to Win the Coding Interview
- The elevator programming game
Learning
Learn how to learn!
- How I Rewired My Brain to Become Fluent in Math: subtitled the building blocks of understanding are memorization and repetition.
Programming language
This is language-specific, for instance, checkout my professional Python education doc.
I'd recommend learning:
- At least one dynamic language (Python, Ruby, JavaScript, etc.). Pretty useful for quick one-off automation scripts, and fastest to write for interviews.
- At least one compiled language (Java, C, C++, etc.)
- At least one more recent language to see where the industry is going (as of writing, Go, Swift, Rust, etc.)
- At least one language that has first-class support for functional programming (Haskell, Scala, etc.)
A bit more reading:
FP vs. OOP
Reading
- Papers we love: papers from the computer science community to read and discuss. Can be a good source of inspiration of solving your design problems.
Releasing & deploying
- How We Release So Frequently
- How to deploy software, Zach Holman
- BlueGreenDeployment, Martin Fowler
- Move fast and break nothing, Zach Holman
- Flipping out, flickr. One of the first articles about feature flags.
Security
Shell
Resources
System architecture
- High Scalability: great blog about system architecture, its weekly review article are packed with numerous insights and interesting technology reviews. Checkout the all-times favorites.
- 6 Rules of thumb to build blazing fast web server applications
- Deep Lessons From Google And EBay On Building Ecosystems Of Microservices
- Service oriented architecture: scaling the Uber engineering codebase as we grow
- The twelve-factor app
- Scalable Web Architecture and Distributed Systems
- Introduction to Architecting Systems for Scale
- A Distributed Systems Reading List
- Services Engineering Reading List
- System Design Cheatsheet
- The Log: What every software engineer should know about real-time data's unifying abstraction: one of those classical articles that everyone should read.
Scalability
- I already mentioned the book Scalability rules above, but there's also a presentation about it.
Stability
- I already mentioned the book Release it! above. There's also a presentation from the author.
Resiliency
- The Walking Dead - A Survival Guide to Resilient Applications
- Defensive Programming & Resilient systems in Real World (TM)
- Full Stack Fest: Architectural Patterns of Resilient Distributed Systems
Testing
- Testing Strategies in a Microservices Architecture (Martin Fowler) is an awesome resources explaining how to test a service properly.
- A Quick Puzzle to Test Your Problem Solving... and a great way to learn about confirmation bias and why you're mostly writing positive test cases.
- The test pyramid
- Just Say No to More End-to-End Tests
- End-To-End Testing Considered Harmful
- Move fast and don't break things (presentation)
- Eradicating Non-Determinism in Tests, Martin Fowler