Programming is an art form. A teacher of programming in many ways is comparable to a teacher of art.
Most people have had art classes in secondary school. An art teacher first teaches about art materials: pencils and paper, different colors of pencils, different hardness of pencils, erasers, inks, ink pens, paints, etcetera. The students use the knowledge acquired to create their first drawings. Then the art teacher makes them familiar with art techniques: mixing paints to get different colors, special kinds of paints that create special effects, combining techniques, how to use perspective, etcetera. Students get assignments like “draw a cat,” and the art teacher assesses their results both from the use of materials and the mastery of techniques, as well as from an artistic perspective of what makes a good likeness of a cat.
A teacher of programming has similar tasks. At first he teaches students about the core principles behind programming languages, basic statements that every programming language has, and how these can be used to create simple programs. Then he delves into more advanced techniques, by which students can construct more complex programs, and can incorporate advanced functionalities in easier ways. Students get assignments like “create a program that alphabetizes a text,” and the teacher assesses their results both from their use of programming techniques, as well as from the perspective of how well they manage to accomplish the task set.
From the art teacher’s perspective, for an assignment that asks students to draw a cat, a student who drew a circle with two triangles on top and two dots in the middle, arguably drew a cat but has no grasp of the use of materials. A student who hands in a beautiful picture of a tree, may be a master of techniques but cannot use them to accomplish a task. And two students who hand in the exact same picture of a cat, clearly have been plagiarizing. Still, there isn’t just one right “cat picture.” There are many different cat pictures that are acceptable and that show that students are learning and becoming artists.
In the same way, a teacher of programming who gives an assignment, wants his students to creatively use the knowledge they acquired to construct their own version of a program that solves the task. Students who have not mastered the techniques, will be unable to solve the task, or will only be able to create a distant approximation of a program that solves the task. Students who did master the techniques, may still lack the aptitude of combining what they have learned in new and original ways to create a solution. And two students who hand in the exact same solution, clearly have been copying it and are trying to get away with plagiarism.
Programming is an art form, where you not only have to master the techniques that form the basis of your art, but also have to be able to apply these techniques creatively to problems. The main difference with producing programs and producing visual art, is that in visual art you can still debate about whether an image of a bulldog with pointy ears can be accepted as a picture of a cat, while in programming it is much easier to disqualify programs as solutions to a particular problem.
Moreover, everybody knows and realizes that you will never become an artist by just studying the materials. You will have to practice, use the materials, and develop your skills by applying them to many different tasks. In programming, it is exactly the same: you cannot learn how to program without writing many programs. Programming not only requires knowledge, but also skills that need to be developed in practice, and a form of creativity that allows you to expand your abilities to accomplish new tasks.
Naturally, there are few master artists whose work will feature in art galleries. But we can all draw pictures of cats, and for most people, that ability suffices for their daily needs. In the same vein, there is no need for any student to become a master programmer, as long as they can create straightforward programming solutions for the problems that they encounter in study and work. But be aware that next to mastery of basic techniques, creativity is always involved.