3 philosophies that influenced software development
Tags: opensource, watercooler, writing, philosophy
Published: 2022-04-15 20:27:43

I started my undergraduate studies by pursuing a double major in philosophy and mathematics. While people often remarked that these subjects were complete opposites, this couldn’t be further from the truth. **Philosophy is not only linked to math and sciences – it’s their ancestor**. Philosophy has had a profound impact on most scientific fields, and computer science is no exception.

A philosophy is a way of thinking that determines how we understand ourselves, the world, or the right thing to do. Much like a program, a philosophy is composed of a set of premises and principles that determine how we handle events. Whether or not we’re aware of it, **there’s a philosophy driving everything we do – from the way we honor history, to the way we develop software**.

Today we’ll discuss three philosophies that have influenced software development, in ways big and small.

**We’ll cover**: 
* [A bit of history](#history)
* [3 philosophies that influenced software development](#philosophies)
  * [Open-source philosophy](#open-source)
  * [Minimalism](#minimalism)
  * [Kaizen](#kaizen)
* [Wrapping up and next steps](#next-steps)

<br>
<a name="history"></a>

## A bit of history

Before our discussion, I want to address one of philosophy’s most obvious and important contributions to computer science. Namely, our earliest binary representation of data came from a branch of philosophy called logic. Specifically, **Boolean logic** provided the framework through which we represent data in binary digits (0s and 1s). These binary digits are called bits in computer science. Bits are our tiniest units of data, and are the building blocks through which we **animate lifeless hardware into functional machines**.

Boolean logic was developed by George Boole in the 1850s. A mathematician and philosopher, Boole was building upon the findings of his predecessors. The hardware to physically realize these bits came much later thanks to findings in quantum physics. Still, Boolean logic was a breakthrough that’s often credited for transitioning us into the Information Age. 

<br>
<a name="philosophies"></a>

## 3 philosophies that influenced software development 
<br>
<a  name="minimalism"></a>

### Minimalism
From decluttering to software development, minimalism has had a widespread impact on many areas of our lives. While the term “minimalism” was first coined to describe a post-WWII Western art movement, the term found itself applied in various contexts where there was a benefit to **doing more with less**.

Generally, minimalist philosophies value:
* Simplicity
* Utility
* Doing away with the unnecessary

Minimalism **worked its way into software development in the 1970’s**. In these early days of programming, developers worked to optimize programs within the constraints of limited hardware resources and budget. While our hardware capabilities and budgets have certainly grown since then, minimalism remains an influence in software design and development. 

We see minimalism’s influence on many communities and technologies, including:
* **Unix**: The Unix operating system's corresponding *Unix philosophy* values minimalism. One of its principles is the “Rule of Modularity: Write simple parts connected by clean interfaces.”
* **Python**: Python is a language that values minimalism and simplicity. Python has its own philosophy known as The Zen of Python, wherein one principle is “Simple is better than complex”

Minimalism in software development advocates for:
* Doing more with less code
* Minimizing resources needed
* Employing a modular approach, wherein each module is highly focused 

<br>
<a name="open-source"></a>

### Open-source philosophy

Open-source software is software that makes its source code available to the public. We owe today's abundance of open-source software to open-source philosophy and the open-source-software movement in the 1990s.

The open-source philosophy is closely linked to the **hacker ethic**. Indeed, many open-source activists were hackers (a term with positive connotations in this context). Like the hacker ethic, the open-source philosophy believes software and information should be freely available to anyone who wishes to use or improve upon it.
 
Open-source philosophy advocates for:
* Sharing source code
* Open collaboration with diversity of perspectives
* Free exchange of information 

The open-source-software movement was a response to the increased privatization and commercialization of software around the advent of the personal computer (PC). This privatization was a contrast to the early days of programming, when researchers and programmers openly collaborated and software was shared in the **public domain**. Open-source philosophy advocates for **bringing source code back to the hands of the people**.  

We now enjoy an abundance of open-source technologies, including:
* Apache web server
* Linux operating system
* GIMP 
* Kubernetes


<br>
<a name="kaizen"></a>

### Kaizen philosophy

Kaizen is a Japanese **business philosophy** that has influenced countless industries. The term Kaizen roughly translates to “change for the better” or “**continuous improvement**.” Kaizen was first implemented by Japanese businesses after WWII. It became popular in the US in the 1980s. 

Kaizen advocates for:
* Small, incremental improvements in processes and activities
* Elimination of waste
* Giving all employees ownership over small improvements 

Kaizen’s incremental approach laid the **groundwork for agile development** methodologies, including **lean development**. Agile methodologies share a focus on continuous improvement, and are widely used by software development teams today.
 
<br>
<a name="next-steps"></a>

## Wrapping up and next steps
A program is not so different from a philosophy. They both inform how we move through the world – and in the case of programs, through **the world as data**. As a programmer, how you develop software can reflect your values, your purpose, and what you believe in. 

> **Like this piece?** Don’t miss any of our other posts! **Follow Educative** for more thought-provoking pieces and hands-on tutorials on software development.

*Happy learning!*


### Continue learning about software development on Educative
* [Bytesize: 2 accidental discoveries that changed programming](https://www.educative.io/blog/bytesize-accidental-discoveries-in-programming?eid=5082902844932096)
* [The 7 most important software design patterns](https://www.educative.io/blog/the-7-most-important-software-design-patterns?eid=5082902844932096)
* [What is a software process model? Top 7 models explained](https://www.educative.io/blog/software-process-model-types?eid=5082902844932096)