Software development — Engineering or Art


About two weeks ago I did another session of my two day class on designing .NET Class Libraries for internal folks mostly building WinFX and similar frameworks.  You can find notes from past sessions here, here, here, here, here, and here.  The two things that I get the most personally value out of teaching the class are hearing the questions from those taking the class and listening to some of the super smart and experienced folks that come in and “guest lecture” on particular topics.   Two of my favorite folks “guest lectures” came up this time:  Rico Mariani, CLR perf architect and Jeff Richter, noted author and industry pundit.   They each know a TON about the CLR and have each been working in the software development industry for ages.  So you know when they disagree it will be a good meaty issue. 


 


Rico spoke early in the class about, you guest it, performance.  If you have been reading his blog you have a flavor for what he said. My takeaway from his presentation was that if you do not have some kind of ballpark idea how fast your solution needs to be for customers then you are NOT doing engineering.. you are playing craps, gambling with success or failure. If you are willing to have a feature at any price then you are not engineering, you are dreaming.  He made a great analogy from the construction industry.  The folks building a bridge know how much load the bridge needs to handle and how much it needs to cost.  They know when to use steal vs aluminum, they know all about the properties of their materials (the tensile strength, the melting point, etc). They know when to use bolts or screws.  They know where to find the best deals on steal.  His point is, I think, do we know that much about the material we use to build our apps – in most cases that is the framework.. Do you know when to use a stuct of a reference type, when to use ArrayList vs. Array?  Etc.  Engineers would know that kind of stuff.


 


Jeff batted cleanup for me. He took an hour of Q&A at the end of the two days.  I find it very useful to have  place to punt hard questions to do.  Jeff did a great job bringing his customer experience to bear in many of the answers AND he and I even agreed 90+ percent of time ;-).  (It was very entertaining for the audience where we didn’t.)   In the response to some question about API design Jeff made the point that API design has a large element of art to it.  That is, try as hard as we might, we cannot distill what good design IS in all cases.  There are still tons of areas where subjective elements such as good taste come in to play.  Where we cannot articulate the concrete reasons why one design is better than another, but we “just know” that it is.  Jeff even made the point that software development is more of an art than a science. 


 


Many in the class immediately caught the apparent disconnect between engineering and art.  And I did as well… The problem I have is that I agree with both of these guys.  Both views of the world resonate with me and I can clearly see how they are both right.   I have spent sometime recently thinking about this in more depth, and I think I know how to rationalize their views, but I’d like to get your take… Is software development a discipline of engineering or a discipline of arts?

