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.
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.