« Ruby on Rails under Windows XP with Cygwin | Home | Can a Hardware Platform be Closed? »

Programming: Engineering, Science, or Art?

By Jacob Cohen | January 29, 2008

When you’re looking to hire programmers, what do you look for in their education? How should the colleges and universities be educating the next round of students who are destined for careers in software development? There seem to be several schools of thought on this.

Programming as a Science
Traditionally, going to school with the intention of becoming a programmer meant getting a degree in computer science, which was typically taught in either the mathematics or engineering school within a university. There was, and still is, in many schools, a lot of emphasis on mathematics, engineering, and science courses as part of the curriculum for earning this degree. Should the future programmers have to care about vector calculus or electronic circuits or fluid dynamics? What about graph theory, logic circuit design, or computer architecture? How much “science” do programmers really need to know?

Programming as an Art
Some believe that programming is less of a science, and more of an art. Joel Spolsky seems to think this way. According to this school of thought, programming is an art, and aspiring artists go to school to learn by doing, and by studying under accomplished artists who can teach them how it supposed to be done.

Programming as Engineering
To others, programming is an engineering discipline. You’re not a programmer, you’re a software engineer. You’re an architect. You’re building and creating with the finest attention to detail. You’ve measured your code twice and it will fit in 64K of memory. As you build more and more software, you begin to establish a set of practices and guidelines to prevent past failures from reoccurring. You have little patience for the new upstart programmers who lack all of the discipline you’ve carefully acquired.

So what should the schools teach?
All of the above! Aspiring software developers need the science, the theory, the engineering principles and the artistic trade aspects in order to be well-rounded.

If you leave out the theory, you might create a batch of programmers who don’t know why a Shlemiel the Painter’s algorithm is bad, or how to avoid it.

If you leave out engineering principles, you might get programmers who don’t know what to do in response to a bug that is found in their code. How do they know that bug is fixed? How do they prevent it from reoccurring?

If you leave out the art of programming, you might find people who know about software, but not how to create it. The software industry might need a few well-trained critics, but this is probably not the best use of a university’s software development curriculum.

Topics: General |

One Response to “Programming: Engineering, Science, or Art?”

  1. Paul M. Parks Says:
    February 5th, 2008 at 9:26 am

    I actually regard software development as a craft, much like carpentry or blacksmithing. It’s a skill whereby science is applied for the purpose of creating a piece that meets a given need, with some opportunity for artistic expression within the bounds of the requirements of the piece. It’s not science, and it’s not an artistic pursuit.

    PMP

Comments

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word