When you learn to code, you start by learning a programming language. You learn the syntax, you learn about variables, assignments, operators, loops, branching, semicolons, return statements. You learn what to type and how to make the code work and run and do something!

There is also another type of learning that happens in parallel to this tactical learning. Learning concepts, techniques, and tools, seeing the big picture and understanding why things are as they are. In order to retain the tactical learning, connecting the dots between various concepts is important.

I've been coaching and mentoring developers for more than a decade. I created this resource in response to questions like "can you explain xyz to me in layperson terms?", or "but what exactly is xyz?" or "I keep hearing this term xyz and I am embarrassed to ask my coworkers" or "I googled xyz but still don't get it."

This resource is about foundational software concepts that are relevant to all programmers or anyone curious about the world of software. These concepts are independent of programming languages, libraries, and frameworks.

The explanations are thorough but casual. These are not formal definitions. Sometimes you read documentation for a thing that makes perfect sense if you already know what the thing is. I'm against explanations that require you to look up twenty other things in order to understand the one thing. The most concrete learning happens with examples, analogies, metaphors, and even stories.

I am calling this project Developer Dictionary because I like the alliteration :) But this is not a collection of flat definitions.

Check back here for new entries. I am in the process of turning my notebook scribbles into digital artifacts.

OR

If you want to get new entries in your inbox, sign up here - I send them weekly. And if you want to suggest new topics, I plan to poll subscribers from time to time.

Here are the current topics based on questions I've been asked:

API Application Programming Interface

Binary number system

Boolean logic

CI/CD Continuous Integration/Continuous Delivery

Client and Server

CLI Command Line Interface

CRUD Create, Read, Update, Delete

Data Structures

Debugging

DOM Document Object Model

Dot files

EMACS editor

Git and Github

Floating Pointing Numbers

Frontend vs. Backend

Functional Programming

HTTP Hyper Text Transfer Protocol

IDE Integrated Development Environment

IP address

JSON JavaScript Object Notation

Linux

NP Complete and Complexity Theory

MVC Model View Controller

Object Oriented Programming

Pointers

Proxy / Reverse Proxy

Recursion

Regular Expressions

Refactoring

Serialization/Deserialization

Specifications/Requirements

SSH Secured Shell

SSL/HTTPS

SQL Structured Query Language

TCP/IP network stack

Terminal

Turing test

Unix

Version Control

Vi / Vim editor

Website vs. Web App

WebView

XML Extensible Markup Language

YAML Yet Another Markup Language