Skip to main content

10 - Advanced Programming

Languages for Systems & Application Development

Rust Language

  • 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
    • Tools
      • C2Rust - A tool that is able to translate most C modules into semantically equivalent Rust code
    • Tutorials
      • Rust by Example - A collection of runnable examples that illustrate various Rust concepts and standard libraries

C# and F# Languages

  • 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 Family Languages

  • Java - The #1 programming language and development platform
  • Scala - 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

C & Other Languages

  • 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
  • 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
  • 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
  • Elixir - A dynamic, functional language for building scalable and maintainable applications

Text & Time Format Standards

Text Format & Character Code

  • 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
  • CSV - A delimited text file that uses a comma to separate values
  • TSV - A delimited text file format that uses a tab character to separate values in a table
  • 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

DateTime Format

  • UTC - The primary time standard globally used to regulate clocks 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

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
    • Rubular - A Ruby-based regular expression editor
    • Wubular - A Javascript-based regular expression editor, inspired by Rubular
    • RegEx101 - An online regular expression editor and debugger

Text Manipulation

  • General Tools
    • 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
    • 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
    • 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

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
    • Haml - A markup language that's used to cleanly and simply describe the HTML of any web document without the use of inline code
    • Liquid - A safe, customer-facing template language for flexible web apps
    • envsubst in gettext - A program that substitutes the values of environment variables

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

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
    • fx - A terminal JSON viewer
    • jnv - An interactive JSON viewer and jq filter editor designed for navigating JSON

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
  • 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

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
    • 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
    • Others
  • 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

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
      • bunyan - A simple and fast JSON logging library for node.js services
      • winston - A logger for just about everything
      • debug - A tiny JavaScript debugging utility modelled after Node.js core's debugging technique
    • 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
      • logger - A tool to enter messages into the system log
      • log4j - A versatile, industrial-grade Java logging framework
      • log4sh - An advanced logging framework for shell scripts
      • log4net - A port of the excellent Apache log4j framework to the Microsoft .NET runtime

Test Frameworks & Tools

  • 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
      • tappy - A set of tools for working with the Test Anything Protocol (TAP)
      • Node-Tap - A Test-Anything-Protocol library for JavaScript

Test Frameworks

  • Bash
    • Bats-core - A Bash Automated Testing System
    • shUnit2 - A unit test framework for Bourne based shell scripts
    • shellspec - A full-featured BDD unit testing framework for dash, bash, ksh, zsh and all POSIX shells
  • Ruby
    • Minitest - A complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking
    • RSpec - A testing tool for the Ruby programming language
    • aruba - A tool to test command-line applications with Cucumber-Ruby, RSpec or Minitest
  • 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
    • Vitest - A blazing fast unit-test framework powered by Vite
    • Jest - A delightful JavaScript Testing Framework with a focus on simplicity
    • Mocha - A feature-rich JavaScript test framework running on Node.js and in the browser
    • Runtime-integrated
      • bun test - A fast, Jest-compatible test runner built into Bun
      • deno test - A built-in test runner that you can use for testing JavaScript and TypeScript code
  • Go
    • Go testing - A package that provides support for automated testing of Go packages
    • Ginkgo - A BDD-style testing framework for Go
  • Others
    • JUnit - The 5th major version of the programmer-friendly testing framework for Java and the JVM
    • xUnit.net - A free, open source, community-focused unit testing tool for the .NET Framework

Assertion Libraries

  • Chai - A BDD / TDD assertion library for node and the browser
  • Gomega - A matcher/assertion library for Go

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 Supporting Tools

  • Mocking Libraries
    • Jest / Vitest built-in
    • 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
    • mockery - A project that creates mock implementations of Golang interfaces
  • Test Data Generators
  • Multi-Environment Test Runners
    • nox - A command-line tool that automates testing in multiple Python environments, similar to tox
    • tox - A command-line driven automated testing tool for Python

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
  • Monorepo Tools - A website with tools and resources for monorepos
    • Lerna - The original monorepo tool for JavaScript/TypeScript
    • Nx - A powerful open-source build system that provides tools and techniques for enhancing developer productivity
    • Gradle - An open-source build automation tool that is designed to be flexible enough to build almost any type of software

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

Package Dependency Management

  • 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

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