In order to progress professionally and grow as a human being, it’s essential to become a lifelong learner. That’s why i decided to organize a personal study plan. I also decided to share the list of materials I’ve put together because I realized it could be useful to anyone looking to further develop their skills as backend engineers.
The importance of unbounded learning for software engineers cannot be overstated. The Internet has an ever growing impact on our way to understand new technologies and the systems around us, and it can have a great impact in our careers.
In this guide, my goal is to present study material for skills at Senior (algorithms, data structure, system design) and Staff Engineers (soft skills, leadership, business relationship) level.
- Structures code in a manner that anticipates the type of scale and maintenance required for the scope of the work. Considers legibility both in authoring and reviewing pull requests.
- Strives to reduce technical debt, while communicating with teammates about any larger refactor.
- Defines and executes on an execution plan for specific features or internal system maintenance/upgrade.
- Actively participates in Engineering efforts that help streamline the experience of our Product.
When we take more responsibilities on our careers, so does the complexity of the systems we need to navigate. As a mid or senior level engineer, you will be expected to have knowledge on designing and building large systems. System design can be split in two different categories: Low Level Design (class design, design patterns, OOP, SOLID) and High Level Design (fault tolerance, high availability, data flow, downtime).
“In the case of natural languages, the linguists Sapir and Whorf hypothesize a relationship between the expressive power of a language and the ability to think certain thoughts. The Sapir-Whorf hypothesis says that your ability to think a thought depends on knowing words capable of expressing the thought. If you don’t know the words, you can’t express the thought and you might not even be able to formulate it (Whorf 1956)” - Code Complete
|Cracking the Coding Interview||Book|
|Algoritmos em Linguagem C (PT-BR)||Book|
|Algorithms - Thomas Cormen||Book|
|Introduction to Theoretical Computer Science||Book|
|Time Complexity in Python||Guide|
|Algorithmic complexity | Big-O||Guide|
|Tech Interview - Algorithms||Guide|
|Rosalind - Bioinformatics Algorithms||Tests|
|Teach Yourself Computer Science||Course|
|Harvard - CS50: Introduction to Computer Science||Course|
|Structure and Interpretations of Computer Programs||Book|
At this point, the majority of one’s time is spent scaling their own skills to help others.
- Creates and maintains internal documentation for the purpose and structure of the systems they’re working on. Carefully documents processes that aren’t clear.
- Teaches peers how to set up systems and drive execution plans for features and system improvements.
- Keeps the team moving quickly by working on engineering efforts that aren’t glamorous.
- Pro actively communicates issues and addresses necessary trade-offs. Takes ownership of issues.
Related: Essays for Programmers