A lot of people tend to ask me “John, why do you think that software development is art?”.
I do think software development is art and it requires the soft skill of creativity. While this might seem controversial, let me explain my point. First of all, we need to understand how hybrid things are nowadays. It's difficult to find something 100% pure in 2016. Things mix up with other things and they get a whole new meaning when that stuff happens. Said that, I do think that Software Development is analytical. And a lot.
However, if you think of software development just as something analytical, you'll probably be left behind by the ones who understand that software development is also an art. When you start to see programming as an art, you'll understand that you have the power to build anything. You, as a developer, has the ability to build an entire universe, just by writing code. And this is where the art comes in.
Wanna know more? Watch this video and find out!
John Sonmez: Hey, what's up, John Sonmez from simpleprogrammer.com. I got this question about coding and art. I thought this was interesting. It says, “Greetings John, I heard you say programming is more related to art and creativity in your most recent YouTube video but I personally believe coding is more about logical reasoning and analytical thinking. When you talk to a guy like a psychologist or someone, he would say creativity is connected to the right brain and logical thinking to the left brain. This kind of contradicts your claim. Could you explain more on this?”
Okay, so let’s think about if programming was totally analytical like engineering to some degree is. I always say software development is not engineering. I don’t like the term software engineer because it isn’t engineering, it’s not building a bridge. Engineering is a repeatable process. You can take the physics and geometry of a situation and calculate exactly how something should be structurally designed and you could get an absolute result. There’s a lot of engineering problems that you can get an absolute repeatable result and you can figure out what is the best solution for.
There’s even some creativity in that because what is a design, right? Because there’s lots of ways to come to the problem, right? Bridges are also hopefully aesthetic to some degree so there’s even some in engineering, I think everything that is constructed has some kind of aesthetic properties to it, but programming is so different than that because there is no repeat when we’re working with the intangible. Software design, it’s all conceptual. It’s all imagination. It’s all creativeness. There’s not any kind of way to absolutely measure if something is correct or right. It’s all conceptual.
Not only that but the tools that we use they’re not concrete, they’re not literally concrete. They are all abstractions. They’re all conceptual. We develop an entire world. If you think about it, every software program is an entire fantasy world complete with actors and names that operate in fantasy environments, on fantasy objects. You think about object oriented programming, it’s all fantasy stuff. It’s not real. We’ve just created this complicated construct in our minds to manage this complexity, to build this system to do some things so there’s a lot of art involved in that.
You can’t give someone—here’s a good test for whether something is totally analytical or creative. Can you give someone a heuristic, an exact heuristic to produce a result? For example, I can give you mathematical proofs, right? If you give me a mathematical problem I can give you an absolute mathematical proof. That is a totally analytical problem. Even there—right, I’ll make an exception here and say there’s some creativity in coming up with the solution to the problem, but when you have the problem itself and the solution you can give a mathematical proof that says step 1, step 2, step 3, step 4 and here’s the heuristic of exactly how to do this, right? You can apply that to a lot of different things but you can’t apply that to software development. You can’t ever give someone a set of steps in order to do to be able to build software. You can’t ever say, “Here’s the algorithm that you follow to build software.” You can say, here’s the algorithm you follow to bake a cake or to build a bridge but you can never ever say it to build software because it’s always different, it’s always judgment. It’s always subjective.
When you look at even the construction of code, when you look at—you can see art in it because the way that people have designed things there’s an aesthetic element to it. Even if you look at developers and how they structure their code, the spacing that they use, the way that they name things, and the consistency in that. They’ve created their own rules and their own system but they’ve designed something. It’s all about the design of it.
If you took 10 software developers and you had them all write code to solve a nontrivial problem, let’s say building some kind of simple application but nontrivial you would have 10 different answers. You would never have the best. It would always be—it’s the same thing as if you had someone paint. You had 10 different painters, they would all different paintings, they would look different. But if you took 10 structural engineers and you give them the requirements and you tell them to build a bridge they might not produce the exact same result, but a lot of them—but there’s a good chance that they’re going to produce pretty dang similar results and they may produce the exact same result. It’s a much more constrained, much more analytical process.
Again, there is analytical in software development, there is solving algorithms, there is writing the code and figuring out how to translate something into a language that the machine understands but there’s a lot more of a creative and art aspect. That’s why software development is so challenging is because you have to be analytical and you have to be creative. You have to use both sides of the brain if you believe in that. I’m not so sure that I’m convinced about the left brain, right brain thing. I think that is a generalization that we use, but regardless, I’m not going to oppose standard psychology but I will tell you that it does require both. Anyone who’s done it for any amount of time will tell you that it’s true if not purely analytical. If you took someone who’s purely analytical they are not going to succeed in the software development world.
Anyway, good question. I think this a debate that’s always going to be raging and there will always be this debate between whether software development is engineering or not and those engineers are going to get—software developers who have engineering backgrounds get all butt hurt about this and get all upset. I love it. I love it. If you want to yell and claim that it’s engineering and how stupid I am, go ahead, leave a comment below. It’s fun. We’ll have fun. We’ll make fun of you. Anyway, if you like this video, subscribe to the channel. Take care.