AS WITH EVERYTHING THAT BECOMES POPULAR and deeply integrated into our lives, software production is becoming more and more industrialized. The demand for solutions that are highly commercial (as in good for sales) have been drastically changing the way software is crafted, all in favor of more productivity and efficiency. In fact, the processes used by many software companies are just imitating a factory production line.
But is this the future we are looking for, when talking about software creation?
Production Lines are Boring
Production lines are efficient, I’ll give you that. But they are extremely boring. For people who see programming as a mere career choice, this is totally OK — they’ll do their job and go home to find entertainment in other things. But not all programmers are the same; for the creative spirits who embraced programming as the wonderful creation tool it is, a software production line can be extremely toxic and unbearable as a professional environment, specially in the long term. Creative people need to create in order to feel worthy, to feel motivated.
The industrialization process (as in moving from crafting to a large scale production) is a threat to creatives. For the Industry, it would be more convenient if everybody was identical — cheaper, easier to cover. Turns out we are not, and the problems start at school.
Broken Educational System, Broken Industry
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 obliged to comply with standardized curriculums that just won’t fit.
Computer Science theory is important for anyone who wants to program professionally, because it will provide a set of predefined solutions and terminology that will make the team more efficient while communicating and writing code. But this is not enough for building a great developer. As I discussed in a previous post, 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.
“Imagination is the source of every form of human achievement. And it’s the one thing that I believe we are systematically jeopardizing in the way we educate our children and ourselves.” — Sir Ken Robinson
I remember I used to draw a lot when I was a kid. I would just get a paper and draw anything that would come to my mind. But as we start to get older, there is an increasing pressure to avoid failure at any costs. And the way adults would always ask what was that drawing about, trying to put reasoning and labels in everything, really bothered me. Eventually I couldn’t stand a blank paper anymore, the anxiety of creating something that could be explained and made sense would block all my ideas. The fear of failure is the killer of creativity, and in the Industrial world, in the production line, failures are not well accepted. That’s how we are educated out of creativity, as Ken Robinson puts in his brilliant 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.)
Who will drive the future of programming?
I believe the future of programming can only be lead by coders with genuine artistic spirits — they won’t be afraid of failing, and this is essential for coming up with really good ideas. The creative programmers will drive software engineering towards new edges, while also working hard to make programming more accessible. We will have more hobbyists — people who don’t code for money, and don’t want to pursue a career in software engineering, they just want to use programming as a tool. This is actually already becoming a reality with initiatives like the Hour of Code, but we still need to lower more barriers. New high-level languages, education towards breaking stereotypes, and more importantly, better learning methodologies, will definitely help achieving this.
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.