How Software Works
Generated using Dall-E

How Software Works

I’m sitting in a coffee shop, waiting for a flight home, and I'm surrounded by software. I’m using a writing app on my computer. I purchased a coffee using a credit card, and the transaction was validated by fraud detection software. The beans themselves came from a grower who found business in the West online. I booked my flight online too, and my reward points are tabulated in software running on a server operated by the airline. I looked up what time my favorite Mexican restaurant opens online, and I resisted the temptation (mostly) to check in on social media.

My morning would not have been the same before software was omnipresent, although I can easily imagine how my experience could have gone. 40 years ago, I might call a travel agent to book my flight. I could pay for a coffee with cash and write my book on paper. I could walk down to the restaurant at 10am, and if it wasn’t open, walk back. I’d still get home to see my family.

A world without airplanes, however, is far more difficult to fathom. Without the ability to fly across the country within hours, my world, everyone’s world, would drastically change. I won’t argue whether or not software is as transformational as human flight, but comparing them is illustrative. It is far easier to explain how planes have transformed the world than it is to explain how software has done it. Whether a frequent or infrequent flier, everyone understands physical distance, and how the ability for people and goods to traverse that distance quickly was transformed through flight. With a few concepts explained, anyone can understand how airplanes work, and how it was that we were able to mass produce them.

Software is different. Because it doesn’t have a physical manifestation, we must rely on analogies and abstract concepts. The effect of software is likewise abstract. We are not reminded of the power and force of software by seeing it roar through the sky overhead.

This series of articles (which will be published here regularly) is an attempt to explain software in terms everyone can understand. As our world is being transformed by software, as every profession is changed by it, the effects of software are unavoidable. How that transformation happens, how the boundaries are set, how laws and regulations are developed, how social norms are shaped, should be a discussion open to all. And I hope we all make informed decisions grounded in the truth of what is possible with software and what is not, rather than resorting to fear of the unknown.

Everyone can and should understand software. So, let’s begin…

What Is Software?

It's hard to explain software without explaining computers, and vice versa. In a sense, computers exist to run software. Computers are made up of several components that have been refined over decades to do ever more specialized jobs: CPUs, hard drives, memory, GPUs, high resolution displays. Even if you are fuzzy about what these things are, you have probably heard the terms before. As amazing as computers are, they are dumb. What makes them “smart” is software.

We use software to keep in touch with our family, to keep track of our soccer schedule, to play games, to learn math, to listen to bluegrass music, to track where our packages are, and to write a book (maybe, a book about software). Companies use software to ensure their employees get paid on time, to track the status of inventory and parts around the world, to acquire new customers, and to determine the best time to follow up with those customers to retain their business. Nearly every thing that a people do has been (or could be) enabled, enhanced, augmented, assisted, or automated by software.

But what is software? In an overly simplistic sense, software is the code that is run on computers. In the 1980s, if you wanted to get some software, you would go to a computer store and buy a box containing physical disks that stored the software, first on floppy disks and later on CDs. Whether you bought a spreadsheet, an accounting program, or a video game, you had the sense that the software was a tangible thing. It came in a box, after all. And so, it was possible to conceive of software as being those physical artifacts.

Because of the limits of computers at that time, the software was simpler. Programs were generally slow, had simple (if any) graphics, and had fewer features, because the computers they run on were not capable of much. Most significantly, software was typically isolated to a single computer. Any data that a software program used either came with the software, was manually entered into that program by the user, or was copied onto that computer through use of a disk. Networks of computers were limited to hobbyists and some companies, and those networks had severe constraints. These limitations meant that if you took the time, even the average user could understand exactly what the software was doing.

Fast forward to today, and while software is pervasive, it has never been more difficult to understand. Computers are substantially more powerful, and so software is far less feature-constrained. The number of computers in the market has increased, so much so that today the majority of adults own one (if you consider a smartphone a computer, as I do). And most of those computers are connected to the Internet. And you'd be hard pressed to find software that comes in a box any more.

