Software.Land

    Authorization Middleware

    March 17, 2024

    Authorization Middleware is code that sits at the very front of an application between the entrypoint and before any data is accessed.

    What is Recursion?

    March 16, 2024

    In computer science, Recursion is when a function calls itself. This process can repeat until the size of the call stack.

    What is a Service Mesh?

    March 15, 2024

    Service Meshes (e.g. Istio) solve security and scaling challenges that distributed systems like Kubernetes encounter once they reach a certain scale.

    Minmax Tree

    March 14, 2024

    A Minmax (a.k.a. Minimax) Tree is a tree data structure that is meant to represent a two-sided game where each row represents alternating choices between each side back-and-forth from the root.

    A-Star Pathfinding

    March 13, 2024

    A-Star (A*) is a pathfinding algorithm that is optimized from Dijkstra's algorithm. The difference is that it uses a heuristic to help decide which node to evaluate next.

    DFS Backtracking

    March 12, 2024

    DFS (Depth-First Search) Backtracking is a brute force method of solving optimization problems.

    InOrder vs PreOrder vs PostOrder

    March 11, 2024

    In-Order, Pre-Order, and Post-Order are the three primary DFS binary tree traversal methods.

    Tail Latency

    March 10, 2024

    When measuring the latency of anything, Tail Latencies typically refer to the data points at the slow end of a distribution of latencies.

    TLS 1.2 Vulnerability

    March 09, 2024

    TLS 1.2 has several vulnerabilities that have been addressed in 1.3.

    Maximum Flow Algorithm

    March 08, 2024

    Maximum Flow Algorithms are intended to solve the problem of how to optimally move something with discrete quantities through a network of connected nodes with fixed capacities.

    Protobuf Encoding

    March 07, 2024

    Protocol Buffers (a.k.a. Protobufs) are the preferred messaging construct to use for communication over gRPC. Data is encoded in a highly efficient format that is discussed in this blog post.

    Framework vs Library vs Package

    March 06, 2024

    Framework and Library have a distinct meaning whereas Package is generic. In this blog post, we explore the possible meanings of Package alongside the distinct meanings of Framework and Library.

    What are Distributed Systems?

    March 05, 2024

    In the typical context, a Distributed System is a network of services that work together as a single application. However, the entire internet can also be considered a Distributed System.

    Dynamic Programming Matrix

    March 04, 2024

    More correctly referred to as Tabulation, it is an algorithmic method of Dynamic Programming for breaking down a problem into its sub-problems.

    What is DevOps?

    March 03, 2024

    DevOps is a model where development and operations teams are one, but it has another meaning as well (discussed at the end of this blog post).

    What is Cloud Migration?

    March 02, 2024

    Cloud Migration is the process of moving digital resources to a Cloud Platform (the destination). The source of this migration decides how we categorize the process.

    What is Clean Code?

    March 01, 2024

    The definition of clean code can be very subjective on the margins, but very obvious from an absolute perspective.

    Git vs GitHub

    February 29, 2024

    Git and GitHub are completely different things. Git is version control software and GitHub is the largest host of source code that uses some form of version control.

    Agile vs Waterfall

    February 28, 2024

    Agile and Waterfall are popular alternatives to the organization of tasks in project management.

    What is Refactoring?

    February 27, 2024

    Refactoring is the process of updating code without changing its API or underlying functionality.

    Edge Computing

    February 26, 2024

    Edge Computing can be seen as a natural and ongoing expansion of the location of processing from data centers... to you.

    Generative Coding

    February 25, 2024

    Generative Coding breaks new ground in the fight against information asymmetry, helping to increase productivity by providing an advanced form of autocomplete.

    SQL vs NoSQL

    February 24, 2024

    SQL vs NoSQL is a very broad choice that branches out into more narrow choices. This blog post navigates this tree of choices.

    Strategy vs Factory Pattern

    February 23, 2024

    The Strategy and Factory design patterns are distinct and intended for different use cases. One is intended to polymorphically alter behavior of an existing object, while the other is intended for variations in object creation. Is there any overlap?

    Symmetric vs Asymmetric Encryption

    February 22, 2024

    Encryption techniques can be broadly categorized as either symmetric or asymmetric. Each has a specific use case, but they are often used together.

    Load vs Stress Testing

    February 21, 2024

    Load Testing and Stress Testing both fall under the umbrella of Performance Testing. Their primary objectives are slightly different.

    Concurrency vs Parallelism

    February 20, 2024

    Concurrency and Parallelism are similar but distinct concepts. The former is possible with a single core while the latter is not.

    CockroachDB vs Postgres

    February 19, 2024

    CockroachDB is a distributed database that uses the same SQL dialect as Postgres. The primary difference between them is the fact that a CockroachDB cluster's write nodes can be distributed around the world (rather than just its read nodes).

    OOP vs Functional

    February 18, 2024

    Object-Oriented Programming and Functional Programming are both foundational paradigms that every developer should know.

    Functional vs Procedural

    February 17, 2024

    Functional and Procedural are among the earliest and most integral programming paradigms. It's nearly impossible to write code without using these paradigms to some extent.

    gRPC vs Kafka

    February 16, 2024

    When comparing gRPC and Kafka, we're likely comparing gRPC's streaming feature rather than its unary RPC.

    gRPC vs REST

    February 15, 2024

    gRPC and REST are among the most prominent protocols for web communication. Their use cases are what set them apart.

    Software.Land's Alignment with Society

    February 14, 2024

    Other blog posts have touched on the goals and mission of Software.Land at various levels of scope. This blog post speaks to the socioeconomic alignment.

    What is I/O?

    February 13, 2024

    I/O (or IO) stands for Input / Output, and it can be interpreted in two contexts.

    Process vs Thread

    February 12, 2024

    A thread is a series of instructions in a machine that was spawned by a process. A process is an instance of an application.

    What is IoT?

    February 11, 2024

    Internet of Things are considered to be embedded devices that have internet connectivity capabilities (directly or indirectly).

    OLTP vs OLAP

    February 10, 2024

    OLTP (Online Transaction Processing) and OLAP (Online Analytical Processing) are two different architectural designs for relational databases that serve very different purposes.

    Distributed Cloud

    February 09, 2024

    Distributed Cloud is not a term that is commonly used in the industry. However, it does point to a set of Cloud services that are distributed in nature.

    Metrics Monitoring

    February 08, 2024

    Metrics Monitoring is not a standard term used in the industry, but it does point to the greater domain of Observability.

    CI/CD

    February 07, 2024

    CI/CD (Continuous Integration / Continuous Development) is the ongoing cycle of developing and releasing software in a scalable manner. CI and CD can be broken down further into smaller pieces.

    Bearer Token

    February 06, 2024

    A Bearer Token is a long-lived token that belongs to an authorized entity following authentication.

    SAML vs OAuth

    February 05, 2024

    SAML and OAuth are orthogonal concepts. SAML is designed to be used as both Authentication and Authorization. OAuth is designed to be used as Authorization, but can be used as Authentication as a hack (this is not desirable). In this blog post, we explore.

    Class vs Interface

    February 04, 2024

    Classes are the hallmark of Object-Oriented Programming. On the other hand, Interfaces exist in languages that don't support OOP (e.g. Golang).

    Dependency Graph

    February 03, 2024

    Dependency Graphs are networks of relationships between dependencies in an application. These relationships are created when one package is imported into another.

    Build Time

    February 02, 2024

    Build Time is a window of time in the Application Development and Release Lifecycle. In this post, we look at its steps.

    Object

    February 01, 2024

    One of the most fundamental building blocks of programming languages and the foundation of Object-Oriented Programming, Objects are explored in this blog post, inside and outside the context of OOP.

    Cloud Infrastructure

    January 31, 2024

    Cloud Infrastructure can be thought of as building blocks, puzzle pieces, or primitives. In this blog post, we lightly explore.

    App Sec

    January 30, 2024

    Application Security (App Sec) is a very broad topic with many sub-topics. In this blog post, we make a cursory tour.

    Zero-Trust Security

    January 29, 2024

    Zero-Trust Security is a very misleading term as it exists today. It would be better known as Minimal-Trust Security. In this blog post, we explain why.

    Information Asymmetry

    January 28, 2024

    Information Asymmetry exists all around us. Everyone knows something that others don't. This phenomenon exists with groups as well, and this blog post examines the impacts.

    What is Docker?

    January 27, 2024

    Docker did not introduce the concept of containerization, but significantly popularized and simplified the concept. It is now the most popular containerization platform.

    What is VPN?

    December 31, 2023

    VPNs (Virtual Private Networks) are sets of servers that route (a.k.a. tunnel) internet traffic from the user to the user's web destination.

    TCP vs UDP

    December 30, 2023

    TCP and UDP are complete opposite transport protocols in terms of both delivery accuracy and speed. This post dives into the differences.

    Request Response

    December 29, 2023

    The classic communication paradigm between a client and server.

    Asynchronous vs Synchronous

    December 26, 2023

    All communication can be categorized as either Asynchronous or Synchronous. Some can even be categorized as both, where it depends on whether we're looking at it from a high or low-level perspective.

    Event Driven Architecture

    December 22, 2023

    Event-driven systems are typically asynchronous and decoupled in nature, and they have some advantages over their synchronous request/response counterparts.

    Declarative vs Imperative

    December 16, 2023

    In the context of programming, 'declarative' and 'imperative' are words used to describe opposite ends of a programming paradigm that we dive into in this post.

    Vertical vs Horizontal Scaling

    November 19, 2023

    Scaling is the process of growing or shrinking capacity. It primarily happens in two directions: horizontally or vertically. There are different flavors which we explore in this post.

    Sharding

    October 30, 2023

    The concept of vertical vs horizontal scaling doesn't only exist with application servers. It exists with database servers as well, and we explore that in this post.

    Rate Limiting

    October 15, 2023

    Rate-limiting serves as an important mechanism in more than just distributed computing, but that is the focus of this blog post.

    Retries (Retry Patterns)

    September 17, 2023

    Retries are exactly what it sounds like: retrying an operation after a failure. This blog post is a short intro into the concept.

    RBAC (Role Based Access Control)

    August 31, 2023

    Role-Based Access Control is a common mechanism for assigning a set of privileges to users of an application via roles.

    Staying Ahead of the AI Revolution

    July 22, 2023

    People adapted to the earlier industrial revolutions. The tools for adapting to the AI Revolution are available at our fingertips.

    Encapsulation

    June 30, 2023

    Encapsulation is a concept that exists at all levels of systems -- from a global scope down to the scope of application constructs. It exists in both physical and digital contexts. This post breaks it down.

    What is Code?

    June 04, 2023

    Code is everywhere. You're made of it. It exists in biology, literature, and certainly computer science.

    Microservices vs Monolithic

    May 22, 2023

    There exists a spectrum for the granularity of services in a distributed system from nano-services to a single monolith. In this post, we explore the trade-offs.

    What is OOP (Object-Oriented Programming)?

    April 29, 2023

    Also known as Object-Oriented Design, it is a paradigm for writing code where data and behavior are encapsulated by objects that leverage polymorphism.

    What is a Data Structure?

    March 26, 2023

    There's something special about data structures. Everything in the world can be modeled by some type or combination of data structures. It really makes you wonder.

    What is Serverless?

    March 05, 2023

    The term "Serverless" is actually a misnomer. Your code definitely is running on servers, but their management is so removed from the developer, that it feels "Serverless".

    What is Kubernetes?

    February 21, 2023

    Kubernetes is a container orchestration system that has exploded in popularity over the past few years. This trend is unlikely to stop.

    What is a Container?

    February 06, 2023

    The term 'container' has one prevalent usage in the context of containerized environments, which are similar to virtual machines. There is a more generic, but seldom addressed, use of the term that we also explore.

    What is the Cloud?

    January 30, 2023

    'The Cloud' is a very common term used today that may invoke imagery that is not based in reality for many people. This post aims to clarify its true meaning.

    Software Engineer vs Software Developer

    January 21, 2023

    This is a fairly innocuous question on the surface, but once you dive deeper, it becomes complicated. Is there no difference between the two terms? Is the difference in the scope of work? Or, is it about the credentials?

    Testing in Software Engineering

    January 15, 2023

    The number of different testing methodologies in software is endless. The timing of introducing new forms of testing is difficult to get right. This post attempts to provide a birds-eye view on these topics.

    Static vs Dynamic Websites

    January 03, 2023

    Historically, websites are dynamic where the HTML is rendered on a server, even if the content is static. With static websites, that content can be rendered beforehand and delivered to the user all at once on page load.

    About this Blog

    November 06, 2022

    This post describes Software.Land's mission.

    REST API vs GraphQL

    October 05, 2022

    GraphQL and REST APIs are two of the most popular network APIs and in this blog post, we'll explore the differences.

    Throughput vs Latency

    July 24, 2022

    Low latency is easy to achieve if high throughput is not a requirement. Similarly, high throughput is easy to achieve if low latency is not a requirement. If both are a requirement, then complexity must increase to alleviate inherent structural bottlenecks.

    Why Learn to Code?

    May 08, 2022

    In this post, we explore different considerations when asking if learning to code is an effective use of time.

    High-Level vs Low-Level

    March 29, 2022

    What does it mean when someone is describing something at a high-level vs a low-level? Let's explore it in the context of software.

    Which Programming Language to Start?

    February 22, 2022

    A common first question when someone dips their toes into the world of software is 'which programming language should I try to learn first?'

    Previous Page Token for Cursor Pagination

    December 06, 2021

    We dive into previous page tokens for Cursor Pagination and examine their time complexity. We also touch on why the intuitive approach doesn't work.

    Best Learn to Code Platforms

    June 01, 2020

    This post breaks down the differences between the top 'learn to code' platforms based on 6 categories.

    CodeCademy Review

    May 27, 2020

    Review of CodeCademy based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    Coursera Review

    May 27, 2020

    Review of Coursera based on 6 comparison categories: cost, teacher feedback, range of difficulties, range of tools, computer science, real-world projects, and beginner environments.

    edX Review

    May 27, 2020

    Review of edX based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    freeCodeCamp Review

    May 27, 2020

    Review of freeCodeCamp based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    Khan Academy Review

    May 27, 2020

    Review of Khan Academy based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    LinkedIn Learning Review

    May 27, 2020

    Review of LinkedIn Learning based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    PluralSight Review

    May 27, 2020

    Review of PluralSight based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    Treehouse Review

    May 27, 2020

    Review of Treehouse based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    Udemy Review

    May 27, 2020

    Review of Udemy based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    Udacity Review

    May 27, 2020

    Review of Udacity based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.

    What is an Interface?

    March 05, 2020

    Software (and all technology) is just tools connected to other tools. Interfaces are the points of connection and they come in different shapes and sizes.

    Glossary

    February 10, 2020

    Concise definitions of common terms in software. This post is intended as reference.

    What is an API?

    February 10, 2020

    APIs can be found all over software. This post quickly describes APIs in an overview, presents examples, and further elaborates in a closer look.


    Authors

    Sam Malayek

    Sam Malayek works in Vancouver, using this space to fill in a few gaps. Opinions are his own.