Wednesday, June 29, 2011

Design Principles vs Engineering "Principles"

So today I've had Newspeak programming language recommended to me a second time. On its web page the people behind it claim Newspeak is going to be "designed as a principled" language.

The big problems with that claim are first, I see no evidence of any design on that page. And second, nothing they talk about can be even loosely described as principles.

That page, and that language, are the results of typical Engineers' confusion of ... everything related to design. They speak of design when they are incapable of it. They speak of principles when they don't even know the meaning of the term. I suppose I'll have to explain exactly what the terms mean.

Engineers

It's sad that I have to explain the meanings of basic terms in the English vocabulary but I can't say it's unexpected given that I've had to explain how engineers' thought processes are different from, and inferior to, designers. And what exactly (spontaneous) creativity means that makes it blatantly fucking obvious engineers are incapable of it.

The first observation is that engineers don't operate in the realm of ideas. They are not intellectuals. They do not value ideas for their own sake. This is a straightforward consequence of the fact they can't synthesize original ideas. Why value what you can't do? It would hardly make you feel good about yourself. And so very few people care about the truth more than feeling good.

The question naturally arises, what realm do they operate in? Well, they operate in the realm of externally observable behaviours. They are actually proud of this and claim this makes them superior people when the truth is they are cognitively deficient. It's a bit like a paraplegic being proud of using a wheelchair and claiming there's nothing a legged person can do that they can't.

Engineers' Perception of Systems

What does any of that have to do with systems? Everything! Because engineers don't operate in the realm of ideas, they don't conceive of systems as being systems of ideas to be understood. To an engineer, a complex political, social or software system isn't to be understood. Rather, a system is merely to function. It merely needs to ACT in a certain way.

To an engineer, a software system that's been "architected" as a Big Ball of Mud (like Unix) isn't an obvious failure. Rather, one must determine whether or not the Big Ball of Mud is a failure empirically, by seeing whether or not it does what you want to do.

If the big ball of mud does what the engineer wants it, in his very limited imagination, to do then it's a success! And anyone who says otherwise by virtue of having a greater imagination is a "troll" (*) to be hated. And anyone who says otherwise by virtue of having a lower annoyance threshold is a "luser" to be scorned. And goodness help you if you're both!

Similarly, to an engineer, writing spaghetti code is not ipso facto a failure. Yes it's going to be unmaintainable, but this obvious truth is not at all obvious to an engineer. Rather, one must measure the maintainability of spaghetti code empirically. And if it happens that generally such systems are unmaintainable well, that's a heuristic. Something that happens to be true, most of the time, not something that is true axiomatically and/or proven from first principles.

Designers' Perception Of Systems

To a designer, the above is all so much unbelievable, ridiculous bullshit. It's all FALSE at every possible level of resolution. To a designer, a system is to be understood. And this fact is axiomatically true. If a system can't be understood then it's obviously either not been designed at all or been badly designed. This is the most obvious and simplest theorem of any and every designer.

Given this theorem, a big ball of mud isn't any kind of architecture for the exact same reasons why the broken down ruins left over from artillery shelling don't constitute architecture. It is fucking obvious! And for the exact same reason, spaghetti code can't be considered any kind of success. No matter how well it behaves. No matter how maintainable it turns out to be.

Any system that can't be understood is a failure! Automatically. Axiomatically!!

Engineers vs Designers

What it boils down to is that when engineers make "principles" about a system they're planning, these end up being of the form "everything can do X" or "everything has Y" where X and Y are concrete artifacts. Hence, "in Newspeak, every object will be an Actor". These rules may or may not be easier to understand locally, but almost always they make the system as a whole more difficult to understand globally.

Meanwhile, when designers make general rules about a system, they end up saying fuzzier things like "the system is homoiconic". Design principles are typically more difficult to understand since they are more abstract, usually fuzzy and never concrete. But they will always, always make it easier to understand the system as a whole. So, "everything is an Actor, hence the system is wildly non-deterministic" is NOT something that should be construed as a design principle.

This is why systems planned mainly or solely by engineers can't be considered designed. Let alone well-designed. Rarely has any effort been made to make them comprehensible as a whole. And any effort engineers have spared seems paltry compared to the obsessive focus a designer would invest. These systems also have a nasty tendency to be incomprehensible to anyone but an engineer. And then only by stepping through them laboriously. This is clearly unacceptable.

