Unlike previous OSes, UNIX provided the pipe facility to allow you to combine the functionality of many small programs.
Ex. ls | grep ... | sort ... | more
Before that every command-line program had to support the full suite of additional functionality like search, filtering, paging, etc.
This UNIX/Pipe approach allowed for greater reuse and much less code.
This is explained and simulated in this video:
https://www.youtube.com/watch?v=3Ea3pkTCYx4
If we analyze the computational complexity of software architectures the way we do regular algorithms, we see that UNIX was much more efficient than previous OSes/approaches.
A narrow waist is an idea or interface that gives you O(M x N) functionality for O(M + N) code. It's a way to reuse code and data by interoperating.
If you can't interoperate, you end up writing bad versions of the same application code, over and over again.
More concretely, I remember there was this whole "re-architect google3" idea >10 years ago, which seemed to get brushed aside for the cloud. I think they were trying to have more of a narrow waist, not 10 different distributed databases made by 10 competing teams, 10 different auth libraries, etc.
The management's perception then was that product dev was extremely slow, and had poor quality results
That video is about the application side of Google (e.g. docs and maps), but the internal side had similar architectural problems.
---
As another example, it seems like the dev tools group at Google wanted this article to be published, and I have no idea why:
Google Is 2 Billion Lines of Code—And It's All in One Place
It's saying Microsoft Windows has 50 M lines of code, while Google has 2 B lines of code.
There are all sorts of problems with those numbers, but in any case, it's not a flattering comparison -- not something you want to brag about
I think they wanted to emphasize the scalability of the source control system, and ended up saying that Google has a lot of bad code that doesn't work well
Yeah it's not really a good comparison, but I guess my point is that when you have that much code, it's not a surprise that it's hard to get work done, and the products work poorly
That is a great video. If Google is the new Multics and the cloud is the new mainframe, does that mean that AI is the new Unix? AI is the command line?
Just select the game you want to to run from the top-left list box, then press the "Compile" button and you'll see the translated JS source in the right text-area. Then press the "Run" button to run it.
I worked at Google on a project called the Chrome App Builder which would let you create simple Kiosk apps which ran on these kind of devices. It wasn't uncommon for companies to buy these 5 thousand to 20 thousand at a time to run the displays in fast food restaurants, casinos, department stores, race tracks, etc.
I would say that the best programmers don't change the multiplier, but the exponent, so that the factor by which they're better than the average increases with the size of the problem. This is why you might not see as much of a big difference with a test lasting a few hours, as you would with one lasting weeks, months or years.
FOAM is a modelling framework that generates cross-language boilerplate for you, but it takes a much broader view of what constitutes boilerplate than most systems. Typically, it can generate between 95-98% of a working cross-language cross-tier system.
FOAM helps you create features for modelled data. Features include things like a Java/Javascript/Swift classes to hold your modelled data, code to marshall to/from JSON/XML/CSV/etc., various GUI Views, and support for storing your data in various databases or file formats. However, FOAM models are themselves modelled, meaning they're afforded all of the above benefits as well. This lets you apply the MVC technique of having multiple views work against the same underlying data-model concurrently (say a grid and a pie-chart in a spreadsheet), so that you can choose the best view or views for your current need. When treated this way, your code is no longer text (but it can be, if that's one of your views), and you can easily view and store it in many different ways and more easily programmatically manipulate it.