🌱 Skills and Knowledge Tree

This guide summarizes the knowledge and skills that you will need to develop along your career as a software engineer.

Project-based learning - Often you’ll find that learning is best done in service to a particular goal, outcome or a particular project you are working on. There’s an enormous amount to learn, and it’s really easy to get overwhelmed. Prefer “just in time” learning over “just in case” learning. Try your best to focus on learning what is relevant to you at any given moment.

⚠️ Note that no one is an expert at everything, this is not a checklist but rather a survey of practical knowledge and relevant skills you will develop as your career progresses. Remember that it’s okay that you don’t know everything!

Overview

The knowledge and skills you need as a software engineer break down into several major categories:

  1. Team Collaboration and Cooperation - How to work well with a team, be a good team member, coordinate your work with other engineers and resolve conflicts.

  2. Data Structures and Algorithms - How to store and organize data in different ways and then solve many different types of problems using code.

  3. Technical Interviewing - How communicate clearly as you think through solving problems, asking the right questions, analyzing efficiency, and verifying solutions.

  4. Software Design Patterns - How to structure and design code in order to make sure the code is high quality, well-organized, easy to understand and easy to change over time.

  5. System Architectures - How different software systems all fit together and how to design them in order to be reliable, maintainable and efficient.

  6. Development Workflows - How to do specific processes common to writing software such as debugging when things go wrong, searching for possible solutions online, working with Git or other version control and more.

  7. Stack-Specific Knowledge - Knowledge of how to build things using particular technology and languages. For example, building iOS or Android apps, building web servers with Ruby on Rails, or writing Javascript.

1. Team Collaboration and Cooperation

Team collaboration and cooperation involves developing the skills to work well with as part of a team, be a good team member to others, coordinate your work with other engineers and resolve conflicts as they come up. This includes:

  • How to write simple technical documentation about projects you build (READMEs)

  • How to comment your code so others can read and understand

  • How to give constructive criticism when reviewing a peer’s code

  • Communicating your progress clearly to your team or manager

  • Drawing and whiteboarding when designing to communicate your ideas

  • Reporting issues and bugs clearly in a way other engineers appreciate

  • Github Flow - Branches, pull requests and understanding the process to get your code reviewed and merged.

In some ways, this area of effective communication, collaboration and cooperation with others is the most important part to success as a software engineer. Learn more by checking out this blog post about the crucial role of empathy in being a software engineer.

2. Data Structures and Algorithms

Data structures are just different ways or organizing and storing data within software. Examples are: Array, Linked Lists, Stack, Queues, Trees, Graphs, Sets, Hash Tables.

Algorithms are simply a particular approach to solving a particular problem. Algorithms involve writing code which often accesses data structures and then performs operations and calculations on the data.

Used together, you can select one or more data structures to store your data, and then use particular algorithms to achieve a particular goal or solution within your software programs.

ℹ️ To learn more about data structures and algorithms, check out this guide on studying them.

3. Technical Interviewing

In addition to understanding how to solve problems using data structures and algorithms, you will also often apply these skills specifically in coding interviews when applying for internships or full-time software positions.

Technical interviewing is a skill of its own which builds on top of your knowledge of data structures and algorithms. There are several aspects to technical interviewing including the steps of a coding interview, what questions to ask your interviewer, and how to test that your solution is correct.

ℹ️ To learn more about technical interviewing skills and strategies, check out our technical interviewing guide.

4. Software Design Patterns

Software design patterns and principles are ways of organizing and designing code in order to make sure the code is high quality, well-organized, easy to understand and easy to change over time.

These patterns are not specific libraries that you can plug into your application. These are, rather, guidelines on how to tackle certain problems in certain situations.

ℹ️ To learn more about software design patterns, check out our software design patterns and principles guide.

5. System Architecture

System architecture is centered around how specific software systems and protocols work, the components they contain and how that all fits together. Of course, there are many systems and elements with different architectures. For example:

  • How computer networking and the web works

  • How to design the APIs that allow data to go between applications

  • How to design relational databases that store your app’s data

  • How to “cache” data to make your app faster

  • How to build parallel or concurrent systems

ℹ️ To learn more about how to architect and design different types of software systems, check out our software architecture guide.

6. Development Workflows

Development workflows involve specific processes common to writing software such as debugging when things go wrong, searching for possible solutions online, working with Git or other version control and more.

  • Version Control - Collaborating on software with version control such as Git and Github

  • Debugging and Investigation - How to systematically debug and investigate issues when software isn’t working correctly

  • Google-Fu - How to search Google, Github and Stack Overflow to find possible solutions when something isn’t working as expected.

  • Library Evaluation - How to find and evaluate third-party libraries that can be used to save you time and energy within your software system.

7. Stack-Specific Knowledge

Stack-specific knowledge is specialized knowledge of how to build things using a particular set of technology and languages. For example, building iOS or Android apps, building web servers with Ruby on Rails, or writing Javascript.

ℹ️ To review the common tech stacks and career tracks in software engineering, check out our software roles guide.