Preface

The following is an excerpt and summary from a lecture I delivered in January of 2025 to my Computer Science I students. It is the most recent revision to material on the topic of Modern Digital Computers. There likely will be some revisions on this presentation in the future, but I hope it will benefit my audience as a fair synopsis of the topic.

Overview

Modern digital computers can be described in a number of ways, but a fairly easy to understand approach is to divide the makeup of a computer into two categories: hardware and software. Modern computers are designed around the integration of both categories to truly define a functional tool.

Hardware

Hardware means any physical part of a computer system, such as the signboard (motherboard), network cards, RAM, hard drives and other storage media, and other peripheral devices.  Given the tendency of many modern computers to include some accessories as part of the case of the system itself, even the actual physical container can essentially be considered a part of the computer’s hardware. In the scope of this class, there is little else we need to be concerned with regarding hardware at this time.

Software

Equally important to the makeup of modern computers are various forms of software.  In simple terms, software is virtual systems used for command hardware to perform calculations and generate results based on data in various forms.

In Combination

Modern computers essentially require the collaborative use of hardware and software. The physical hardware of a computer is extraordinarily powerful and fast in terms of the ability to perform calculations and perform tasks, but would be at best unwieldy and provide no efficient manor of use without software designed to leverage the raw capabilities that the hardware has. In essence, you could never effective issue instructions manually to the physical components of a hardware in a meaningful way were it not for having software that handles the massive undertaking of requesting and running calculations and performing the repetitive tasks that generate useful results.

Categories of Software

Much like the general concept of computers, there are many ways we could define or break down the organization of types of software to have an understanding of what types of software even exist.  In simple terms, though, we can generally think of the actual logical control programs of a computer into 5 general categories: Firmware, Operating System, Driver, Service and Application. In addition, there are logical systems that exist to help with management of the resources of a computer, especially those involving data, both for storage and manipulation. Starting with the 5 general categories, we have definitions for their purpose.

  1. Firmware is logical software that is directly stored in certain types of microchips (specialized controlling hardware) which is stored in non-volatile memory.  Non-volatile means that the software and associated stored configuration data is retained even when powered ceases to be provided.  Firmware is “simple” software that allows for the simple functions a computer needs to initialize all of the hardware for later used in complex operations. The data that is contained is minimal information that specifies such values as speed settings, memory configuration, low-level communication, and settings for such critical utility hardware as fans (what speed to set for optimal cooling and performance), and default choices for which ports or specialized devices will be configured in what fashion. For example, if a computer has both a built-in basic video processor and a high-performance video processor and card, firmware is used to provide the basic instructions for operating either for displaying output to your monitor about the startup process. The choice on which video port (or ports) to output to, which is considered primary, or if one is disabled are all examples of configuration which would also be stored the the small quantity of memory that is also included in these chips.
  2. An operating system is actually a collection of computer programs that work cohesively to serve as an indirect medium between the hardware of the computer and various other software and / or users, performing the translation of commands for the execution of complex operations into the individual, simpler tasks that the hardware collectively performs. The operating system performs the task of loading other computer software and serves as a common connective framework for all operations. While generally referred to as a piece of software, the nature of controlling such a vast, flexible array of hardware results in what really amounts to many many programs that are designed to work together for management of the assets and resources that comprise a computer. A key part of an operating system is the kernel, which serves as the primary gateway for all management and communication starting from the moment the last piece of firmware has completed base setup.
  3. Drivers are individual programs which communicate with the operating system on one end and the hardware on the other. When an operating system’s kernel is requested to provide instructions to a particular type of hardware (for example, a video card), the instruction from the kernel to the driver are always in the same fashion (the format of data flowing to and from drives and the operating system is uniform. The driver is then built in such a way to translate the common instructions into commands that the specific piece of hardware would understand.  So in the example of a graphics card, the kernel would be give instructions that a certain position on the display should be set to a certain color value.  That information is universal instruction and is sent to the driver for your video card.  On another computer, the data would be essentially the same being passed to the driver for that computer’s video card.  Even if the video cards are from two different manufacturers with two different designs to their hardware, the information passing through from the kernel to the driver is the same.  How that data is then to be handed over to the video card is handled by the driver program itself.  In this way, a person writing a program for users can write the instructions that indicate the location of a screen and the color value to set. The kernel passes this through in a uniform fashion, and the driver, which is design to read from the uniform fashion can translate into what format that vendor’s product needs for action.
  4. Services are programs that run without the need of explicit user instructions to do so. There are many types of services that perform many types of tasks automatically. Anti-virus software will contain services that continuously check data on a computer to watch for patterns of activity or instructions that conform to a profile of dangerous behavior or requests. Other software is used for ensuring that your computer’s system date and time are in synchronization with the universally accepted time in whatever location you’re in. Other services check against external data sources for announcements to share with you, such as weather updates, sporting event scores or a sale from a preferred merchant.  There are other services still that run to handle maintenance and security tasks, update your calendar, fetch the latest email messages and calendar information, or alert you that someone posted a video of their cat being silly.  It might seem crazy to think it, but that notification you got that someone has a video of a puppy scaring itself by stepping on a bicycle horn is part of some specialized, complex engineering effort, but let’s face it, the reaction was cute, so obviously it was worth the investment.
  5. Applications are fairly similar in a lot of ways to the prior category, services. The biggest difference is that applications are generally executed (or at least started) by an explicit direct command from a user, as opposed to the automation that is typically associated with a service. Applications include any software tool that you use to directly perform tasks, including programs used for writing documents, helping you with your banking and finance, browsing them web and playing that invigorating game of tic-tac-toe.

At times, the line is a bit blurred between some of these elements, especially because most software packages contain elements that fall into multiple categories at once.  For example, the software that is came with your webcam for video conferences might consist of 1 or more drivers for the camera itself (especially if it also contains a microphone in addition to the camera), the application for setting up and managing the video conferences, and services used to check for updates for the drivers, the application and even the service itself, and to alert you if someone is trying to invite YOU to a conference THEY set up.

So it should be clear that these 5 categories of software, though distinct in purpose, are largely interconnected and interact together a great deal. It should also be clear that a software package may consists of pieces that fall into each category, and were engineered to work together for streamlined use. Even firmware, which is rarely altered in most cases, can be updated by an application that a user manually invokes, handled through the operating system, to improve performance and security at the basest level of your computer.

Summary

It is important to understand that this is just one way to describe computers and categorize their makeup. The reason I gave this approach is that it is relatively streamlined, but simplifies in a way that should give you a fundamentally sound picture of what drives the modern digital computer. Some sources might express the thought that the preceding explanation is overly-simplified, some sources might consider it overly-complicated. Some sources might tell you that there are other approaches to explaining the relationships between various aspects of computer technology. None of them would necessarily be wrong, but at the same time, this method let’s you develop a reasonable image of the structure so that you can begin learning how to write programs and have an idea of how those pieces fit into the construct of the digital computing world.

Oh, One More Thing
It’s always challenging to find the balance between introducing a topic as vast and open as how to understand the makeup of modern digital computer. Trying to find that balance is a continued goal for me. I’m hoping to have a feedback form on this site in the near future that will allow for readers to send me suggestions on how I can improve an article. I may not make use of ever suggestion I get, but I value feedback, so once that form is up, I will announce it on the homepage and I hope you will feel comfortable with sending me constructive criticism. This article borrows some material from other content I am writing for this site, so if it is a bit repetitive, I apologize. I do try to refactor articles over time to get a better presentation, and I hope the effort will be satisfactory for you, my audience.