“Was not their mistake once more bred of the life of slavery that they had been living?—a life which was always looking upon everything, except mankind, animate and inanimate—‘nature,’ as people used to call it—as one thing, and mankind as another, it was natural to people thinking in this way, that they should try to make ‘nature’ their slave, since they thought ‘nature’ was something outside them” — William Morris

Tuesday, December 11, 2012

Tribulations of a Soviet Programmer

...let's assume that we accept that you can argue by homonym. So OOP is associated with software OOP. And software OOP is an evil capitalist product.

And as we know, communist programmers prefer not to use graphical interfaces such as blinking cursors and arrows...they prefer a more authentic, wholemeal kind of programming that involves painstaking transcription of thousands and thousands of lines of code, to avoid the dreaded "objects."

A programming scriptorium, if you like, where real human beings write all code from scratch, every time.

Because true communists want to return to a world without machines, a world where reusable software has been swept away.

True communists want nothing to do with:

  • simplicity: software objects model real world objects, so the complexity is reduced and the program structure is very clear;
  • modularity: each object forms a separate entity whose internal workings are decoupled from other parts of the system;
  • modifiability: it is easy to make minor changes in the data representation or the procedures in an OO program. Changes inside a class do not affect any other part of a program, since the only public interface that the external world has to a class is through the use of methods;
  • extensibility: adding new features or responding to changing operating environments can be solved by introducing a few new objects and modifying some existing ones;
  • maintainability: objects can be maintained separately, making locating and fixing problems easier;
  • re-usability: objects can be reused in different programs.


Dominic said...

"Software objects model real world objects" turns out to be seldom true in practice, and even less frequently true in *good* practice.


Timothy Morton said...

Possibly Dominic. But "real world objects" here means things like arrows and cursors, doesn't it?

Timothy Morton said...

...are you Dominic who launched Cold World at the second speculative realist conference?

Dominic said...

The connection between Cold World and SR has always been a bit haphazard; Ray Brassier wrote me a very nice blurb, and the book's shown up on the odd SR reading list, but it's really a book about *sensibility* rather than a work of speculative metaphysics...

Even the simulated world of the user interface is not always directly or univocally mapped or modelled by software objects. For example, HTML pages are simultaneously modelled hierarchically (in the DOM), as a tree of nested visual elements, and addressed categorically (in CSS), as a collection of elements identifiable by type, class, hierarchical position relative to other elements etc. - these two structures combine to provide a synthesis of "semantics" (structured document content) and "styling" (rules about how to represent that structured content visually). This makes sense for all sorts of reasons, but is nevertheless extremely counterintuitive for someone approaching HTML/CSS/Javascript for the first time: the "programming model" doesn't really correspond at all to the "mental model" a non-programmer would have of a web page.