<@UCUSW7WVD> I was reading through the <civilizati...
# thinking-together
r
@Kartik Agaram I was reading through the civilization article you posted. And this stuck out to me: "The longer social technologies exist, the more varied the understanding of them becomes. The original contexts for their existence can change, or translation errors can occur in their reproduction." Viewing coding as an essentially a social technology (what is code used for other than to try to influence social processes) might be a way to look back and look at the fundamentals of what makes a civilization work. Indeed, there is a possibility that any group of people contemplating the future of code might do very well to spend as much time looking backward and attempting to understand as looking forward and seeing what might be.
k
Yeah, this has been a long-time interest of mine: https://news.ycombinator.com/item?id=4359257#4361596
Here's one of my all-time favorite quotes, from Red Plenty by Francis Spufford:
The Soviet experiment had run into exactly the difficulty that Plato's admirers encountered, back in the fifth century BC. The recipe called for rule by heavily-armed virtue -- or in the Leninist case, not exactly virtue, but a sort of intentionally post-ethical counterpart to it, self-righteously brutal. Wisdom was to be set where it could be ruthless. Once such a system existed, though, the qualities required to rise in it had much more to do with ruthlessness than with wisdom. Lenin's core of original Bolsheviks, and the socialists like Trotsky who joined them, were many of them highly educated people, literate in multiple European languages, learned in the scholastic traditions of Marxism; and they preserved these attributes even as they murdered and lied and tortured and terrorised. They were social scientists who thought principle required them to behave like gangsters. But their successors -- the vydvizhentsy who refilled the Central Committee in the thirties -- were not the most selfless people in Soviet society, or the most principled, or the most scrupulous. They were the most ambitious, the most domineering, the most manipulative, the most greedy, the most sycophantic. Gradually their loyalty to the ideas became more and more instrumental, more and more a matter of what the ideas would let them grip with their two hands.
In a way, the surprise is that Bolshevik idealism lasted as long as it did. Stalin took his philosophical obligations entirely seriously. The time he spent in his Kremlin library was time spent reading. He held forth on linguistics, and genetics, and economics, and the proper writing of history, because he believed that intellectual decision-making was the duty of power. His associates, too, tended to possess treasured collections of Marxist literature. It was one of Molotov's complaints, after Stalin's death, that by sending him off to be ambassador of Outer Mongolia, Khrushchev had parted him from his books. And Khrushchev, in his turn, tried his best to talk like the great theoretician one magically became by elbowing and conniving one's way to the First Secretaryship. It came even less easily to him, but the transition to utopia by 1980 was all his own work. He was not a cynic. The idea that he might be committing an imposture bothered him deeply.
Stalin had been a gangster who really believed he was a social scientist. Khrushchev was a gangster who hoped he was a social scientist. But the moment was drawing closer when the idealism would rot away by one more degree, and the Soviet Union would be governed by gangsters who were only pretending to be social scientists.
🤔 1
A few years ago I came up with a highly speculative thought experiment to try to combine the accountability of democratic systems with the coherence of a single 'designer'. See the bottom of https://www.ribbonfarm.com/2014/04/09/the-legibility-tradeoff, The utopian participatory panopticon.
I feel very strongly that software has some critical tools for thought to contribute in evolving to a better society. But I'm also extremely sensitive to the dangers of modernist thinking, the temptation to think a single field has all the answers. This is really why I think end-user computing is so important. If we spread the bottom-up knowledge of design principles that are the fundamental boons of programming thinking, then these ideas have greater chance to cross-pollinate with what historians know and economists know and political scientists know, and so on.
👍 4
r
Some initial reactions from your comments on hacker news: "Imagine a world where code sharing took place but with no guarantees for the future. This version here makes certain guarantees, but if you upgrade or do a git pull, all bets are off. It might delete a function you rely heavily on. Or it may make it work differently one time in a thousand[8] and cause subtle, insidious bugs." - I would argue that this is already true. I have been DevOps and Uptime lead at my current company 90%+ of the time I have been there. Top 3 things that caused me nightmares were upgrading library dependencies and deploying to production. That s*** goes south in subtle ways you don't catch until users hit it. I've actively campaigned for more automated testing and fewer dependencies for a significant chunk of time. So, your argument to embrace testing resonates with me. I suppose I would say, we should just embrace the facts on the ground and assume everything will break and plan accordingly.
👍 2
I keep picturing applying genetic algorithms to interfaces now. Thousands of different iterations and see which ones "win" in the end and have the desired effects. There are some parallels with agile methodologies here. I suppose your argument is we freeze the interface way too fast. What if, instead of a single "Google" page rank, there were 1000 successful page rank algorithms that constantly evolved and pruned. Could the internet look vastly different today than it does merely because the feedback mechanism was different?
I must say, your links have given me lots of food for thought and I feel I'm only scratching the surface.
a
@Robert Butler - that remends me of a story about Apple. Apparently, before the iPhone was released, the Mac team and the iPod team were both tasked with building the iPhone. It was essentially a race. The Mac team won, but there's a parallel future where the iPod team could have won and cell phones would have been iPods with cellular modems instead of the pocket computers we have today.
👍 1
@Kartik Agaram's HN comments remends that sometimes I think of a code base like a living thing. At first, its small and flexible. You can change it and add new features with reckless abandon. Eventually, people start to depend on the software's behavior and you're less free to change it. Unused features atrophy and fall away. Over time, the code builds up cruft and starts to rot. Between the technical dept and user demands, the code rigidifies. You can keep it limping along, but it shows its age. Eventually, some new projects are written that take up the burden the old code base was carrying, and the old code can be deprecated and eventually dies. It would be interesting to figure out how to build the evergreen project, but to an extent the macro software ecosystem is immortal, its just individual projects that rise and fall.
❤️ 1
r
I think you can build an evergreen system. However, you have to intentionally do it. The key characteristic that you need is the ability to change the system. If modification ever becomes difficult, you need to figure out how to make that part of the system nimble again. Removing code/features to no longer have value can be a great way of increasing agility again.
👍 1
@Aleks I'll have to lookup that story on the Mac vs. iPod team. I wonder what would have happened had the losing team kept iterating and building rather than stopping.
s
@Kartik Agaram That ribbonfarm article is really good, you've elucidated something I'd been thinking about recently. The "agency in the small" stuff is giving me Stafford Beer vibes, have you read his stuff? The idea behind your proposed system is interesting, but it is doomed to fail without extremely high median information hygeine, which as of 2020 looks like a fantasy among the general public. Personally I am (more than a bit) cynical, and so am convinced that the only way out of global tyranny is accepting local tyranny (as a result of local agency), and that that such a task was pretty much rendered impossible with the industrialization and rationalization of society, which has made geography mostly obsolete. To be a bit more topical, as it relates to computing, one big step for me was to consider software systems holistically, as a kind of ecology—they live, die, revive, all as a process. There is no such thing a a static piece of software, since you must consider the interactions surrounding it. While I do have more to say here (probably too much and too poorly), I will defer to Faré, who refined his writing for years: https://ngnghm.github.io/ However, one conclusion I will draw is that that there is no "evergreen system" as systems are no static throughout time—even from the reductive standpoint of systems theory, the very inputs and background in which it operates change over time, and the classical maxim applies: Garbage In, Garbage out. For a system to be truly evergreen, it must adapt—it must be a full ecology. And so that reduces the problem of building such "evergreen software" to classical coordination problems in politics, which (admittedly anecdotally) have proved to be intractable so far. We don't know how to do ecology, and on some days I doubt we ever will. We can only try our best amd hope for the best.
❤️ 2
To be a little more concrete, consider a software system, in the systems theory sense. Say it is defined over some abstract high-dimensional state space, then there is some desirable region in that state space such that you want the system to stay inside for all possible inputs. While this is possible, with the classical example being things like strange attractors, it is in general highly unlikely. In general, the kinds of mechanism design we have access to and understand are incremental in nature, such as systems of checks and balances, etc. These can be represented as filters on the system. By nature, they are limited to only some range of validity and cannot dampen arbitrary input in a desirable way, which is what we would want. Well I said I would try to be a bit more concrete but this still reads as obscurantist drivel, oh well. I'm not very good at writing. At any rate, the only solutions to this problem have to be radically simple in nature, stuff like @Kartik Agaram wanting to exchange full software stacks, or Alan Kay wanting to computers to be self-decoding. I also think forking is underrated, and would be much more useful if it were not for all the incidental complexity in programs—people should be able to rewrite software as they see fit, in an incremental fashion, and without having to take on large burdens like software maintenence, etc. Again, software-as-ecology is sorely deficient. And, of course, the solution is not something easy, after all Alan Kay and other smart people have been wrangling with these problems for over 50 years with no complete solution in sight (at least, I think so, Kay is hard to read on purpose).
r
@S.M Mukarram Nainar Based on what you are saying, we won't get very far without building something like git, except with forking as the fundamental mechanism. For my MicroCISC processor, I have found there are several different directions I can take it and it isn't at all clear to me which one is the best or has the best outcomes. But, since the code is in Git, the trunk branch represents the canonical implementation of MicroCISC and the best I can do is create other branches that have alternatives.
Without some sort of ecosystem around fork-based software sharing as the primary means of sharing, we can't decompose systems and products in a way that can produce the desired effect. Maybe you don't want the syntax sugar I added or some other feature I added to the language, or the compiler or perhaps something more fundamental like the number of registers. However, at the moment, I can't decompose it easily in a way that let's you pick the parts you want and mutate the direction of the development in some other manner. The typical approach would be to either take what I have and "wrap" it or "extend" it. But then we have frozen the interface and I can't change it without breaking either in a way that may break your system altogether.
💯 1
I looked at setting up Mastodon once on my own server, and as awesome as it is, it is one complex beast of a system for what it does. All I want is the activitypub and API/oauth pieces so I can hook up my iPhone app to it and use it. But all the backround jobs, streaming API, front end and back end in completely different stacks, dependencies and complexity I punted because I only wanted 10% of what was there but I can't get that 10% without the other 90%.
k
Backing up to organisms vs evergreen entities: I actually absolutely agree! To the extent that death and regeneration are a part of life I'm not trying to subvert them. I really like Joseph Schumpeter's ideas of creative destruction (https://en.wikipedia.org/wiki/Creative_destruction). The problem I see is that entities often live too long, outliving their original purpose. Governments grow corrupt, companies turn into monopolies, bureaucracies get captured (https://en.wikipedia.org/wiki/Regulatory_capture), open source projects make user-hostile changes or refuse to consider reasonable patches (/s 😉). Corrupt governments eventually die, but the process is painful and can require bloodshed. Monopolies eventually die, but can cause a lot of pain to their customers and the commonwealth before they do. Bureaucracies eventually get replaced and defunded, but they live the longest of all. Open source patches are eventually replaced, but they live longest of all because of the troubles of testing a new dependency (/s 😉). So the problem, the way I see it, is to create incentives for capitalist endeavor, but not allow them to grow too far unboundedly. A high top tax bracket is one fairly blunt way to achieve this. Authoritarianism that sometimes goes by the name of Communism (https://en.wikipedia.org/wiki/Khmer_Rouge) is an even more blunt approach. And the blunt ways are not sustainable. Tax brackets get loopholed to death or lobbied to death. Communism gets outcompeted outside its borders because it leaves no incentive for endeavor, while being just as prone to corruption internally as anything else. No, the most natural way to keep outcomes bounded is to increase competition. And you can't will competition into existence, regardless of Anti-trust laws and Patent laws. The most natural way to foster competition, IMO, is for people to be educated about the geopolitical effects of their actions. If you see this thing you use get too popular, it should be easy to switch to the next most popular thing. If there isn't one, it shouldn't be too difficult for someone to create. And if you see no competition for some good, maybe you should be more careful about growing addicted to it. It's not lack of payment that makes you the product, it's lock-in. One can argue about whether the presence of competition beyond some point leads to death or an evergreen organism. If a country can swing from socialism to capitalism every ten years or so, is it dying painlessly at each bloodless revolution or just evergreen? If a company can reinvent itself to go from selling adding machines to computers to computer services, is it dying at each of those phase boundaries or really 110 years old? Imagine a bureaucracy that grows an arm to disrupt itself everytime it starts to grow lethargic. Or an open source project whose users can easily swarm to a new fork when the old one stops meeting their needs.
@S.M Mukarram Nainar No, hadn't encountered Stafford Beer! Looking into it now. I have read Faré's blog, though it's been a while. I always enjoyed his writing but as I recall, he's a lot more on the evergreen side of the spectrum than me, trying to find the perfect one-size-fits-all technical architecture, anticipate all future problems, that sort of thing. My goal is to architect just enough to allow me to get to the social technology. (Too bad the term 'social engineering' is taken.)
The idea behind your proposed system is interesting, but it is doomed to fail without extremely high median information hygeine, which as of 2020 looks like a fantasy among the general public.
My thought experiment is certainly a caricature, and I certainly don't expect anything in its vicinity to happen in the third millennium AD. But I don't think the bottlenecking problem is bad information. This fake news stuff is a short-term issue, IMO. No, the real problem is not asymmetric information but asymmetric capacity for critical thinking. A population that can perform simple probabilistic reasoning, detect statistical fallacies, read someone else's codebase, that's the hard problem here. (I can do none of those things.) I think Alan Kay might agree. --- I really liked your example about the state space. See http://akkartik.name/post/modularity for a similar thing I wrote. But yeah, your diagnosis is right that I build simple systems in hopes of avoiding all the hard bits of the state space. Yes, there may be monopolies in spite of everything I do. But hopefully they need to create a lot more value before they can pass that threshold. Some programs may still have to deal with really large state spaces. But if we monitor state space size hopefully we can eliminate over-engineering and be parsimonious about such state-space explosion.
t
@Kartik Agaram your final paragraph (of your now-previous post) reminded me of a story/image I read recently, about the bristle-cone pine which has been known to live near to 5000 yrs... what struck me in the image was the preserved history of the deprecated branches, and that the 'tree' that is alive isn't 'all' of the tree as with most trees that live and die, but presumably a sequence of active/deprecated branches there of... really enjoy the symbolism in the image (and of course very easy to map to git concepts) https://www.google.com/search?q=5000+yr+old+pines&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjKy5eJ5tXqAhVhyDgGHTEbBKQQ_AUoAXoECA4QAw&biw=1332&bih=697#imgrc=z2zoS7gWySZXFM
❤️ 1
k
This is one of my all-time favorite shows: https://www.pbs.org/wgbh/nova/methuselah
👍 1
Maybe I should make a picture like that Mu's logo/mascot.
t
mu-thuselah... ;)
🙂 1
s
@Robert Butler re: distributed version control I agree wholeheartedly. Current tools aren't great though. In the future what I'd like to see is version control integrated with the reflective capabilities of software, whether it be through debuggers, typechecking, testing, contracts, layers, etc. Unison has a very interesting approach to this problem by hashing code AST directly. That said, I do think the bulk of things cam be agreed on, and should be agreed on, at least at the level of some critical mass. I'm thinking of software like emacs, which is extremely malleable, but still has a core set of stuff people generally don't mess with. As for mastodon, yeah it's a mess I have no intention to touch with a 20m pole. Couldn't even implement DMs in a sane way, it's irresponsible. Somehow pleroma, which appears to have a saner backend, has an even slower than twitter frontend, etc etc. I'm,not one to post stuff publicly anyway. I'm just really happy nitter.net exists, keeps me sane. @Kartik Agaram You're point about entities living too long is exactly on point. I'm not too sure about the parts on capitalist endevour, mostly because I'm skeptical monetary incentives can really motivate after a point, even when it might be necessary. For example, I blows my mind how fast software rots, the only people who seem to produce finished software are hobbyists, mostly because that can't afford not to. I suppose with enough competition the kind of wasteful behavior you see in tech today wouldn't be an issue, but then barriers to entry become an issue. I agree about competition, but I think another key part is to raise the floor for people to build things, thougg that's largely more of a purely societal issue. It's funny, because the way I see it, it's mostly an allocation problem—even after all the bad things I said about mastodon earlier, it doesn't change the fact that it is thriving, and on a fraction of the budget twitter has. I would handwavely estimate that you probably would need significantly less than a single major vc round to really fix a lot of fundamental issues in software if they were allocated to the right people. It still blows my mind that significant amounts of core infrastructure is maintained by people who are probably less well-off than me, I have seen people maintaining foss projects used to make millions that have core developers that have trouble getting food on the table. I also agree about education, after all every human institution is made up of people, no matter how easy it is to forget. There's no point in discussing institutions if you don't give the people in them agency. Also fully agree about lock-in being the big bad. On death vs. evergreen, I'd be firmly on the evergreen side, that's ecology working as intended. As for Beer, you should start by reading Designing Freedom. He's kind of handwavy when it comes to concrete actions, but his conceptualization of things helps me a lot. Faré himself has written about how he's more of a navelgazer ;) Regarding information, I agree that critical thinking is the harder problem, in fact I think the current information landscape (infoscape?) 's issues with constant semantic denial of service style attacks is solvable with current technology and a lot of social work. Education is hard and my intuition tells me that the world would have to be close to completely unrecognizable for it to even begin to be a tractable problem. A good start would be raising the floor economically and socially, along the lines of maslow's hierarchy. At the end of the day, if people don't want to be educated, what are you going to do about it? I was reading James Scott's Art of Not Being Governed recently, and he makes the point that you can consider illiteracy as an adaptation to exit civilization and stay out. We quickly end up with thorny normative issues regarding big words like freedom, human rights, etc. That said, I do think that the more pressing issue is hygiene, I am worried that such an parasitic infoscape entities may become too deeply entrenched if we don't fix the issue soon. Technology has a tendency to stick around and reify our past mistakes, and the stakes only get higher. As for state space, my crux of my point was that although I don't think it's hard to get into the desirable state space region, it is exceedingly hard to build institutions that stay in it, and I think it's impossible in general. So you want to be able to able to move through your state space is a discontinuous fashion when necessary (i.e more radical measures, like a rewrite). Simple is important for discontinuous changes, because otherwise they aren't possible. Your idea about unit tests is interesting because it reduces the size of the state space. Something that I'm looking forward too over the next decade is seeing dependent typing and theorem provers coming into the mainstream, and seeing if someone can distill something nice and simple out of it. I was learning F* earlier, and it's quite neat technology. The general version of your unit tests idea is that we need better, more consistent and reliable ways of encoding the behavior of our programs in our programs, this kind of reasoning is usually called reflection but I hesitate to use it due to the association with stuff like eval(). This is closely related to metaprogramming, because we need to write higher-order programs, just like we have higher-order logics to encode behavior of lower-order logics. We have a very developed syntactic metaprogramming in the lisp tradition, but metaprogramming with semantics is still quite underdeveloped, I have a hunch this is related to foundational issues in mathematical logic though so I'm not sure if this will ever take off. At any rate, people are kind of working on it with stuff like multi-stage programming, and I'm excited to see them become more expressive.
Anyway I thought of a cute tagline: Build ecologies, not artifacts
👍 2
k
Interesting thread... which I hardly have the time to fully digest today! One comment, in reply to @Kartik Agaram's note about organizations outliving their utility, which I think is related to code as an element of social coordination. The common point is that organizations, like code, are set up as a rule-based system in a particular context and for achiving a specific goal. But predicting the outcome of complex rules over long times is impossible, and therefore both institutional rules and code must be revised regularly as the outcomes of their application becomes apparent. And often works well for a time, while the rules are new and their original developers are aware of their weaknesses. The next generation takes the rules as something sacred, and preserving them becomes a priority, no matter the outcomes. That's why I believe that rules of any kind, code or legal, must first of all be malleable, and secondly understandable by everyone concerned by their application (or at least a large enough and open subset of everyone).
💯 1
j
For anyone intrigued by @Kartik Agaram's quote from Red Plenty, I recommend this book review by Cosma Shalizi, which I found even better than the source text.
💯 1
s
Oh, that's an excellent article @Jack Rusher, though I'm not sure if it qualifies as a book review... Thanks for sharing! I didn't know Cosma wrote outside his own website—I spent quite a bit of time reading through a lot of his notes on his website a while back, very interesting guy. Thinking about it, he appears to have been ahead of the curve when it comes to the "digital garden" thing that's become a trend here as of recent.
A link to the aforementioned, if anyone is interested: http://www.bactra.org/notebooks/
j
@S.M Mukarram Nainar He's grand! If you enjoy his writing, don't miss out on his blog: http://www.bactra.org/weblog/ 🙂
(The essay in question was originally also published at http://bactra.org/weblog/918.html)
g
on the treecology metaphors, how about a tree colony: https://www.atlasobscura.com/places/pando-the-trembling-giant