As software gets more and more integrated into our lives, the industrialization of its crafting process becomes inevitable. We see the Software Industry seeking more productivity at lower costs, for products that can be applied in many different scenarios and use-cases, as a "one-size-fits-all" kind of software.
Industrialization targets efficiency, normally by providing ways of automating processes or making them more efficient, so they can be executed in batches. As programmers, we know automation well. Loops are a simple example of a more efficient way of repeating a series of instructions. Automation requires generalization: you need to define exactly how the process is going to happen, leaving just enough room for reusing that automation on different procedures. The more use cases a software is designed to cover, the more complex it becomes.
But generalization can be dangerous. It is impossible to cover all use cases. Unfortunately, generalization is forced into everything, from the clothing industry to our educational system.
People are diverse, and motivated by different things. Not everybody learns in the same way. A standardized educational system that treats everyone identically is fundamentally broken, as people can't have a custom learning experience with this model. It doesn't change much when we go to college; even though we can choose a graduation that seems more compatible with our aspirations, we are still required to comply with a standardized curriculum that just won't fit our expectations.
Don't get me wrong: software engineering theory is important for anyone who wants to program professionally, because it will provide a set of predefined solutions and terminology that will make a team more efficient while communicating and writing code. But computer science theory in general is only a portion of what a programmer needs in order to excel in this art. Programming requires a lot of creativity, and this is something we won't find in a formal computer science education. Au contraire, creativity is crushed by formal education.
The fear of failure is the killer of creativity, and in the industrial world, failures are not well accepted. That's how we are educated out of creativity, as Ken Robinson brilliantly explains in his TED talk "Do schools kill creativity?".
"If you aren't experiencing failure, then you are making a far worse mistake: You are being driven by the desire to avoid it." - Ed Catmull (Creativity, Inc.)
Our industry needs more people willing to take risks, people who aren't afraid of failure. These are usually the people who will come up with the unusual solutions, the disruptive ideas, the groundbreaking discoveries. Specially considering how artificial intelligence might eventually take over our very own programming jobs, it's more important than ever to cultivate our inner creativity.
I think the most important questions to ask now are: how do we make our industry more attractive to creatives? how do we change established preconceptions around coding being a strictly non-creative profession? how can we avoid losing creatives to other industries?
At the end of the day, creativity is still our most valuable resource, and nothing extraordinary can be created without it. If that's how we're gonna secure our "human jobs" as developers, so be it. Let's foster a creative environment and be cautious with the over-generalization that seems to take over our industry.
That's the future I want to see : diverse, inclusive, where programming can be used as an artistic expression or simply a tool, by anyone who wants it.