Computer Programming – A struggle between Art and Science

Programming Naturally an Art

When it comes to programming, I am in complete agreement with Donald E. Knuth well-known respected computer scientist and author of the best programming multi-volume work ‘The Art of Computer Programming’. He published an article “Computer Programming as An Art” in a CACM 1974 publication, and that article is a comprehensive coverage of the subject, and as valid today as it was back in time. Article talks in great detail about the conception of art as well science, difference in scope of them, and desire of adaptability for both of these. I would like to extend the concept by categorizing programmers in two different modes or categories. Programming Engineers and Programming Artists.

Computer science is purely based on human imagination, and layers upon layers are imagined, defined, named and implemented by humans themselves. As human creativity can never be perfect, so ironically every layer can be challenged, which holds true only but for Art. Historically, layers of human imagination are always depicted as form of expression and Art. That implies, programming is an art. In the start, there was no disagreement. In the same article, Knuth mentioned “When Communications of the ACM began publication in 1959, the members of ACM'S Editorial Board made the following remark as they described the purposes of ACM'S periodicals”

If computer programming is to become an important part of computer research and development, a transition of programming from an art to a disciplined science must be effected. – CACM 1959

Well, apparently the community at that time was certainly in agreement that programming is an art. But the objective was a transition to disciplined science. Although it says, that transition is necessary for it to become part of research and development, but rather I feel the actual benefit of transition is the production of Programming Engineers at masses. Why? we will explore in a while. 

Why transition to Science?

Artist or Engineer governed by artistic principals

Artist craves for inner self imaginative expressions to create some thing new. Compare this to Natural sciences, i.e. Physics, mechanical, electrical, nuclear and genetics, etc. where scientists are observing and discovering the formulas, laws which are universal and defined by nature itself. These are certainly not humanly imagined and defined. So there is essentially a big difference between Engineering governed by some real universal laws and principals, versus Engineering governed by laws of Artistic creation of humans.

Real motive behind the struggle to make computer programming a science and programmer as Engineer is the limitation of Art itself.  Art has huge limitations when it comes to producing artists, It requires natural talent, and not every one can be trained as artist. But as an industry, computer programming field require masses of programmers to fulfil demand of automation. Only principals of Engineering can fulfil the requirement of industry. As Engineering, depends on knowledgebase and exhibits pre-defined set of rules and principals to follow. So theoretically any individual can be trained as Engineer. Artists can not be produced, but Engineers could. Artist imagines, creates, invent, while Engineer follows best practices, and set of rule.

Struggle for Science

To fulfil the requirement, over the time, due to necessity, we have tried to take Art of Programming and convert it in to a form of Engineering governed by rules (not Natural but our own defined) as much as possible. Over the time a huge effort has been applied to develop practices and principals which combined can make programming a partial form of Engineering (or at least to some extent). Algorithms, Design Patterns, Good Programming practices are all example of this. This effort has been successful to good extent, so masses are actually being trained and deployed to industry as Software Programmers. There are ton of best practices, principals, patterns, articles, libraries to follow, and it is accumulating fast. It guarantees, any person can be trained as Programmer (Programming Engineer).

What Comes first? Artist or Engineer

I think the line is very thin but still very clear between what kind of work falls in Art and Engineering. There are certain properties that define both roles:

Engineer

- Studies certain set of principals and applied sciences
- Takes every day problem, applies well known established practice for a solution
- Keeps up to date with latest trends and best practices. So that knowledge can be applied for better solution of well known problems.
- Accumulates Knowledge

Artist

- Learn tools to express
- Innovative. Artist Imagine / Think and goes through no mans Land.
- Normally rules does not apply (or very few), and even if there are some, artist think out of the box to come up some thing better.
- Accumulates Inner Expressions and ways to trigger Imagination and Innovation.

Clearly, role of Artist is to innovate, and Engineer is to apply. Inventor is artist, while learner / applier is Engineer. Artist creates, Engineer applies.

Back to programming, I would categorize the programmers in two major types / roles, based on thinking style, native talent, and trend. Normally each one of programmer tilts more towards one of those categories. And definitely majority tilts towards Engineering.

Programming Artist

When it comes to innovation, programming is purely piece of art and nothing else. It genuinely require imagination, and there are very few restrictions. While innovating, you are already in no mans land. There is no rule to follow, there is no similar example. There is no design pattern that matches with problem.  There is no book that gives you solution. No one did so before, your imagination is under siege. Programmer Inventor is the artist by all means.

Programming Artists are very small percentage of developers for obvious artistic principals. Those who are less of followers and more of innovators. Who have native ideas, and writing their own libraries/frameworks inspired by internal creativity. All the great programmers who invented great tool and libraries, solved a major problem for us, all fall in to this category. So they are not that rare species luckily.

Programming Artists, have to remember, space and fields for innovation is very small. If you are not in that area, you are probably solving daily life business problems. The pile of developed principals and practices is there to help solve normal business problems with ease and with greater overall confidence. Only a programming artist can appreciate another programming artist. While Industry is full of Engineers, led by non-technical bosses and management. So it would be hard to get appreciation in true means, specially if you are in typical business solutions development industry. Welcome to real world!

Programming Engineer

When it comes to solving daily life business problems with quickest and most reliable methods, and where you try to divide problem in to well known patterns and apply best practices, programming is a much like a discipline of science and engineering. While engineering, you have wonderful knowledge of common type of problems and extensive library of patterns to solve these problems. There are lot of procedures, laws, design patterns, terminologies, to make software development and problem solving much easier. There are always new patterns and libraries, methodologies, and practices in market to keep your skills fertile. With so many case studies and experience, solution confidence level is very good.

No doubt that most of programmers around as Programming Engineers and it is for this type, that for struggle for transition of programming to science has begun. Along with time, industry is improving in this front, so much so that it became common, ones who are strict followers of the defined rules are hailed as best programmers.

Programming Engineers, have to remember, that programming was natively an art. Knowledge, patterns and practices will keep you in good company. But keep craving inner self to discover an artist, to really enjoy programming at its best.  Struggle to convert programming as a pure Engineering can never be completely successful, because it is all governed by imaginative, virtual and human defined rules that could be challenged at every level. Programming and designing is very artistic activity in its heart.

Summary

Programming is an Art and Science/Engineering discipline as well. It is a combination of both. It is a struggle in between. Believers of Art without boundaries might need to behave in certain situations where established practices and scientific pillar of programming is much more productive. Hard line followers of pillar of programming science needs not to think rules and best practices as the universal truth, and should think out of the box for an more personalized solution much like free form expression. Any programmer should think of these two modes, and practice switching between them as per need. Strive for balance, and you would improve, no matter which category you are in. And, look out for Programming Artists. As they are the ones, that will bring State of the Art solution of problem.

About Bajwa

Bajwa Thumbnail Ali Haider is a software developer and technology enthusiast based in Reading, UK. He has over ten years of hands on experience in software design and development using Microsoft technologies on various fronts. He attempts to keep learning and applying cutting edge technologies and best practices, and his passion is to work on complex challenging projects and to develop data crunching frameworks.

Projects

    Tag Cloud