Your programming roadmap

You have some programming experience, and want to level up by learning the fundamentals of programming. But you're wondering:

  • What are the fundamentals of programming?
  • What topics should you focus on first?
  • Which resources are best?

Programmer’s Pyramid answers these questions. This self-guided learning tool is your roadmap for learning the fundamentals of programming.

Your Programming Roadmap

Start at the base of the Pyramid (layer 1 in navy) and work your way up. The layers build on each other. The topics in layer 1 will help you in layer 2. Move among topics within each layer as you wish.

A visual of the Pyramid layers, starting at layer 1 and increasing to layer 3.

Click on a link in the table below. Begin at the bottom (in navy) and progress upwards. Each topic links to its own webpage, and contains:

  • Multiple resources to problems, projects, courses, or books,
  • An explanation for how to use these resources, and
  • One or more learning tips (for most topics).

In terms of a timeline, let the problems in the Apply It section for each topic be your guide. If you’re cruising through all or most of the problems from the provided resources, then you may be ready to move on to another topic.

Pyramid Layers

Layer 3

Layer 3

Layer 3

Layer 3

Layer 3

Layer 2

Layer 2

Layer 2

Layer 2

Layer 2

Layer 1

Layer 1

Layer 1

Layer 1

Layer 1

Layer 1

Why they Matter

Use algorithms to solve problems efficiently and effectively.

Software design helps keep code maintainable and modifiable.

Write tests to ensure your code continues to work after you make changes to it.

Refactor code to make it maintainable and readable.

Understand the structure of your computer’s memory and how your data is stored.

Function abstraction helps make our code more readable, flexible, and reusable.

There are a variety of ways to organize and structure our data.

Use data abstraction to hide details about how data are created and used.

Databases allow us to store and manipulate data. SQL is at the heart of querying data in databases.

Object-oriented programming is a way of modeling and designing your programs by bringing data and behavior together.

These are core programming concepts that are integral to any language.

Problem-solving is a skill that takes time to build, and is essential to our craft. So make problem-solving a daily habit.

Functions are chunks of reusable code used to complete a specific task.

You can combine multiple data types together to form composite data types.

The shell is a tool that’ll make your programming life much easier and more efficient.

Version control helps you track the changes you make to the programs you write. It also allows you to work with others on the same codebase.

Areas of Focus

Big O notation, binary search, divide and conquer, depth-first search, breadth-first search, dynamic programming, greedy algorithms

separation of concerns, encapsulation, cohesion, modularity, coupling

testing at different levels (i.e., unit and integration); Test-Driven Development; mocks and stubs; testing patterns (i.e., Four Phase testing)

familiarize yourself with common refactoring techniques, including: extracting functions, classes and variables; inlining functions and variables; combining functions into a class

call stack, heap, how memory is laid out on disk, pointers, and bytes

higher-order functions, composition, lambda expressions, closure, map, reduce, recursive functions

stacks, queues, graphs, arrays, linked lists

lists and trees

indexes, primary and foreign keys, tables, functions, queries, joins, schemas

objects, classes, inheritance, attributes, methods

variables, basic data types (integers, floating point numbers, strings, booleans), control (conditional statements and loops)

Solve a variety of problems on a variety of platforms.

functions, nested functions, call expressions

arrays, tuples, hash tables

variables, input and output, processes, networking, text processing, files and directories, managing processes

branching, committing, merging and rebasing, managing history

Big O notation, binary search, divide and conquer, depth-first search, breadth-first search, dynamic programming, greedy algorithms

Use algorithms to solve problems efficiently and effectively.

separation of concerns, encapsulation, cohesion, modularity, coupling

Software design helps keep code maintainable and modifiable.

testing at different levels (i.e., unit and integration); Test-Driven Development; mocks and stubs; testing patterns (i.e., Four Phase testing)

Write tests to ensure your code continues to work after you make changes to it.

familiarize yourself with common refactoring techniques, including: extracting functions, classes and variables; inlining functions and variables; combining functions into a class

Refactor code to make it maintainable and readable.

call stack, heap, how memory is laid out on disk, pointers, and bytes

Understand the structure of your computer’s memory and how your data is stored.

higher-order functions, composition, lambda expressions, closure, map, reduce, recursive functions

Function abstraction helps make our code more readable, flexible, and reusable.

stacks, queues, graphs, arrays, linked lists

There are a variety of ways to organize and structure our data.

lists and trees

Use data abstraction to hide details about how data are created and used.

indexes, primary and foreign keys, tables, functions, queries, joins, schemas

Databases allow us to store and manipulate data. SQL is at the heart of querying data in databases.

objects, classes, inheritance, attributes, methods

Object-oriented programming is a way of modeling and designing your programs by bringing data and behavior together.

variables, basic data types (integers, floating point numbers, strings, booleans), control (conditional statements and loops)

These are core programming concepts that are integral to any language.

Solve a variety of problems on a variety of platforms.

Problem-solving is a skill that takes time to build, and is essential to our craft. So make problem-solving a daily habit.

functions, nested functions, call expressions

Functions are chunks of reusable code used to complete a specific task.

arrays, tuples, hash tables

You can combine multiple data types together to form composite data types.

variables, input and output, processes, networking, text processing, files and directories, managing processes

The shell is a tool that’ll make your programming life much easier and more efficient.

branching, committing, merging and rebasing, managing history

Version control helps you track the changes you make to the programs you write. It also allows you to work with others on the same codebase.