In a world of rapidly advancing computer technology, it is increasingly important for business people to have an understanding of software operations. Whether it is to better understand investments and ventures, or to simply be able to call “bs” when a tech team explains why a deadline was missed. Understanding software can only benefit a professional in the modern age.

This post seeks to aggregate content and insights to help lead a person towards confidence in understanding software. The software industry is huge, with many tools and teachings, so it can be helpful to have someone with experience boil down what is important. This content is not intended to be exhaustive but instead pragmatic and concise.

The Internet

The internet is a foundational component to nearly all technology today. Developing a high level understanding of how the internet works is important.

  • The request-response model

    • This is simple: a computer or device sends a request for data, servers respond with that data.
    • The first paragraph of this O’Reilly page is a good summary: The HTTP Request/Response Model
  • This Stanford white paper is the best description of the internet I have found. Slightly more information than needed for a high-level understanding, but a really great summary: How Does the Internet Work

The Cloud

Everything is on “the cloud” these days, what does that mean? The cloud is a term for remote servers. There is nothing magic about the cloud, it just means that instead of servers being in your house or at your business, they are in giant datacenters managed by other companies.

There are many benefits to building cloud software. Often it is the best decision for an application or system. Keeping servers alive, managing and maintaining them, can be difficult and time consuming. By using a cloud service like Amazon Web Services (AWS), Google Cloud, or Microsoft Azure, giant teams of engineers maintain the servers. For a fee, fast and highly available servers are unlimited and available to use.

Coding

Building software involves writing code into a collection of files, bundling them all together, and executing the package. The main focus for engineers is on writing code into files. There are many languages which code can be written (Java, Python, Javascript, etc) but they all accomplish the same thing: converting human-defined instructions into computer instructions. The whole point of coding is to convert a human thought or desire, into a computer behavior. Code is the mechanism to accomplish that.

Programmers (synonymous with engineer, coder, developer) use many tools to make writing code easier. Common tools are IDEs (Microsoft Word on steroids), Github (like Google Drive for code), and terminals (for executing commands directly to the computer).

Code has been around for a long time. For example, through morse code. For a great, educational, breakdown of the history of code and how it has evolved with computers see this book:

Scrum, Agile, and Extreme Programming

Scrum and agile are buzz words that are echoed through every software team. It is the default process for organizing and accomplishing work. There are many opinions on what “scrum” and “agile” actually mean, but there is agreement on the ceremonies and sequence of weekly events.

If you must understand agile, it can be best described as a collection of team ceremonies that are scheduled and repeated. There are daily “standups” where team members give updates of progress and blockers, planning, grooming, retrospectives, and sprint reviews. There is plenty of detail on these ceremonies elsewhere on the internet.

The best agile approach is a style called Extreme Programming. This style seeks to be highly efficient and cut out a lot of the fat that bogs down most agile/scrum practices.

Work Culture

The work culture of the software industry has been set by silicon valley. In general, it is a very relaxed, liberating environment where nerdy and eccentric individuals feel welcomed. Dress codes are loose and there is a major emphasis put on work-life balance. The software culture can encourage laziness, but it also is very good at encouraging innovation. There is a major responsibility of the individual. Those who want to coast by can, and those who want to go hard and succeed also can. For businesses, it is important to seek driven individuals since their role as a software builder will come with a lot of freedom.

Modern and Future Technology

Artificial intelligence and the internet of things are two important concepts to be familiar with. AI is not what the movies portray it to be, human-level intelligence. Instead, AI is a different style of programming that can learn or adapt based on conditions. Classic coding has a defined behavior. No matter the input or conditions, the program will behave the same. Modern AI changes that and can morph behavior based on input or other collected data. AI becomes stronger as computers get faster, but it is still far from competing with the human brain.

Internet of things is the internetting of everything - microwaves, lightbulbs, vacuums, cars, etc. This concept is important to keep in mind because if there is an aspect of a business that is not networked, maybe it should be.

Computer Science

Those seeking an understanding of software that would enable useful contribution to design and ideation should obtain training in computer science. Foundational concepts from computer science and mathematics can be most beneficial when thinking thorough new ways to solve a problem.

These two, free, Harvard courses should lay a solid foundation in computer science theory and practical application.

  1. Harvard University, Introduction to Computer Science
  2. Harvard University, Introduction to Artificial Intelligence with Python