4 ms·
Even more generally, I think there's something to be said about the difference between two different mentalities, presented here in caricature form: 1. The wor
by mbrock 11y ago
Even more generally, I think there's something to be said about the difference between two different mentalities, presented here in caricature form:
1. The world is tainted. Everyone is doing it wrong. I'm thinking about a great way to solve things. You people should stop doing the bad thing. Come on, everyone. Let's do things right. Why is everything so bad? Why is life unfair? Why is our legacy so messy and complex? Let's start over. Let's set things straight. Justice, peace, correctness, truth, beauty. If we just think very hard, and come to a consensus, then we can implement something much, much better.
2. The world is exactly the way it is. I'm not exactly sure why. Historians are working on it. The institutions that we exist within distribute power in a certain way. Matter is heavy and resistant to change. I don't really know how to "improve" the world, and if I tried, I may just make it worse. Why are you talking about abstract nonsense like "justice" and "truth"? This is just how it is. This is what we have to work with. We are lucky if we can make a few incremental improvements.
As in so many cases with two extremes that end up fighting unproductively, the vast middle ground is where the interesting stuff happens.
David Chapman... incidentally a contributor to the UNIX-HATERS handbook, decades ago... has a terminology with which I think my persona #1 would be called an eternalist and persona #2 a nihilist, roughly speaking.
And he wants to sketch out a persona #3, who operates under what he calls the fluid mode. That's someone who understands the viewpoints of both eternalism and nihilism, recognizes them both as incomplete, and then valiantly works to create things and change the world in a kind of liberated way.
So, we're not going to resolve the question in favor of either #1 or #2. Those personas are like the two daemons on the shoulders of anyone who does programming... or politics... or law... or urban planning... or economics...
The world would be very different if Lisp and Smalltalk hadn't existed, so it's not like cutting edge cool stuff is worthless just because it doesn't get adopted. I always like to see people encouraged to learn about these systems even if their "ecosystems" aren't "mature" for "web scale" or whatever. It's almost a matter of respect.
- MrBuddyCasino 11y agoSo true. Good engineering is making the right tradeoffs, nothing is ever fully black or white. Whenever something is "pure", it usually sucks - not from a philosophical, but from a practical, real world standpoint. Why is it that we tend to fall into the simplifying pureness trap? Is it the brain trying to reduce its energy consumption by not thinking too much?
- mbrock 11y agoI'd rather say that the "pure" is a source of inspiration... which can be good or bad. For a kind of outlandish but strong example, look at how monotheism can inspire people to extreme struggles. Or look at how the idea of a coherent and final constitution inspires American politics and the struggle for "a more perfect union." And yet with all of these things, there's a lot of plumbing and compromise and evolution and war required, too. Sometimes the pure ideal turns out to be, in hindsight, just a kind of arbitrary notion. Like if your whole ideology is based on God, and then people start to just not believe in that God at all. Then you get a renaissance, but also confusion. So, like, I love Haskell, and I love to see it grow and develop, but I'm also aware that its strong ideals can from another perspective be considered false idols. Still, ideals are great for rallying around. Some of what I'm trying to say here is articulated by Richard Rorty, through his concept of "ironism" in Contingency, Irony, and Solidarity, which I recommend!
- Outdoorsman 11y ago>So, we're not going to resolve the question in favor of either #1 or #2. Those personas are like the two daemons on the shoulders of anyone who does programming... or politics... or law... or urban planning... or economics...< Agreed...it's the fluid center, the moderate, the worker ant that actually moves things forward by taking the best the extremes--idealists, pragmatists--have to offer and making things work on a practical level...the "persona #3" you allude to... I'm reminded of a quote from Robert Pirsig, author of Zen and the Art of Motorcycle Maintenance... "The test of the machine is the satisfaction it gives you. There isn't any other test. If the machine produces tranquility it's right. If it disturbs you it's wrong until either the machine or your mind is changed." That tranquility...that satisfaction...that's it in a nutshell, whether the "machine" is simple or complex...the route to producing that machine doesn't much matter...the end result does...
- mbrock 11y agoNice connection! I haven't read that book in like 10 years. I think the worker bee can very well enjoy having a glass of wine with #1 and #2... dreaming about the astral planes of Platonic perfection, and complaining about the miserable present... and somewhere in that conversation, an idea is sparked, and a couple of weeks later, magic starts to happen!
- nickpsecurity 11y agoIt might not be that we need to do one, the other, or a middle path. Instead, we can just focus through one of the mindsets on aspects of the problem. Remember that the projects are usually a collection of things. Each has to be solved independently with an integration. Then there's extensions. So, we can Right Thing key pieces of it even if not all of it. Further, as Gabriel noted, we can start with Worse is Better to get it moving then bring aspects into Right Thing status. So, it's not all or nothing. My specialty, high assurance security, is Right Thing taken to the extreme for reliability or security. By the 1980's, they started kernelizing designs due to market forces making it impossible to apply to whole system. By the 1990's, they started doing it incrementally to increase uptake and financially justify the assurance work. Today, we've wisened up to try to concentrate our work on things that amplify overall correctness, reliability, or security. Type systems, compilers, kernels, protocols like Paxos (or Survivable Spread), model-based generation... anything where a little investment goes a long way. Then we can smile knowing what people are using defiantly against our recommendations contains the results of seeds we planted earlier. Things got better even as they got worse. :) Just gotta figure out how to do that more often...
- mbrock 11y agoAh, middle-pathing my middle-pathing—well played! Interesting stuff. My story roughly speaking is that I came out of Chalmers all gung ho about dependent types and probably correct functional programming, and now I work on a JavaScript startup with not even many unit tests (which is partly my fault). [I meant to say provably, but the autocorrect typo is illuminating.] Generally I'm interested in logic in computer engineering, and I think the idea of safe kernels is great. The Xmonad architecture seems to me like it might be a good model for coming architectures... Symbolically, it's nice and you can tell from just the name: X symbolizes UNIX and worse is better; monad stands for purity and correctness.
- nickpsecurity 11y ago"My story roughly speaking is that I came out of Chalmers all gung ho about dependent types and probably correct functional programming, and now I work on a JavaScript startup with not even many unit tests (which is partly my fault)." I tell people to focus on just what delivers the most value. I came up with a list of the few things that are empirically proven to benefit software quality: http://pastebin.com/xZ6m4T8Z http://pastebin.com/xZ6m4T8Z So, for Javascript, you might do code reviews, use any static analyzers you know, decompose into functional style, have some interface checks encoding assumptions, and so on. Simple techniques that take little time, save you much time, and boost quality greatly. Plus, recall that you can do FP in many languages by subset and style. ;) Note: This doesn't even count my old strategy of making a safe, macro-enabled 4GL that compiles to a target 3GL. You can code up shit in ML or Dependent language with constructs that can map 1-to-1 to JavaScript. Then, your tool produces Javascript from whatever you really code in. You deliver that w/out mentioning other tool. Best of both worlds. I caught that: "I meant to say provably" Not that: "but the autocorrect typo is illuminating" Lol nice catch. The autocorrect might have corrected an entire field's thinking rather than one person's spelling. You should contact the authors about the discovery of AI in their software. ;) "Xmonad architecture" I wasn't aware of it and I don't do functional programming yet. I'll have to add it to my list of things to check out. Regarding provably-correct FP, what was your background, tools or projects? I might learn something or have something your interested in as I collect work in high assurance field. Have quite a few on that topic including some explorations but lack specialist expertise to really evaluate it.