One of the most consolidated misconceptions about programming, since the early days, is the idea that such activity is purely technical, completely exact in nature, like Math and Physics. Computation is exact, but programming is not. The first is a result of a machine operation, and the latter is still a human activity.
Programming requires a lot of creativity, on top of the abstract concepts, tools and techniques that we might learn in a classroom; all that theory represents only a tiny portion of what is necessary to build a great developer.
Not all developers are created equal
As people are diverse in nature, our motivations, goals and challenges will always be different, since the very start. I can only talk about my personal experience, and my motivations had absolutely nothing to do with a taste for Math or exact sciences.
At age 13, I had my first experience with programming - it was an unusual computer class at school, where we learned how to create some basic stuff with Clipper. The teacher was just tired of teaching Word, Excel and such. It was sort of a mind blowing experience to me, seeing how we could create functional things out of a few lines of code.
Having an artist and an engineer as parents, and getting those influences in my life since I was little, I soon realized that programming combined just the best of both worlds. It's art built on top of logic.
My main and strong motivation with programming, since then, is the ability to create things "out of nothing", bringing ideas to life, with code.
Programming as Art
I see programming as a form of art, but you know: not all artists are the same. As with painters, there are many programmers who only replicate things, never coming up with something original.
Genuine artists are different. They come up with new things, they set new standards for the future, they change the current environment for the better. They are not afraid of critique. The "replicators" will try to let them down, by saying "why creating something new if you can use X or Y"?
Because they are not satisfied with X or Y. Because they want to experiment and try by themselves as a learning tool. Because they want to create, they want to express themselves in code. Because they are just free to do it, even if it's not something big that will change the world.
"The most creative people are willing to work in the shadow of uncertainty." - from Creativity, Inc. by Ed Catmull
Respect the work of others, even if you think there is something with a similar purpose already out there. It's their expression. They are not trying to reinvent the wheel. They are trying to create a better wheel, or a wheel that works better for their purposes.
That's how amazing things come to life.
Top comments (33)
As a physicist, I can tell you that professional Math and Physics is mostly creativity, exploration, communication ... with some technical exact tasks added on. "School" physics and math on the other hand can feel hollow if the teacher doesn't reveal the creative side.
Yes, I can understand that; but my viewpoint is from what we have to go through if we want to have a diploma in computer science & related, which is the route a lot of people will take in order to have a job in this industry. I am a college drop-out, so I am talking about my own experience that made me really disappointed with the field until I realized my path to programming was different and that was fine, too.
I agree with your main point, programming is definitely a human creation process, that involves both creativity and logic.
However, I'd argue that so are Art, Science and Engineering. Scientists aren't cold logical automatons, they're some of the most creative beings I've had the pleasure to meet. The same goes to artists, who aren't also chaotic-driven vortexes of pure creation. Some of the best artists I personally know are surprisingly logical and methodical in their process.
In all these fields, there are, of course, those who tend to both extremes, those who look like they're automata, doomed to forever repeat the same taks without ever finishig the job, while there are others, who are so taken by the novelty and inspiration that abandon their creations before they're fully formed.
PS: Just a nitpick, I believe the Venn diagram should be more like this?
I'm not much of a hand with image editing, or I'd fixed it myself.
You have valid points, however, the main idea of this post was to expose that we don't need to follow the academic path to be good software engineers, and it's more likely that someone without an academic background will bring more creative contributions to the field, because they're not "following all the rules". I am a college drop-out, and I'm talking about my own experience, which actually resonates well with many developers I know.
The venn diagram doesn't need fixing
You'd be amazed what one can do without knowledge or experience. Most people think of problem solving as solving concrete problems. There is an infinite world of abstract problems which can map to real world problems.
You can practice on hypothetical problems purely in your mind, any time, anywhere. Before I had access to computer, books, or any form of knowledge, all I could do is think about how programming computers might work. After many years of obsession, I finally got to work on computers, and it was intuitively easy. Worked almost exactly as I figured it would.
This is beauty of logic. You don't need knowledge about the real world if your core set of axioms are solid. Programming is a subset of logic. Get good at logic and programming is easy.
Logic, art, with a dash of magic :)
"As with painters, there are many programmers who only replicate things, never coming up with something original.
Genuine artists are different."
I wouldn't call people who only replicate not genuine artists! Replicating good code practices or doing painting master studies is very important to technical knowledge, and being able to deconstruct something and put it back together the same way you found it is a pretty good skill that does take some creativity and curiosity. I get what you're saying over all though!
You can't create good code just by following good practices. Code can never be better than its design.
I have to respectfully disagree. It isn't the Art of Programming but the Craft of Programming.
Merriam-Webster defines Craft as "an activity that involves making something in a skillful way by using your hands; a job or activity that requires a special skill; objects made by skillful use of the hands." While this definition focuses more on physical objects the definition is still applicable to programming. After all, writing good code is a special skill--technically done with the hands--to make useful and user friendly programs.
Furthermore, the Ethos of the Craftsman, as described by Brett and Kate McKay, can be applied to programming which I summarize and defend below.
Do things Well for the Sake of Doing Them Well -- I am sure that we have all seen--and likely written-- cringe worthy code but I am also sure that we prefer to read and write well crafted and well documented code. Some of this comes down to competence in our craft but a large part of it comes down to us wanting to do a good job.
Plan(But Not Too Much) -- I have my doubts that any of us have had any program, with the possible exception of Hello World, go exactly as we planned that it would but I am also sure that we all have a general idea of what the program will be prior to putting finger to keyboard. Allowing us programmers the same flexibility as those in traditional crafts.
Measure Twice, Cut Once -- This one may seem to be the least applicable given the mutable nature of our craft. However, when working on a big project there are certain choices that can be changed but at significant cost. As such, the wisdom represented by this maxim--carefully consider the choices that you make before committing to them--are applicable.
Work With What You Got -- while we may not have to worry about imperfections in stone or knots in wood we do have bugs in our code. Instead of scraping an entire project because of a bug don't we sit there, sometimes for hours, figuring out what the bug is and how to fix it?
Cultivate Patience -- I think this one is applicable despite the seemingly fast pace of our craft because we may be working on a project for a long time or we need to have the patience to read source code or debug a program.
Let Go of Your Ego -- Code Reviews. Enough said.
Develop Your Practical Wisdom -- as our competence grows we can more intuitively know which approaches will work when solving certain problems; we can intuit issues that using certain approaches will bring and how to avoid them; we can read code and "see" the results.
Mastery Brings Meaning -- mastery of our craft brings more satisfaction and meaning than what the particular craft is. Furthermore, no matter what the craft is that we practice there is no perfect craftsman. As such, there are always new things to learn and master.
Find Your Workshop -- not only do we have our preferred development environments and our own "toolboxes" we also have the same, or similar, social aspects of our craft that guilds represented in yesteryear's.
So, I think I have laid out a good case for programming as a craft. However, I would like to say that just because I think programming should be considered a craft rather than art doesn't mean that we can't create beautiful programs that function as "art built on top of logic".
I want to thank everyone that read this comment and which everyone a good day.
I loved the quote and I immediately realize that same thing happen also with music and other kinds of arts. Art is built over kind of a logic layer, which are the (minor) things we already know from science (or something like that).
Thinking about programming as a creative thing -as an art- is the way to feel connected or fulfilled when you feel a bit disconnected seated behind a 'cold' computer. Also having in mind the sharing value and a continuous improvement mindset would make you fill aligned with a major purpose.
Those words are very relevant (to me at least) !
It's awesome to see someone sharing the perception I have of the field. Thank you for putting words on it!
"The most creative people are EAGER to work in the shadow of uncertainty."
There, I fixed it. ;) Nice article! I have been saying this for years, but not as eloquently.
This resonates pretty deeply with me.
I dropped out of a graphic design school that provided an environment that truly felt like home to me (Grafisch Lyceum Utrecht).
I traded in their supposedly 'hardest study to get accepted' for a less then mediocre-IT study which felt like it was actively trying to be so uninspiring that teachers could get away with not teaching at all, because the few students left after year 1 are the "I chose IT because I just want to game in class" ones.
I officially spent 48% of the study, trying to numb the sense of constant disappointment through smoking unnecessary amounts of weed.
I switched because the graphic one triggered a perfectionist in me that was so impatient and strict that It resulted in me trying to ignore away the need for education (once again with weed).
So I made the sketchy (and uninformed) decision without any pre-existing background, in the naive hope for a very slim chance that "the actual work experience wouldn't suck".
I did this because I briefly talked to someone who made exactly this case which in my mind was a complete gamble but on paper seemed like it made sense...
This has been the best decision I made in my life so far.
Cannot agree with you more.
Yeah, I love it!