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.
Oldest comments (34)
"art built on top of logic" is probably one of the best descriptions i ever read.
Cannot agree with you more.
Yeah, I love it!
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.
Thanks for sharing @erikaheidi
This contextualizes so well what it is I enjoy about programming. Thank you for a lovely article, Erika!
This! I come from a Creative path (lately I was doing some art direction, branding and packaging). Some people don't understand that my work is still pretty similar than before. Now instead of Illustrator I use Nvim. But I continue creating solutions. The Core principles of what I did before to start learning programming continue the same.
Wonderful article!
Logic, art, with a dash of magic :)
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.
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.
"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 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.
I could not share my feeling about ptogramming with my family and friends. I just knew that it is fantastic! Let me choose the way to create almost same thing with my better code, again better, better and ... This is me, this is my art! You describe it the way i could not.
I agree. Writing code is a form of art. You create things that were not there.
Great article! I clicked because I thought it was about Donald Knuth's book, "the art of computer programming", but still was an interesting read. I especially found the diagram relevant & insightful.
From the beginning I was expecting something more on the creative process 🤔
Especially when it comes to formatting and organizing the code that you write. I can't stand when I open another developers file and it's just all over the place. It really irks me. Take pride in your work, because someone else is going to see it, do you want them to be happy/impressed by how well you have formatted/documented/organized your code, or do you want them to be upset that you just didn't give a $hit - we have to all stick together and realize that one day someone is going to have to modify our work, no matter how miniscule it may feel at the time, it may be that one function that you didn't comment that takes a beginner programmer all day to figure out because you didn't comment your code, and that programmer may give up all together, but if you would have commented your code, he would have changed the world! You never know.