Skip to content

Layer of Software, Application and Application Infrastructure

Published: at 10:25 AM

If you had to pick one idea one concept that’s the most important thing in all compute science world? What it is? Donald Knuth’s anser is “layer of abstraction”(watch A Philosophy of Software Design by John Ousterhout). Layer of abstraction is a powerful concept in computer science. It’s purpose is to hide the complexity of the underlying implementation and provide a clear and easy-to-use interface. One of excellent example of layer of abstraction is layer of computer architecture(Watch Computer Architecture - Levels of Transformation by Onur Mutlu). Another example is layer of computer network(Watch Computer Networks - Layering by Jim Kurose).

Layer of Software Architecture and Computer Network

Jess Martin write a blog about software layers. In his article Pace Layers for Software , he thought software system as a layered structure and each layer different capability. Building upon his interesting thinking framework, I made some adjustment and addition for his work. I redraw the illustration of layers of software and give more explanation about this kind of thinking. These kind layered structure might provide you an insightful abstraction towards the software system, alouthgh it’s seems be very trivial for experienced software engineers. In this abstraction, the interesting part might be the application and application infrastructure.

Layer of Software

Plguin/Extension

A plugin/extension is a software add-on that is installed on a program, enhancing its capabilities. Usually, they rely on the runtime of host application. The difference between plugin and extension is plugin didn’t change the host application’s functionality, while extension might modify the host application’s functionality. Following are some examples of plugin/extension. Example including Microsoft OfficeOffice Add-ins, Anki Add-ons, Obsidian Plugin, Zoom Plugins, PostgreSQL extension, Chrome Web Store, VS Code Extension, Gradle Plugin.

Script

Application

Most of software development engineer work on this layer, including:

- Desktop Application
- Web Application
- Mobile Application
- Backend Service
- Machine Learning Application
- Data Analysis Application

Application Infrastructure (Library & Framework & Platform)

- JavaScript, NPM, https://www.npmjs.com/
- Python, PyPI, https://pypi.org/
- Java, Maven, https://mvnrepository.com/
- .NET, NuGet, https://www.nuget.org/
- Ruby, RubyGems, https://rubygems.org/
- Rust, Cargo, https://crates.io/
- Go, Go Modules, https://pkg.go.dev/
- PHP, Composer, https://packagist.org/
- Frontend Framework like React, Angular, Vue
- Backend Framework like Spring, Django, Express, Flask
- Microservice Framework like Spring Cloud, Dapr
- Machine Learning Framework like TensorFlow, PyTorch
Platform Software
- Database(PostgreSQL, MySQL, Oracle, SQL Server)
- Key-Value Store(Redis, Memcached)
- Stream Processing(Kafka, Flink)
- Full-Text Search(Elasticsearch, Solr)
- Web Server(Apache, Nginx)
- Container Orchestration(Kubernetes)
Serverless Platform
- AWS S3,
- AWS RDS
- Auth as a Service
- Email as a Service
- Payment Gateway(Stripe, Paypal)
- Email Service(AWS SES, SendGrid)

Programming Language

Different programming languages provide different abstraction towards the operating system and hardware.

Operating System