DEV Community

Cover image for The Art of Programming
Erika Heidi
Erika Heidi

Posted on

The Art of Programming

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.

the ideal dev

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.

Latest comments (33)

Collapse
 
jascha030 profile image
Jascha van Aalst

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.

Collapse
 
mi0epro profile image
Mihael

The beauty of art and programming combined.

Collapse
 
pavelloz profile image
Paweł Kowalski

I think someone we owe a lot (Donald Knuth) wrote pretty good piece on the subject in 1974 - paulgraham.com/knuth.html - i highly recommend it.

Collapse
 
okabrionz profile image
Oka bRionZ

I Love You Erika!

Collapse
 
alexjuca profile image
Alexandre Antonio Juca

This inspired me to start thinking out of the box and look for wildly different ways to solve problems. Great article by the way.

Collapse
 
thecodingstoic profile image
theCodingStoic

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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?

  5. 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.

  6. Let Go of Your Ego -- Code Reviews. Enough said.

  7. 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.

  8. 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.

  9. 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.

Collapse
 
luisfurquim profile image
Luis Otávio de Colla Furquim

if self === "Because they want to create, they want to express themselves in code" {
post("OMG! That's me!")
}

Collapse
 
mnavarrocarter profile image
Matias Navarro Carter

This is gold! Thanks for writing this piece. It really spoke to me. :)

Collapse
 
vladimir_dev profile image
vladimir.dev

True... I'd say creativity is probably most important for problem solving

Collapse
 
flosalihovic profile image
Florian Salihovic

There are not many artists out there ... while I agree on many aspects of your writing, that is something I would love to challenge. Most code written out there is written to just work. But by your definition everything is art. That takes away a lot from the real beautiful code written which is expressive, concise, runtime efficient and still understandable.
How much time did an artist spend sharpening his/her skills before he would himself call himself an artist - when would you call someone a genuine artist?

Collapse
 
mdhesari profile image
Mohammad Fazel • Edited

Everyone can learn programming but you need to be so passionate and intrested in programming to become successful, if you do not have curiosity and it's boring for you to stay long hours in front of a laptop so you need to change your career...

Collapse
 
codebeastmode profile image
Chris Quinn

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.

Collapse
 
xowap profile image
Rémy 🤖

From the beginning I was expecting something more on the creative process 🤔

Collapse
 
mjyc profile image
Mike Chung

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.

Collapse
 
asafd1 profile image
asafd1

I agree. Writing code is a form of art. You create things that were not there.