Design vs Engineering

The difference between design and engineering is usually waved away by engineers claiming that design is just interface engineering, but that just shows how engineers are incapable of grasping design. Design is a synthetic faculty. Engineering is an analytic one. If you want to see the difference, look no further than any house designed by Frank Lloyd Wright versus reading the Building Code.

It's actually something of a sick joke to claim that underlying local rules (what engineers call principles) actually are overarching principles. It just goes to show that engineers are incapable of the synthesis required to understand the meaning of the word "principle" in the English language. Principle means higher level and not more fundamental. These things are pretty much opposite.

Since there is an important difference between design and engineering. And since the difference is fundamental. And since engineers can't do design if you put a gun to their heads, even though they claim to be able to. And since designers can't do engineering if you put a gun to their heads, even though they claim it's beneath them and would slit their own throats if forced to. A decision has to be made between them to decide who has primacy over the other.

Who would you rather be the bitch of the other?

Who Should Plan?

Now this question has a rather important context so let's state it properly. If you're one of the end users of the world, and keeping in mind that even if you're a programmer then you use many orders of magnitude more software than you actually create, would you rather that engineers or that designers planned software systems?

Personally, I think there really ought to be a law that would allow any competent designer to shoot engineers whenever they get uppity. I think this is totally reasonable considering that good engineers are a dime a dozen and competent systems designers are rare as Archaeopteryx teeth. So just to equalize the massive imbalance in numbers between engineers and designers, you need to hand designers overwhelming power.

Actually, you would need to do this even if designers were plentiful since on any software project you need about 2 designers for every 10 engineers. Yet the few designers need to have as much input as the many engineers. Then again, if systems designers were plentiful, we wouldn't be living in a crapsack world (**) so probably the imbalance would redress itself without resorting to shooting assholes with delusions of adequacy.


*: troll: 1) a person who through sheer peevishness and desire to do evil says the world is less than perfect so as to harm the self-evident Harmony all humans enjoy with each other, with feral animals, and with natural disasters. 2) a person who challenges group-think. 3) a dissident.

**: Hmm, I guess this makes me a Knight in Sour Armour.

7 comments:

sebastian said...

First let me say that, generally, you make some interesting analysis and syntheses. They are great starting points for thinking and discussion.

Second, you have mentioned several of the things I've put effort in rejecting about engineering. There is something very broken at the very fundamentals of how engineering is taught that makes it broken. Noise in, noise out.

Finally, and fortunately, the world (kind of) works *because* understandable systems aren't a requisite for life. The Moon doesn't care if we understand gravity. It goes around Earth modifying tides anyway. You don't need to understand how the brain works in order to think and you don't have to know the details about transforming an apple into aliment but you survive when you eat.

My point is that engineers use limited knowledge to do real things that are valuable even if they suck.

And by no means I'm justifying the crappy shit they usually do.

One thing that can help to push things forward is to put industrial designers at the top of companies.

We need more industrial designers as co-founders. People that can make (design) experiences instead of stuff.

Richard Kulisz said...

Are you really giving up on the research programme of Total Reality Control?

And giving up on Dyson spheres?

And weeding out autistics, narcissists and psychopaths from the population?

And artificial vat meat? And brain racks?


You're right that engineers do valuable things. I personally aim to do revolutionary things.


I agree with you that designers should be god-kings. :D

My practical suggestion is that each designer should be complemented by a number of researchers who can then serve as a buffer for the engineers.

Both designers and researchers share the same cognitive traits, they just trust different faculties more. So they can understand each other, they just think differently.

For reasons I don't understand, among my personal contacts I have many more times as many AN-syns as an-SYNs. This disparity should be taken into account.


You may be interested in reading my explaining software systems design to an industrial designer. Which makes software systems intrinsically more challenging than industrial systems. Consider that Apple's industrial design aesthetic can be summed up as: Braun. Industrial design may be limited enough to be memorizable by engineers. I don't see that happening for software design.

I don't see anyone as having mastered software design. Not even me, even though I've reached milestones others couldn't dream of. Mastery would require strategies against every systemantic.


