Published on

Art, Music, and Programming... and AI?

I have long held that belief that programming relies heavily on creativity. This is why I believe AI will have a very hard time competing with humans on creativity.

I don't believe that creativity is something that one can learn.


It seems, to me, to be a reasonable assumption that most people could learn to, say, paint. The basics would entail some sort of paint (water, acryllic, oil) and a brush or two. The results, however, are going to differ quite markedly from one person to the next.

Most people may not have a passion for painting and don't bother. Others have a great passion and delve quite deeply into the subject. They'll study the history, all the relevant techniques, and the technical side of things such as canvas preparation and the like.

If you cannot paint and need a painting you would need to hire/commission someone to do the work. This could get interesting and the costs are going to vary greatly. Let's say you own a chapel called the Sistine and you would like to have the ceiling painted. You put out a request for proposals and soon you have many proposals pouring in. You RFP contains the basics of what you'd like to see; almost a type of basic requirement.

In amongst the mix is a chap called Michelangelo but he is quite expensive. You have heard of him and even seen some of his work. It is impressive but darn... that price tag. You decide to rather employ a group of 20 junior painters that have just completed their studies at the Da Vinci School of fine arts and flying machines. Not only do you get 20 painters but it is half the price and they promise to finish the work in 2 years and not the 4 estimated by the grand master.

However, after 3 years you notice that the qulity of the work is not up to scratch and the budget and timelines have been blown out of the water. There is even a painting of a yellow sponge-like chap with a starfish friend. Things look bad and you decide to send for Michelangelo. You ask Michelangelo to fix and finish the artwork in 10 months. He kindly refuses the offer.

There is quite a bit of creativity involved in art and either you have that inate ability or you don't. Creativity cannot be learnt. Every person completing a course in some form of artwork is not necessarily going to be another Mechelangelo.

I know nothing about painting.


It also seems, to me, to be a reasonable assumption that most people could learn play to, say, the piano. There are keys that you push down on and the relevant note is produced. Once you have mastered a couple of chords and perhaps hooked up your electronic piano to a computer you can start creating music. If it weren't for a computer where I can edit my own compositions note-for-note I wouldn't be able to create anything since I cannot play a piano using both my hands.

When you need to create your own music there is a level of creativity involved. You could create anything from a jingle to a film score. The ability of the composer is quite relevant to the goal. Again, if you use folks that have just completed a course from a music school to create your film score you may run into problems.


Programming is also something that most people could learn.

The basic constructs of any programming language are:

  1. Variables: These are used to store data values. Variables have a name and a data type, and they can be assigned values that can change during the execution of the program.

  2. Data Types: Different programming languages support various data types such as integers, floating-point numbers, characters, strings, booleans, arrays, and more complex types like structures, classes, or objects.

  3. Operators: Operators are symbols that perform operations on operands. Common operators include arithmetic operators (+, -, *, /), comparison operators (==, !=, <, >), logical operators (&&, ||, !), and assignment operators (=, +=, -=, etc.).

  4. Control Structures: These allow for decision making and looping in programs. Common control structures include if statements, switch statements, loops (for, while, do-while), and branching statements like break and continue.

  5. Functions/Methods: These are blocks of code that perform a specific task. They can be called and executed whenever needed, allowing for code reuse and modular programming.

  6. Input/Output: Programs often need to interact with the user or other external systems. Input/output operations allow for reading data from input sources (like keyboard, files, or network) and writing data to output destinations (like screen, files, or network).

  7. Comments: Comments are used to provide explanations within the code. They are ignored by the compiler or interpreter and serve as documentation for programmers.

  8. Control Flow: This refers to the order in which statements are executed in a program. Control flow constructs include conditional statements (if-else), loops (for, while), and branching statements (break, continue, return).

  9. Error Handling: Programming languages provide mechanisms for handling errors and exceptions that may occur during program execution. This includes try-catch blocks, exception handling, and error codes.

  10. Libraries/Modules: Most programming languages come with standard libraries or modules that provide pre-written code for common tasks, such as mathematical operations, file I/O, networking, and more. Developers can also create and use their own libraries or modules to organize and reuse code.

These constructs form the foundation of programming languages, allowing developers to create instructions for computers to execute tasks and solve problems.

However, to successfully create a meaningful solution there is a good measure of creativity required. There are many moving parts that need to come together in just the right way for software to be successful. It is quite difficult to measure but you tend to know it when you see it.

AI, Analysis, and Synthesis

Analysis is the breaking down of something into simpler components. Synthesis is putting simpler components together to create something.

In analysing requirements we could go bonkers and break down the requirements into something that is too generic, or low level. Art can be broken down to the colours, music down to the individual notes, and programming down to the constructs. It is, therefore, necessary to perform analysis down to a level that is meaningful, and then build up from there.

In programming, if the person performing the analysis does not correctly do so then a programmer is not going to be able to produce the correct result.

What is creativity?

According to the Cambridge Dictionary:

the ability to produce or use original and unusual ideas

Oddly enough, following the link to creative has the following:

producing or using original and unusual ideas: a creative person/artist/designer/programmer

I asked ChatGPT to define creativity:

Creativity is the ability to generate novel ideas, solutions, or concepts that are both original and valuable. It involves thinking divergently, exploring various perspectives, and making connections between seemingly unrelated concepts. Creativity manifests in various forms, including artistic expression, problem-solving, innovation, and scientific discovery. It often involves breaking free from conventional thinking patterns and embracing experimentation, risk-taking, and openness to new experiences. Ultimately, creativity is about bringing something new into existence or transforming existing ideas into something fresh and meaningful.

The current hype is around predictive AI. Since the current large language models are trained on data that has been well defined, there is no way for it to come up with anything new.

However, if a user of the model specifies a novel starting point, then the model can predict something that is, in all probability, also new with the caveat that it is based predictions using training data. I would assume that the training data is analysed and in various ways and that the prompts provided to the AI model would synthesize some predicable path along, say, writing style, or language level, or rythm.