My own journey with software begins over 35 years ago, when I would spend hours copying video game computer programs out of library books into the family PC. At the time I didn’t understand what I was doing, and it didn’t occur to me to delve much beyond the surface. I started teaching myself computer programming in college, and since graduating have been working in the software industry for nearly 25 years, mostly as a product manager. It has taken me this long to develop what I hope is a solid working understanding of modern software - it could just be that I am a slow learner, but I suspect that this struggle is shared in common by nearly everyone who works in software development. Technology is an industry that rewards specialization, and so there are few if any high level overviews written by those who work in software development.

If even those who develop software don’t understand how it all works, then how is everyone else supposed to? There has been a high profile push over the last few years to encourage more people to learn to code. While laudable (and if you want to learn how to code, by all means do!), I don’t believe you need to learn to code in order to understand software. What I believe you do need, and what I attempt to explain in this article series, is an understanding of a few key concepts. These concepts apply even as the underlying details change constantly. Whether you’re technically inclined or not, and whether you have an interest in getting into technology as a career, or if you simply just want to learn about how technology actually works, this series is for you.

The Key Software Concepts

The upcoming series of articles will explore each of these concepts:

Data

All software manipulates, processes, or displays some kind of data, whether text, numbers, video, pictures, or sound.

Coding

All software starts with code, written by one or more developers, that is packaged into a program to be run on a computer. Even if you don’t intend to write code yourself, understanding the basic of how programs work - what the code inside them does, is key to understanding the power and the limits of software.

Computers

To understand what software can do today, it helps to know the basics of how computers work, and know what kinds of different computers are in use.

Persistence

How data gets stored for different purposes - retrieving it for later, querying it to answer questions, or indexing the entirety of the Internet.

User Interfaces

How software is presented to the user, whether through a graphical interface, through voice interactions, or other means.

Efficiency

All about algorithms and everything fast.

Networks

How different pieces of software work together, whether on the same computer, or across the Internet.

The Software Development Lifecycle

The means by which software gets made, and how that has evolved over time.

Cryptography

How data is kept secure and private.

Identity

Knowing who is who, and what is what.

Scale

From billions of Internet users, to data sets of millions of records, to clusters of computers in the cloud with tens of thousands of machines working in concert - massive scale has affected the way we develop and use software.

Abstraction

Operating systems, web services, and Application Programming Interfaces - these are all kinds of abstraction, and it is how we have been able to create ever more complex kinds of software without everything falling to pieces.

Machine Learning

Call it machine learning or artificial intelligence, but the biggest change within software over the last few years is the emergence of inference: the ability to create useful new data where none existed before.

This series of articles is adapted from my forthcoming book, working title "How Software Works." I'd love to get input from readers about this topic - what questions about software do you want to know? Articles will be posted here weekly on LinkedIn.

Bill Abresch

Senior Engineering Manager at Braze

1 年

That's funny- I didn't realize that we had started out with programming in the same way. This takes me back to my brothers reading out listings from "More BASIC Computer Games" while I typed. And then our making little tweaks to have an extra life or to add some extra scenario to the more choose-your-own-adventure-like games. I think that, in some ways, it was a more natural way to learn than anything available today.

Kyle Simmons, CFP?, CRPC?

Trusted Financial Advice for Engineers and Tech Professionals ?? I help analytical clients and their families to offload stress, rise above risk aversion, and enjoy the benefits of their hard work and success.

1 年

Looking forward to buying the book!

回复
Teresa Uthurralt

Director, Business Development @Amazon Shipping

1 年

Great series Alan Lewis enjoyed reading this first installment.

Ashok K U

Program and Product Leader at Amazon | Data Clean Room | Amazon Marketing Cloud

1 年

Great stuff, and thanks for sharing, Alan! What might also be interesting to learn is "What software to build?" from your two and a half decades of product experience!

回复
Jeffrey Cohen

Amazon Ads Tech Evangelist | Amazon Ads | Keynote Speaker |

1 年

Great start. Cant wait for future sections. Lots of thinga inhave know but a very simple way to deacribe them

回复

要查看或添加评论,请登录

Alan Lewis的更多文章

  • The Basics of Coding

    The Basics of Coding

    To understand software, as this series of articles endeavors to explain, we must understand at least the basics of what…

    5 条评论
  • Understanding How Data Works

    Understanding How Data Works

    This article is part of my series explaining how software works to a non-coder audience. Data is stored by software…

    2 条评论

社区洞察

其他会员也浏览了