Can Simplicity Scale? (2012)
blog.regehr.org
blog.regehr.org
The 'theory' that we can somehow reduce this complexity to 'thousands of lines of code' is simply an understatement of the most profound nature. At the lowest level, the possibly vast [assembly | machine] code will have to exist.
Instead, a better viewpoint or name for this article could be 'Building extremely specified and well tested high level libraries to reduce programmer risk' - or something of that nature.
When you think about it in this way, its not different from any other library that you work with - except maybe its behavior is more understood.
Apollo 11 managed to land on the moon with about 145 thousand lines of code so it can be done. Whether that kind of thing would be a good idea these days with vastly more capable hardware is another matter.
http://www.itworld.com/article/2725085/big-data/curiosity-ab...
I can think of two limitations with the above, however. The first is that in some cases, we're prevented from laying down higher level abstractions not just because it would be computationally inefficient, but because we haven't yet discovered a great abstraction that everyone wants to adopt. For example, dealing with user interaction or network events. I'm tempted to say concurrency presents a similar issue, but really concurrency is just a performance concern too—an aspect of the underlying computational process, not intrinsic in problems we want solved. The other issue (pointed out in the article) is that these simpler approaches tend to require more mathematical sophistication of potential developers. My feeling is that that's mostly an incidental state of affairs: I don't think there's anything intrinsically more difficult about the more mathematical (i.e. simple, abstract, and drawing from a store of concepts from mathematics and language theory) approaches to coding, it's just that the routes to acquiring the required knowledge have a scary status in our society (at the moment).
Doing a project with fairly intense performance requirements and dipping into expressing everything in terms of specially formatted data buffers to be shipped off to the GPU has given me a new perspective on present, practical limitations of abstraction in coding...
On the one hand, we can look at the amount of stuff that's going on at the cellular level and say "no, life is very complicated." On the other hand, we've gained an understanding of some of the basic constructs in a relatively short period of a few hundred years(vs. millions of years to evolve it) - so maybe there are some simple things about it, after all.
And we might say that it's failing to scale because it takes so much time for evolution to "progress". But if we are simply viewing complexity of life as the metric of progression, then we've done quite a few things to accelerate this progression, just within the time anyone reading this has been alive.
Our perspective is collectively narrowed by the existence of a marketplace and its momentary demands. The construct of "scaling" is imposed through it; but it is not a survival truth that you have to scale to be alive. A small system like a bacterium can remain relatively simple.
https://www.youtube.com/watch?v=ubaX1Smg6pY
I'm happy to see this blog post today because it saves me from writing the same thing. Prototypes can be beautifully simple in ways that systems with a bunch of customers and a long legacy often can't...
In other words, it will require artisans of the craft, or really good new languages and compilers.