Comments (26)

  1. Addy Santo says:

    Software development is a mix of both – A good software solution fits within the rigid "engineering" constraints of performance, security, maintainability, etc yet still possesses that elusive "creative leap" which turns the user experience into more than the sum of the software components. Enterprise software developers have a captive audience, so the "art" often takes back seat to the "engineering". Commercial software needs a good measure of both, otherwise it won’t sell. And in some markets (such as entertainment) the art is king, the engineering is just the vehicle for delivery.

  2. Julien Ellie says:

    I think any kind of engineering is also an art. Build a bridge and even beyond the pure architectural artistic value there is an art to the technical side of it. It either "comes together beautifully" and work, or it just plain work. Good engineering can accept the second option, great engineering takes more than that.

    Same goes for a car, or anything else really where you have to do engineering. It can be simple elegant, and just has this ‘quality’ to it that you can only qualify as with phrases like: "I don’t how to explain it, but I recognize it when I see it". I think it’s always a mix of both, and the more you know the technical side, the more you can reveal if you also have what it takes to make it "art".

  3. Adam Weigert says:

    I really wish I could get the three of you out for a week in Rochester NY. Our company severely lacks in our engineering department. As our programmer/analysts are expected to do this part. The only problem is, they cannot do it 85% of the time. I am 99.9% sure we could pay for you guys to have a wonderful week if you could make it out here ๐Ÿ˜‰ This community is so infant in its development stage, they and I have so much we could learn from you. ๐Ÿ™‚

    *bows down in respect and humble honor* ๐Ÿ˜‰

  4. Anonymous says:

    LMAO!! Jeffery isn’t an industry punted! (I think you meant pundit)

  5. Brad Abrams says:

    Must me some kind of Freudian slipโ€ฆ fixed.. thanks for letting me know.

  6. Zen and the Art of Motorcycle Maintenance [1] discusses very nicely "Where we cannot articulate the concrete reasons why one design is better than another, but we โ€œjust knowโ€ that it is.". For me, this is the same as a solution just "feels" right. We deal with abstractions and shapes (eg object graphs). These are art things as well as technology things. It makes sense (to me, at least) that there’s some art to the technology.

    Michael W

    [1] http://www.amazon.com/exec/obidos/tg/detail/-/0553277472/qid=1081915402/sr=8-1/ref=pd_ka_1/002-4506300-8077662?v=glance&s=books&n=507846

  7. Ryan Dawson says:

    To all who have commented before me – I think Brad knows that you need a good coexistence of engineering and art to create software, so you can stop saying it. I think the meat of the question is what is more important; what sets a product apart.

    I have always been on the art side of the fence. Why does America beat the hell out of every other country in terms of good software? We breed creativity and freedom. Why do people care more about music than calculus? I guess that is left for an exercise to the people who still are on the engineering side of the fence.

  8. Claudio Brotto says:

    I personally think Software Development is more of an art than a science.

    But the edge is often quite impossible to distinguish.

    It is an art since it requires creativity, but unlike typical art disciplines like paintings it has much more constraints due to the technology that is used to build software.

    A painter is in a way more free because he has a white board to draw over with the colors he likes. A software developer also has all colors and can choose which one to use, but the board is not white.

    But this also makes a software developer smarter than any other artist, because he starts from a board that is not clean and nevertheless creates masterpieces adapting to it.

    Isn’t this art ?

  9. I suspect that both engineering and art are important in all disciplines. Devices once thought of as purely functional must now look good if they are to sell successfully, and artists must generally work within quite rigid parameters if their work is to be considered truly good.

    The problem with software development is that many of its practioners approach it neither like good artists nor like good engineers, but more like a DIY-er putting up a garden shed – enthusiastic, but with no real plan, and expecting the materials they have at hand to be "good enough" without any investigation. This approach can only work if (a) the project is small enough, and (b) there are "kits" of suitable components that exactly match the requirements. Unfortunately all to often one or both of these conditions is not met.

  10. Kevin Daly says:

    I think software development has far more in common with an art than it does with engineering.

    Engineering is ultiamtely constrained and informed by the laws of physics…there are only *so* many ways to build a bridge that doesn’t go "splat" in the middle of the river. Get it wrong and you will fail. A se of known formulae govern the working of the world.

    With software development, there are many, many different ways to skin the proverbial cat. And although I think some people (especially managers who like to regard it as factory work, or who want it to be utterly predictable for their own peace of mind) like to think so, it is not simply and cleanly determined by a set of number you can feed in at one end.

    Engineering is the child of physics, software is the child of the imagination (OK, usually a somewhat diseased imagination, but I stand by my point).

  11. David Levine says:

    Art vs engineering. Perhaps a better way of stating it is the difference between disciplined vs undisciplined. The greatest artists were craftsmen first, and mastered the mechanics of their art before they could express their originality. I find the same traits are used in producing great software.

    Much of what we call engineering is the application of standards. This does more then promote good practice, it elevates the performance of the undisplined and those without knowledge or experience, and it channels the efforts of the software artists so they can better express their designs.

  12. I agree with most people here who have said that software is both art and engineering. It is the art part that makes creating software so enjoyable, for the most part.

    However, the art side of software, in addition to beauty, often comes with certain elements such as unpredictability and unreproducability. Large part in the effort of actually delivering software is in minimizing these aspects. It is fairly easy to write software; to deliver software you need a bit more engineering (reproducability) with the expense of art.

  13. Sergio Pereira says:

    I’d like to disagree with the majority of the opinions and say that SD is mostly Engineering. As with any other profession one has to have TALENT to achieve better results, but that’s not the same as an artist. Engineers have their talent with them all the time, working eight hours a day (only ?) several days a week. Engineers do not depend solely on inspiration to do their jobs (inspiration is a great helper), they get through it with talent and skills (some folks with only skills, only talent, or sadly neither).

    If we go down the path of considering our jobs a form of art just because there are subjective traits, then all jobs would be art, which is not true. I, for one, don’t need any sort of inspiration or state of mind to write a decent piece of data access code. Artists on the other hand cannot produce even mediocre pieces without inspiration and some level of mental focus.

  14. Charlie Hensler says:

    Great question. To me there is little doubt that software development is a fundamentally creative exercise- and I’ve met few people who were good at it who weren’t involved in it creatively.

    An interesting question to me is where does the creative aspect of software meet it’s engineering aspect – both seem to play a significant role in any project.

    When I think of any software I’ve written, I can’t really say in black and white terms why I developed it exactly the way I did. The approach was driven by a set of variables – performance, the available technology, the time allowed, the technology you are proficient with, etc.

    I think software development fascinates because there never is a single way to solve a problem – driven by engineering specs alone. The specs are a framework, but within it you have tremendous freedom to creatively solve a problem…

  15. Ah the old issue of art vs. engineering. Always a much discussed issue ๐Ÿ™‚

    I frankly believe the term "software development" might be slightly misleading. It’s not like software development is an art or not, it’s how the engineering part of it is a science and the architecture part is an art. It’s quite obvious to me (from the above comments) that many people see that development takes both to be succesful.

    I’ve formerly been in the science camp, but reading up on fine arts I discovered how much of the essence in architecture and arts are shared.

    As to what is the most important, well, it’s of couse the business case you are able to make ๐Ÿ™‚

  16. El desarrollo de software,