From: Lucian Mogosanu Date: Sat, 29 Aug 2015 09:16:29 +0000 (+0200) Subject: posts: 03c, 03d X-Git-Tag: v0.5~10 X-Git-Url: https://git.mogosanu.ro/?a=commitdiff_plain;h=589013d07c2df238f4f473747d55234c3368677f;p=thetarpit.git posts: 03c, 03d --- diff --git a/posts/y02/03c-the-myth-of-software-engineering.markdown b/posts/y02/03c-the-myth-of-software-engineering.markdown new file mode 100644 index 0000000..69d8644 --- /dev/null +++ b/posts/y02/03c-the-myth-of-software-engineering.markdown @@ -0,0 +1,187 @@ +--- +postid: 03c +title: The myth of "software engineering" +date: August 9, 2015 +author: Lucian Mogoșanu +tags: tech +--- + +In his post "[Propositions as Filenames, Builds as Proofs: The Essence of +Make][atkey]", Bob Atkey describes the `make` build utility as a tool for the +construction of proofs based on a set of rules, in a similar (or at least not +dissimilar) way to Prolog. This makes Makefile a logic programming +(meta)language used to describe build pre and post-conditions, plus +(optionally) the contract implementation, i.e. *how* the rule can be applied +once the pre-conditions are met. + +Aside from describing the fundamental model, the post also makes a short yet +interesting comparison with other build tools: + +> Many alternatives to `make` have been proposed. Motivations for replacing +> `make` range from a desire to replace make's very Unix-philosophy inspired +> domain-specific language for describing build rules (Unix-philosophy in the +> sense that it often **works by coincidence**, but falls over if you do +> something exotic, like have filenames with spaces in, or have an environment +> variable with the “wrong” name), or `make`'s slowness at some tasks, or a +> perception that `make` doesn't treat the `make`-alternative implementor's +> favourite programming language with the special treatment it so obviously +> deserves. + +These points, and specifically the point regarding the Unix philosophy, are +uncoincidentally the same as those brought in the "SysVinit versus +[systemd][systemd]" debate: while init scripts have various issues, performance +being but one of them, the hard separation between policy and the actual `init` +implementation is what makes system administrators prefer the legacy solution +rather than the new, full-featured stuff. On the other hand, the fact that +systemd boots faster brings a null advantage to system administrators, since +they want to maintain machines that are rebooted very rarely (if ever). + +These examples are but a few illustrations of the crisis of the field of +software engineering, more specifically the "engineering" part. As much as I +don't like quoting [Wikipedia][wikipedia], it provides a few very good +definitions of the term's meaning: + +> Typical formal definitions of software engineering are: +> +> * "the application of a systematic, disciplined, quantifiable approach to the +> development, operation, and maintenance of software";[^1] +> * "an engineering discipline that is concerned with all aspects of software +> production";[^2] +> * and "the establishment and use of sound engineering principles in order to +> economically obtain software that is reliable and works efficiently on real +> machines."[^3] + +The first and last definitions are particularly good, stating that software +development needs to be systematic and that it needs to rely on theory, method +and principle. That is, the outcome of the development process must rely solely +on the requirements and the end result should be quantifiable in the scientific +sense of the word. Also, the duration of the development process needs to be +estimated with a good degree of accuracy[^4], not only for the sake of +providing the engineers with determinism in terms of costs and not only for the +sake of providing a "time-to-market", but also to be in line with the "theory, +method and principle" guideline. + +This is very far from the current state of the software industry and +software[^5] engineering. Software engineering methods and principles do exist, +only they are either faulty by design[^6] or they involve throwing an army of +developers at some particular problem[^7]. This process "scales" in the sense +that the end product will be "good enough"[^8], but the costs involved are so +big that they would be better spent trying to improve software quality by +design. That is not to say that software engineering should not involve any +hacking at all; on the contrary, only that hacking should not come at the +expense of science. + +To add insult to injury, the complexity of most real-life software systems +requires the software engineering process to scale up, and this has nothing to +do with code. Writing code is cheap, sound design is however mind-bogglingly +hard, and at the same time essential[^9]. At the same time software complexity +conflicts with two aspects of software engineering. + +The first aspect is that of establishing requirements. While simple systems, +say, real-time DPSs, have well-defined requirements, some of the complex +systems are subject to requirements that are often ambiguous. "Engaging users" +isn't a non-ambiguous requirement[^10] and thus making software to meet it is a +joke. Even some of the seemingly clear requirements are in fact hard to +establish: for example building a platform to facilitate communication between +people is a hard problem: doesn't IRC satisfy this requirement? don't blogs +satisfy it? why are people looking into "integrated" products? + +Secondly, [software specification is the bottleneck][microkernel-verification]. +Again, it is fairly easy to specify simple systems, even when they are built as +isolated components of larger systems, such as, say, software control +components for automobiles. It's however very difficult to specify a social +network, given that the term itself is ambiguous. Is IRC a social network? + +This isn't to say that there aren't large systems that can be formally +specified: Bitcoin is one such example. Facebook, on the other hand is a +counter-example. This is incidentally why Bitcoin [is infrastructure][bitcoin], +while Facebook cannot, and never will attain that status. This proves the point +that the concept of social network, even if we don't view it as a marketing +object, doesn't make sense in the context of software engineering. + +This in turn shows that software engineering has become somewhat of a myth. +It's not only that it's hard to make reliable software, it's also hard to make +software that's *unambiguously useful*[^11]. Stallman's Emacs is reliable and +useful because it does one thing well[^12]. djb's qmail is reliable and useful +because it does one thing well. systemd on the other hand is not reliable and +useful, because it has "neat features". Google Play is not reliable and useful, +because "it's social". + +Of course, this doesn't really matter to the user, it just makes developers' +lives a hell. + +[^1]: “IEEE Standard Glossary of Software Engineering Terminology,” IEEE std +610.12-1990, 1990. + +[^2]: Sommerville, Ian (2007) [1982]. "1.1.2 What is software engineering?". +Software Engineering (8th ed.). Harlow, England: Pearson Education. p. 7. ISBN +0-321-31379-8. + +[^3]: "Software Engineering". Information Processing (North-Holland Publishing +Co.) 71: 530–538. 1972. + +[^4]: You may interpret "good" in whatever terms you wish. However, a project +that was meant to last six months and lasts a year is usually no more and no +less than utter failure, whether we're talking about building software, +bridges, living apartments or spacecrafts. + +[^5]: And hardware! You're most probably reading this using bad quality +hardware, but only because vendors are too keen on selling stuff that has a +"short life cycle". Remember that time when you used to buy a product and the +producers actually had to provide you with a strong warranty regarding how much +the hardware's going to last? Sure, this happens nowadays too... in theory. + +[^6]: Let us stop for a moment and [bash][agile], purely for the sake of giving +example: + + > Agile software development is a group of software development methods in + > which requirements and solutions evolve through collaboration between + > self-organizing, cross-functional teams. It promotes adaptive planning, + > evolutionary development, early delivery, continuous improvement, and + > encourages rapid and flexible response to change. + + So, "agile" promotes "collaboration"; I'm guessing other methods don't? + "Self-organizing, cross-functional" teams, okay, not bad, if by + "self-organizing" we don't mean "systematic chaos". "Adaptive planning" is + another term for "we can't really meet our deadlines and we don't want to + be brutally beaten once that happens"; "evolutionary development" doesn't + really mean anything other than "we don't know what our product's gonna + do"; "early delivery" is another term for "late delivery"; "continuous + improvement" is... really, I don't think I need to go further. + + In short, "agile" has nothing to do with actual software engineering and + everything to do with kids sitting around and tapping on their keyboards, + with absolutely no idea what they're doing. The fact that some of them + manage to pull out a product is coincidence. + + However, that is not to say that development methodologies themselves are + bad, but rather that they are generally profoundly unscientific and thus + should be regarded more as guiding principles rather than rigid + constraints. Consider this the next time you start a new project. + +[^7]: It's okay, other areas of engineering require low-paid plumbers too... +just in case you thought "software developer" meant more than that. And no, +your computer science degree has no actual value. + +[^8]: Yes, it has some bugs, but the sheep won't complain. They'll also buy the +next iteration anyway. + +[^9]: This is why bridges don't fail. This is why airplanes don't fail. Good +design, from top to bottom, is what drives a good end product. + +[^10]: It has some potential to be, though, and it would have been if sociology +were a real science. Alas, it's not. + +[^11]: Facebook is also a good advertising platform, right? Google is also a +good advertising platform, right? Right. It's left to the users to judge for +themselves whether this is "unambiguously useful". + +[^12]: In case you're wondering what that is, like the troll you are, it's +extensibility. And yes, I am writing this in vim. + +[atkey]: http://bentnib.org/posts/2015-04-17-propositions-as-filenames-essence-of-make.html +[systemd]: /posts/y01/02b-how-and-why-systemd-has-won.html +[wikipedia]: http://en.wikipedia.org/wiki/Software_engineering +[agile]: http://en.wikipedia.org/wiki/Agile_software_development +[microkernel-verification]: http://arxiv.org/abs/1211.6186 +[bitcoin]: /posts/y00/01f-bitcoin-as-infrastructure-i.html diff --git a/posts/y02/03d-never-mind-the-balkans-heres-romania.markdown b/posts/y02/03d-never-mind-the-balkans-heres-romania.markdown new file mode 100644 index 0000000..407f1e5 --- /dev/null +++ b/posts/y02/03d-never-mind-the-balkans-heres-romania.markdown @@ -0,0 +1,90 @@ +--- +postid: 03d +title: Never Mind the Balkans, Here's Romania +date: August 29, 2015 +author: Lucian Mogoșanu +tags: books +--- + +On the subject of [the way in which Romanians are][aferim] -- as a matter of +fact, we are talking about the people living in the Carpatho-Danubiano-Pontic +space for the last millenium or so, regardless of their nationality or +ethnicity; however, for the sake of brevity we shall call them Romanians -- it +is worth mentioning that there is a general lack of literature to describe +this, and furthermore there is a lack of people that are both able and willing +to put this on paper[^1]. + +The fundamental reason behind this is simple. The Romanian language was almost +exclusively a spoken language and very little used in writing until the 19th +century, so most of the documentation on Romanian customs and behaviours is +coming either from the Orthodox Church, mostly in Slavonic, or from Hungarian, +Polish or possibly Austrian and Ottoman sources. Given that most of the +Romanian population was still illiterate until the second half of the 20th +century[^2], only a handful of writers emerged, and to my knowledge at the time +there weren't any notable Romanian writers to tell stories about the Romanian +people from the communist era due to the regime, and there aren't any Romanian +writers to discuss the Romanian people of the post-communist era up to the +present day. + +Thus we're left in a rather peculiar situation, where a British guy, Mike +Ormsby, comes to Romania and spends some time here, and then decides to publish +his stories, most of them from the post-2007 Romania[^3], and only a few of +them from the first decade and a half after the (still) confusing turning point +known as December 1989. + +Ormsby's book, pompously titled "Never Mind the Balkans, Here's Romania", tells +a bunch of stories about Romania, yet no so much about the country as about the +people living in it and their sorry, happy, tired or lively state. Off the top +of my head, there are very few aspects not covered by the stories, as most of +them can just be found lying in the lines or between them: the agitated +Bucharest; the old and the new city dwellers; the communist block +administrator; the draught and the flu; turbo-folk; pălincă; food, and so on +and so forth. All these details emerge into what most Westerners see as the +template for the very peculiar individual, not quite educated yet not quite +entirely stupid either. The historical reasons behind this are not given, nor +they are even touched upon in the text[^4], yet the substance is there, as a +testament to the fact that a so-called "foreigner" can sometimes understand a +people better than they can understand themselves. + +The book's storytelling has a humorous aspect to it. There is an aspect of +comedy even in the bleakest of the stories, which has led Romanian critics to +label Ormsby a "British Ion Luca Caragiale". However, there's no doubt about +the fact that the humour there -- in the English version of the book, at least +-- is typically British in nature, and some of the sarcasm may be lost on the +average Romanian reader, although my impression was that the book was written +to be read by foreigners rather than Romanians. + +All in all "Never Mind the Balkans, Here's Romania" is a surprisingly +interesting book, one that you may want to hand over to your children to help +them understand the average Romanian person. It gives a pretty good +description of the country and its people, minus the useless +[dumb nationalism][nationalism]: + +> In the wide dusty courtyard below, tough-looking young guys in polyester +> tracksuits lounge around an old Dacia. [...] The vehicle's doors are wide +> open and a powerful sound system is pumping turbo-folk music at a volume +> likely to induce nosebleeds in small children and angina attacks in the +> elderly. The singer on the CD sounds like he jammed his fingers in a +> door. [...] One lad paws at a doe-eyed girl in a tight top and short +> skirt. It looks like a sultry play by Tennessee Williams, with no interval. + +[^1]: Notable exceptions are Caragiale, Creangă, Slavici and maybe +Rebreanu. Eminescu can only at most be considered a gatherer of so-called +"Romanian folklore", his main problem being that he lived the 1800s, when +being a national something-or-the-other became fashionable. + +[^2]: When the communist rule came and attempted to introduce literacy by +force. The results were interesting, to say the least: although they've +succeeded, Romania's authentic cultural heritage is still mostly rural and +orally communicated. The working hypothesis is that some of the typical +Romanian customs and behaviours are simply impossible to transcribe, much to +ethnologists' disappointment. There are notable exceptions of course, such as +the Merry Cemetery from Săpânța. + +[^3]: The year when Romania became a member state of the European Union. + +[^4]: Sociologists are doing a [pretty bad job][cosima] of this anyway. + +[aferim]: /posts/y01/039-aferim.html +[cosima]: http://www.hotnews.ro/stiri-opinii-19975094-cuvintele-conteaza-psihologia-poporului-roman-este-text-esentialist-chiar-fara-teorie-esentialista.htm +[nationalism]: /posts/y00/00b-romania-s-dumb-nationalism.html