Your programming roadmap
You have some programming experience, and want to level up by learning the fundamentals of programming. But you're wondering:
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.
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:
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.
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
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.
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.
Functional Abstraction and Functional Programming
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 and Object-Oriented Programming
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.