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).
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.
The definition of clean code can be very subjective on the margins, but very obvious from an absolute perspective.
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 and Waterfall are popular alternatives to the organization of tasks in project management.
Refactoring is the process of updating code without changing its API or underlying functionality.
Edge Computing can be seen as a natural and ongoing expansion of the location of processing from data centers... to you.
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 is a very broad choice that branches out into more narrow choices. This blog post navigates this tree of choices.
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?
Encryption techniques can be broadly categorized as either symmetric or asymmetric. Each has a specific use case, but they are often used together.
Load Testing and Stress Testing both fall under the umbrella of Performance Testing. Their primary objectives are slightly different.
Concurrency and Parallelism are similar but distinct concepts. The former is possible with a single core while the latter is not.
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).
Object-Oriented Programming and Functional Programming are both foundational paradigms that every developer should know.
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.
When comparing gRPC and Kafka, we're likely comparing gRPC's streaming feature rather than its unary RPC.
gRPC and REST are among the most prominent protocols for web communication. Their use cases are what set them apart.
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.
I/O (or IO) stands for Input / Output, and it can be interpreted in two contexts.
A thread is a series of instructions in a machine that was spawned by a process. A process is an instance of an application.
Internet of Things are considered to be embedded devices that have internet connectivity capabilities (directly or indirectly).
OLTP (Online Transaction Processing) and OLAP (Online Analytical Processing) are two different architectural designs for relational databases that serve very different purposes.
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 is not a standard term used in the industry, but it does point to the greater domain of Observability.
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.
A Bearer Token is a long-lived token that belongs to an authorized entity following authentication.
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.
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 Graphs are networks of relationships between dependencies in an application. These relationships are created when one package is imported into another.
Build Time is a window of time in the Application Development and Release Lifecycle. In this post, we look at its steps.
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 can be thought of as building blocks, puzzle pieces, or primitives. In this blog post, we lightly explore.
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 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 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.
Docker did not introduce the concept of containerization, but significantly popularized and simplified the concept. It is now the most popular containerization platform.
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 and UDP are complete opposite transport protocols in terms of both delivery accuracy and speed. This post dives into the differences.
The classic communication paradigm between a client and server.
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 systems are typically asynchronous and decoupled in nature, and they have some advantages over their synchronous request/response counterparts.
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.
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.
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 serves as an important mechanism in more than just distributed computing, but that is the focus of this blog post.
Retries are exactly what it sounds like: retrying an operation after a failure. This blog post is a short intro into the concept.
Role-Based Access Control is a common mechanism for assigning a set of privileges to users of an application via roles.
People adapted to the earlier industrial revolutions. The tools for adapting to the AI Revolution are available at our fingertips.
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.
Code is everywhere. You're made of it. It exists in biology, literature, and certainly computer science.
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.
Also known as Object-Oriented Design, it is a paradigm for writing code where data and behavior are encapsulated by objects that leverage polymorphism.
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.
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".
Kubernetes is a container orchestration system that has exploded in popularity over the past few years. This trend is unlikely to stop.
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.
'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.
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?
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.
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.
This post describes Software.Land's mission.
GraphQL and REST APIs are two of the most popular network APIs and in this blog post, we'll explore the differences.
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.
In this post, we explore different considerations when asking if learning to code is an effective use of time.
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.
A common first question when someone dips their toes into the world of software is 'which programming language should I try to learn first?'
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.
This post breaks down the differences between the top 'learn to code' platforms based on 6 categories.
Review of CodeCademy based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
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.
Review of edX based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of freeCodeCamp based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of Khan Academy based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of LinkedIn Learning based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of PluralSight based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of Treehouse based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of Udacity based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
Review of Udemy based on 6 comparison categories: cost, teacher feedback, range of tools, computer science, real-world projects, and beginner environments.
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.
Concise definitions of common terms in software. This post is intended as reference.
APIs can be found all over software. This post quickly describes APIs in an overview, presents examples, and further elaborates in a closer look.
Sam Malayek works in Vancouver, using this space to fill in a few gaps. Opinions are his own.