Scott Parish: Blog

Tue, 20 May 2003
Hackers: sketchers, drafters

Paul Graham's recent article Hackers and Painters, along with a thread (read mini-flame war) over on ll1 discussing static versus dynamic typing and XP, got me to thinking about the different views of programming and the different styles of programming. This is closely related to the Code Commando article, but with a few twists and maybe more sympathies for those who are not the ``Commandos''.

Paul Graham compared creating art with creating programs and closely correlated the creation of something beautiful with the art of programming. While i believe that he's onto something, it strikes me that he may be missing half of the picture. To see why lets jump to the domain of the metaphor: drawers.

Almost everybody in our society is well aware of sketchers, whose are works are prominently displayed in offices, homes, restaurants--we even collect this work and dedicated buildings to the viewing of it. This is not the only type of drawings that are created though. In fact, a second type of drawer exists, but rarely gains any public attention, although on average their salary is much higher and consistent then that of sketchers. These often forgotten souls are that of drafters. And while they are much less often thought about, they are no less important to our society. Seeing that there are two types of drawers, to me, enlightens the various debates on language designs, programming styles, etc. Suddenly it can be seen that there really are multiple correct thought bodies; the problem is that they are looking at different situations. In the same way that sketchers and drafters have need of different approaches and tools, the different types of hackers need their different approaches and tools.

The following is a table showing some of the key differences between sketchers and drafters as i see it:

SketchersDrafters
Painters are much more interested in conveying emotions and feelings--the abstract. Drafters are much more interested in conveying the dimensions and exact details--the specifics.
Painters use pencils and erasers; their work is exact, but exact in an intangible way. Drafters use pencils, erasers, stencils, rulers, compasses, protractors, drafting tables; their work is exact in physically specific, tangible ways
Sketchers often work alone, they know of what they will make, and how. They have no need to negotiate with another sketcher, and can't well describe to him just what they want. The result of their work is personal, it will be attributed to their person regardless of who commissioned them. Drafters often need to work together, their drawings must fit together when finished and must not contradict one another. While the copy from a drafter will likely have his name affixed, it is all but remembered; his work will be remembered by the name company who pays his salary.
Keep a sketcher interested in a project, and you will be well rewarded. To do this the project will need to be unique, challenge his abilities, extend his artistic abilities. An artist can't be easily bought into doing work unless some of the previous conditions are met. Drafters are payed to draw what they are told. Their salary is largely their incentive
Sketchers have, and need, artistic freedoms. Drafters must be very exact and have little freedom for deviations from what is commanded of them.
The result of sketchers is admired, it is hung on the wall for pleasure, people from almost all walks of life will see and admire it. The result of a drafter is used to get a job done deep within industry where few will ever see it before it is filed away.
The result of a sketcher is used to produce feelings, emotions, values, thoughts. The result of a drafter is used to produce engine blocks, apartment buildings, stereo systems, and bridges.

Having looked at these differences between sketchers and drafters, lets return to hackers. As far as i know there are no clear terms used to distinguish between types of programmers, since most people don't distinguish between them (which is why i'm writing this). To be arbitrary i'm going to call the groups the artistic programmers and the clerical programmers.

Artistic programmers program not because of a salary, although it certainly doesn't hurt, but because there is a certain beauty in programming, in indulging in the art of creation. The more interesting and unusual the creation, the more desire to step up to the challenge of not only revolutionizing, but doing so with their expressive personal touches to give rise to a masterpiece. A tedious job will frustrate an artistic programmer, and he will expend more energy finding ways around finishing correctly then he would have plugging through the tediousness. At times he may subconsciously block out the tediousness and cut corners to get around it.

Artistic programmers have no more use for static typing and other arbitrary restrictions then a sketcher has use for a compass, a protractor, or a stencil; imposing such on him will make him feel confined, almost to the point of being claustrophobic. In creating a masterpiece, he longs to allow it to be admired and appreciated for what it is. The artistic programmer is less interested in the specifics of what he is programming, in the specifics of telling the computer what to do in a step by step list, he is more interested in expressing the solution to the problem he is solving, he will there for be more inclined to use a much higher level language such as a functional language.

Artistic programmers often prefer to work alone. Programming in a team can frustrate them greatly as often they know exactly how a problem should be solved, but can not easily express this with other programmers. An artistic programmer feels strong ownership to his code, and has the inner personal needs for attribution. He will not take kindly to others mucking around in his masterpiece, even if he hasn't polished off all the rough edges.

Clerical programmers are often much less apt at solving tricky problems, and will not know what to do with the freedom given by things such as dynamic typing. If given too much freedom they will likely end up using it inappropriately and be found having created a mess and coded a project into a corner. On the other hand, they can take a tedious but well structured task and happily plug away at it. They often have no need to have their code admired, in fact they may prefer it remain unseen.

Clerical programmers should work closely with other clerical programmers. In fact, they will often enjoy the company and dynamics of team programming.

In short clerical programmers are great for large tedious and exacting projects, projects that are not inventing new types of wheels. They are well suited for the database logic somewhere deep within the back recesses of a company, or creating an endless number of simple and routine web systems--taking large but programmatically simple requirements and working tirelessly at implementing them.

These two types of programmers is exactly why we see such division among languages and styles. An artistic programmer has no need for the philosophy set out for them by XP, while they may not personally disagree with all or even most of XP's tenants, it is foreign to their more abstract dynamic way of creation. Lisp may be a powerful weapon in the hands of an artistic programmer, but it may give too much freedom in the hands of a clerical programmer, that is if they ever figure out how to begin using it. The manager for a team of clerical programmers may prefer to use a languages like Java where it can be certain that the parts that the individual programmers are creating fit together exactly, and that no programmer is ``abusing'' his knowledge of the code-base.

Overall we need to learn more about these two types of programmers work and work best. By correctly utilizing them we will have all the more efficient society, and all the more happy of workers. Conscious effort should go into decisions being made about which code to allow artistic freedom on, and which code is tedious enough to keep away from the artistic type programmers.

And, as nice as the DeCSS code was, we need more public exhibitions and admiration for good beautiful code.

Thanks to Nic Ivy and schvin for feedback and suggestions on this article

[2003.05.20 14:46] | [articles/technical] | #
  Categories
/ (77)
articles/ (33)
  health/ (1)
  humor/ (2)
  religious/ (7)
  technical/ (19)
books/ (9)
  general/ (5)
  health/ (1)
  technical/ (3)
humor/ (6)
meta/ (1)
poetry/ (1)
quotes/ (11)
rambles/ (8)
reviews/ (1)
speeches/ (6)
  technical/ (3)
tips/ (1)
  mac-osx/ (1)

Archives
2005-Oct
2005-Sep
2005-Aug
2005-Jul
2005-Jun
2005-May
2005-Apr
2004-Oct
2004-Sep
2004-Aug
2004-Jul
2004-Jun
2004-May
2004-Apr
2004-Mar
2004-Jan
2003-Dec
2003-Nov
2003-Oct
2003-Sep
2003-Aug
2003-Jul
2003-May
2003-Apr
2003-Mar
2003-Feb


RSS

blog powered by: pyblosxom

Copyright 2000-2003 Scott Parish
All rights reserved.