Thoughts on Programming and Life
Tags: meta, programming
Published: 2019-05-28 20:29:20

---
title: Thoughts on Programming and Life
published: true
description: There are many similarities between programming and life
tags: meta, programming, discuss
cover_image: https://lennycheng.com/blog/wp-content/uploads/2017/01/space-shuttle.jpg
series: 2016
---

Society has different perceptions on programming.

*Some people view programming to be a mystical skill, an esoteric form of knowledge understood only by few. Like a samurai who deftly welds his sword to conquer dragons, programmers weld their unique knowledge to solve enduring problems, such as instant communication and automation.*

Meanwhile…

*Other people view programming as a pseudo-trivial skill practiced only by those who prefer staring at computer screens than exploring the world. Like a donkey who makes semi-intelligent noises, programmers speak in a blabbering and convoluted language, replacing "Make the program faster" with "Use this lazy-loading singleton to manage a pool of worker threads and then implement a callback function to parse the contents in that ASCII table."*  

________________________________

I think programming can be both magical and boring.

 I am amazed that by hitting keys on a keyboard, we can invent useful stuff that had never been made before. We can connect humans who live on different continents, initiate awareness and social change, and automate tasks that would otherwise have taken years to manually complete.

In software, the sky is the limit – wait, spaceshuttles use software too, so instead let’s say, “In software, the laws of physics are the limits” (one can argue that the machine running the software is the limit). Compared to other technologies, like the level or the wheel, software is young. But in a short 70-some years, it has become one of the building blocks of every developed country. Software enables us to build machines that evolution never prepared us for: we can leave this planet, explore the oceans, and see microscopic organism. Software is a tool for achieving more than what our biological selves can achieve on their own.

 I am equally amazed that many "keyboard operators" have become so addicted to typing on a keyboard that they forget there's more to life than programming. They've lost track of the bigger picture. Under the excuse of writing better code, we might neglect our health, let slide our dynamic dreams, and lose perspective on the trials and successes of our communities.

 Living a wonderful and meaningful life includes more than just communicating to machines: it is also about fulfilling our personal needs and desires. We want the liberty to pursue our dreams, to explore what exists beyond our personal worlds, to develop meaningful relationships with others, to be in good health, to laugh and have fun. Ironically, software developers sometimes act like robots programmed to build software!

Software development is a huge topic that contains many subtopics. Some of its subtopics include:

- various types of development (web, embedded, systems, applications, defensive, network, etc, many of which work with each other)
- programming paradigms (the style we write code, eg, assembly, procedural, object-oriented, functional)
- development methods (how to split development into various stages, eg, Agile, XP to maximize productivity)
- relationship between code (yes, like humans, code is often interdependent and we seek to build robust relationships that don’t need to constantly change when requirements change. Design patterns and refactoring techniques are helpful)
- problem solving (how to accomplish a task efficiently. To solve problems, one must first understands the relationship between codes and then think. Algorithms and data structures might be useful for hard-card problems)
- programming languages (there are dozens of major languages. Eg, C++, Java, SQL, JavaScript

Software development is not only about writing code but, like all team projects, is also about solving problems that affect other humans. As a result, software development links well with:

- business (if others are purchasing our software, it is important to understand how the business process works)
- communication (we want to inform our intended audience about what we’ve built and why it’s important as well as understand customers’ needs)
- teamwork (since software is usually written by teams, we wish to maximize productivity)
- education (the software industry rapidly changes. Developers are usually learning new techniques and we seek to quickly learn and apply new knowledge)
- industry knowledge (if we’re writing software for medical equipment, it makes sense that we have a basic understanding of what the equipment does)
- creativity (there are many ways to write code. We also decide how to balance time complexities, space constraints, deadlines, various possible designs with and human factors)

Writing software is more than simply staring at a screen and typing. It’s an intellectually stimulating process that uses, logical reasoning, creativity, and thoughtful perspectives to solve meaningful problems. Software development combines with almost any discipline to complete tasks and increase productivity. As long as we bear in mind the bigger picture of our software and why we’re building it, I think developing software is a fun and meaningful practice/hobby.

*This article was written in 2016 and first appeared on my blog at https://lennycheng.com/blog/2016/02/27/thoughts-on-programming-and-life/*