100 - Programming
Gemini says "The structure is logical, comprehensive, and follows a clear hierarchical pattern. It effectively separates high-level concepts from specific tools, languages, and frameworks. The inclusion of modern topics like AI coding agents, monorepo tools, and up-to-date frameworks makes it highly relevant."
100 - Programming Concepts
Note: Please see also Class 170 for abstract data types.
100 - Core Programming Concepts
- Language Mechanics & Execution
- Source code - A collection of code, possibly with comments, written using a human-readable programming language, usually as plain text
- Statement - A syntactic unit of an imperative programming language that expresses some action to be carried out
- Expression - A syntactic entity in a programming language that may be evaluated to determine its value
- Operator and Operand
- Literal - A notation for representing a fixed value in source code
- Template string or literal
- Heredoc - A file literal or input stream literal representing a section of source code that is treated as if it were a separate file
- Constant - A value that cannot be altered by the program during normal execution
- Variable - An abstract storage location paired with an associated symbolic name, which contains some known or unknown quantity of information referred to as a value
- Scope - The region of a computer program where the binding of a name to an entity (name binding) is valid
- Data type - A collection or grouping of data values, usually specified by a set of possible values and allowed operations
- Primitives - A data type provided by a programming language as a basic building block or one not defined in terms of other data types
- Nominal type system - A major class of type systems, in which compatibility and equivalence of data types is determined by explicit declarations and/or the names of the types
- Structural type system - A major class of type systems in which type compatibility and equivalence are determined by the type's actual structure or definition
- Union type - A data type definition that specifies which of a number of permitted primitive types may be stored in its instances
- Type safety - The extent to which a programming language discourages or prevents type errors
- Reference - A value that enables a program to indirectly access a particular datum in the computer's memory or other storage device
- Null pointer - A value saved for indicating that the pointer or reference does not refer to a valid object
- Memory Management
- Reference counting - A programming technique of storing the number of references, pointers, or handles to a resource
- Garbage collection - A form of automatic memory management where the collector attempts to reclaim memory occupied by objects no longer in use
- Smart pointer - An abstract data type that simulates a pointer while providing added features, such as automatic memory management or bounds checking
- Memory safety - The state of being protected from various software bugs and security vulnerabilities when dealing with memory access
- Control Flow Structures
- Control flow - The order in which individual statements, instructions or function calls of an imperative program are executed or evaluated
- Exception handling - The process of responding to the occurrence of exceptions during the execution of a program
- Foundational Techniques & Properties
- Data - Any sequence of one or more symbols; datum is a single symbol of data
- Metadata - Data that provides information about other data
- State - The stored information, at a given instant in time, to which a computer program or system has access
- Function - A sequence of program instructions that performs a specific task, packaged as a unit
- Parameter - A special kind of variable used in a subroutine or function to refer to one of the pieces of data provided as input
- Anonymous function - A function definition that is not bound to an identifier
- Immutable object - An object whose state cannot be modified after it is created
- Generic Programming - A style of computer programming in which algorithms are written in terms of types to-be-specified-later that are then instantiated when needed
- Assertion - A statement that a predicate (a Boolean-valued function) is expected to always be true at that point in the code
- Autovivification - The automatic creation of a new variable or data structure as required when it is first used
- Data - Any sequence of one or more symbols; datum is a single symbol of data
- Module Structure & Organization
101 - Object-oriented Programming
- Object-oriented Programming - A programming paradigm based on the object - a software entity that encapsulates data and function(s)
- Abstraction - The process of hiding the complexity of a system by modeling classes appropriate to the problem and working at the most relevant level of detail
- Encapsulation - The bundling of data with the methods that operate on that data, or the restricting of direct access to some of an object's components
- Polymorphism - The provision of a single interface to entities of different types
- Dynamic dispatch - The process of selecting which implementation of a polymorphic operation (method or function) to call at run time
- Inheritance - The mechanism of basing an object or class upon another object or class, retaining similar implementation
- Class - An extensible program-code-template for creating objects, providing initial values for state and implementations of behavior
- Interface - An abstract type that contains no data, but defines behaviors as method signatures
- Method - A procedure associated with an object, and implicitly acting upon that object
- This keyword - A keyword used in many object-oriented programming languages to refer to the object associated with the current function or method call
- Duck typing - An application of the duck test determining type compatibility based on the presence of certain methods and properties
- Covariance and contravariance - The ways to describe how a type constructor (like list or function) behaves with respect to subtyping
- Passive data structure - A record data structure that contains only public data fields and provides no methods other than implicitly for reading/writing the fields
- Prototype-based programming - A style of object-oriented programming in which behavior reuse is performed via a process of reusing existing objects that serve as prototypes
102 - Functional Programming
- Functional Programming - A programming paradigm where programs are constructed by applying and composing functions
- Pattern matching - The act of checking a given sequence of tokens for the presence of the constituents of some pattern
- First-class function - The property of a programming language that treats functions as first-class citizens (e.g., assignable to variables, passable as arguments)
- Map - A higher-order function that applies a given function to each element of a sequence, returning a sequence containing the results
- Filter - A higher-order function that processes a data structure to produce a new data structure containing only those elements for which a given predicate returns true
- Reduce - A higher-order function (also known as fold) that reduces a data structure to a single value by recursively applying a combining operation
- Referential transparency - A property of expressions such that an expression can be replaced with its corresponding value without changing the program's behavior
- Lambda calculus - A formal system in mathematical logic for expressing computation based on function abstraction and application
- Closure - A function together with a referencing environment for the non-local variables of that function
- Side-effect - An observable effect of an operation, function, or expression that modifies state variable values outside its local environment
- Monad - A software design pattern with a structure that combines program fragments (functions) and wraps their return values in a type with additional computation
- Currying - The technique of converting a function that takes multiple arguments into a sequence of functions that each takes a single argument
- Functional Reactive Programming (FRP) - A programming paradigm for reactive programming using the building blocks of functional programming
103 - Concurrency and Parallelism
- Concurrent Computing - A form of computing in which several computations are executed concurrently instead of sequentially
- Coroutine - A computer program component that generalizes subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed
- Async/await - A syntactic feature that allows an asynchronous, non-blocking function to be structured in a way similar to an ordinary synchronous function
- Futures and promises - The constructs used for synchronizing program execution, representing a proxy for a result that is initially unknown
- Semaphore - A variable or abstract data type used to control access to a common resource by multiple threads in a concurrent system
- Mutex - A synchronization primitive that prevents state from being modified or accessed by multiple threads of execution at the same time
- Channel - A model for interprocess communication and synchronization via message passing
- Thread safety - A property of computer code applicable in multi-threaded environments, ensuring correct manipulation of shared data structures
- Deadlock - A situation in concurrent computing where no member of a group of entities can proceed because each waits for another member to take action
105 - Advanced Topics
- Aspect-oriented Programming - A programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns
- Cross-cutting concern - An aspect of a program that affect several modules, without the possibility of being encapsulated in any of them
- Program Analysis
- Hoare logic - A formal system with a set of logical rules for reasoning rigorously about the correctness of computer programs
- Curry-Howard correspondence - The direct relationship between computer programs and mathematical proofs
- Automated theorem proving - A subfield of automated reasoning and mathematical logic dealing with proving mathematical theorems by computer programs
- Complexity class - A set of computational problems of related resource-based complexity
- Language Parsing
- Concepts
- Formal Grammar - A set of formation rules for strings in a formal language
- Chomsky hierarchy - A containment hierarchy of classes of formal grammars
- Automata theory - The study of abstract machines and automata, as well as the computational problems that can be solved using them
- BNF syntax - A notation technique for context-free grammars, often used to describe the syntax of languages used in computing
- AST - A tree representation of the abstract syntactic structure of source code written in a programming language
- Tools
- ANTLR - A powerful parser generator for reading, processing, executing, or translating structured text or binary files
- Lox - A lexer and parser generator for Go
- tree-sitter - A parser generator tool and an incremental parsing library
- Ragel - A state machine compiler
- Bison - A general-purpose parser generator that converts a grammar description for a context-free grammar into a C program to parse that grammar
- Flex - The Fast Lexical Analyzer - scanner generator
- Concepts
110 - Shell and Terminal
110 - Major Shell
- Bash - An sh-compatible shell that incorporates useful features from the Korn shell (ksh) and the C shell (csh)
- Line editing - The basic features of the GNU command line editing interface
- History - The history expansion features of Bash
- Shell expansions - The process performed on the command line after it has been split into words
- Pipelines - A sequence of one or more commands separated by one of the control operators ‘|’ or ‘|&’
- Built-in commands - The commands that are executed within the shell process itself, without forking a new process
- Special variables - A list of shell variables that are set or used by the shell
- Built-in job control - The ability to selectively stop (suspend) the execution of processes and continue (resume) their execution at a later time
- Zsh - A shell designed for interactive use, although it is also a powerful scripting language
- fish-shell - A smart and user-friendly command line shell for Linux, macOS, and the rest of the family
- PowerShell - A cross-platform task automation solution made up of a command-line shell, a scripting language, and a configuration management framework
- nushell - A new type of shell
111 - Shell Utilities
- General Shell Utilities
- coreutils = A package of GNU software containing many of the basic tools, such as cat, ls, and rm, needed for Unix-like operating systems
- GNU parallel - A shell tool for executing jobs in parallel using one or more computers
- rlwrap - A readline wrapper
- bash-completion - A collection of programmable completion functions for bash
- direnv - An extension for your shell that can load and unload environment variables depending on the current directory
- zoxide - A smarter cd command
- Search Tools
- findutils - The basic directory searching utilities of the GNU operating system
- fzf - A general-purpose command-line fuzzy finder
- fd - A simple, fast and user-friendly alternative to find
- grep - A command-line utility for searching plain-text data sets for lines that match a regular expression
- ripgrep - A line-oriented search tool that recursively searches the current directory for a regex pattern
- silversearcher-ag - A code-searching tool similar to ack, but faster
- Shell Frameworks & Customization
- starship - The minimal, blazing-fast, and infinitely customizable prompt for any shell!
- oh-my-bash - An open source, community-driven framework for managing your BASH configuration
- oh-my-zsh - A delightful, open source, community-driven framework for managing your Zsh configuration
- Zim Framework - The Zsh configuration framework with blazing speed and modular extensions
- Powerlevel10k - A theme for Zsh
- Pure - A pretty, minimal and fast ZSH prompt
112 - Terminal Emulators
- Terminal Emulators - A computer program that emulates a video terminal within some other display architecture
- kitty - The fast, feature-rich, GPU based terminal emulator
- Rio Terminal - A modern terminal for the 21st century
- Alacritty - A modern terminal emulator that comes with sensible defaults, but allows for extensive configuration
- Terminator - A terminal emulator like xterm, gnome-terminal, konsole, etc.
- Windows Terminal - The new Windows Terminal and the original Windows console host
- Mintty - A terminal emulator for Cygwin, MSYS or Msys2, and derived projects, and for WSL
- xterm - A terminal emulator for the X Window System
- Technologies & Protocols
- Pseudoterminal - A pair of pseudo-devices that provides a terminal-like interface used by programs to emulate a terminal
- ANSI escape code - A standard for in-band signaling to control the cursor location, color, font styling, and other options on video text terminals
- kitty keyboard protocol - A protocol for terminals to send keyboard events to applications running in them
- iTerm2 image protocol - A custom escape code to display images inline in the terminal
- Fonts
- Noto Fonts - A global font collection for all modern and ancient languages
- Nerd Fonts - A project that patches developer targeted fonts with a high number of glyphs
- Cascadia Code - A fun, new monospaced font that includes programming ligatures
113 - Terminal Utilities
- Multiplexers & Session Management
- screen - A full-screen window manager that multiplexes a physical terminal between several processes
- tmux - A terminal multiplexer
- byobu - A GPLv3 open source text-based window manager and terminal multiplexer
- zellij - A terminal workspace with batteries included
- asciinema - A free and open source solution for recording terminal sessions and sharing them on the web
- Console File Managers
- midnight commander - A visual file manager
- ranger - A VIM-inspired filemanager for the console
- superfile - A very fancy and modern terminal file manager
114 - Linux or Unix-like environments on Windows
- WSL - A feature of Windows that enables you to run a GNU/Linux environment on your Windows machine without the need for a separate virtual machine or dual booting
- Git for Windows - A lightweight, native set of tools that bring the full feature set of the Git SCM to Windows
- MSYS2 - A collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software
116 - Coding Agents & Tools
- CLI Coding Agents
- Claude Code - A tool that allows developers to use Anthropic's AI models, Opus 4.1 and Sonnet 4, directly in their terminal
- OpenAI Codex CLI - A command-line interface for a model that translates natural language to code
- Gemini CLI - An open-source AI agent that brings the power of Gemini directly into your terminal
- Crush - The glamourous AI coding agent for your favourite terminal 💘
- CLI Assistants
- Standards & Specifications
- Agents.md - An open standard for defining and running AI agents
117 - Learning Resources
- Shell Tutorials
- LinuxCommand.com - A site containing a book and other material designed to help you learn how to use the Linux command line
120 - SCM, Editor/IDE, and Code Quality
121 - Source Code Management
- Distributed Version Control - A form of version control where the complete codebase, including its full history, is mirrored on every developer's computer
- Git - A free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency
- local repository, remote repository
- branch, tag, worktree
- push, pull, fetch, rebase, reset, stash
- staging, commit
- git lfs - An open source Git extension for versioning large files
- Informative git prompt for bash and fish - A bash prompt that displays information about the current git repository
- lazygit - A simple terminal UI for git commands
- Git Interactive Rebase Tool - An improved sequence editor for Git
- BFG Repo-Cleaner - A simpler, faster alternative to git-filter-branch for cleansing bad data out of your Git repository history
- git filter-repo - A versatile tool for rewriting history
- degit - Straightforward project scaffolding
- git lint - A command line interface for linting Git commits by ensuring you maintain a clean, easy to read, debuggable, and maintainable project history
- git cliff - A highly customizable changelog generator
- TortoiseGit - A Windows Shell Interface to Git and based on TortoiseSVN
- Git - A free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency
- Git hosting services
- GitLab SCM - The single source of truth for collaborating on code and projects
- Gitea - A painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD
- Codeberg - A community-led effort that provides Git hosting and other services for free and open source projects
- Forgejo - A self-hosted lightweight software forge
- Soft Serve - A tasty, self-hostable Git server for the command line
- Azure Repos - A set of version control tools that you can use to manage your code
- GitHub - The AI-powered developer platform to build, scale, and deliver secure software
- Conventions
- keep a changelog - A file which contains a curated, chronologically ordered list of notable changes for each version of a project
- Conventional Commits - A lightweight convention on top of commit messages
- AI commit tools
- OpenCommit - Auto-generate meaningful commits in a second
- AI Commits - A CLI that writes your git commit messages for you with AI
122 - Editors and IDEs
- GUI-based
- Visual Studio Code - A lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux
- Terminal-based
- Vim - A highly configurable text editor built to make creating and changing any kind of text very efficient
- motion and operators - The commands that move the cursor and the commands used to delete or change text
- vim-plug - The de-facto standard plugin manager for Vim
- NERDTree - A tree explorer plugin for vim
- Neovim - Hyperextensible Vim-based text editor
- LazyVim - A Neovim setup powered by 💤 lazy.nvim to make it easy to customize and extend your config
- lazy.nvim - A modern plugin manager for Neovim
- neo-tree.nvim - A Neovim plugin to manage the file system and other tree like structures
- colorful-winsep.nvim - A colorful window separator for Neovim
- mason.nvim - A Neovim plugin that allows you to easily manage external editor tooling such as LSP servers, DAP servers, linters, and formatters through a single interface
- telescope.nvim - A highly extendable fuzzy finder over lists
- flash.nvim - A plugin that helps you navigate your code with search labels, enhanced character motions and Treesitter integration
- nvim-llama - A simple interface to Ollama for Neovim
- LazyVim - A Neovim setup powered by 💤 lazy.nvim to make it easy to customize and extend your config
- Helix - A modal editor, meaning it has different modes for different tasks
- GNU Emacs - An extensible, customizable, free/libre text editor — and more
- Tutorials and Cheet Sheets
- OpenVim - An interactive Vim tutorial
- Vim Adventures - An online game based on VIM's keyboard shortcuts
- Vim Cheet Sheet - A quick reference guide for Vim commands
- Vim - A highly configurable text editor built to make creating and changing any kind of text very efficient
123 - Coding Assistance
- Language Servers
- LSP - The protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc.
- pyright - A static type checker and language server for Python
- Pylance - An extension that works alongside the Python extension in Visual Studio Code to provide performant language support
- Ruby LSP - An opinionated language server for Ruby
- TypeScript Language Server - A standalone TypeScript and JavaScript language server
- Gopls - The official language server for the Go language
- rust-analyzer - A language server for the Rust programming language
- Eclipse JDT Language Server - A Java language server based on the Eclipse JDT
- AI Assistance Plugins
- GitHub Copilot - The AI pair programmer that helps you write code faster and with less work
- Gemini Code Assist - An AI-powered assistant for the entire development lifecycle
- Amazon Q Developer - The most capable generative AI-powered assistant for software development
- Cline - An open source AI coding agent that brings frontier AI models directly to your VS Code editor
- AI-integrated IDEs
- Cursor - A new, intelligent IDE, empowered by seamless integrations with AI
- Winfsurf Editor - Where the work of developers and AI truly flow together, allowing for a coding experience that feels like literal magic
- Zed - A next-generation code editor designed for high-performance collaboration with humans and AI
- Semantic Code Retreival
- Serena - A tool for semantic code retrieval
124 - Source Code Quality
- Concepts
- SQALE method - A method to support the evaluation of the quality of a software source code
- Cyclomatic complexity - A software metric used to indicate the complexity of a program
- Analysis Platform
- SonarQube Server - An on-premise analysis tool designed to detect coding issues in 30+ languages, frameworks, and IaC platform
- GitLab Code Coverage - A report that shows the percentage of your code that is covered by tests
- GitLab Code Quality - A feature that uses CodeClimate Engines to provide code quality analysis for your projects
- Formatters
- EditorConfig - A file format for defining coding styles and a collection of text editor plugins that enable editors to read the file format and adhere to defined styles
- Prettier - An opinionated code formatter
- Code metrics
- Linters
- ESLint - An open source project that helps you find and fix problems with your JavaScript code
- JSHint - A Static Code Analysis Tool for JavaScript
- Pylint - A static code analyser for Python 2 or 3
- Ruff - An extremely fast Python linter and code formatter, written in Rust
- Staticcheck - A state of the art linter for the Go programming language
- revive - Fast & extensible static code analysis framework for Go
- golangci-lint - A fast linters runner for Go
- RuboCop - A Ruby static code analyzer (a.k.a linter) and code formatter
- Rust Clippy - A collection of lints to catch common mistakes and improve your Rust code
- PSScriptAnalyzer - A static code checker for PowerShell modules and scripts
- ShellCheck - A GPLv3 tool that gives warnings and suggestions for bash/sh shell scripts
- Stylelint - A mighty CSS linter that helps you avoid errors and enforce conventions
- yamllint - A linter for YAML files
- ls-lint - An extremely fast file and directory name linter
- Coding style guides
- Google Style Guides - A collection of documents that provide a set of conventions for writing source code in various programming languages
- Style Guide for Python - A document that gives coding conventions for the Python code comprising the standard library in the main Python distribution
- Ruby Style Guide - A community-driven style guide for the Ruby programming language
130 - Programming Language Features
Note: For shell scripting, please refer to Class 110.
130 - Python Language
- Python - A programming language that lets you work quickly and integrate systems more effectively
- Core Features
- Python import system - The mechanism that organizes Python code into modules and packages, facilitating code reuse and structuring large applications
- Special method names - The methods, identified by leading and trailing double underscores, that allow classes to implement operations invoked by special syntax
- Type Hints - A standard syntax for type annotations of variables, function parameters, and return values, used for static analysis
- Mypy - An optional static type checker for Python that aims to combine the benefits of dynamic typing and static typing
- f-string - A type of string literal, prefixed with 'f' or 'F', which allows embedding expressions inside string constants using minimal syntax
- with statement - A statement that simplifies exception handling by encapsulating standard uses of try/finally statements for resource management
- context manager
- Generators - A simple and powerful way to create iterators, defined using a function with the yield statement
- Decorators - A syntax using the '@' symbol for transforming functions and methods, often used for modifying or enhancing them non-intrusively
- Coroutine - A specialized generator function, defined with
async def
, that can suspend and resume its execution, enabling cooperative multitasking - Lambda - A small anonymous function defined using the
lambda
keyword, restricted to a single expression - Data Classes - A module and decorator providing a concise way to create classes primarily used to store data, automatically generating special methods
- Pattern Matching - A feature providing functionality similar to switch statements, allowing matching of values against complex patterns including sequences, mappings, and object structures
- Unpacking Operator - The extended usages of the
*
iterable unpacking operator and**
dictionary unpacking operators to allow unpacking in more positions, an arbitrary number of times, and in additional circumstances
- Key Libraries
- Core Features
131 - Javascript and TypeScript
- Javascript/ECMAScript - The standard that defines the ECMAScript Language
- Module System
- CommonJS - A project with the goal of specifying an ecosystem for JavaScript outside the browser
- ES modules - The official standard format to package JavaScript code for reuse
- UMD - The patterns for Universal Module Definition for use in the browser, and in AMD and CommonJS-based systems
- Core Features
- Event-driven - A programming paradigm in which the flow of the program is determined by events such as user actions, sensor outputs, or messages from other programs
- Spread and rest operators - The syntax that allows an iterable such as an array expression or string to be expanded in places where zero or more arguments or elements are expected
- Generator - An object returned by a generator function and it conforms to both the iterable protocol and the iterator protocol
- Key Libraries
- Typescript - A strongly typed programming language that builds on JavaScript, giving you better tooling at any scale
- Union Types - A way to combine multiple types into one
- Type Aliases - A name for any type
- Type Assertions - A way to tell the compiler 'trust me, I know what I’m doing'
- Mapped Types - A generic type which uses a union of PropertyKeys to iterate through keys of another type to create a new one
- Nominal typing techniques - A way to simulate nominal types in TypeScript, which by default has a structural type system
- Declaration Files - The files where you define the types for a library
- Decorators - A special kind of declaration that can be attached to a class declaration, method, accessor, property, or parameter
- Module System
- Tutorials & Practices
- 33 JS Concepts - A repository with articles about 33 concepts every JavaScript developer should know
- JS Project Guidelines - A set of best practices for JavaScript projects
- Callback Hell - The nesting of callback functions when dealing with asynchronous logic
- NodeSchool - A set of open source workshops that teach web software skills
- Node.js Best Practices - A summary and curation of the top-ranked content on Node.js best practices
132 - Languages mainly for Scripting and Automation
- Go - An open-source programming language supported by Google
- Core Features
- Go Modules - The dependency management system for the Go programming language
- Defer, panic and recover - The powerful but unusual control-flow mechanisms in Go
- Pointer receiver - A method that operates on a pointer to the type, allowing it to modify the value to which the receiver points
- Interface - A type defined as a set of method signatures
- Goroutine - A lightweight thread managed by the Go runtime
- Channel - A typed conduit through which you can send and receive values with the channel operator, <-
- Key Libraries
- Core Features
- Ruby - A dynamic, open source programming language with a focus on simplicity and productivity
- Perl - A family of two high-level, general-purpose, interpreted, dynamic programming languages
- Core Features
- Special variables - The variables that have a special meaning to Perl
- Built-in regex - The syntax of regular expressions in Perl
- Context - A property of expressions that determines how they behave when evaluated
- Scalar values - A single item of data
- Reference - A scalar data type that 'points' to another piece of data
- Quote-like operators - A set of generic quoting operators
- I/O operators - The operators used for input and output operations, such as reading from a filehandle
- Core Features
- Groovy (for Jenkins/Gradle) - A powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform
- Lua (for NGINX/Neovim) - A powerful, efficient, lightweight, embeddable scripting language
- Emacs Lisp - The programming language used to extend and customize the Emacs text editor
- S-expression - A notation for nested list (tree-structured) data
- Homoiconicity - A property of some programming languages in which the primary representation of programs is also a data structure in a primitive type of the language itself
- Tutorials
- Effective Go - A document that gives tips for writing clear, idiomatic Go code
- Go by Example - A hands-on introduction to Go using annotated example programs
- Learn Go with tests - A resource that teaches the fundamentals of Go, including testing, on the first day
133 - Languages for Systems and Application Development
- Rust - A programming language that empowers everyone to build reliable and efficient software
- Ownership and borrowing - A set of rules that govern how a Rust program manages memory
- Interior mutability - A design pattern in Rust that allows you to mutate data even when there are immutable references to that data
- Closure - An anonymous function you can save in a variable or pass as an argument to other functions
- Trait-based generics - A way to define behavior that a type must provide, allowing for generic code that can operate on any type that implements the specified behavior
- Lifetime - A construct the compiler uses to ensure all borrows are valid
- Module Pin - A module that provides types which pin data to its location in memory
- Tutorials
- Rust by Example - A collection of runnable examples that illustrate various Rust concepts and standard libraries
- C# - A modern, object-oriented, and type-safe programming language
- Language-Integrated Query (LINQ) - The name for a set of technologies based on the direct integration of query capabilities into the C# language
- Delegate - A type that represents references to methods with a particular parameter list and return type
- Lambda expression - A way to create an anonymous function
- F# - A universal programming language for writing succinct, robust and performant code
- Immutable data structure
- Discriminated union - A type that can store a value of one of several different, but fixed, types
- Active pattern - A feature that lets you define named partitions that subdivide input data, so that you can use these names in a pattern matching expression
- Computation expression - A feature that provides a convenient syntax for writing computations that can be sequenced and combined using control flow constructs and bindings
- Java - The #1 programming language and development platform
- Built-in concurrency support - The features of the Java platform designed from the ground up to support concurrent programming
- Scala (for Gatling) - A modern multi-paradigm programming language designed to express common programming patterns in a concise, elegant, and type-safe way
- Hybrid OO/functional - A characteristic of a language that fuses object-oriented and functional programming in a statically typed setting
- Haskell - An advanced, purely functional programming language
- Purely functional
- Lazy evaluation - An evaluation strategy which delays the evaluation of an expression until its value is needed
- Elm - A delightful language for reliable web applications
- The Elm Architecture (TEA) - A simple pattern for infinitely nestable components
- Zig - A general-purpose programming language and toolchain for maintaining robust, optimal and reusable software
- Manual memory management
- Comptime - The mechanism that allows you to execute code at compile-time
- C - A general-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, with a static type system
- Manual memory management
- Macros - A fragment of code which has been given a name
135 - Date and Time
- ISO 8601 - An international standard covering the worldwide exchange and communication of date- and time-related data
- Unix time - A system for describing a point in time
- Libraries
- Ruby Time - An abstraction of dates and times
- Python delorean - A library for clearing up the inconvenient truths that arise dealing with datetimes in Python
- Python arrow - A Python library that offers a sensible and human-friendly approach to creating, manipulating, formatting and converting dates, times and timestamps
- Luxon - A powerful, modern, and friendly wrapper for JavaScript dates and times
- Go time - A package that provides functionality for measuring and displaying time
- Go when - A natural language date/time parser with no dependencies
- iCalendar - A media type which allows users to store and exchange calendaring and scheduling information
140 - Text and Structured Text Processing
140 - Text Basics
- ASCII - A character encoding standard for electronic communication
- Unicode - The universal character encoding standard
support
- UTF-8 - A variable-width character encoding used for electronic communication
- Unicode Emoji - A standardized set of characters that are used like emoticons
- Libraries
- ICU - A mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization
- Python emoji - An emoji library for Python
- Go emoji - A minimalistic emoji package for Go
141 - Regular Expression
- Regex - A sequence of characters that specifies a search pattern in text
- PCRE - A library implementing regular expression pattern matching using the same syntax and semantics as Perl 5
- Onigmo - A regular expressions library forked from Oniguruma
- Python re - The module provides regular expression matching operations similar to those found in Perl
- Go regexp - The package that implements regular expression search
- RE2 - A fast, safe, thread-friendly alternative to backtracking regular expression engines
- PRegEx - A Python library that allows for the programmatic creation of regular expressions
- Regex Tools
142 - Basic Text Manipulation
- General Text Manipulation
- GNU sed - A stream editor used to perform basic text transformations on an input stream
- sd - An intuitive find and replace command-line tool
- GNU diffutils - A package of several programs for finding the differences between files
- colordiff - A tool that produces the same output as diff but with coloured syntax highlighting to improve readability
- Tabular Data
- CSV - A delimited text file that uses a comma to separate values
- csvkit - A suite of command-line tools for converting to and working with CSV
- xsv - A fast CSV command line toolkit written in Rust
- qsv - A command line program for indexing, slicing, analyzing, splitting, enriching, transforming & joining CSV files
- Text::CSV - A comma-separated values manipulator (using XS or PurePerl)
- Python csv - A module that implements classes to read and write tabular data in CSV format
- Ruby csv - A complete interface to CSV files and data
- Go csv - A package that reads and writes comma-separated values (CSV) files
- Papa Parse - The powerful, in-browser CSV parser for JavaScript
- TSV - A delimited text file format that uses a tab character to separate values in a table
- GNU awk - A program that you can use to select particular records in a file and perform operations upon them
- Python tabulate - A library and a command-line utility that displays data in a visually appealing format
- Text::MarkdownTable - A module that can be used to write data in tabular form, formatted in MultiMarkdown syntax
- Terminal Table - A simple, feature-rich ascii table generation library for ruby
- CSV - A delimited text file that uses a comma to separate values
143 - Data Exchange Languages
- JSON - A lightweight data-interchange format
- jq - A lightweight and flexible command-line JSON processor
- gojq - A Pure Go implementation of jq
- gron - A tool that transforms JSON into discrete assignments to make it easier to grep for what you want and see the absolute 'path' to it
- JMESPath - A query language for JSON
- JSON::Tiny - A minimalistic JSON module with no dependencies
- Python json - A module that implements a JSON encoder and decoder
- XML - A simple, very flexible text format derived from SGML (ISO 8879)
- XPath - An expression language that allows the processing of values conforming to the XQuery and XPath Data Model
- DOM - A platform-neutral model for events, aborting activities, and node trees
- Python xml.etree.ElementTree - A module that implements a simple and efficient API for parsing and creating XML data
- logfmt - A log format that is simple, fast, and easy for humans and machines to parse
- JSON Lines - A convenient format for storing structured data that may be processed one record at a time
- Related Tools
144 - Configuration Languages
- JSON Superset
- Jsonnet - A data templating language for app and tool developers
- Hjson - A user interface for JSON
- YAML - A human-friendly data serialization language for all programming languages
- yq (python) - A command-line YAML, XML, TOML processor and jq wrapper for YAML, XML, TOML documents
- yq (go) - A portable command-line YAML, JSON, XML, CSV, TOML and properties processor
- YAML::Tiny - A Perl class for reading and writing YAML-style files, written with as little code as possible
- PyYAML - A YAML parser and emitter for Python
- StrictYAML - A type-safe YAML parser that parses and validates a restricted subset of the YAML specification
- JSON with comments - A JS library to parse and stringify JSONC (JSON with comments)
- CUE - An open-source data validation language and inference engine with its roots in logic programming
- Other Configuration Languages
- TOML - A minimal configuration file format that's easy to read
- TOML::Tiny - A minimal, pure perl TOML parser and serializer
- Python tomllib - A module that provides an interface for parsing TOML
- HCL - A toolkit for creating structured configuration languages that are both human- and machine-friendly
- TOML - A minimal configuration file format that's easy to read
- Related Tools
- yj - A command-line interface tool to convert between YAML, TOML, JSON, and HCL
- General Expression Languages
- CEL - A general-purpose expression language designed to be fast, portable, and safe to execute
145 - Template Engines
- Template Languages and Engines
- gomplate - A fast template renderer supporting many datasources and hundreds of functions
- Go template - A package that implements data-driven templates for generating textual output
- sprig - A library that provides template functions for Go's template language
- mustache - A logic-less template syntax
- Jinja - A full-featured template engine for Python
- Perl Text::Template - A library for generating form letters, building HTML pages, or whatever you can imagine
- Perl HTML::Template - A system for creating HTML templates
- Template Toolkit - A fast, flexible and highly extensible template processing system
- ERB - An easy to use but powerful templating system for Ruby
- Liquid - A safe, customer-facing template language for flexible web apps
- envsubst in gettext - A program that substitutes the values of environment variables
146 - Markup & Document Processing
- unified - A friendly interface backed by an ecosystem of plugins built for creating and manipulating content
- remark - A markdown processor powered by plugins
- markdown-it - A Markdown parser with 100% CommonMark support, extensions, and syntax plugins
- markdown-it-py - A Python port of the markdown-it project
150 - Debugging, Logging, and Unit Testing
151 - Debugging
- Debuggers
- Python
- VSCode Python extension - An extension with rich support for the Python language
- debugpy - An implementation of the Debug Adapter Protocol for Python 3
- Node.js
- VSCode built-in debugger - The built-in debugger that helps you speed up your edit, compile, and debug loop
- Node.js built-in inspector - The inspector which allows attaching Chrome DevTools to Node.js instances for debugging and profiling
- Go
- VSCode Go extension - An extension that provides rich language support for the Go programming language
- Delve - A debugger for the Go programming language
- Ruby
- VSCode rdbg Ruby Debugger - A Ruby debugger extension that is based on debug.gem
- debug.rb - The debugging functionality for Ruby
- Others
- VSCode Bash Debug - A bash debugger GUI frontend based on bashdb
- BASH Debugger - A bash shell command-line debugger
- GDB - The GNU Project debugger
- Python
- Debugger protocols
- DAP - The abstract protocol used between a development tool (e.g. IDE or editor) and a debugger
- V8 V8 Inspector Protocol - The protocol that allows for tools to instrument V8 to debug and profile JavaScript applications
152 - Logging
- Logging Libraries
- Python
- Python logging - The module that defines functions and classes which implement a flexible event logging system for applications and libraries
- loguru - A library which aims to bring enjoyable logging in Python
- Javascript/Typescript
- Go
- Go log - The package that implements a simple logging package
- zap - Blazing fast, structured, leveled logging in Go
- Logrus - A structured logger for Go (golang), completely API compatible with the standard library logger
- Zero Allocation JSON Logger - The package that provides a fast and simple logger dedicated to JSON output
- Others
- Python
153 - Basic Test Concepts
- Test Concepts and Best Practices
- Test Pyramid - A way of thinking about how different kinds of tests should be used to create a balanced portfolio
- Test case - A specification of the inputs, execution conditions, testing procedure, and expected results that define a single test
- Test double - An object that can stand in for a real object in a test
- Unit testing best practices with .NET - A set of best practices that help you write tests that are robust and easy to maintain
- JS Testing Best Practices - A summary of the top testing practices for JavaScript
- Test Protocols
- Test Anything Protocol - A simple text-based interface between testing modules and a test harness
154 - Test Frameworks and Tools
- Test Frameworks
- Bash
- Ruby
- Python
- Python unittest - A unit testing framework, sometimes referred to as 'PyUnit', which is a Python language version of JUnit
- pytest - A framework that makes it easy to write small, readable tests, and can scale to support complex functional testing
- Javascript/Typescript
- Go
- Go testing - A package that provides support for automated testing of Go packages
- Ginkgo - A BDD-style testing framework for Go
- Others
- Assertion Libraries
- Mocking Libraries
- unittest.mock - A library for testing in Python that allows you to replace parts of your system under test with mock objects
- sinon.js - A standalone and test framework agnostic JavaScript test spies, stubs and mocks
- Jest / Vitest built-in
- mockery - A project that creates mock implementations of Golang interfaces
- Code Coverage Tools
- Go cover - A tool that provides code coverage statistics for Go programs
- Istanbul - Yet another JS code coverage tool
- cobertura - A free Java tool that calculates the percentage of code accessed by tests
- LCOV - An extension of GCOV, a GNU tool which provides information about what parts of a program are actually executed
- kcov - A code coverage tester for compiled programs
- Test Automation Tools
- nox - A command-line tool that automates testing in multiple Python environments, similar to tox
160 - Program Execution and SDK
161 - Compiler
- Compiler - A computer program that translates computer code written in one programming language into another language
- Machine code - A computer program written in machine language instructions that can be executed directly by a computer's central processing unit (CPU)
- gcc - The GNU Compiler Collection which includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D
- rustc - The compiler for the Rust programming language
- LLVM Compiler Infrastructure - A collection of modular and reusable compiler and toolchain technologies
- Clang - A C language family frontend for LLVM
- Cross compiler - A compiler capable of creating executable code for a platform other than the one on which the compiler is running
- MinGW-w64 - An advancement of the original mingw.org project, created to support the GCC compiler on Windows systems
- Go build command - A tool for managing Go source code
- Static binary executable
- GopherJS - A compiler from Go to JavaScript
- Bunster - A shell compiler that turns your scripts into a self-contained executable programs
- Linker - A computer system program that takes one or more object files and combines them into a single executable file
- C Standard Library
162 - Runtime System
- Runtime System - The part of a program that runs on a computer, for the language in which the program was written
- Bytecode - A form of instruction set designed for efficient execution by a software interpreter
- Just-in-time compilation - A way of executing computer code that involves compilation during execution of a program
- Global interpreter lock - A mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at the same time
- Javascript
- Node.js - A free, open-source, cross-platform JavaScript runtime environment
- libuv - A multi-platform support library with a focus on asynchronous I/O
- Deno - A modern runtime for TypeScript and JavaScript
- Bun - A fast, all-in-one toolkit for running, building, testing, and debugging JavaScript and TypeScript
- WinterJS - A blazingly fast JavaScript runtime built on Rust, using the SpiderMonkey engine and the Tokio runtime
- Node.js - A free, open-source, cross-platform JavaScript runtime environment
- Python
- Ruby
- CRuby (default)
- JRuby - An implementation of the Ruby programming language atop the Java Virtual Machine
- Java SE - The most proven, trusted, and secure development platform for modern application development
- Java HotSpot VM - The primary Java Virtual Machine for desktops and servers, produced by Oracle Corporation
- JMX API - The Java Management Extensions technology which is a standard part of the Java Platform
- JDK tools - The command-line tools to create and build applications
- GraalVM - An advanced JDK with ahead-of-time Native Image compilation
- OpenJDK - The place to collaborate on an open-source implementation of the Java Platform, Standard Edition
- Eclipse Temurin - The open-source, enterprise-ready, and TCK-certified builds of OpenJDK
- .NET - The free, open-source, cross-platform framework for building modern apps and powerful cloud services
- CLR - The virtual machine component of .NET Framework
- Related Tools
163 - Build Automation
- Build Automation Tools
- GNU Make - A tool which controls the generation of executables and other non-source files of a program
- Remake - An enahanced version of GNU Make that adds improved error reporting, better tracing, profiling and a debugger
- makefile-graph - A Go module and CLI application, which parses GNU Make's internal database and generates a graph
- Gradle - An open-source build automation tool that is designed to be flexible enough to build almost any type of software
- Maven - A software project management and comprehension tool
- Task - A task runner / build tool that aims to be simpler and easier to use than GNU Make
- CMake - An open-source, cross-platform family of tools designed to build, test and package software
- CPack - A tool to configure generators for binary installers and source packages
- Meson - An open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible
- Rake - A Make-like program implemented in Ruby
- fpm - A tool which lets you easily create packages for Debian, Ubuntu, Fedora, CentOS, RHEL, Arch Linux, and more
- Tutorials
- Makefile Tutorial by Example - A tutorial that teaches you the basics of Makefiles
- GNU Make - A tool which controls the generation of executables and other non-source files of a program
- Monorepo Tools - A website with tools and resources for monorepos
164 - Program Documentation
- Program Documentation Tools
- apiDoc - A tool that creates a documentation from API descriptions in your source code
- JSDoc - An API documentation generator for JavaScript
- perldoc - A tool that looks up a piece of documentation in .pod format that is embedded in the perl installation tree
- Pod - A simple-to-use markup language used for writing documentation for Perl, Perl programs, and Perl modules
- pydoc - A tool that automatically generates documentation from Python modules
- Docstring - A string literal that appears as the first statement in a module, function, class, or method definition
- godoc - A tool that extracts and generates documentation for Go programs
- rustdoc - A tool that generates documentation for Rust projects
- RDoc - A tool that produces HTML and command-line documentation for Ruby projects
- Javadoc - A tool from Oracle for generating API documentation in HTML format from doc comments in source code
165 - Package Dependency
- Package Dependency Managers
- npm CLI - The world's largest software registry
- npm-check-updates - A command-line tool that allows you to upgrade your package.json dependencies to the latest versions
- npmgraph - A tool for exploring the npm dependency graph
- yarn - A package manager that doubles down as project manager
- pNPm - A fast, disk space efficient package manager
- dpmland - A simple, modern and easy way to manage the Deno modules and dependencies
- Bun package manager - A fast, npm-compatible package manager built into Bun
- orogene - A next-generation package manager for the JavaScript ecosystem
- pip - The package installer for Python
- poetry - A tool for dependency management and packaging in Python
- pdm - A modern Python package and dependency manager supporting the latest PEP standards
- uv - An extremely fast Python package and project manager, written in Rust
- go mod - A tool for managing Go source code
- cpanminus - A tool to get, unpack, build and install modules from CPAN
- bpkg - A lightweight bash package manager
- Conan - A dependency and package manager for C and C++ languages
- Cargo - The Rust package manager
- LuaRocks CLI - The package manager for Lua modules
- RubyGems CLI - The official package manager for Ruby
- Bundler - A tool that provides a consistent environment for Ruby projects
- NuGet CLI - The package manager for .NET
- stack - A cross-platform program for developing Haskell projects
- Gradle - An open-source build automation tool that is designed to be flexible enough to build almost any type of software
- Maven - A software project management and comprehension tool
- npm CLI - The world's largest software registry
166 - Virtual Environment
- Virtual Environment Managers
- Python venv - A module for the creation of virtual environments
- pyenv - A tool for simple Python version management
- nodeenv - A tool to create isolated node.js environments
- nvm - A POSIX-compliant bash script to manage multiple active node.js versions
- nvm-windows - A node.js version manager for Windows
- rv - A simple and powerful Ruby version manager written in Rust
- frum - A fast and modern Ruby version manager written in Rust
- perlbrew - A tool to manage multiple perl installations in your $HOME directory
- asdf - A tool version manager
- tenv - A versatile version manager for OpenTofu, Terraform, Terragrunt and Atmos
170 - Algorithms and Data Structures
170 - References
- External Resources
- NIST Dictionary of Algorithms and Data Structures - A dictionary of algorithms, algorithmic techniques, data structures, archetypal problems, and related definitions
171 - Algorithms
- Algorithm - A finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation
- Analysis Techniques
- Amortized analysis - A method for analyzing a given algorithm's complexity
- Big O notation - A mathematical notation that describes the limiting behavior of a function when the argument tends towards a particular value or infinity
- Algorithmic Paradigms
- Recursion - A method of solving a computational problem where the solution depends on solutions to smaller instances of the same problem
- Divide and conquer - An algorithm design paradigm
- Dynamic programming - A method for solving a complex problem by breaking it down into a collection of simpler subproblems
- Backtracking - A class of algorithms for finding solutions to some computational problems
- Greedy algorithm - An algorithmic paradigm that follows the problem-solving heuristic of making the locally optimal choice at each stage
- Sorting Algorithms
- Quicksort - An in-place sorting algorithm
- Merge sort - An efficient, general-purpose, and comparison-based sorting algorithm
- Heapsort - A comparison-based sorting algorithm
- Searching Algorithms
- Binary search - A search algorithm that finds the position of a target value within a sorted array
- Interpolation search - An algorithm for searching for a key in a sorted array that has been ordered by numerical values assigned to the keys
- String Algorithms
- Knuth–Morris–Pratt algorithm - A string-searching algorithm that searches for occurrences of a "word" W within a main text string T
- Boyer–Moore algorithm - A string-searching algorithm that is the standard benchmark for practical string-search literature
- Longest common subsequence - The problem of finding the longest subsequence common to all sequences in a set of sequences
- Graph Algorithms
- Traversal
- Breadth-first search - An algorithm for traversing or searching tree or graph data structures
- Depth-first search - An algorithm for traversing or searching tree or graph data structures
- Shortest Path
- Dijkstra's algorithm - An algorithm for finding the shortest paths between nodes in a weighted graph
- Bellman–Ford algorithm - An algorithm that computes shortest paths from a single source vertex to all of the other vertices in a weighted digraph
- Minimum Spanning Tree - A subset of the edges of a connected, edge-weighted undirected graph that connects all the vertices together
- Prim's algorithm - A greedy algorithm that finds a minimum spanning tree for a weighted undirected graph
- Kruskal's algorithm - A minimum-spanning-tree algorithm which finds an edge of the least possible weight that connects any two trees in the forest
- Other
- Tarjan's strongly connected components algorithm - An algorithm in graph theory for finding the strongly connected components (SCCs) of a directed graph
- Topological sorting - A linear ordering of the vertices of a directed acyclic graph (DAG)
- Traversal
- Hashing Algorithms
- Hash function - Any function that can be used to map data of arbitrary size to fixed-size values
- Analysis Techniques
172 - Data Structures
- Abstract Data Types - A mathematical model for data types
- String - A finite sequence of symbols that are chosen from a set called an alphabet
- List - An abstract data type that represents a finite number of ordered values
- Associative array - An abstract data type that can hold a collection of (key, value) pairs
- Stack - An abstract data type that serves as a collection of elements, with two main operations: push and pop
- Queue - An abstract data type that serves as a collection of elements, with two main operations: enqueue and dequeue
- Priority queue - An abstract data type which is like a regular queue or stack data structure, but where additionally each element has a "priority" associated with it
- Tree - An abstract data type that represents a hierarchical tree structure with a set of connected nodes
- Graph - An abstract data type that is meant to implement the undirected graph and directed graph concepts from mathematics
- Directed acyclic graph (DAG) - A directed graph with no directed cycles
- Data Structures - A data organization, management, and storage format that is designed to enable efficient access and modification
- Array - A data structure consisting of a collection of elements (values or variables)
- Array slicing - An operation that extracts a subset of elements from an array and packages them as another array
- Hash table - A data structure that implements an associative array abstract data type
- Collision Resolution
- Cuckoo hashing - A scheme in computer programming for resolving hash collisions of keys in a hash table
- Linear probing - A scheme in computer programming for resolving collisions in hash tables
- Collision Resolution
- Linked data structure - A data structure which consists of a set of data records (nodes) linked together and organized by references
- Persistent structure - A data structure that always preserves the previous version of itself when it is modified
- Disjoint-set data structure - A data structure that stores a collection of disjoint (non-overlapping) sets
- Tree-based
- Search tree - A tree data structure used for locating specific keys from within a set
- Binary search tree (BST) - A rooted binary tree data structure with the key of each internal node being greater than all keys in the respective node's left subtree and less than the ones in its right subtree
- Markle tree - A tree in which every leaf node is labelled with the cryptographic hash of a data block
- Heap - A tree-based data structure that satisfies the heap property
- Trie - A search tree data structure used to locate specific keys from within a set
- Fenwick tree - A data structure that can efficiently update elements and calculate prefix sums in a table of numbers
- Search tree - A tree data structure used for locating specific keys from within a set
- Graph-based
- Adjacency matrix - A square matrix used to represent a finite graph
- Adjacency list - A collection of unordered lists used to represent a finite graph
- Array - A data structure consisting of a collection of elements (values or variables)