I love to engage in these occasional debates about whether computer science is really a science or not, or whether software engineering has anything to do with engineering. (My personal opinions on those matters are 80 percent “no” and 90 percent “no” respectively, but that’s another topic.) Some claim that programming is an art, and most pundits say that engineering has at least some artistic component. I’d go even further and insist that to pursue an engineering career apart from any infusion of the arts is to deny a large part not only of who you are as an engineer, but as a human being as well.
Engineers often live up to their stereotype of being narrow and deep. That stereotype probably worked well in the days of complicated problems: building bridges, designing circuits, and other pursuits that required man’s ingenuity over nature. Today’s engineer is being asked more and more to face complex problems: urban planning, aerospace and aeronautics, ecological engineering, and many other fields at the core of modern economies. Where human beings are an integral part of the system, problems grow beyond being just complicated to being complex.
Steve McConnell pointedly notes that “Engineering without art can be ugly, but art without engineering can be impossible.” (IEEE Software 18(2), March / April 2001, p. 9) He ranks creative design foremost in our mission as engineers.
I remember when my high school teacher, the late Ed Anderson, first surprised us with his exhortation that power engineers should be as attentive to the design of graceful electrical transmission towers as to the associated problem of transmitting energy efficiently — or, better yet, to further technology to keep transmission lines out of sight. That was at the end of the ecologically conscious 1960s. The market of the past 50 years has largely proven him prescient.
In today's market, the interesting problems are rarely those deep technical challenges that we are proud to solve on a college exam, but are rather system problems. Whether you are an engineer, a researcher, or a manager, your endeavors eventually touch people, and people always add complexity to a system. Formal models and tools exist to help manage complexity, but mastery of complex systems is much less related to technology than engineers armed themselves with two generations ago.
You can’t study everything, but conquering complexity requires first a human outlook, then a social perspective, and finally a grounding in the arts. A good liberal arts education can raise your awareness about the human side of the world and about what matters to people. A grounding in user experience reveals why the design of a computer interface (or any machine interface) is important and why it is hard. Psychology has everything to do with good computer system design. Literature and history can offer you cultural perspectives that make it easier to work into a shrinking world market. Architecture can help you articulate the complexity of design.
It’s not easy. While Alexander’s work in architecture paved the way for advances in the expression of software design, the foundations of his pattern theory were not easily absorbed by engineering minds. Patterns have become a blurry shadow of what they might have been if engineers had more been able to remove themselves from their engineering mindset and take an artist's mantle.
In short, get a good liberal education, whether you're in college or 80 years old. Find your niche in the arts and throw your heart into it. If more than 50 percent of your college courses or hobbies are nerd stuff, you're probably not an engineer, but just a technician.