Is programming fun?
I’m going to exaggerate the next two statements:
Some view programming as a mystical skill, an esoteric form of knowledge understood only by creatures whose minds have already transcended the capacity of mere mortals’. Like a samurai who deftly welds his sword to conquer the scariest demons, these creatures weld their knowledge of programming to solve some of the most enduring problems in human history, problems like instant communication, rapid transportation, and interplanetary travel. *
Meanwhile…
Some view programming as a pseudo-trivial skill, an obscure form of abnegation practiced only by creatures who prefer staring at computer screens than exploring the world. Like a donkey who makes semi-intelligent noises, these creatures 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.” **
*To be fair, hardware, marketing, business, and many other subjects contributed too. World-changing solutions are often not made in vertical silos.
**To be fair, these are different statements. The first is about what to do whereas the second is about how to do it.
________________________________
I think programming can be both magical and boring.
I am amazed that by hitting keys on a keyboard, we can make 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 complete.
Ideally in software, the sky is the lim – 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) because software is a physical representation of our ideas and the individual steps for accomplishing a goal. Compared to other developments, software development is relatively young. But in a short 70-some years, it has become one of the building blocks of every developed country and is making impacts in emerging countries as well. Software extends our capacity to communicate not only to living organisms, but also to machines and artificial creations. By leveraging the power of machines, we can accomplish tasks that evolution had never prepared us for: we can leave this planet, explore the oceans, and even see virtual universes. Software is a tool for achieving more than what our biological selves can achieve on their own.
I am also amazed that hitting keys on a keyboard can cause some of us to be so absorbed in painting individual brushstrokes as to forget the original picture we had set out to paint. 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. Software developers are also living organisms who, like other humans, ought to enjoy life and not act like robots programed to make software. Although there are many subtleties to software development that require prolonged attention to understand, it is healthy to place software development into perspective.
Software development is a huge topic that contains many subtopics and subtleties. 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, at a minimum, logical reasoning, creativity, and thoughtful perspectives to solve meaningful problems. Software development combines with almost any discipline to efficiently complete tasks and by doing so, increases 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.