📓🌱💻 GuidoPercu.dev

Career Development Study Guide

Published on


Tech books on a bookshelf

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.

According to career ladders, a Senior Engineer should be mastering how effective they can be as an individual contributor.

  • 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.

AWS

Essential Cloud Concepts - Instances/Machines, Load Balancer, Messaging Queues, Cache SQL/NoSQL, Low Cost Storage, Routing Algorithms, Serverless, Async Architecture, DNS Provider, Identity & Access Management, Networking & VPC, Storage Options (Block, File, Object), Logging, Monitoring, Alerting, Billing & Cost Management, CDN & Static Assets, Build & Release (CI, CD)

nametype
AWS Cloud Practitioner EssentialsCourse
AWS Certified Cloud Practitioner Training 2020Course
AWS Certified Developer - Associate 2020Course
AWS Certified Solutions Architect - Associate 2020Course
Introduction to AWS Identity and Access ManagementCourse
Building Modern Python Applications on AWSCourse
Full Stack AWS Crash CourseCourse
AWS Fundamentals: Building Serverless ApplicationsCourse
The Good Parts of AWSBook

System Design

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).

nametype
A Philosophy of Software Design | reviewBook
Code CompleteBook
Accelerate: The Science of Lean Software and DevOpsBook
Production-Ready MicroservicesBook
System Design Interview | reviewBook
Designing Data-Intensive ApplicationsBook
Software Engineer at GoogleBook
Understanding Distributed SystemsBook
A Distributed Systems Reading ListGuide
The System Design PrimerGuide
Patterns of Distributed SystemsGuide
Preparing for the Systems Design and Coding InterviewGuide
Learning Distributed SystemsGuide
Drawing good architecture diagrams | Create diagrams with codeArticle
System Design InterviewCourse
System Design Interview: an insider’s guideCourse
Concurrent and Distributed SystemsCourse
Grokking the Object Oriented Design InterviewCourse
Grokking the System Design InterviewCourse
Load Balancer conceptsTweet
CAP TheoremTweet

Algorithms

“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

Nametype
Cracking the Coding InterviewBook
Groking AlgorithmsBook
Algoritmos em Linguagem C (PT-BR)Book
Algorithms - Thomas CormenBook
Introduction to Theoretical Computer ScienceBook
Time Complexity in PythonGuide
Algorithmic complexity | Big-OGuide
Tech Interview - AlgorithmsGuide
Hacker RankTests
Project EulerTests
Rosalind - Bioinformatics AlgorithmsTests
SPOJTests
LeetTests
TripleByteTests
CodilityTests

Computer Science

NameType
Teach Yourself Computer ScienceCourse
Harvard - CS50: Introduction to Computer ScienceCourse
Structure and Interpretations of Computer ProgramsBook

Soft Skills

According to career ladders, a Staff Engineer:

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.
Nametype
Best Courses and Books to Improve Soft SkillsGuide
An incomplete list of skills senior engineers need, beyond codingGuide
Learning How to LearnCourse
A Mind for NumbersBook
Never Split the Difference: Negotiating As If Your Life Depended On ItBook
To Sell Is Human: The Surprising Truth About Moving OthersBook
The Power of HabitsBook
The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business WinBook
The Manager’s Path: A Guide for Tech Leaders Navigating Growth and ChangeBook
The First 90 Days: Proven Strategies for Getting Up to Speed Faster and Smarter, Updated and ExpandedBook
PeoplewareBook
The Mythical Man-MonthBook

Related: Essays for Programmers