1. 4

    As usual, David apparently fails or refuses to understand how and why PoW is useful and must attack it at every opportunity (using his favorite rhetorical technique of linking negatively connoted phrases to vaguely relevant websites).

    That said, the article reminds me of a fun story - I went to a talk from a blockchain lead at <big bank> a while back and she related that a primary component of her job was assuring executives that, in fact, they did not need a blockchain for <random task>. This had become such a regular occurrence that she had attached this image to her desk.

    1. 10

      What would you consider a useful situation for PoW? In the sense that no other alternative could make up for the advantages in some real life use-case?

      But otherwise, and maybe it’s just me, since I agree wuth his premise, but I see @David_Gerard as taking the opposite role of popular blockchain (over-)advocates, who claim that the technology is the holy grail for far too many problems. Even if one doesn’t agree with his conclusions, I enjoy reading his articles, and find them very informative, since he doesn’t just oppose blockchains from a opinion-based position, but he also seems to have the credentials to do so.

      1. 1

        Relying to @gerikson as well. I personally believe that decentralization and cryptographically anchored trust are extremely important (what David dismissively refers to as “conspiracy theory economics”). We know of two ways to achieve this: proof of work, and proof of stake. Proof of stake is interesting but has some issues and trade-offs. If you don’t believe that PoW mining is some sort of anti-environmental evil (I don’t) it seems to generally offer better properties than PoS (like superior surprise-fork resistance).

        1. 13

          I personally believe that decentralization and cryptographically anchored trust are extremely important

          I personally also prefer decentralised or federalised systems, when they have a practical advantage over a centralized alternative. But I don’t see this to be the case with most application of the blockchain. Bitcoin, as a prime example, to my knowledge is too slow, too inconvenient, too unstable and too resource hungry to have a practical application, as a real substitute for money, either digital or virtual. One doesn’t have the time to wait 20m or more whenever one pays for lunch or buys some chewing gum at a corner shop, just because some other transactions got picked up first by a miner. It’s obviously different when you want to do something like micro-donations or buying illegal stuff, but I just claim that this isn’t the basis of a modern economy.

          Cryptography is a substitute for authority, that is true, but I don’t belive that this is always wanted. Payments can’t be easily reveresed, addresses mean nothing, clients might loose support because the core developers arbitrarily change stuff. (I for example am stuck with 0.49mBTC from an old Electrum client, and I can’t do anything with it, since the whole system is a mess, but that’s rather unrelated.) This isn’t really the dynamic basis which capitalism has managed to survive on for this long. But even disregarding all of this, it simply is true that bitcoin isn’t a proper decentralized network like BitTorrent. Since the role of the wallet and the miner is (understandably) split, these two parts of the network don’t scale equally. In China gigantic mining farms are set up using specialized hardware to mine, mine, mine. I remember reading that there was one farm that predominated over at least 10% of the total mining power. All of this seems to run contrary to the proclaimed ideals. Proof of Work, well “works” in the most abstract sense, that it produces the intended results on one side, at the cost of disregarding everything can be disregarded, irrespective of whether it should be or not. And ultimately I prioritise other things over an anti-authority fetish, as do most people -which reminds us that even if everything I said is false that Bitcoin just doesn’t have the adoption to be significant enough to anyone but Crypto-Hobbiests, Looney Libertarians and some soon-to-fail startups in Silicon Valley.

          1. 5

            there was one farm that predominated over at least 10% of the total mining power

            There was one pool that was at 42% of the total mining power! such decentralization very security

              1. 5

                To be fair, that was one pool consisting of multiple miners. What I was talking about was a single miner controlling 10% of the total hashing power.

                1. 7

                  That’s definitely true.

                  On the other hand, if you look at incident reports like https://github.com/bitcoin/bips/blob/master/bip-0050.mediawiki — the pool policies set by the operators (often a single person has this power for a given pool) directly and significantly affect the consensus.

                  Ghash.io itself did have incentives to avoid giving reasons for accusations that would tank Bitcoin, but being close to 50% makes a pool a very attractive attack target: take over their transaction and parent-block choice, and you take over the entire network.

              2. 0

                But I don’t see this to be the case with most application of the blockchain.

                Then I would advise researching it.

                One doesn’t have the time to wait 20m or more whenever one pays for lunch or buys some chewing gum at a corner shop

                Not trying to be rude, but it’s clear whenever anyone makes this argument that they don’t know at all how our existing financial infrastructure works. In fact, it takes months for a credit card transaction to clear to anything resembling the permanence of a mined bitcoin transaction. Same story with credit cards.

                Low-risk merchants (digital goods, face-to-face sales, etc.) rarely require the average 10 minute (not sure where you got 20 from) wait for a confirmation.

                If you do want permanence, Bitcoin is infinitely superior to any popular payment mechanism. Look into the payment limits set by high-value fungible goods dealers (like gold warehouses) for bitcoin vs. credit card or check.

                Bitcoin just doesn’t have the adoption to be significant enough to anyone but Crypto-Hobbiests, Looney Libertarians and some soon-to-fail startups in Silicon Valley.

                Very interesting theory - do you think these strawmen you’ve put up have collective hundreds of billions of dollars? As an effort barometer, are you familiar with the CBOE?

                1. 10

                  Please try to keep a civil tone here.

                  Also, it’s hard to buy a cup of coffee or a steam game or a pizza with bitcoin. Ditto stocks.

                  1. -4

                    It’s hard to be nice when the quality of discourse on this topic is, for some reason, abysimally low compared to most technical topics on this site. It feels like people aren’t putting in any effort at all.

                    For example, why did you respond with this list of complete non-sequiturs? It has nothing to do with what we’ve been discussing in this thread except insofar as it involves bitcoin. I feel like your comments are normally high-effort, so what’s going on? Does this topic sap people’s will to think carefully?

                    (Civility is also reciprocal, and I’ve seen a lot of childish name-calling from the people I’m arguing with in this thread, including the linked article and the GP.)

                    Beyond the fact that this list is not really relevant, it’s also not true; you could have just searched “bitcoin <any of those things>” and seen that you can buy any of those things pretty easily, perhaps with a layer of indirection (just as you need a layer of indirection to buy things in the US if you already have EUR). In that list you gave, perhaps the most interesting example in bitcoin’s disfavor is Steam; Steam stopped accepting bitcoin directly recently, presumably due to low interest. However, it’s still easy to buy games from other sources (like Humble) with BTC.

                    1. 6

                      IMO, your comments are not very inspiring for quality. As someone who does not follow Bitcoin or the Blockchain all that much, I have not felt like any of your comments addressed anyone else’s comments. Instead, I have perceived you as coming off as defensive and with the attitude of “if you don’t get it you haven’t done enough research because I’m right” rather than trying to extol the virtues of the blockchain. Maybe you aren’t interested in correcting any of what you perceive as misinformation on here, and if so that’s even worse.

                      For example, I do not know of any place I can buy pizza with bitcoin. But you say it is possible, but perhaps with a layer of indirection. I have no idea what this layer of indirection is and you have left it vague, which does not lend me to trusting your response.

                      In one comment you are very dismissive of people’s Bitcoins getting hacked, but as a lay person, I see news stories on this all the time with substantial losses and no FDIC, so someone like me considers this a major issue but you gloss over it.

                      Many of the comments I’ve read by you on this thread are a similar level of unhelpful, all the while claiming the person you’re responding to is some combination of lazy or acting dumb. Maybe that is the truth but, again, as an outsider, all I see is the person defending the idea coming off as kind of a jerk. Maybe for someone more educated on the matter you are spot on.

                      1. 5

                        There is a religious quality to belief in the blockchain, particularly Bitcoin. It needs to be perfect in order to meet expectations for it: it can’t be “just” a distributed database, it has to be better than that. Bitcoin can’t be “just” a payment system, it has to be “the future of currency.” Check out David’s book if you’re interested in more detail.

                  2. 8

                    In fact, it takes months for a credit card transaction to clear to anything resembling the permanence of a mined bitcoin transaction. Same story with credit cards.

                    But I don’t have to wait months for both parties to be content the transaction is successful, only seconds, so this is really irrelevant to the point you are responding to, which is that if a Bitcoin transaction takes 10m to process then I heave to wait 10m for my transaction to be done, which people might not want to do.

                    1. -1

                      Again, as I said directly below the text you quoted, most merchants don’t require you to wait 10 minutes - only seconds.

                    2. 5

                      Then I would advise researching it.

                      It is exactly because I looked into the inner workings of Bitcoin and the Blockchain - as a proponent I have to mention - that I became more and more skeptical about it. And I still do support various decentralized and federated systems: BitTorrent, IPFS, (proper) HTTP, Email, … but just because the structure offers the possibility for a decentralized network, doesn’t have to mean that this potential is realized or that it is necessarily superior.

                      Not trying to be rude, but it’s clear whenever anyone makes this argument that they don’t know at all how our existing financial infrastructure works. In fact, it takes months for a credit card transaction to clear to anything resembling the permanence of a mined bitcoin transaction. Same story with credit cards.

                      The crucial difference being that, let’s say the cashier nearly instantaneously hears a some beep and knows that it isn’t his responsibility, nor that of the shop, to make sure that the money is transfered. The Bank, the credit card company or whoever has signed a binding contract lining this technical part of the process out to be what they have to care about, and if they don’t, they can be sued since there is an absolute regulatory instance - the state - in the background. This mutual delegation of trust, gives everyone a sense of security (regardless of how true or false it is) that makes people spend money instead of hording it, investing into projects instead of trading it for more secure assets. Add Bitcoins aforementioned volatileness, and no reasonable person would want to use it as their primary financial medium.

                      If you do want permanence, Bitcoin is infinitely superior to any popular payment mechanism.

                      I wouldn’t conciser 3.3 to 7 transactions per second infinitely superior to, for example Visa with an average of 1,700 t/s. Even it you think about it, there are far more that just 7 purchases being made a second around the whole world for this to be realistically feasible. But on the other side, as @friendlysock Bitcoin makes up for it by not having too many things you can actually buy with it: The region I live in has approximately a million or something inhabitants, but according to CoinMap even by the most generous measures, only 5 shops (withing a 30km radius) accepting it as a payment method. And most of those just offer it to promote themselves anyway.

                      Very interesting theory - do you think these strawmen you’ve put up have collective hundreds of billions of dollars? As an effort barometer, are you familiar with the CBOE?

                      (I prefer to think about my phrasing as a exaggeration and a handful of other literary deviced, instead of a fallacy, but never mind that) I’ll give you this: It has been a while since I’ve properly engaged with Bitcoin, and I was always more interested in the technological than the economical side, since I have a bit of an aversion towards libertarian politics. And it might be true that money is invested, but that still doesn’t change anything about all the other issues. It remains a bubble, a volatile, unstable, unpredictable bubble, and as it is typical for bubbles, people invest disproportional sums into it - which in the end makes it a bubble.

                      1. 0

                        The crucial difference being that, let’s say the cashier nearly instantaneously hears a some beep and knows that it isn’t his responsibility, nor that of the shop, to make sure that the money is transfered.

                        Not quite. The shop doesn’t actually have the money. The customer can revoke that payment at any time in the next 90 or 180 days, depending. Credit card fraud (including fraudulent chargebacks) is a huge problem for businesses, especially online businesses. There are lots of good technical articles online about combatting this with machine learning which should give you an idea of the scope of the problem.

                        makes people spend money instead of hording it,

                        Basically any argument of this form (including arguments for inflation) don’t really make sense with the existence of arbitrage.

                        Add Bitcoins aforementioned volatileness, and no reasonable person would want to use it as their primary financial medium.

                        So it sounds like it would make people… spend money instead of hoarding it, which you were just arguing for?

                        I wouldn’t conciser 3.3 to 7 transactions per second infinitely superior to, for example Visa with an average of 1,700 t/s.

                        https://lightning.network

                        as @friendlysock Bitcoin makes up for it by not having too many things you can actually buy with it

                        This is just patently wrong. The number of web stores that take Bitcoin directly is substantial (both in number and traffic volume), and even the number of physical stores (at least in the US) is impressive given that it’s going up against a national currency. How many stores in the US take even EUR directly?

                        Anything you can’t buy directly you can buy with some small indirection, like a BTC-USD forex card.

                        It remains a bubble, a volatile, unstable, unpredictable bubble

                        It’s certainly volatile, and it’s certainly unstable, but it may or may not be a bubble depending on your model for what Bitcoin’s role in global finance is going to become.

                        1. 5

                          Not quite. The shop doesn’t actually have the money. The customer can revoke that payment at any time in the next 90 or 180 days, depending

                          You’ve still missed my point - it isn’t important if the money has been actually transfered, but that there is trust that a framework behind all of this will guarantee that the money will be there when it has to be, as well as a protocol specifying what has to be done if the payment is to be revoked, if a purchase wishes to be undone, etc.

                          Credit card fraud (including fraudulent chargebacks) is a huge problem for businesses, especially online businesses.

                          Part of the reason, I would suspect is that the Internet was never made to be a platform for online businesses - but I’m not going to deny the problem, I’m certainly not a defender of banks and credit card companies - just an opponent of Bitcoin.

                          Basically any argument of this form (including arguments for inflation) don’t really make sense with the existence of arbitrage.

                          Could you elaborate? You have missed my point a few times already, so I’d rather we understand each other instead of having two monologues.

                          So it sounds like it would make people… spend money instead of hoarding it, which you were just arguing for?

                          No, if it’s volatile people either won’t buy into it in the first place. And if a currency is unstable, like Bitcoin inflating and deflating all the time, people don’t even know what do do with it, if it were their main asset (which I was I understand you are promoting, but nobody does). I doubt it will ever happen, since if prices were insecure, the whole economy would suffer, because all the “usual” incentives would be distorted.

                          https://lightning.network

                          I haven’t heard of this until you mentioned it, but it seems like it’s quite new, so time has to test this yet-another-bitcoin-related project that has popped up. Even disregarding that it will again need to first to make a name of it self, then be accepted, then adopted, etc. from what I gather, it’s not the ultimate solution (but, I might be wrong), especially since it seems to encourage centralization, which I believe is what you are so afraid of.

                          This is just patently wrong. The number of web stores that take Bitcoin directly is substantial (both in number and traffic volume),

                          Sure, there might be a great quantity of shops (as I mentioned, who use Bitcoin as a medium to promote themselves), but I, and from what I know most people, don’t really care about these small, frankly often dodgy online shops. Can I use it to pay directly on Amazon? Ebay? Sure, you can convert it back and forth, but all that means it that Bitcoin and other crypto currencies are just an extra step for life stylists and hipster, with no added benefit. And these shops don’t even accept Bitcoin directly, to my knowledge always just so they can convert it into their national currency - i.e. the one they actually use and Bitcoins value is always compared to. What is even Bitcoin without the USD, the currency it hates but can’t stop comparing itself to?

                          and even the number of physical stores (at least in the US) is impressive given that it’s going up against a national currency.

                          The same problems apply as I’ve already mentioned, but I wonder: have you actually ever used Bitcoin to pay in a shop? I’ve done it once and it was a hassle - in the end I just bought it with regular money like a normal person because it was frankly too embarrassing to have the cashier have to find the right QR code, me to take out my phone, wait for me got get an internet connection, try and scan the code, wait, wait, wait…. And that is of course only if you want to make the trip to buy for the sake of spending money, and decide to make a trip to some place you’d usually never go to buy something you don’t even need.

                          Ok when you’re buying drugs online or doing something with microdonations, but otherwise… meh.

                          How many stores in the US take even EUR directly?

                          Why should they? And even if they do, they convert it back to US dollars, because that’s the common currency - there isn’t really a point in a currency (one could even question if it is one), when nobody you economically interact with uses it.

                          Anything you can’t buy directly you can buy with some small indirection, like a BTC-USD forex card.

                          So a round-about payment over a centralized instance - this is the future? Seriously, this dishonesty of Bitcoin advocates (and Libertarians in general) is why you guys are so unpopular. I am deeply disgusted that I have ever advocated for this mess.

                          It’s certainly volatile, and it’s certainly unstable, but it may or may not be a bubble depending on your model for what Bitcoin’s role in global finance is going to become.

                          So you admit that is has none of the necessary preconditions to be a currency… but for some reason it will… do what exactly? If you respond to anything I mentioned here, at least tell me this: What is your “model” for what Bitcoin’s role is going to be?

                  3. 14

                    Why don’t you believe it is anti-enviromental? It certainly seems to be pretty power hungry. In fact it’s hunger for power is part of why it’s effective. All of the same arguments about using less power should apply.

                    1. -1

                      Trying to reduce energy consumption is counterproductive. Energy abundance is one of the primary driving forces of civilizational advancement. Much better is to generate more, cleaner energy. Expending a few terrawatts on substantially improved economic infrastructure is a perfectly reasonable trade-off.

                      Blaming bitcoin for consuming energy is like blaming almond farmers for using water. If their use of a resource is a problem, you should either get more of it or fix your economic system so externalities are priced in. Rationing is not an effective solution.

                      1. 10

                        on substantially improved economic infrastructure

                        This claim definitely needs substantiation, given that in practice bitcoin does everything worse than the alternatives.

                        1. -1

                          bitcoin does everything worse than the alternatives.

                          Come on David, we’ve been over this before and discovered that you just have a crazy definition of “better” explicitly selected to rule out cryptocurrencies.

                          Here’s a way Bitcoin is better than any of its traditional digital alternatives; bitcoin transactions can’t be busted. As you’ve stated before, you think going back on transactions at the whim of network operators is a good thing, and as I stated before I think that’s silly. This is getting tiring.

                          A few more, for which you no doubt have some other excuse for why this is actually a bad thing; Bitcoin can’t be taken without the user’s permission (let me guess; “but people get hacked sometimes”, right?). Bitcoin doesn’t impose an inflationary loss on its users (“but what will the fed do?!”). Bitcoin isn’t vulnerable to economic censorship (don’t know if we’ve argued about this one; I’m guessing you’re going to claim that capital controls are critical for national security or something.). The list goes on, but I’m pretty sure we’ve gone over most of it before.

                          I’ll admit that bitcoin isn’t a panacea, but “it does everything worse” is clearly a silly nonsensical claim.

                        2. 4

                          Reducing total energy consumption may or may not be counterproductive. But almost every industry I can name has a vested interest in being more power efficient for it’s particular usage of energy. The purpose of a car isn’t to burn gasoline it is to get people places. If it can do that with less gasoline people are generally happier with it.

                          PoW however tries to maximizes power consumption, via second order effects , with the goal of making it expensive to try to subvert the chain. It’s clever because it leverages economics to keep it in everyone’s best interest to not fork but it’s not the same as something like a car where reducing energy consumption is part of the value add.

                          I think that this makes PoW significantly different than just about any other use of energy that I can think of.

                          1. 3

                            Indeed. The underlying idea of Bitcoin is to simulate the mining of gold (or any other finite, valuable resource). By ensuring that an asset is always difficult to procure (a block reward every 10 minutes, block reward halving every 4 years), there’s a guard against some entity devaluing the currency (literally by fiat).

                            This means of course that no matter how fast or efficient the hardware used to process transactions becomes, the difficulty will always rise to compensate for it. The energy per hash calculation has fallen precipitously, but the number of hash calculations required to find a block has risen to compensate.

                      2. 6

                        We’ve been doing each a long time without proof of work. There’s lots of systems that are decentralized with parties that have to look out for each other a bit. The banking system is an example. They have protocols and lawyers to take care of most problems. Things work fine most of the time. There are also cryptographically-anchored trust systems like trusted timestamping and CA’s who do what they’re set up to do within their incentives. If we can do both in isolation without PoW, we can probably do both together without PoW using some combination of what’s already worked.

                        I also think we haven’t even begun to explore the possibilities of building more trustworthy charters, organizational incentives, contracts, and so on. The failings people speak of with centralized organizations are almost always about for-profit companies or strong-arming governments whose structure, incentives, and culture is prone to causing problems like that. So, maybe we eliminate root cause instead of tools root cause uses to bring problems since they’ll probably just bring new forms of problems. Regulations, disruption, or bans of decentralized payment is what I predicted would be response with some reactions already happening. They just got quite lucky that big banks like Bank of America got interested in subverting it through the legal and financial system for their own gains. Those heavyweights are probably all that held the government dogs back. Ironically, the same ones that killed Wikileaks by cutting off its payments.

                    2. 8

                      In what context do you view proof-of-work as useful?

                      1. 11

                        You have addressed 0 of the actual content of the article.

                      1. 2

                        My problem with the exception example is generally you would want a different user readable failure message for each error line.

                        1. 2

                          You can do that with monadic error handling, (see Railway-Oriented Programming) .The article is a little weird, though, in that it seems to be implying that Java exceptions are monads, which they’re not.

                        1. 7

                          Excellent piece. I really like the idea of revisiting seminal papers with the benefit of hindsight; too often it’s easy to read a paper from twenty years ago and find it really interesting, but then to be unable to find (or see) how it would be expressed in more modern idioms (or even if it survived “contact with the enemy”).

                          1. 3

                            Non-technology:

                            • Vietnamese Stories for Language Learners. Randomly got it recommended to me on Amazon, looks fantastic.
                            • Mengzi. A scholarly translation of a Confucian classic.
                            • Key Writings, Henri Lefebvre. Familiarizing myself with him. He’s an overlooked Marxist thinker with a focus on everyday life and urbanism.
                            • Why don’t we learn from history?, B.H. Liddell Hart.
                            • Street Without Joy: the French Debacle in Indochina, Bernard Fall. The classic examination of the French war in Indochina.

                            Technology:

                            • Attack of the 50-Foot Blockchain, David Gerard. Ordered it after I saw his posts in another thread here recently.
                            • Silence on the Wire, Zalewski.
                            • The Web Application Hacker’s Handbook, Stuttard and Pinto.
                            1. 3

                              Can recommend silence on the wire. If you like his writing (hint: you will) and am interested in web hacking, I’d strongly recommend his Tangled Web. Much better than web hacker’s handbook IMO. An less outdated, AFAIK ;)

                              1. 1

                                Cool, thanks for the recommendation. I’ll add that as an alternative.

                              1. 4

                                The Linux Programming Interface is very good. A lot lower-level than I normally go, but still fascinating.

                                1. 1

                                  Any similar ones you’d recommend ?

                                  1. 2

                                    Advanced Programming in the Unix Environment, I guess? I don’t really read many low-level books like that. Most of the higher-level things I like are more conceptual than specific.

                                2. 2

                                  Soul of a New Machine is a delightful read, and if you like it I’d check out Masters of Doom.

                                  1. 1

                                    I’ve read it already! It was an exciting read. I read it one sitting.

                                1. 15

                                  Ulysses. This is the year I’ll finish it. Or so I tell myself.

                                  1. 2

                                    And after that Finnegans Wake, right? I know this feeling.

                                    1. 1

                                      Got this for Christmas, actually..

                                    1. 1

                                      It is not clear to me if they’re only interested in people who physically live in the Valley or also remote workers.

                                      1. 1

                                        I’d say count both if the business and/or deliverable is in the Valley.

                                      1. 13

                                        I don’t have any research papers off hand, but I would love to read some criticisms of the blockchain/cryptocurrencies (in terms of technology rather than economics).

                                        1. 6

                                          This piece is pretty good.

                                          1. 13

                                            No, that piece is actually uniquely terrible. I mean, if you want to simply read a piece which throws cold water then sure, read it, but you’re probably looking for informed pieces. The linked article is written by somebody who doesn’t understand the space; it makes claims which can be trivially disproved by reading the relevant literature. (For example, he seems to think that systems like Filecoin are proposing we store bulk data directly onto a blockchain)

                                            This one is much better.

                                            Attack of the 50 foot blockchain, both the book and the blog, are also great. They go less into technical details and more into pointing out the crazy claims some people are making and the crazy schemes they’re proposing.

                                            1. 6

                                              This one is much better.

                                              That looks like it might be worth including on the list. I’ll try to review it tonight.

                                              1. 6

                                                I thought it was a pretty good piece. Main factual errors are: eight years not ten, and bitcoin transactions haven’t been four cents since early 2015.

                                                But I think his central thesis is sound: all of this is a series of very impressive solutions to things that aren’t in fact the problem. Key quote:

                                                In conversations with bitcoin entrepreneurs and investors and consultants, there was often a lack of knowledge or even interest in how the jobs were being done today or what the value to the end user was.

                                                The more general problem is that “blockchain” the buzzword has less and less to do with the weird trick Satoshi Nakamoto came up with. e.g. Hey, Estonia’s all Blockchain now! Everything there is on blockchains! Is this Good News for Bitcoin?? well, not quite, because their esteemed Guardtime KSI Blockchain isn’t actually, er, a blockchain. That sort of thing.

                                                1. 2

                                                  Oh, it’s cool that you’re here. First off, thanks for the book, it gave me a very lovely Saturday!

                                                  In conversations with bitcoin entrepreneurs and investors and consultants, there was often a lack of knowledge or even interest in how the jobs were being done today or what the value to the end user was.

                                                  If this was his main point I would agree that it was a decent piece, but all of his examples really are terrible. He focuses on b2c applications; almost all of his reasons are how consumers already have much better alternatives than anything blockchain-powered currently provides.

                                                  I agree, however (1) there’s much more to the world than just b2c, (2) b2c is usually built as a wrapper on top of unfriendly systems. Dropbox, one of his examples, is built on top of s3, which isn’t much friendlier than Filecoin would be, if it succeeds. Filecoin has the promise of being much cheaper though, so you can imagine, 5 years from now, using a Filecoin-powered-Dropbox which gives you all the same features but is less than half the cost. I know that doesn’t sound revolutionary, but before I lose your interest by claiming even bigger things I wonder if you agree the above is possible.

                                                  He then prematurely generalizes, and claims that these failings prove the entire class of blockchain protocols are doomed. Again, I totally agree that consumers prefer airline miles to whatever libertarians mean by “sound money”. However, I think things like storage markets, prediction markets, incentivized mesh networking… all of these take time to build; and the author of this piece seems to think that because he can’t imagine them then they must surely not exist.

                                                  The more general problem is that “blockchain” the buzzword has less and less to do with the weird trick Satoshi Nakamoto came up with.

                                                  This is, in some circles, completely true. It’s something Matt Levine has written about; blockchain is often code for “let’s get decision makers to approve fixing some of our infrastructure by giving the work a sexy name”. You’re reading your own opinions into his piece though, I don’t think he ever argues this :)

                                                  1. 6

                                                    I probably am reading my own opinions into his paper to a degree, then agreeing with myself, yes :-) I was reading it as a businessperson’s frustration with fountains of BS that never quite work out.

                                                    I do think, though, that eight years in, the burden of proof is firmly on the blockchain promoters. I have no patience any more for purported blockchain systems that don’t exist yet, because their track record of achieving existence is really bad.

                                                    Hypotheticals in the blockchain space are so cheap as to be worthless. “Could” or “will” are words meaning “doesn’t”.

                                                    The bitcoin press don’t really help in this. CoinDesk in particular never seems to have seen a hypothetical it doesn’t like; all you need is to make your thing slightly blockchainy and they’ll post a piece of journalistic stenography about it. Its failure to eventuate six months later will never be noted. This is a big problem because the mainstream media assume good faith, that this is specialist press rather than boosterism press …

                                                    Try this yourself! Take any of these hype-filled proposals and replace “could” with “doesn’t”. I’ve got here a blockchain in healthcare paper - peer-reviewed!! though in a journal that made Beall’s List - that has “could” 81 times, all for things that DON’T EXIST. Perhaps one day they will! But the fact that they DON’T EXIST is in fact an important point.

                                                    The Lightning Network is one personal bugbear on this point. I have had this argument, live on video with a bitcoin advocate (they didn’t put that bit up, for some reason … though I still have my video) where I pointed out bitcoin’s utter failure to scale and got back “but look, the Lightning Network! (laugh)” as if that was a slam-dunk refutation. I had to point out the fact that LN’s been coming any moment now in 2015, 2016, 2017 and for 2018, and the most important thing about it is that it DOESN’T EXIST. And, y’know, its repeated failure to happen might be relevant to its value as a solution to the problem.

                                                    (Rant time: I just had another go-round recently with LN advocates. I am pleased to say the actual devs are much better to talk to than the advocates. There is now LN code! The crippling flaw of the whole LN design remains the path-finding algorithm, to go from arbitrary node A to arbitrary node B - which is the same problem as trying to solve a UUCP bang-path. What was the best that the most motivated computer scientists and sysadmins of the 1980s could manage? Either compute it by hand, or download monthly maps of the entire network and pathalias it. And they all ran screaming for DNS as soon as they had proper Internet. So to do a proper mesh network, rather than just a few hubs closely resembling the Visa-Mastercard-PayPal triumvirate, LN actually requires new computer science. The present alpha code uses “broadcast every channel and transaction to the whole network”, which is I think O(n^2) and scales to literally tens of nodes. And then, even if it all worked, the economics of the LN can’t possibly work and would seize up immediately. But as far as I can tell, they literally don’t have a planned or anticipated economic model; certainly there’s nothing in years of dev list messages referencing any sort of thing they’re aiming for, which any reasonable person would think was something that might be needed … gah. Hyped vaporware. I tire of it.)

                                                    so yeah. I have no patience for hypotheticals in the blockchain space any more. Call me when the thing exists and works. There’s too much BS and too many BSers.

                                                    I did just ask an actual mathematician working in related areas to write a section-by-section takedown of that TimeCube-in-LaTeX white paper IOTA put up. I hope they have something I can link or post soon.

                                                    1. 2

                                                      I do think, though, that eight years in, the burden of proof is firmly on the blockchain promoters. I have no patience any more for purported blockchain systems that don’t exist yet, because their track record of achieving existence is really bad.

                                                      I really can’t argue. I do think that these things take time. Many of the potential “could” and “will” applications assume things like low transaction fees or a lightning network or decentralized storage. Until we figure out how to scale these things those applications are likely to be out of reach.

                                                      I’ll have to begrudgingly agree with you if we go another 8 years without any big breakthroughs but for now I’m hopeful, ethresear.ch has some cool ideas which are just crazy enough to work. It took a surprisingly long time for the steam engine to become practical.

                                                      And then, even if it all worked, the economics of the LN can’t possibly work and would seize up immediately

                                                      Do you have any references I could go read? I have my doubts on Lightning Network, it feels like there need to be hubs, and the channels between those hubs need to be massive to hold all the payment volume, but that’s just my idle speculation. I’d love to see some math.

                                                      I did just ask an actual mathematician working in related areas to write a section-by-section takedown of that TimeCube-in-LaTeX white paper IOTA put up. I hope they have something I can link or post soon.

                                                      Yes, IOTA is an unmitigated disaster. I also would love to have something I can link to.

                                                      1. 3

                                                        No, I was trying to put one together, but that really requires the LN to be an actual thing that could be talked about. It’s hard to make specific and pointed critiques of a nonexistent network. I mean, proponents can easily say “that’s not a problem because (spurious justification)” because the network doesn’t exist yet

                                                        Though here’s someone writing several obvious arguments against it. Also, Jorge Stolfi on Reddit (/u/jstolfi) has critiqued it at length and in detail.

                                                        Whenever I’ve seen someone raise economic arguments, LN devs and proponents go silent. I’m also pretty sure you can get credit - the promise of money that would be as usable as money - out of it, though the notion is anathema to bitcoiners because credit is evil therefore doesn’t exist. Etc., and on.

                                                        The LN is very un-blockchain in nature. One of the big things, actually, that worries me about the LN is that I don’t think there’s been a system like it in financial history. And people have tried just about everything, so that’s actually a point against it. I asked one finance history buff, and the only thing they could think of was Bretton-Woods and large quantities of gold. And B-W eventually faded away as people stopped pretending they cared about the actual gold.

                                                        I’m seriously starting to think they were desperate for something, anything to deal with the Bitcoin transaction clog and seized upon this half-formed LN payment channels idea, didn’t think it through at all, and still haven’t.

                                                        The LN on the testnet is pretty elaborate. Buuuut the testnet doesn’t have $50 transaction fees to set up a channel.

                                                        1. 2

                                                          Thanks for making your points in this thread. They’re well-stated and express some of the concerns I’ve had while evaluating various possibilities for the current project I’m working on, better than I could have.

                                                2. 3

                                                  The first is pretty good esp on speed, flexibility, and energy use. If it’s on the list, one might want to include prior and alternative work that uses traditional tech with audit ledgers, byzantine databases, securities built on multiple stable commodities/currencies, nonprofits solving for-profit transaction issues via charter + contracts, and so on. Lots of possibilities that reuse everything from proven security or software methods to well-understood laws and business models.

                                                  Strange enough, echo chamber is so strong on bitcoin that anyone bringing up stuff like that just fixing centralized methods or decentralizing without blockchains gets pushed to bottom of thread. Meanwhile, the newly popular thing is still failing while the traditional methods still mostly work.

                                                  1. 3

                                                    Fairly sure David Gerard is a fellow crustacean. (He and I seem to end up in all the same internet places for some reason.)

                                                  2. 3

                                                    That’s more an argument about the business side than the core technology, though.

                                                1. 3

                                                  I like gitit, but don’t use it for everything. I write notes for current projects and such in org-mode, and then if I think it will be of interest to me later (some new technique or tech I’ve learned, for example) I will write a short summary in the wiki or add to a previously-existing page.

                                                  1. 16

                                                    I have fought against this myself. It’s hard. What I found really helpful was to decouple my self-worth from my job. Nothing related to programming skill is related to peoples’ inherent value; almost nothing in programming is a moral decision (except being willing to say “this is a job I will not do”). Personally I have found it easier to find this from philosophical, theological, and moral texts than from self-help books; tastes vary.

                                                    If you are interested, I recommend these books:

                                                    • The Miracle of Mindfulness by Thich Nhat Hanh
                                                    • Xunzi (translated into English by Hutton)
                                                    • Meditations by Marcus Aurelius
                                                    • The Confessions by St. Augustine
                                                    • The Seven-Storey Mountain by Thomas Merton

                                                    Several of them are “religious” (Mindfulness is Zen Buddhist and Augustine and Merton are both Catholic), but there is a common thread of self-critique and examination that runs through them that I found really valuable.

                                                    1. 8

                                                      What I found really helpful was to decouple my self-worth from my job

                                                      I will go one further, and say what really works for me (and what I’m constantly having to practice) is to decouple my self-worth from my own intelligence or talent, and to go on to admit that whatever I happen to be suited to, there’s very little credit I can take for it. As a programmer, I am entirely reliant on prostheses: documentation, yes, but also unit tests, type systems, and mathematics—these are all useful to me, and everyone else, specifically because they help fill in the gaps where my reasoning ability (supposedly the thing I am proud of as a programmer) is deficient.

                                                      Nevertheless my mind does rush to judgment constantly; it’s been fine-tuned to always find a way to set myself apart from whoever I’m looking at. At then end of the day, when it comes to this profession, pretty much every single one of us would benefit from approaching it with a huge degree of humility.

                                                      1. 11

                                                        Nevertheless my mind does rush to judgment constantly

                                                        Programming encourages this, because code has to be right. Pointing out mistakes is something we frequently have to do as a result.

                                                        Most of ‘the real world’ doesn’t need the same kind of correctness. Businesses run on approximation and best efforts.

                                                        This is (to my mind) the most significant ‘Déformation professionnelle’ of the programmer. In the rest of society, maintaining a relationship is (often) more important than pointing out a mistake.

                                                        1. 4

                                                          …every single one of us would benefit from approaching it with a huge degree of humility.

                                                          This is the key point, I think. Humility helps you see where you’ve made a mistake; where you can improve; where you might be entering an area of weakness. It also helps you relate to your coworkers and colleagues. If you can come to recognize things as opinions, rather than subjects of Objective Truth, that don’t really matter very much, then a lot of friction is removed.

                                                          1. 4

                                                            Humility for me is really hard when met by arrogance. Arrogance provokes arrogance in myself.

                                                            1. 2

                                                              That is very true. It’s easy to get offended and act arrogant/negative in return. This is probably my primary failure mode! Still, it’s just something to recognize and work on.

                                                        2. 2

                                                          Thanks for your comment, especially the small sentence “it’s hard.”

                                                          I struggle with the concept of decoupling my self-worth from work. Sometimes, I think that this is the right path. Then I cannot perceive how something on that I spent so much deliberate time & energy should be irrelevant for defining my self? I am currently digging into mediation, maybe your recommendations provide further guidance. Thanks.

                                                          1. 4

                                                            Consider these ideas.

                                                            1. Imagine that there is an economic down-turn and you are not able to keep your job. You are forced to work, to make ends meet, as a cook in a restaurant.
                                                            2. Imagine that you were struck by a car while crossing the street. You have a head injury and, while you are able to walk and talk, are never able to work as a programmer again.

                                                            In either case, should your self-worth be damaged? I would say no. How we treat our personal obligations is what defines us as people, not our work. If you are meeting your personal obligations as best you can in the circumstances—treating the people around you well, taking care of your children, generally making the world better—then you’re doing fine.

                                                            I really like Xunzi for this, because he sets out his goals plainly.

                                                            The gentleman is the opposite of the petty man. If the gentleman is great-hearted [confident] then he reveres Heaven and follows the Way [i.e. follows social rituals and educates others]. If he is small-hearted [shy] then he cautiously adheres to yi [moral standards] and regulates himself. If he is smart, then with enlightened comprehension he acts according to the proper categories of things. If he is unlearned, then with scrupulous honesty he follows the proper model. If he is heeded, then he is reverent and reserved. If he is disregarded, then he is respectful and controlled. If he is happy then he is harmonious and well-ordered. If he is troubled, then he is calm and well-ordered. If he is successful, then he is refined and enlightened. If he is unsuccessful, then he is restrained and circumspect.

                                                            In short, there is a way to be a “gentleman” (or “sage”) in every circumstance. Of course, nobody is perfect, so it’s better to be seen as a “process” than an end point.

                                                        1. 2

                                                          In the Vietnam War, there was a focus on data above everything else that led to a technocratic approach to war. Such-and-such many killed; so-and-so many weapon caches destroyed. It led to the murder of innocent people and the falsification of metrics, so that generals sitting in the rear could fool themselves into thinking they were winning. In light of this, it seems like a really bad idea to try to apply Sabermetrics to this space.

                                                          1. 23

                                                            I vote we hold the line. Crypto is a perfectly cromulent synonym for cryptography.

                                                            A review of https://lobste.rs/t/crypto doesn’t reveal any mistagged stories. Even the one about IOTA was about differential cryptography.

                                                            1. 6

                                                              Some of them got retagged because I went through and fixed the tags. Check the mod log.

                                                              1. 1

                                                                They’re synonmyms. Might be better to label the crypto tag with “other crypto” or something similar to emphasize cryptocurrencies get their own tag.

                                                                I dont support redefining or retiring a common phrase, esp a big on in CompSci, becausr some people are using it wrong. SpiderOak couldve similarly justified their use of ZeroKnowledge for different concept by pointing out how many people they had using it wrong. We didnt let them, though.

                                                                1. 7

                                                                  Tags serve the purpose of allowing people to categorize and filter the stories posted here on lobste.rs. The correctness or incorrectness of “crypto” aside—even the appilcability of cryptography to cryptocurrencies aside—the present confusion damages the value of the crypto and cryptocurrencies lobste.rs tags. Renaming the tag to cryptography would make the tag more meaningful.

                                                                  1. 5

                                                                    This is correct. We’re not talking about definitions of words, but usefulness of tags for filtering.

                                                                    1. 1

                                                                      We are talking about the definitions of words. Cryptography equals crypto. Cryptocurrencies equals… well, you know. The two tags are there for the purposes of highlighting or filtering those. The OP says people are incorrectly labelling tags. Solution is to tell them what they’re doing so they can avoid it or some moderation activity.

                                                                      You going to ask for admin to change the Windows or Programming tags if a handful of people put them on other activities we have a tag for? We going to get rid of them or make them longer if they’re mislabelled?

                                                                      1. 2

                                                                        We can lead horses to water but we cannot make them drink.

                                                                        If the world at large is moving toward changing the English language to employ crypto as a shortname for cryptocurrencies, then with all the will in the world we cannot fight against that.

                                                                        The definition of ‘hacker’ forcibly changing due to sheer weight of incorrect usage is a fine example from our past. Respectfully, your ideals are noble, but if they don’t reflect reality, that’s the end of it. :-)

                                                                        1. 1

                                                                          The definition of ‘hacker’ forcibly changing due to sheer weight of incorrect usage is a fine example from our past.

                                                                          That right there is the most compelling counter since I’ve given up trying to explain the difference to the general public. Watching people’s faces when I say I read Hacker News is interesting to this day. Always have to follow up with an explanation about the term. So, I just skip the name usually to say what content it has.

                                                                          “We can lead horses to water but we cannot make them drink.”

                                                                          This is wrong analogy. There’s a whole sub-field of education with this name plus a super-set called Information Security both of which will be penalizing students for getting it wrong. There’s also tech forums that force correct use of labeling or other rules. On this one, I’d prefer to keep burden low on moderators. Gotta balance that against accuracy. Tag renames plus suggestions on corrective action would imply action against the account if that was ignored. There’s also possibility of scripting it to look for keywords on any items tagged crypto to autosuggest cryptocurrencies.

                                                            1. 4

                                                              I find it quite strange to see many comments (here, now; but also elsewhere when this comes up) about how (a) gamification detracts from the site’s main purpose (being a knowledge base) and (b) it’s hard to get points now, well-thought-out questions and answers often don’t get many points, other people got lots of points without much effort.

                                                              Surely (a) implies that the points are meaningless, and hence (b) is a non-issue? This seems especially true when it comes to questions: the few times I’ve asked a question on SO or another stackexchange site, it’s because I want to know the answer; not because I want more meaningless internet points.

                                                              The other common complaint is overly-strict closing, which certainly does sound like a delicate issue which could put off many people from participating further.

                                                              1. 11

                                                                Actions are gated behind points. You can’t answer “protected” questions or post links until you have 10; can’t comment until 50. Then, too, there’s a network effect where people are, perversely, more likely to upvote answers by high-reputation users. Thus, the points do matter; the ones that matter the most are the hardest to get; and there’s an entrenched group of high-rep users who accrue reputation just by virtue of having high reputation already.

                                                                1. 3

                                                                  Actions are gated behind points. You can’t answer “protected” questions or post links until you have 10; can’t comment until 50.

                                                                  Ah yes, I forgot about this.

                                                                  The failure mode I was mostly thinking about was considering SO reputation when comparing prospective new hires, which would give these ‘internet points’ a real economic value, and cause all sorts of distortion.

                                                                  Thus, the points do matter; the ones that matter the most are the hardest to get;

                                                                  Do you mean those initial 10 or 50 points? I see how this is bad, but also why something like that is necessary to prevent spam (lobste.rs uses invites for a similar reason). I don’t know enough to comment on the particular tradeoffs (e.g. how SO spam correlates with reputation requirements).

                                                                  Then, too, there’s a network effect where people are, perversely, more likely to upvote answers by high-reputation users… and there’s an entrenched group of high-rep users who accrue reputation just by virtue of having high reputation already.

                                                                  I put this all in my “so what?” bucket :)

                                                                2. 2

                                                                  I personnally wasn’t complaining on the gameification of the site but the difficulty to get reputation nowdays (which you do mention).

                                                                  I do agree with your points and your second paragraph made me rethink my arguments.

                                                                  To be frank, my main motivation for getting reputation (which is probably a bad one) is if I ever want to find a job using StackOverflow Jobs or if a potential employer decides to look up my profile on StackOverflow. But I’m probably stressing over nothing.

                                                                1. 34

                                                                  There are a few points that make sites that rely on “distributed expertise” fail with time:

                                                                  1. Stagnant population. You see this a lot with moribund wikis. The original wiki fell victim to this. There aren’t enough newly-interested people to keep investing their time in the site.
                                                                  2. Lack of expertise. As people become more experienced and knowledgeable, they also tend to get more demanding jobs, hobbies, and families, and thus are less willing to spend time answering questions with no reward.
                                                                  3. Rules lawyering. Gamification (a term that seems to have died out as people realized its flaws, maybe) means that a site is a game. Games get exploited: people become experts on the rules and develop strategies to maximize performance, or they become so strict that it’s no longer fun for casual players.

                                                                  StackOverflow has all of these problems. Its devotees are a stagnant, self-selecting subgroup who earned a lot of points back when it was easy to earn points answering questions like “What is the difference between git pull and git fetch?” (8931 upvotes) or “How to redirect to another webpage?” (7262 upvotes). The ones who are still participating are primarily experts in StackOverflow, not in technologies. Any new blood is likely to be immediately put off by having their question closed because it’s a “duplicate” of an old question that’s just different enough to not answer their question, and that results in an opportunity cost: all of their potential future value is lost to the site.

                                                                  These structural problems were obvious at the beginning of the site, but were dismissed by most participants and moderators at that time. It’ll be interesting to see if they manage to find a business model after the recent layoffs.

                                                                  1. 16

                                                                    Games get exploited: people become experts on the rules and develop strategies to maximize performance

                                                                    Better explained by the concept of https://en.wikipedia.org/wiki/Perverse_incentive

                                                                    You start by rewarding an easy to measure outcome that is mostly indicative for the hard to measure outcome you really want, then you stand back and watch how those smart upright apes find ways to reach the former while skirting the latter.

                                                                    1. 14

                                                                      I followed Atwood and Spolsky during the startup of SO, and I think they’d thought through the implications as best as they could.

                                                                      We “know” gamification is bad now, partly because SO, through its undeniable success, proved it.

                                                                      The site and concept may be moribund now, but for a while they were successful. We should all be so lucky with the things we create.

                                                                      1. 4

                                                                        I’m wondering if halving points once a year or so would somehow help with some of those issues.

                                                                        1. 4

                                                                          I have thought about “decaying” karma, so that each point has a half-life. The biggest issue with that combined with StackOverflow as it currently stands is that it would lead, over time, to karma deflation. After all, you can’t very well ask “How to redirect to another webpage?” again, so the roughly 36k karma earned by that question and the 125k+ earned by its answers couldn’t be replaced—just as nobody starting on the site today can ever hope to catch people who earned those cheap points when the site was young.

                                                                          1. 2

                                                                            nobody starting on the site today can ever hope to catch people who earned those cheap points when the site was young.

                                                                            I wonder if some sort of redistributive scheme could work: on a monthly basis, remove 1% of everyone’s points & reällocate to all those who’ve been active over the past month.

                                                                            1. 1

                                                                              If karma is no longer working, why not axe it?

                                                                              If it drives out those who are merely responding to gamification, perhaps that is for the better.

                                                                        1. 20

                                                                          Thanks to all the Monad’s tutorial and hype, when I first learned Haskell, a few years ago, it took me a few months to accept that I had understood Monads at the first glance.

                                                                          All those tutorials were just confusing. I was all thinking “what am I missing? it seem so simple! why nobody explains what I’m missing?”. I was missing nothing.

                                                                          A Monad is simply a wrapper. You have a function to wrap a value (return) and a function that applies to the wrapped value another function that returns a different wrapped value (bind). That’s it.

                                                                          1. 11

                                                                            Completely agree with you!

                                                                            See the eightfold path to monad satori from What I Wish I Knew When Learning Haskell:

                                                                            1. Don’t read the monad tutorials.
                                                                            2. No really, don’t read the monad tutorials.
                                                                            3. Learn about Haskell types.
                                                                            4. Learn what a typeclass is.
                                                                            5. Read the Typeclassopedia.
                                                                            6. Read the monad definitions.
                                                                            7. Use monads in real code.
                                                                            8. Don’t write monad-analogy tutorials.
                                                                            1. 2

                                                                              Thanks for this list. Someone on my team recently read and shared a “Monads are like Burritos” blog post. The post made several dubious analogies. The effect was that people felt like they understood Monads. In fact, they did not. This is worse than not understanding them and feeling like you don’t understand them.

                                                                            2. 7

                                                                              Seriously. People act like the concept is so complicated and it really isn’t. I definitely knew what monads were for a long time before all the elaborate metaphors muddled my understanding. So far I’ve gotten the most mileage by illustrating how to convert procedural code to “math style” single expression functions, and rolling from there.

                                                                              1. 1

                                                                                People correct me if I’m wrong because I’m not a Haskeller. I do keep reading these monad things and getting confused about it. One person told me it was basically just imperative programming in a functional language to make things happen in a certain order. I haven’t had anyone attempt to corroborate or refute that. Maybe just one. Your statement sounds similar.

                                                                                It also reminds me of SSA form a little bit in how you describe it.

                                                                                1. 15

                                                                                  I will corroborate that as a partial explanation. And it should remind you of SSA form, since it helps accomplish similar things. I think that’s a confusing place to start though, because people tend to ask why functional languages don’t just run things in a certain order anyway. And they do, take printNum( readNum() + 1 ), this will clearly read a number before trying to print the number.

                                                                                  Instead, assume we have a VM that only understands simple “math style” functions like:

                                                                                  f(x) = expression
                                                                                  

                                                                                  Such as:

                                                                                  square(x) = x * x
                                                                                  

                                                                                  So yes we could write:

                                                                                  main() = printNum( readNum() + 1 )
                                                                                  

                                                                                  But we could not write:

                                                                                  main() = print("multiple"); print("expressions"); print("in a sequence")
                                                                                  

                                                                                  That is, the VM does not implement multiple statements in a function, it expects only a single expression. Why not? Ignore that for now. This code will work though:

                                                                                  main() = printStage1()
                                                                                  printStage1() = printStage2(print("multiple"))
                                                                                  printStage2(x) = printStage3(print("expressions"))
                                                                                  printStage3(x) = print("in a sequence")
                                                                                  

                                                                                  See how that would work?

                                                                                  That’s tedious as hell to write though. Humor me, and now lets write it with lambda expressions. Lambda expressions are function values, i.e. these two definitions of main are equivalent:

                                                                                  main() = print("hello world")
                                                                                  main = λ() -> print("hello world")
                                                                                  

                                                                                  Notice I’m using main() = to define a named function, but just main = with lambda. This is exactly identical to the following javascript:

                                                                                  function main() { print("hello world"); }
                                                                                  main = function() { print("hello world"); }
                                                                                  

                                                                                  So we can rewrite our program like so:

                                                                                  main = printStage1
                                                                                  printStage1 = λ() -> printStage2(print("multiple"))
                                                                                  printStage2 = λ(_) -> printStage3(print("expressions"))
                                                                                  printStage3 = λ(_) -> print("in a sequence")
                                                                                  

                                                                                  Now lets inline some things, one step at a time:

                                                                                  main = λ() -> printStage2(print("multiple"))
                                                                                  printStage2 = λ(_) -> printStage3(print("expressions"))
                                                                                  printStage3 = λ(_) -> print("in a sequence")
                                                                                  
                                                                                  main = λ() ->
                                                                                           (
                                                                                             λ(_) -> printStage3(print("expressions"))
                                                                                           )( print("multiple") )
                                                                                  printStage3 = λ(_) -> print("in a sequence")
                                                                                  
                                                                                  main = λ() ->
                                                                                           (
                                                                                             λ(_) ->
                                                                                               (
                                                                                                 λ(_) -> print("in a sequence")
                                                                                               )( print("expressions") )
                                                                                           )( print("multiple") )
                                                                                  

                                                                                  We now have a strategy for compiling a sequence of expressions into a single lambda expression, that returns the result of the last expression. Notice that I used underscores for the lambda args, because their result was unused by the function. But what if our program uses variable names? These are equivalent:

                                                                                  main() = {
                                                                                    n = readNum();
                                                                                    printNum(n);
                                                                                  }
                                                                                  
                                                                                  main = λ() ->
                                                                                           (
                                                                                             λ(n) -> printNum(n)
                                                                                           )( readNum() )
                                                                                  

                                                                                  Hopefully you can now see that we could write a compiler that converts normal imperative code with variable assignments and so on into an unreadable chain of simple lambdas.

                                                                                  So why would you want to do that? Well, if this was a language we were implementing, we can add imperative syntax to our language without actually extending the VM. Our language interpreter can pre-process the code into simple lambdas, then the VM only has to know how to execute simple lambdas. That’s neat.

                                                                                  It also lets us make radical simplifying assumptions, just like SSA. Function calls can be evaluated in any order, as long as all its arguments have been evaluated first, just like SSA. But the way we’ve done it so far makes every line dependent on every previous line. So now lets split = into = and <-, where = denotes a weakly ordered assignment, and <- denotes a strongly ordered assignment.

                                                                                  main() = {
                                                                                    a = 7
                                                                                    b = 2
                                                                                    x <- readNum()
                                                                                    y <- readNum()
                                                                                    _ <- printNum(a / x + b / y)
                                                                                  }
                                                                                  

                                                                                  We don’t actually need to create a new lambda until we hit a strong assignment. So this simple lambda code is equivalent:

                                                                                  main = λ() ->
                                                                                           (
                                                                                             λ(a, b, x) ->
                                                                                               (
                                                                                                 λ(y) -> printNum(a / x + b / y)
                                                                                               )( readNum() )
                                                                                           )( 1, 2, readNum() )
                                                                                  

                                                                                  Okay but what if we screwed up and wrote this:

                                                                                  main() = {
                                                                                    a = 7
                                                                                    b = 2
                                                                                    x = readNum()
                                                                                    y = readNum()
                                                                                    printNum(a / x + b / y)
                                                                                  }
                                                                                  

                                                                                  Which would compile to this:

                                                                                  main = λ() ->
                                                                                           (
                                                                                             λ(a, b, x, y) -> printNum(a / x + b / y)
                                                                                           )( 1, 2, readNum(), readNum() )
                                                                                  

                                                                                  If functions can be evaluated in any order, will x or y be read first? It’s undefined. Either readNum() call could run first. You shouldn’t be allowed to weakly order things like IO. That should be an error. One way to do that is to give readNum a type, that insists its return value must be strongly assigned. But readNum should also be ordered with respect to printNum, and anything else that does IO.

                                                                                  So lets define these functions with a special return type that says they are both IO:

                                                                                  readNum(): IO(Number)
                                                                                  printNum(n: Number): IO()
                                                                                  

                                                                                  This IO wrapper type must be strongly assigned, and the result of its assignment will be its inner type. That is, these are basically equivalent:

                                                                                  x: Number = 1
                                                                                  x: Number <- IO(1)
                                                                                  

                                                                                  That’s the IO monad.

                                                                                  The strong assignment operator <- is called bind. A monad’s bind function takes a function, and returns a new monad, that represents the result of applying the function to the monad’s inner value. Using our typed readNum and printNum, our program looks like this:

                                                                                  main() = {
                                                                                    a = 7
                                                                                    b = 2
                                                                                    readNum().bind(
                                                                                      λ(x) -> readNum().bind(
                                                                                        λ(y) -> printNum(a / x + b / y)))()
                                                                                  }
                                                                                  

                                                                                  If you’ve ever written node.js before, you might be thinking hey wait a minute, that’s just an IO callback! Honestly yeah, pretty much. But with strong typing and syntax sugar. We can write this:

                                                                                  x <- readNum()
                                                                                  y <- readNum()
                                                                                  printNum(x + y)
                                                                                  

                                                                                  But if we write this, it’s a type error:

                                                                                  x = readNum()
                                                                                  y = readNum()
                                                                                  printNum(x + y)
                                                                                  

                                                                                  Why? Because the + operator has the type signature Number + Number, not IO(Number) + IO(Number). Even if + was defined for IO(Number), printNum still takes a Number, not an IO(Number). The type system forces us to bind properly.

                                                                                  So now our VM (or compiler) can treat all assignments as weak, because we’ve implemented strong assignments on top of weak assignments and lambdas. Normally assuming all assignments are weak by default would make the language hugely error-prone to use. But the IO functions all return an IO monad, so the type system protects us. Constrast with a conventional imperative language, that must assume all assignments are strong unless it can prove otherwise.

                                                                                  Naturally the weak assignment strategy opens up a lot more opportunities for certain kinds of optimization. Haskell still hasn’t taken over the world though, cause there are a lot of other opportunities for optimization, like hand writing vectorized assembly. That kind of thing is harder to do in Haskell than e.g. C.

                                                                                  1. 3

                                                                                    That’s one of the ways Haskell uses monads, but IIRC (and I probably don’t RC), that’s driven more by Haskell’s lazy evaluation than a fundamental property of functional languages.

                                                                                    A more general use case of monads is the Maybe monad, which lets you control for nulls. If a function could return an integer or a null, you instead say its return value is Maybe Int. Then the type system can enforce that anything that calls that function handles both the integer case and the “null” case.

                                                                                    1. 2

                                                                                      I do keep reading these monad things and getting confused about it.

                                                                                      Monads are mathematical structures. They have nothing to do with computer programming whatsoever. In fact, monads are so ridiculously general compared to most other mathematical objects that there is no way they could serve a concrete purpose for non-mathematician standards. So the first thing monads are not is “something you use”.

                                                                                      Theoretical computer scientists (read: mathematicians) discovered [0] that you can “give a semantics” to a higher-order [1] strict [2] language in which “types” are denoted by “objects in a category C”, and “a computation that produces a value of type B from a value of type A” is denoted by “an arrow A -> TB”, where T is “a strong monad over C”. The tl;dr of all this [3] is that monads are “something intrinsic to the very structure of the programming languages we use”, just like the Earth’s gravitational field is “something intrinsic to the very structure of the world we live in”. You don’t need a mathematical model for it to exist, although it is nice to have one for some purposes.

                                                                                      However, Haskell is a lazy language, so it is intrinsically comonadic rather than monadic. (Again, [3].) And, while Haskellers like their lazy language overall, they also want the sequential structure of their effects to be more like what strict languages have, because lazy effectful computations are insanely hard to reason about. So you could say Haskellers have monads in their standard library because they don’t have it in their core language.

                                                                                      I have made essentially the same point elsewhere.


                                                                                      Footnotes:

                                                                                      [0] As opposed to “created”, like operating systems, word processors or computer games are.

                                                                                      [1] Having procedures as first-class values, e.g., Lisp, Python, Java, ML, Haskell.

                                                                                      [2] Reducing arguments to a normal form before they are passed to a function, e.g., Lisp, Python, Java, ML, but not Haskell.

                                                                                      [3] Lots of details omitted. It doesn’t really matter what any of this means anyway.

                                                                                      1. 1

                                                                                        Your distinction between “discovered” and “created” seems to presuppose Platonism, which is a rather contentious issue in the philosophy of mathematics. A Formalist would say that math is indeed created, and that while the implications of a mathematical system may not be known for a long time, math is still a product of a human mind.

                                                                                        1. 1

                                                                                          I’m by no means a Platonist. I’m just saying monads weren’t invented for this specific purpose. Noticing connections between seemingly unrelated mathematical theories happens all the time.

                                                                                  2. 6

                                                                                    Explaining monads to programmers is like explaining commutativity to accountants.

                                                                                    1. 4

                                                                                      Yep. This is why I shifted to trying to teach people to understand the concept of data that obeys laws. That’s the real issue: they see “monad laws” and they freeze.

                                                                                      1. 7

                                                                                        Probably easier for statically typed OOP people to just hear interface. A monad is a kind of interface for some generic type with a constructor and an aggregate/flatmap where the returned generic is the same type as the input.

                                                                                        I think most of the struggle in learning that its just a type with a bind and return is people worry about teaching the math behind it. This is a bad idea. If you’re going to teach math, teach math, and if you’re going to teach programming teach programming. You don’t need to understand the abstract backbone to understand that you can use this thing to manage side effects.

                                                                                        1. 1

                                                                                          What exactly is a nontrivial data structure, if not “data that obeys laws”?

                                                                                        2. 3

                                                                                          This, a million times over. When I learned about monads in university, the concept was simple and intuitive and I recall just “getting it.” A couple years ago I decided to learn Scala (after a decade of using imperative languages), and a lot of the tutorials made a big deal about monads and tried to explain them in the most obtuse manner, using all kinds of computer science terms and references. For a while I questioned whether I had actually ever understood monads.

                                                                                          1. 1

                                                                                            I’m in the process of learning Haskell myself right now and I feel myself slowly coming to this same conclusion. I think part of the reason they seemed complicated on the surface, for me at least, is due to how heavily they are used in so much Haskell code out there.

                                                                                            Also because of the abstraction-driven nature of Haskell, I’m always aware that there’s (potentially) a lot happening behind a small operator or function so as a beginner I assume there’s a lot of magic happening that I just don’t understand yet. Couple that with terms for these concepts that are rooted in mathematics (and thus unfamiliar with your average dev, like myself) and you get a recipe for assuming there’s always more to understand.

                                                                                            1. 1

                                                                                              I think it really took this video for that to get across to me. This whole time I thought I was still missing something. It turns out I use Monads all the time!

                                                                                            1. -2

                                                                                              There is nothing immoral about this.

                                                                                              Nobody forces you to play stupid anti-fun games on your smartphone. I don’t. Many people I know don’t.

                                                                                              If ‘manipulating people’ i.e. doing things that convince them to do the things you want them to do is immoral, then advertising and dialogue are immoral. Putting sugar or salt in your food is immoral. Smiling at people is immoral.

                                                                                              We are all adults that can make our own choices.

                                                                                              1. 14

                                                                                                There is a spectrum of manipulation. As much as people want to believe it to be so, almost nothing is black and white. Take a movie or a novel. These are expected to be manipulative: they are conveying a story which should make us feel, make us think, and present the philosophies of the author(s) while doing so. Even here there is “good manipulative” and “bad manipulative,” though. A well-done story is called “evocative,” “atmospheric,” “moving,” or “deep.” A poorly-done one might be called a “tear-jerker,” meaning that the author just crudely yanks the strings that make us sad without conveying any genuine emotion; or a horror movie might be dismissed as cliched because it relies on jump scares (which make us jump, but have no “substance”).

                                                                                                Similarly, person-to-person dialogue might be “persuasive” or “well-argued,” or it might simply be “manipulative.” There is a distinct continuum of quality there; most of the study of rhetoric is aimed at improving your performance in the delivery of the first two types of argument.

                                                                                                Now, thinking about these subjects in the context of modern advertising, compare the arguments delivered by these vehicles. As crude as They Live! was, it was prescient in this: the messages boil down to “CONSUME!” “BUY!” “PLAY LONGER!”—things that have no possibility of edifying the viewer or improving their life. The UX “dark patterns” that have now become common, as well as addictive game loops, are all aimed simply at delivering more advertising messages of this form.

                                                                                                1. 22

                                                                                                  If ‘manipulating people’ i.e. doing things that convince them to do the things you want them to do is immoral, then advertising [is] immoral.

                                                                                                  You’re so close to getting it. Just keep thinking!

                                                                                                1. 5

                                                                                                  The post in question Big-O: how code slows as data grows

                                                                                                  The comment by ‘pyon’:

                                                                                                  You should be ashamed of this post. How dare you mislead your readers? In amortized analysis, earlier cheap operations pay the cost of later expensive ones. By the time you need to perform an expensive operation, you will have performed enough cheap ones, so that the cost of the entire sequence of operations is bounded above by the sum of their amortized costs. To fix your list example: a sequence of cheap list inserts pays the cost of the expensive one that comes next.

                                                                                                  If you discard the emotion, he gives out a fairly interesting additional note about what amortized analysis means. Instead of giving the information value, Ned reacts on the part that questions his authority. Such a brittle ego that puts you to writing a small novel worth’s of rhetoric instead of shrugging it off. Childish.

                                                                                                  1. 52

                                                                                                    If @pyon had just phrased the first part of the comment like “You’re making a number of simpliications regarding “amortization” here that I believe are important…” this would probably not have escalated. This is what Ned means with being toxic - being correct, and being a douche about it.

                                                                                                    1. 10

                                                                                                      Indeed; the original article appeared on Lobsters and featured a thoughtful discussion on amortization.

                                                                                                      1. 2

                                                                                                        I wonder whether better word choice without changing the meaning would help one step earlier: the original post did include «you may see the word “amortized” thrown around. That’s a fancy word for “average”», which sounds a bit dismissive towards the actual theory. Something like «Notions of ‘‘amortized’’ and ‘‘average’’ complexity are close enough for most applications» would sound much more friendly.

                                                                                                        (And then the follow-up paints the previous post as if it was a decision to omit a detail, instead of a minor incorrectness in the text as written, which can be (maybe unconsciously) used to paint the situation as «correctness versus politeness», and then options get represented as if they were mutually exclusive)

                                                                                                        1. 4

                                                                                                          I feel like that would have put the author in a more defensible position on this specific point, yes. Being clear about where additional nuance exists and where it doesn’t is something that anyone writing about technical subjects should strive for, simply because it’s useful to the reader.

                                                                                                          I don’t think it’s likely that that clarification would have much of an effect on most readers, since the hypothetical reader who’s mislead would have to study complexity theory for some years to get to the point where it’s relevant, and by that time they’ll probably have figured it out some other way. We should all be so lucky as to write things that need several years of study before their imperfections become clear. :)

                                                                                                          But more to the point, while I can’t know anything about this specific commenter’s intent, somebody who’s determined to find fault can always do so. Nobody is perfect, and any piece of writing can be nit-picked.

                                                                                                          1. 1

                                                                                                            Several years sounds like an upper bound for an eventually succesful attempt. A couple months can be enough to reach the point in a good algorithms textbook where this difference becomes relevant and clear (and I do not mean that someone would do nothing but read the textbook).

                                                                                                            I would hope that the best-case effect on the readers could be a strong hint that there is something to go find in a textbook. If someone has just found out that big-O notation exists and liked how it allows to explain the practical difference between some algorithms, it is exactly the time to tell them «there is much more of this topic to learn».

                                                                                                            These two posts together theoretically could — as a background to the things actually discussed in them — create an opposite impression, but hopefully it is just my view as a person who already knows the actual details and no newbie will actually get the feeling that the details of the theory are useless and not interesting.

                                                                                                            As for finding something to nitpick — my question was whether the tone of the original paragraph could have made it not «finding» but «noticing the obvious». And whether the tone may have changed — but probably nobody will ever know, even the participants of the exchange — the desire to put a «well, actually…» comment into the desire to complain.

                                                                                                            1. 3

                                                                                                              Not having previous familiarity with this subject matter, I was guessing at how advanced the material was. :)

                                                                                                              I agree about your best case, and that it’s worth trying for whenever we write.

                                                                                                              I’ve never found anything that avoids the occasional “well, actually”, and not for want of trying. This is not an invitation to tell me how to; I think it’s best for everyone if we leave the topic there. :)

                                                                                                              1. 1

                                                                                                                I consider a polite «well, actually» a positive outcome… (Anything starting with a personal attack is not that, of course)

                                                                                                      2. 25

                                                                                                        It’s possible to share a fairly interesting additional note without also yelling at people. Regardless of what Pyon had to say, he was saying it in a very toxic manner. That’s also childish.

                                                                                                        1. 5

                                                                                                          Correct. But I don’t just care about the emotion. I care about the message.

                                                                                                          Instead of trying to change web into a safe haven of some kind, why not admire it in its colors? Colors of mud and excrete among the colors of flowers and warmth, madness and clarity. You have very little power over having people get angry or aggressive about petty things. Though you can change a lot yourself and not take up about everything that’s said. Teaching your community this skill is also a pretty valuable in life overall.

                                                                                                          1. 32

                                                                                                            I don’t want my community to be defined by anger and aggression. I want beginners to feel like they can openly ask questions without being raged or laughed at. I want people to be able to share their knowledge without being told they don’t deserve to program. I want things to be better than they currently are.

                                                                                                            Maintaining a welcoming, respectful community is hard work and depends on every member being committed to it. Part of that hard work is calling out toxic behavior.

                                                                                                            1. 5

                                                                                                              I want beginners to feel like they can openly ask questions without being raged or laughed at.

                                                                                                              While I agree this is critically important, it’s not entirely fair to conflate “beginners asking questions” and “people writing authoritative blog posts”.

                                                                                                            2. 10

                                                                                                              Yeah. That kind of self-regulation and dedication to finding signal in noise are endlessly rewarding traits worth practicing. And to extend your metaphor, we weed the garden because otherwise they’ll choke out some of the flowers.

                                                                                                              1. 5

                                                                                                                But I don’t just care about the emotion. I care about the message.

                                                                                                                I’m with you unless the message includes clear harm. I’ll try to resist its affect on me but advocate such messages are gone. That commenter was being an asshole on top of delivering some useful information. Discouraging the personal attacks increases number of people who will want to participate and share information. As Ned notes, such comment sections or forums also get more beginner friendly. I’m always fine with a general rule for civility in comments for such proven benefits.

                                                                                                                Edit: While this is about a toxic @pyon comment, I think I should also illustrate one like I’m advocating for that delivers great information without any attacks. pyon has delivered quite a lot of them in discussions on programming language theory. Here’s one on hypergraphs:

                                                                                                                https://lobste.rs/s/cfugqa/modelling_data_with_hypergraphs#c_bovmhr

                                                                                                                1. 5

                                                                                                                  I personally always care about the emotion (as an individual, not as a site moderator), it’s an important component of any communication between humans. But I understand your perspective as well.

                                                                                                                  1. 3

                                                                                                                    I may have been unclear. I do too. I was just looking at it from other commenters’ perspective of how Id think if I didnt care about it but wanted good info and opportunities in programming sphere. Id still have to reduce harm/toxicity to other people by ground rules to foster good discussion and bring more people in.

                                                                                                                    So, whether emotional or not, still cant discount the emotional effect of comments on others. Still should put some thought into that with reducing personal attacks being among easiest compromise as they add nothing to discussions.

                                                                                                                    1. 2

                                                                                                                      Ah! Okay. I misunderstood then, and it sounds like we’re in agreement.

                                                                                                                2. 4

                                                                                                                  It’s ridiculous to say that if someone cannot ignore personal attacks, they have a brittle ego and are childish. While also defending personal attacks and vitriol as being the thing that we should celebrate about the internet. Rather, we should critique people for being assholes. The comment was critiquing the manner and tone in which he explained amortized analysis, but he’s not allowed to say that the comment’s manner and tone was bad? It’s ridiculous. The comment was bad, not because of the point it made, but because it made the point badly.

                                                                                                              2. 22

                                                                                                                Compare this approach:

                                                                                                                I believe this post simplifies the idea incorrectly. In amortized analysis, earlier (cheap) operations pay the cost of later (expensive) ones. When you need to perform an expensive operation, you will have performed enough cheap ones that the cost of the entire sequence of operations is bounded by the sum of their amortized costs. In the context of your list example, a sequence of cheap list inserts would pay the cost of the expensive one that comes next.

                                                                                                                This is the same content, free of “shame” and accusations of “misleading.” The original comment is a perfect example of the terrible tone that people take, as discussed in this post and in my previous post of Simon Peyton-Jones’ email.

                                                                                                                1. 4

                                                                                                                  Instead of giving the information value, Ned reacts on the part that questions his authority.

                                                                                                                  The author does give it value. You’ve missed the point. The author isn’t saying it’s incorrect or not valuable; he’s saying that this attitude from experts (who use their expertise as a tool to put others down) is highly toxic.

                                                                                                                  1. 4

                                                                                                                    If you discard the emotion, he gives out a fairly interesting additional note about what amortized analysis means. Instead of giving the information value, Ned reacts on the part that questions his authority.

                                                                                                                    It’s not clear that Ned interprets pyon as questioning his authority. His criticism is of pyon‘s tone, which is histrionic. The cutting intro isn’t bad if we discard it; but what is the effect if we include it? It would be more balanced for Ned to discuss the details and value of pyon’s post, but that does not invalidate Ned’s point.

                                                                                                                  1. 17

                                                                                                                    I agree with a lot of the author’s points, but I object to

                                                                                                                    Besides, there is plenty of space left on earth to spread out horizontally; the only reasons to spread vertically are phallic and Freudian.

                                                                                                                    Tall, narrow urban centers are vastly preferable to low, slow urban sprawls.

                                                                                                                    The author is right; humans need water and plants and other signs of nature to stay sane. The ideal solution, then, is not to blot out as much of nature as possible by forcing people to build more buildings instead of taller buildings. The ideal solution is to construct hyper-dense cities that are thin enough that people can easily leave the city and find themselves in nature.

                                                                                                                    Hong Kong executes this extremely well. Look at satellite photos of the island. Skyscrapers hug the coast and the interior is mostly untouched forest. (For now; the Chinese government may change that now that they are taking control of HK.) The only thing that would make this better is if there were also human-friendly beaches available, i.e. if there was less water pollution and everything was situated a kilometer farther back from the coast.

                                                                                                                    I often imagine what my ideal planned city would look like. Approximately, it’s a city built on a precise NxN grid (N <= 16) with increasing building height towards the center. There are no motorized vehicles inside the city (wide pedestrian walkways only) but ample vehicle storage along its edges. No construction is allowed for radius R outside the city. You’re essentially taking a medium-sized urban sprawl and compressing it into a few square blocks, reserving the rest of that area for parkland, easily accessible by anyone in the city with a few minutes’ walking. And since you don’t have cars inside the city, you can make very comfortable human-friendly spaces between the blocks.

                                                                                                                    1. 7

                                                                                                                      Agreed. The idea that low-density sprawl is a solution to anything grates on me. You can go to Singapore or Hong Kong and compare the average person’s access to green space, plants and trees with the average suburbanite’s in America; yeah, you might own a tree or two of your own, and see other peoples’ on your way to work, but in those cities you can take a train to a park from anywhere in the city and walk through the landscape—without a car, without worrying about parking or traffic. This is the kind of green space that matters.

                                                                                                                      Note that Hong Kong and its “squalid density” has the longest life expectancy in the world, at 81 years for men and 87 years for women. Singapore is at 80 and 86.

                                                                                                                      1. 2

                                                                                                                        Stockholm has an ambition to keep “gröna kilar” (green wedges) between housing developments.

                                                                                                                        1. 1

                                                                                                                          I often imagine what my ideal planned city would look like…

                                                                                                                          This sounds delightful.

                                                                                                                          If you move some of the parkland inside of the city, in between individual blocks, you’d also have a good excuse to add waterslides, rope bridges and zip wires in between the middle floors of adjacent skyscrapers / top floors of adjacent blocks. Just for fun.

                                                                                                                          1. 2

                                                                                                                            Zip wires would be some Dwarf Fortress level of FUN. I can imagine a few situations: large height differential (remind me how to brake on these things), getting stuck in the middle are the simpler cases. A success story is maybe even more horrifying: high-tension zip wire that has slack of less than a meter over its one-kilometer length, so the endpoints have to handle a hundred tons of force. Applied above the center of mass of the corresponding buildings, of course!

                                                                                                                        1. 6

                                                                                                                          I mean, as far as I can tell Docker only exists because it’s impossible to link to glibc statically, so it’s virtually impossible to make Linux binaries that are even vaguely portable. Except now Go and Rust make it very easy to compile static Linux binaries that don’t depend on glibc, and even cross-compile them easily.

                                                                                                                          This is a quote within the article, so I’m not sure if the author is explicitly endorsing it, but isn’t this wrong? Static linking has always been possible, but the LGPL makes static linking potentially legally problematic, as I understood it. You could always link statically using an alternative libc.

                                                                                                                          1. 7

                                                                                                                            If you’re using it entirely within an organization, which is the usual case for Docker-style deployment, neither the GPL nor LGPL impose any particular requirements.

                                                                                                                            1. 4

                                                                                                                              LGPL is I think more important reason, but technical one is still there. Parts of glibc must be linked dynamically like DNS resolver.

                                                                                                                            1. 1

                                                                                                                              I generally agree with the observations except this one:

                                                                                                                              Second, IT engineers by nature tend to be optimists, as reflected in the common acronym SMOP: “simple matter of programming.”

                                                                                                                              Maybe I just hang out with the cynical crowd, but I’ve never heard a professional programmer use that phrase in a non-snarky way. How could we get such a genius character like Gilfoyle if IT people are generally optimists?

                                                                                                                              1. 2

                                                                                                                                I agree, I’ve only seen SMOP used sarcastically—but there’s still an optimism under it. It might be “we can do that in six months, not two weeks,” but there is always the concept of of course we can do it… underlying it.