So yes, I think your suggestion might work, maybe, for industrial design. I don't have any hope of it working for software design until an entirely new business model becomes a runaway success. But I don't think even that would have a major impact on the problem. This is essentially a political problem.

The political problem can be stated thus. We systems designers are too few to have achieved the critical mass to do ANY OF:

* identifying children with the talent
* tracking children with the talent
* producing educational material for children with the talent
* differentiating themselves in the public's mind from other creatives, from engineers, from academics
* educating those with the talent through adolescence
* educating them through young adulthood
* dragging the Art into modernity by anti-specializing
* mastering the Art to its maximum potential
* researching the Art so it can be taught systematically
* support our young economically, financially and politically while they incubate
* produce standards to determine each other's competence
* push those standards on to hostile and clueless employers


Finally, you may be interested more in synthesis. I now think it's a 2-variable 3-value faculty. That's 3^2 combinations. I haven't identified them all.

Anonymous said...

Like Wittgenstein, you have solved all problems on Philosophy. Note the irony.

Anonymous said...

I have rarely seen such imbecility as I have seen in this post. Engineers - as in proper engineers, not the half-breeds of the worst characteristics of designers and engineers that you see in the software industry - make things that actually work. If you left the development of buildings solely to designers, they'd fall over at the slightest breeze and feel like an icebox in the middle of summer. Likewise, if you left the development of cars solely to designers, they'd crumple like tin foil, run like horse carriages and drink fuel like a supertanker.

I could go on with the metaphors, but I think I'll make a more pertinent comment: Your hostility betrays your ignorance and your stupidity. It is not amusing, nor is it intelligent. It simply demonstrates the sort of crude thinking which suggests that you should be put over in the "special" section of the room, with a cone-shaped hat with a rather prominent "D" on it.

Anonymous said...

principle
ˈprɪnsɪp(ə)l/Submit
noun
1.
a fundamental truth or proposition that serves as the foundation for a system of belief or behaviour or for a chain of reasoning.
"the basic principles of justice"
synonyms: truth, proposition, concept, idea, theory, postulate; More
2.
a general scientific theorem or law that has numerous special applications across a wide field.

Looks like both synthetic and analytic definitions are in the dictionary. So engineers are "within spec" to use this word.

Unknown said...

I can see how frustrating it is for a designer to be told that what they are doing is nothing. It's like a poet being told that love is nothing more than a series of biochemical reactions. I think engineers in general could benefit from learning that there are higher orders above observable phenomena.

However saying that engineers don't care if they write spaghetti code is like saying designers build fantabulous winged butterfly suits and don't care that they will send their wearers plummeting towards the ground. I suppose I could rant for a few pages like you did about their supposed defects, but I'll give designers the benefit of the doubt.

Regarding higher order ideas like "the system is homoiconic": it has to be noted that at some point, for an actual system to exist, it must be rendered into logical, concrete objects. That's where engineers excel. You've described Unix as a ball of spaghetti and I could understand that it might seem that way to you. I can speak from experience and say that every variant you see there is based on a real world need. Computers only function through precise logic at every level, and when you come to understand them in detail all the variations make sense. You actually start to learn about the material world and the limits of how we're able to interact with it.

Richard Kulisz said...

Oh Kevin, you say the funniest things. Haven't you learned by now that you are an extremely atypical engineer and that most engineers are right-wing authoritarian nazi borg robots? It's true!

You say they could stand to learn there are higher order phenomena above the merely observable? BLASPHEMY! There are no such things!

Human bodies are merely biomechanical machines operating deterministically as proven empirically. Minds are merely electrical impulses, so are emotions and beliefs and subjective experience! And mathematics is merely convention.

The only higher order phenomenon is God! YOU ARE BLASPHEMING AGAINST GOD!

As for your talk of needs, I will answer the following way:

Blackadder: And as your Highness can see, the barbican is thicker to withstand more pikemen assaulting the front gate.

King Charles: Good, good. And the walls have those crenelations?

Blackadder: Yes sire, with the little fleur-de-lys on top.

King Charles: Excellent, it'll be one more variety of castle and exactly what we need right now.

Courtier: But sire, none of our castles can withstand the new cannons!

King Charles: Silence! The princess NEEDS her pink castle.