Log in

No account? Create an account
on programming - The year was 2081 [entries|archive|friends|userinfo]

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

on programming [Oct. 13th, 2004|11:43 am]
What is the nature of programming?

Despite collectively being referred to as "computer science (CS)", the processes of computer programming are couched in mathematical or logical terms solely because programming is run on a logic-based device, the computer. Nonetheless, the actual process involved in CS is in practice a liberal art, not a science: more akin to languages and linguistics. I would contend that CS is incorrectly categorized and the educational process of CS is at fundamental odds with the actual practice of computer programming.

I would contend there are two classes of programmers: there are system architects, and there are script architects. A system architect is a programmer who has typically been given a traditional CS education, and is responsible for developing underlying code. These programmers will typically develop operating systems, drivers, middleware, and enterprise class applications- applications whose primary purpose is to serve the needs of the computer hardware. Script architects, on the other hand, typically have little to no formal CS education. These programmers are often responsible for developing application macros, extensions, stored procedures, reports, and other user-faced solutions.

It is not uncommon for both types of programmers to attempt to stretch beyond their typical roles. In project management, there is supposed to be a bridging role, that of analyst, who can communicate the user-based needs to system architects, and in turn, provide system support to script architects to maximize the efficiency of scripted usage of system software.

Because of the nature of each type of programmer, the software created by the individual will typically show flaws that are consistent with the type of architect class. A system architect will frequently create flaws in usability, whereby the design is efficient from a system perspective and inefficient from a user perspective. This leads to the creation of scripting routines, which take base operations from the system API and rewrites them in terms which automate inefficent user tasks and improve UI usability. A script architect, on the other hand, will typically make flaws in system utilization, whereby the focus on specific user needs may result in unintended effects at the system level. Code generated by a script architect, even if written at the 3GL level, is frequently difficult to read by typical system architects. Unlike the code process described from system architect to script architect, however, there is no well established process by which script architect code can be engineered back into more efficient system code. In fact, the lack of such a process typically results in a third class of developer, the former script architect, who has ceased to operate at the script level and almost exclusively develops software at the 3GL level.

I would contend that this third class predominates the current software development environment in the USA, particularly at small- and mid-cap companies whose central business plan often is not directly focused on the business of software development. Further evidence in this regard is the fragmentation of the 4GL language market, whereby there are thousands of proprietary scripting languages intended as API's to underlying code, and numerous 4GL/3GL hybrid tools such as SoftVelocity's Clarion, Microsoft's VBA, the W3C's DHTML/Javascript, Zend's PHP, Macromedia's ColdFusion, the open source BeanShell, and many other more narrowly-focused scripting languages. These languages, although ostensibly 4GL, are often pulled into duty by the former script architect to performs some of the duties better suited to formal system architecture. As the former script architect becomes more familiar with a true 3GL language, they often begin programming at this level, developing system code. However, the development process is not a result of formal (presumably mathematically- or logically- based) training. The learning process is often aking to that of adult learning of a foreign language.

More impressive, is the evolution of former "script kiddies". Akin to children raised in a truly bilingual environment, these are children who have had some familiarity with programming languages from an early age. Different from bilingual children, however, the inculcation of a programming skill is not the result of parental or familial exposure, but that of a chisen peer environment. This environment is increasingly available to children first through the greater availability of personal computers, and second, through the increasing usage of online communication, As with children of immigrants, the "script kiddie" evolves beyond the creole 4GL/3GL languages used by the adult generation and is formulating a true dialect set of programming languages. This would explaing the popularity of such developing languages such as PHP, which as a interpreted language not compiled to byte-code or VM code, is not the most efficient way of developing enterprise software, and yet we can observe PHP based software exploding onto the user scene.

As these languages become more prevalent, the need for a grammatical formalism becomes more apparent. However, I woulkd argue that CS is the wrong type of formalism to introduce to ensure maximal efficiency. If we accept that the evolution of 4GL languages appears to take more of a linguistic rather than logical or mathematical route, it would make sense that a liberal arts education should construct a humanities major in programming. Much the way a background in linguistic science is not necessarily the best educational base for a future novelist or English professor, there should be a humanities-based formalism developed to understand, interpret, and even deconstruct programming at a usage level, not at a technical level.

personal notes: I would think that this topic, well researched and backed up by footnotes, would make an excellent basis for a PhD thesis. It's times like this that I regret no having attained a PhD: though in truth, I'm not really sure what my barriers are, other than slavery to a mortgage and a desire to no be poor for the next umpteen years whil I (re)establish a name for myself. There are times when I want to AP-exam out of the whole treadmill of an education, but I remember the tremendous cost I had to pay last time I took that route. I managed to AP out of undergraduate biochem prerequisites and wound up lost in graduate level biochem coursework. That's probably one of the root causes of my dropping my PhD, along with just general immaturity.

I feel, sometimes, that I'm no dummy, nor a bullshit artist. But, I don't have any tangible way, nor any adequate mentoring, on how to properly make distinct my talents from such a perception.

[User Picture]From: cogshiftingman
2004-10-13 12:04 pm (UTC)
I like your analysis. I have long believed that programming (whether it is in assembler or a high level language) is as much an art as a science, but I cannot formally justify that statement. I suppose when I program, I *feel* art-y, more than I do science-y :-) What's that all about?
(Reply) (Thread)
[User Picture]From: hbergeronx
2004-10-13 04:38 pm (UTC)

on art vs science as false dualism

even among mathematicians, it is not uncommon to feel "artistic" when working through a proof, or to find a proof "beautiful". But despite the "feeling" the underlying objective is logically assessed, and there would be few people who would suggest that mathematics is not grounded in the methods of logic and science.

On the other hand, a "wrong answer" in mathematics or logic is a clearly unacceptable (and typically unpublishable) result, and a "wrong answer" in science results in null hypothesis. Whereas, a buggy piece of code can be a (questionable, but) acceptable program. Also, a slightly buggy but extremely usable program will tend to win out against a well-crafted dog. There is therefore some subjective difference between programming, and science.

do you think my assertions in the post could be the basis of a formal justifiation?
(Reply) (Parent) (Thread)
[User Picture]From: cogshiftingman
2004-10-14 12:05 am (UTC)

Re: on art vs science as false dualism

It appeared formally sound to me.
(Reply) (Parent) (Thread)