1. 2

    Truth is, being outraged all the time doesn’t make you special or interesting. It just makes you upset all the time.

    No, it makes you feel good: it makes you feel superior because you are pointing out flaws in others that you don’t have, while blissfully distracted from your own failings. While simultaneously feeling a social connection with all those that are piling on and implicitly confirming your awesomeness for not having this failing.

    If it would feel bad, people wouldn’t be doing it. This is also why saying “it’s for your own good not to do this: you’ll feel better” doesn’t work: it’s simply false. They need to be called out for being myopic and egocentric.

    1. 2

      Yeah, but only in the sense that doing drugs might also make you feel good.

    1. 9

      Worth noting that the platform itself — Twitter — seems to lend itself rather well to perpetual outrage culture. The world is a less miserable place once you remove yourself from it.

      1. 2

        It reminds me of this section of 1984 by George Orwell:

        Earlier that morning, a terrible noise from the big telescreen at the Ministry of Truth had called all the workers to the centre of the hall for the Two Minutes Hate. The face of Emmanuel Goldstein, Enemy of the People, filled the telescreen. It was a thin, clever face, with its white hair and small beard, but there was something unpleasant about it. Goldstein began to speak in his sheep-like voice: criticising the Party, making nasty attacks on Big Brother, demanding peace with Eurasia.

        In the past (nobody knew exactly when) Goldstein had been almost as important in the Party as Big Brother himself, but then he had worked against the Party. Before he could be punished with death, he had escaped - nobody knew how, exactly. Somewhere he was still alive, and all crimes against the Party came from his teaching.

        Behind Goldstein’s face on the telescreen were thousands of Eurasian soldiers. Oceania was always at war with either Eurasia or Eastasia. That changed, but the hate for Goldstein never did. The Thought Police found his spies every day. They were called ‘the Brotherhood’, people said, although Winston sometimes asked himself if the Brotherhood really existed. Goldstein had also written a book, a terrible book, a book against the Party. It had no title; it was just known as the book.

        As Goldstein’s face filled the telescreen and Eurasian soldiers marched behind him, the Hate grew. People jumped up and down, shouting and screaming so they could not hear Goldstein’s voice. Winston was shouting too; it was impossible not to. A girl behind him, with thick, dark hair was screaming ‘Pig! Pig!’ at Goldstein, and suddenly she picked up a heavy Newspeak dictionary and threw it at the telescreen. It hit Goldstein on the nose and fell to the floor.

        (pages 4-5 of my eBook)

        1. 3

          Comparisons to 1984 are so commonplace it’s become a cliché. Could you please be a little more specific about how Twitter outrage brush fires are similar to the centrally-orchestrated single-target anti-Goldstein propaganda? Other than the fact that they both involve self-righteous anger on a mass scale?

          1. 5

            People are conditioned to expect, even want, an outrage target. Wake up in the morning. What’s the first thing you do? Check twitter to see who we hate today. Hating the same target gets boring. Having a new target delivered daily keeps us engaged.

            The form of the outrage encitement is about the same, though. Look at Goldstein. Look at what he’s saying! Isn’t it just so wrong? Why isn’t he using https?

            1. 4

              The form of the outrage encitement is about the same, though.

              Of course it is; self-righteous outrage has always existed, and it was already being stoked by newspapers and television back in the 40’s. George Orwell didn’t get the idea for The Two Minute Hate in a vision from God. The Two Minute Hate takes a dirty tactic that the media imperfectly uses to turn a short-term profit, and that wartime propaganda used to justify war, and had the state use it as a perfect, long-term way to control the populace. They gave them someone to hate other than themselves (fighting among each other would destablize the state) and their leaders (which also would have destablized the state).

              Twitter is doing the exact opposite: they’re even more short-term than the press, and rather than unifying the population with one target to hate, Twitter largely turns its users against each other. The Two Minute Hate makes the people subservient to the state. A Twitter firestorm is more likely to cause a revolt than to avert one. While I wouldn’t necessarily describe these things as “out of control” (the goal is engagement, and that goal is being achieved), Twitter isn’t really “in control” the same way a guy reading a script on a TV is “in control”.

              I realize I’m going off on a tangential pet peeve. Obviously, while making everyone hate each other is somewhat different from making everyone hate Goldstein, it isn’t better. For one thing, while attacking a man who probably doesn’t even exist is relatively safe, people can actually find and shoot at their “Twitter Goldsteins.”

              1. 2

                5 minutes hate on tabs versus spaces?

                1. 4

                  We have always been at war with Clojurians.

                  1. 1

                    “Goldstein refuses to implement it in Rust”

              2. 4

                The oddest thing about 1984 is that Orwell never imagined people would pay to be spied on. Did he, Alexa?

                1. 1

                  Following previous discussions, social media websites often optimize for “engagement” (which brings in ad views), rather than show you exactly what all your friends say. I don’t know what the exact logic it uses is, but I’d hypothesize it’s something like:

                  Boring tweet: show it to 20% of followers. Nobody reacts, so don’t show to the rest.

                  Drama tweet: show it to 20% of followers. They all reply/like/retweet, so it’s a good tweet. Show it to the rest. More engagement! boost this really far: to the followers of followers.

                  You can get a much wider audience by pouring gasoline over a fire.

                  1. 1

                    It’s not really single target, but for those two minutes you hate the heck out of the target. Then you move on and nobody cares. It’s a more crowdsourced version of it, but the thing people hate is “insecure” things, where “insecure” is an exercise for the reader; but nobody really does research into what they are doing and why. It’s easier to like and retweet.

                2. 2

                  I try. Problem is, I have nowhere else that fills the positive aspects of Twitter.

                  1. 2

                    I told myself the same for a long time before I went cold turkey.

                    After having an account for a decade, I had a decent following of about 6k, and many well-received tweets. I had some of the biggest names in the business (language inventors, notable business people) following me. It brought press, writing, and interview opportunities. Some of my jokes were even plagiarised (and the plagiarism subsequently denied!) by the iamdevloper account, which is when you know you’ve “made it” on Twitter.

                    It was still a net-negative for me. I’m not interested in the culture wars. I’m not interested in the emoji-fuelled circle-jerk. I’m not interested in the people endlessly debating what “Agile” is or isn’t. I’m not interested in the rage-du-jour. I’m not interested in identity politics or Marxism. I’m not interested in industry gossip.

                    What I was most afraid of losing out on was a connection with the more vocal/active Haskellers. These are people I learn a lot from, and that knowledge is invaluable to me intellectually and financially. And you know what? These people are in other places too.

                    1. 2

                      I’m not interested in the emoji-fuelled circle-jerk…I’m not interested in industry gossip.

                      This was the absolute worst thing for me about tech Twitter: it was less about insights, and more about saying the right thing so people give you likes and retweets. This biases the discussions to be about banal, surface level things (because they get higher engagement). The character limit also does serious damage to the ability to discuss with any sort of nuance. If you’re on the fence about Twitter, just leave, and start repairing your attention span.

                      I think Twitter can be used effectively, but mainly as a broadcast medium, where you use it to notify people that you’ve done something, such as written a blog post.

                  2. 2

                    Quitting Twitter was one of the best single changes I’ve made in terms of mental health and usefulness as a person. For me it amplified the aspects of my personality that I least like, and diminished the aspects I’d prefer to amplify.

                    1. 2

                      Twitter is a video game.

                      There’s nothing wrong with video games, but if you’re playing video games 8 hours a day day in/day out then you’re probably addicted. And that addiction might be to escape something else, which is the real problem.

                      1. 1

                        I think you’re partially right, but Twitter is more insidious than that. I’ve played video games at lot at certain times in my life, but they didn’t particularly change how I viewed the world or interacted with people IRL. Twitter certainly did, and not for the better.

                  1. 3

                    It pleases me that by omission, Haskell is mainstream and uninteresting.

                    1. 2

                      It’s deferred, too, and listed in “related reading”.

                    1. 2

                      I’m sending a PR to wai-extra which will allow me to include response headers in my production Yesod web-app logs. I’ll stuff arbitrary data in those headers like user IDs so I can have real tracing, and see exactly what every user is doing.

                      1. 1

                        Hooray! It was merged!

                      1. 5

                        I still don’t get why I should care about Web Components. What problem do they actually solve?

                        If I’m going to depend on JavaScript anyway, then why wouldn’t I just use any of the decent libraries/frameworks/languages available? Reusable widgets? Yeah we can do that in every other available alternative.

                        In fact, if I don’t want to rely on JavaScript, then I can create reusable and extensible HTML components in any static site generator or web framework. It’ll have better browser support than Web Components too.

                        IIRC, the spec for WC was proposed in 2012 or so, and it still doesn’t seem to have a purpose or solve any real problems. This tech is dead in the water.

                        1. 4

                          Each JS framework has its own API for reusable components. A react-video-player won’t work in Ember, and a ember-preload won’t work in Vue. For example, Matrix.org’s JavaScript SDK is tied to React. Other JS SDK’s use an iframe (Facebook Like Button and other ad-tech SDK’s usually go this route) or abstain from providing any UI functionality at all (like WebTorrent).

                          Web Components, since they act exactly like built-in HTML elements, should work within any framework. If your framework can render arbitrary HTML elements, then it can render a custom HTML element. If you’re just building an app, it doesn’t matter; just render the HTML that you want in your template language. As a library author, the ability to provide a JavaScript widget with some level of encapsulation using only browser built-in APIs seems really nice.

                          1. 0

                            Ok, so WC allows you to build widgets that aren’t specific to React, but are instead specific to the JavaScript you need to include to make WC work. What is the practical difference between that and jQuery widgets?

                            Don’t take me for a jQuery fanboy now, but typical jQuery widgets (or even just plain JavaScript libraries) neither depend on React, nor require an iframe.

                            Plug-n-Play JavaScript widgets which aren’t tied to a particular framework have been available since forever, and there is exactly zero practical difference in being able to use a custom tag name for it. Exactly zero users care if under the hood an element is constructed with

                            <foo></foo>

                            instead of

                            <div class="foo"></div>

                            1. 4

                              They’re composable: you can do <foo><bar></bar></foo> without either widget needing to know how the other works. Otherwise there’s not that much difference with regular ol’ hacked-together widgets, apart from (IMHO) they’re cleaner to install and easier to write.

                          2. 1

                            WebComponents give you custom tags that can do custom things. Custom tags are a good thing because they allow you to do your custom things in a composable and contained way that can be reused (hence the “Components” in “WebComponents).

                            All of this without having to worrry about a web packer, a transpiler and at least a fuckton of JS code (fuckton is the SI-unit for external JS). It all comes built-in in the major browsers for your pleasure and it is far easier to use than any existing framework:

                            class MyComponent extends HTMLCanvasElement {
                            // Your custom made `<canvas>` element logic goes here
                            }
                            

                            Just extend the elements you want with your custom logic or build a brand new element from scratch yourself (like the author did in the article).

                            Now open your browser console and start coding away! Its free :)

                            1. 3

                              Custom tags are a good thing

                              This is literally the opposite of what everyone in the web standards world said for years. Not the only whiplash this space has given me recently.

                              1. 1

                                Can you give an example ? XML had support for namespaces since version 1.0. Custom elements/tags were somewhat of a target even before web components came along. If you take a look at any react codebase you will also find lots of custom elements as JSX works with those at the base.

                                1. 1

                                  Support for namespaces would be super cool, but we’ve never really gotten close enough to that being a reality in the web-browser-HTML world.

                                  I know custom elements have been around for a long time. Wouldn’t have had to crusade against them if no one were trying to constantly add nonstandard crap to their pages.

                                  JSX is… less bad? Because it’s not actually in the markup. Though it’s still very odd and of course the whole rendering webpages from JavaScript thing is bad but that’s a different discussion.

                                  1. 1

                                    It’s a pity that server rendering of react apps is so CPU intensive; I’ve been on several projects which implemented it and then switched it off again.

                              2. 1

                                without having to worrry about a web packer, a transpiler

                                Oh yeah. Once import maps become a thing, it will be possible to use libraries like LitElement from npm packages in a completely toolless way :)

                                1. 1

                                  Didn’t knew about those. Cool stuff :D

                                2. 0

                                  Custom tags are a good thing because they allow you to do your custom things in a composable and contained way that can be reused (hence the “Components” in “WebComponents).

                                  The ability to create custom tags is completely orthogonal to the goal of self-contained components. A custom tag just moves an identifier that some styles/scripts need from an attribute to the tag name itself.

                                  All of this without having to worrry about a web packer, a transpiler

                                  You don’t need these things to use JavaScript libraries.

                                  and at least a fuckton of JS code (fuckton is the SI-unit for external JS)

                                  That code has to exist somewhere. Does Web Components somehow magically make all that code disappear? I think your argument here is a bit silly and totally incorrect.

                                  It all comes built-in in the major browsers

                                  No it doesn’t. I’m not sure if you’ve ever tried to run an online business, but a significant proportion of business web-app users still run IE11, which doesn’t run Web Components. Looks like you can get it working with some polyfill.

                                  it is far easier to use than any existing framework

                                  That’s pretty subjective. I don’t find your hello-world-esque snippet compelling. If I want to create a custom canvas, I can do that just as easily without Web Components.

                                  1. 1

                                    The ability to create custom tags is completely orthogonal to the goal of self-contained components. A custom tag just moves an identifier that some styles/scripts need from an attribute to the tag name itself.

                                    It gives you the ability to describe your component name an arguments in a declarative way and use it in a ideomatic style long-side other elements of your web app. I find your absolutist approach disturbing, almost troll-like. They are certainly not “completely” orthogonal and the design decision of using a custom tag as since been replicated in many other places (such as JSX components).

                                    You don’t need these things to use JavaScript libraries.

                                    You certainly don’t need. But when the average pkg dependency has several levels of nested multi-dependencies that may be reused in other packages you will be glad that you are using tools to help you minimize your build and keep those dependencies in place. Sure you can simply use <script src="components-pkg.js"> and write it all in that single file without the use of any tool. Claiming that “You don’t need these things to use X” without providing any other kind of counter-example seems like claiming that you don’t need a file editor to write code and point to some random xkcd comic in a serious way. Again, this certainly feels troll-like from your part.

                                    That code has to exist somewhere. Does Web Components somehow magically make all that code disappear? I think your argument here is a bit silly and totally incorrect.

                                    Sorry I was trying to make it lighter. That code does have to exist somewhere, it comes bundled in your browser (if it supports) and most likely not implemented entirely in JS.

                                    No it doesn’t. I’m not sure if you’ve ever tried to run an online business, but a significant proportion of business web-app users still run IE11, which doesn’t run Web Components. Looks like you can get it working with some polyfill.

                                    Sorry for not including IE11 as a major browser. Most web devs typically don’t. In which case I’ll rephrase: WebComponents are supported by all major browsers except IE11 where you can use a polyfill to make them work.

                                    That’s pretty subjective. I don’t find your hello-world-esque snippet compelling. If I want to create a custom canvas, I can do that just as easily without Web Components.

                                    Can you show an example ? Why don’t you find extending a class compelling ? Would you prefer a prototype approach or a more functional approach ?

                                    1. 0

                                      It gives you the ability to describe your component name an arguments in a declarative way and use it in a ideomatic style long-side other elements of your web app.

                                      There is nothing more “declarative” about moving an identifier into a tag name vs using that same identifier in an element attribute. Whether or not custom tag names is ideomatic [sic] is also 1) not true, since by far most of the Internet does not use custom tag names, and 2) in my opinion not a tradeoff I see as a good deal. A cursory cost/benefit analysis to me says that adding extra machinery just so you can write <foo> instead of <div id="foo"> is not worth it.

                                      They are certainly not “completely” orthogonal

                                      Yes they are. I understand English is not your first language and perhaps you are misunderstanding that word, but the fact is you do not need custom tag names to create self-contained components.

                                      and the design decision of using a custom tag as since been replicated in many other places (such as JSX components).

                                      This is an appeal to authority kind of reasoning. The fact that JSX exists and they adopted the same idea doesn’t mean much of anything. You do realise in React’s case, it’s just syntax sugar around a bunch of function calls, right?

                                      You certainly don’t need. But when the average pkg dependency has several levels of nested multi-dependencies that may be reused in other packages you will be glad that you are using tools to help you minimize your build and keep those dependencies in place. Sure you can simply use and write it all in that single file without the use of any tool. Claiming that “You don’t need these things to use X” without providing any other kind of counter-example seems like claiming that you don’t need a file editor to write code and point to some random xkcd comic in a serious way. Again, this certainly feels troll-like from your part.

                                      I’m sorry, how is this relevant? Are you telling me that Web Components also handles package management and dependency resolution? Because I don’t think it does.

                                      That code does have to exist somewhere, it comes bundled in your browser

                                      I don’t believe the promise of web components is that they will bundle all of the JavaScript libraries you would ever want to use in your browser. Your argument was that Web Components somehow obviates the need for external JS, since you said “a fuckton of JS code (fuckton is the SI-unit for external JS)”. This is obviously completely false.

                                      Sorry for not including IE11 as a major browser. Most web devs typically don’t.

                                      Yeah, it’s a shame most web developers apparently have little regard for anything other than the happy path when it comes to building software products for businesses. Windows 10 (and by extension IE11) still isn’t EOL, and it still has a not insignificant market share. I’m a “web dev” myself, and I can’t afford to present paying customers of my business with a broken experience, hence my relatively conservative approach.

                                      Why don’t you find extending a class compelling ? Would you prefer a prototype approach or a more functional approach ?

                                      The syntax is completely irrelevant here. This may be the point we’re talking past each other the most on. Syntax just isn’t that important.

                                      You’ve suggested a couple of times that I’m a troll since I haven’t provided counter-examples. This really is not the case. I don’t feel I need to provide counter-examples, because they are already in such great abundance and have been for a very long time. Here’s one self-contained component though, since you insist.

                                      1. 1

                                        Windows 10 (and by extension IE11)

                                        The default browser on Windows 10 is Edge, not IE11.

                                        just so you can write <foo> instead of <div id="foo">

                                        It’s not just about that! It’s about the lifecycle!

                                        With Custom Elements, your code is called when the element is created, removed, attributes are set, and so on. You are literally subclassing DOM elements and adding your behavior. The result is, your elements can act like native ones. The consumer of your element doesn’t have to call new SomeThing(someDomNode) or anything like that, they just drop <some-thing> into anywhere — a static file without a line of JS, a framework template, anything.

                                        The DOM is a component model. The browser’s native component model. Custom Elements makes it extensible.

                                        If you really think ad-hoc “components” where you just start a component’s behavior with a call like new SomeThing(someDomNode) are acceptable.. I don’t know how to convince you.

                                        1. 1

                                          The default browser on Windows 10 is Edge, not IE11.

                                          I see. In that case, I don’t know who these people are who insist on continuing to use IE11 (probably not their choice actually), but those people do exist.

                                          The consumer of your element doesn’t have to call new SomeThing(someDomNode) or anything like that, they just drop into anywhere — a static file without a line of JS, a framework template, anything.

                                          If I write a static HTML page now — in a browser where Web Components are supported — and I “just drop <some-thing> into anywhere” on the page, what will happen? Where are the scripts associated with this custom element? Does the browser download them? Are all custom elements in the universe bundled into every browser? Is there some global registry which contains all the unique names of possible custom elements?

                                          If you really think ad-hoc “components” where you just start a component’s behavior with a call like new SomeThing(someDomNode) are acceptable.. I don’t know how to convince you.

                                          This is how 99.99999% of the scripted Internet currently works. I’m quite happy with the Internet. Any criticisms I would level at Internet technology do not involve this aspect. I am sorry you find almost all of the Internet unacceptable.

                                        2. 0

                                          ok

                                1. 1

                                  I have been writing JS for a lonnnngg time now and I don’t ever feel the fatigue. I understand how you could. If you’re coming into it fresh, there are a staggering number of frameworks, libraries, and transpilers that people evangelize. Which one is “right?” How do I know which to use?

                                  The biggest thing when I hear those types of complaints is that people aren’t focusing on the language itself. Frameworks/libs/build tools/etc come and go, and there is no “right” thing. I try to avoid the latest and greatest. There’s a balance between understanding what’s current and following every single new thing. There’s nothing wrong with staying on something a bit more stable while things shake out.

                                  At its core, JavaScript is a pretty fun language. I think that’s why it’s still so popular. If it were truly an awful experience to work with, it would’ve been replaced by now.

                                  1. 3

                                    At its core, JavaScript is a pretty fun language. I think that’s why it’s still so popular. If it were truly an awful experience to work with, it would’ve been replaced by now.

                                    I don’t even think its creator could agree with you on that.

                                    It’s popular because of network effects, and because for most of Internet history it’s the only scripting language we’ve had available.

                                    Frameworks/libs/build tools/etc come and go, and there is no “right” thing.

                                    It’s not whether or not there’s a “right” thing. It’s JavaScript enthusiasts’ bone-headed refusal to learn anything else that results in companies adopting things like GruntJS, where intermediary state is persisted through reading from and writing to disk. How long did it take them to figure out that piping data between processes (like the way computers have worked for 40 years) is a better way to do this?

                                    Reinventing things poorly is what gives me that fatigue.

                                    1. 1

                                      People being ignorant of other things doesn’t mean they’re “bone-headed” and refusing to learn it. JS is my primary language, but I use Python, Java, and Ruby pretty frequently as well. I don’t really know any JS-only devs. I’m sure there are some out there.

                                      Regardless, you can’t expect everyone to know everything. There are an infinite number of things to learn. Grunt was ok for its time, although I’m not sure anyone really uses it much anymore.

                                      1. 1

                                        I completely agree on the importance of network effects, but would you call Scheme or Self not a fun language? Javascript has always been ugly and inconsistent on the surface (an influence from Perl maybe), but its core and primitives (taken from Self and Scheme) are powerful, extensible and flexible enough to power one of the most widely used computing platforms in the world.

                                        Languages can be fun/powerful and terrible at the same time.

                                        Sometimes I even think that a language must be somewhat idiosyncratic and kinky for people to have emotional attachment to it, a mild version of Stockholm syndrome (sunk cost of learning the idiosyncrasies of the language?): e.g. C is much less conceptually elegant compared to Ada/Pascal, and people are much more emotional about C than Ada/Pascal.

                                    1. 5

                                      I’m all for the idea of Google’s draconian policies forcing all the interesting content off the platform and to its competitors. A race to the bottom in terms of content quality seems to be a thing that happens to all the big platforms. It’s a little funny that if you try to turn machines into organic, thinking systems, they are then susceptible to a sort of digital natural selection.

                                      1. 2

                                        And a little ironic this natural selection selects for highly maladaptive traits, with such a stubbornness that it ignores the counsil of psychologists and ethically orientated cognitive scientists as luddite wichcraft and patronizing.

                                        It’s not the first time culture goes to hell, but this time it’s on an unprecedented scale as well as being one of the most harmful ones in history.

                                      1. 1

                                        The title of the article is a bit of a misnomer. I don’t see best practices, but rather some high-level guidelines. It does have a useful collection of references, though.

                                        If I can provide a counterpoint-in-part to the article, the citation of “Humanizing Code Reviews” is a red flag for me. I feel that code reviews and house style should be inflexible and impartial, and if they hurt the developer’s feelings, then the developer is too attached to the code and not thinking about its future. At my company, I use FindBugs and Checkstyle, which are rule-based static analysis systems, and are baked into the build and continuous integration process of all our projects. I’m all about de-humanizing code reviews.

                                        1. 1

                                          Personally, if I find people on my team bickering about indentation or newlines or a where vs let binding, I will resolve the dispute by posting a picture of bicycles in a shed.

                                          I strongly believe that not all code can be automatically formatted, and strictly enforcing “style” rules or the use of automatic formatting seems petty and bureaucratic.

                                          I prefer the late Pieter Hintjens’ approach of just merging everything.

                                        1. 1

                                          I’ve never heard of this client before, and now I’ll never use it.

                                          What kind of name is “Superhuman”, anyway?

                                          1. 5

                                            I happen to know they paid $300,000 for that domain. I know this because the guy interviewing me wouldn’t shut up about it.

                                          1. 12

                                            The lack of static types in dynamic languages allows you to prototype quicker and iterate faster. It also makes your code more readable.

                                            In my experience, this is completely false.

                                            Purely anecdotally, I have been able to bring businesses to market much more quickly in Haskell than I could ever manage in Ruby. That’s also why I choose the tools that I choose.

                                            I’m getting a real sense of Middle Ground logical fallacy from the outset.

                                            1. 4

                                              Also purely anecdotally, I’m (even after not really using it for 5 years) I’m still a lot faster prototyping stuff in PHP than I am in anything else - and I am amazed how much faster some people in Rails are. (I was especially slow in Go for web stuff, fwiw).

                                              So either you can now say I’ve never been so good with another language, but I doubt it. Not sure what you’re doing there in Haskell either, maybe it’s better for your use case than Ruby?

                                              1. 2

                                                I do fairly typical web SaaS stuff, which would otherwise have been done in Rails. It’s just cheaper for me (and my team) to do it in Haskell than it would have been in Ruby.

                                                1. 1

                                                  Yesod or anything else?

                                                  1. 1

                                                    Yeah it’s Yesod. I haven’t tried any of the other frameworks, but I’m pretty happy with what I have.

                                              2. 3

                                                I can’t help but wonder about role of the false cause fallacy in these debates on static vs dynamic languages. Without discounting your anecdotal experience (and acknowledging my own preference towards Haskell over Ruby), Ruby and Haskell are so different than one another that I think it becomes difficult to isolate the type system as the greatest factor in one’s speed of development.

                                                That said, I also disagree with the claim: I personally find dynamic languages less readable. As for prototyping, I do find dynamic languages a bit quicker, but only in the very short term. Once the program is greater than 100 lines or so, I find that static types actually help me build quicker.

                                                1. 2

                                                  However, purely empirically speaking your claims are completely unsubstantiated. The most recent research available is the replication of the large scale GitHub study. The relative effects of language choice on code quality is less than 1%. The main finding is that language choice hardly matters at all.

                                                  On the other hand, we can easily measure the effects of factors like sleep, overwork, and happiness on code quality. If static typing was an actual factor, we’d see exactly the same kinds of effects.

                                                  There’s nothing wrong with enjoying static typing, but there’s simply no evidence that it plays any role past personal preference. Stop treating type discipline like a religion.

                                                  1. 1

                                                    Hello old friend. Good to see you’re still eager to engage me in exactly the same debate you’ve been trolling me with for the past couple of years.

                                                    1. 1

                                                      You keep using that word. I do not think it means what you think it means.

                                                1. 9

                                                  Statically-typed functional languages are amazing. They have a property that exists almost nowhere else: if your program compiles, it works.

                                                  Ahem…

                                                  1. 4

                                                    It’s true if the author has very distorted notion of what “it works” means.

                                                    Lets say you wanted a program that sorts a list. What’s the type signature? It needs some sorting function, and list to sort as the input. The result would be a sorted list.

                                                    Now if we do Haskell we can’t represent sorted lists (probably some dude comes to say it’s got an extension for this), but hey it’s okay. We can accept that it works if it compiles.

                                                    sort :: (a -> a -> bool) -> [a] -> [a]
                                                    sort lt list = []
                                                    

                                                    Since it compiles, it works. But you didn’t get the list sorted? Well that’s because you were unable to tell the type system that the list must be sorted. But it works since it compiles. The program perfectly matches the definition in the type after all.

                                                    If the user complains too much, you can supply the second program:

                                                    sort lt list = sort lt list
                                                    

                                                    Since it compiles, it works. Perfectly. It’s perfectly correct program because we say so.

                                                    1. 0

                                                      Now if we do Haskell we can’t represent sorted lists

                                                      Are you sure?

                                                      1. 7

                                                        Yes. We’ll consider Haskell 2010. In this example, your referenced type is defined as:

                                                        newtype SortedList a = SortedList [a] deriving (Eq, Ord)
                                                        

                                                        This clearly does not encode any sorted requirement in the type. Only smart constructors and programmer discipline can keep that list sorted.

                                                        Here are some list functions. They all have the same signature, but different behaviors:

                                                        id :: [a] -> [a]
                                                        return . head :: [a] -> [a]
                                                        reverse :: [a] -> [a]
                                                        const [] :: [a] -> [a]
                                                        init :: [a] -> [a]
                                                        (++ []) :: [a] -> [a]
                                                        

                                                        Nothing in the type system can issue salvation here. Nothing surrounding the type system, either; the relevant theorem for free concerns map, which doesn’t appear here. Haskell’s type system doesn’t cover:

                                                        • Partial functions, like head
                                                        • Shape-preserving element-agnostic permutations, like reversing a list without looking inside it
                                                        • Linearity and naturality, ensuring that arguments are used
                                                        • Shape-preserving non-linear transformations, like init
                                                        • Operations which normalize to id but predictably and reliably incur runtime costs, like appending an empty list to the end of a singly-linked list
                                                        1. 0

                                                          Of course you are totally correct, but I’d like to make the argument in practical terms. If you want to encode a sorted list in the type signature, you can, at least in practice.

                                                          This is like the inverse of the argument that you can do FP in JavaScript. Theoretically you can, but in practical terms it just doesn’t work.

                                                    2. 2

                                                      This is effectively true for pure functional code if you unit-test it. Once you add side-effects, it’s harder to be sure.

                                                      1. 3

                                                        Unit testing helps, yes, but that’s not what the author is implying.

                                                        1. 2

                                                          This isn’t true either. Consider a complex simulation encoded as a pure function. A unit test just shows it gives the expected output for a given input, not that it correctly solves the problem for all inputs.

                                                          This is also true for PBT. Just pick more complex pure functions.

                                                          1. 3

                                                            Indeed. That’s why I said it “helps”: you are still up against test coverage.

                                                            You can unit test and statically analyse all day, but you can always insert bugs that won’t be caught.

                                                        2. 1

                                                          Author here. Good point. What I was referring to was the observation that many people make when using Haskell/OCaml/Elm, that once they’ve got it compiling it usually (or maybe just often?) works. I definitely overstated that.

                                                          1. 1

                                                            Well, you won’t get any type errors ;)

                                                          1. 3

                                                            After fighting some burnout I want to regroup and keep working on making a simple but functional SAAS business.

                                                            Would a blog about progress be something people are interested in? I was thinking about a weekly series “Let’s build a business” where I can do retrospectives and share progress and thoughts.

                                                            1. 2

                                                              I am interested! The projects on your site look really interesting BTW.

                                                              1. 1

                                                                Thank you :)

                                                              2. 1

                                                                This is something I am always interested in, and you would also find lots of interest here.

                                                                1. 1

                                                                  Thanks for the link, I will make an account over there.

                                                              1. 9

                                                                I adopted a cat on Friday, and I’m spending the week making her feel comfortable in her new home.

                                                                Also Haskell stuff.

                                                                1. 2

                                                                  Why does that monitor stand have eyes?

                                                                  … ohhhhhhhh!

                                                                1. 50

                                                                  Ouch. All I can do is reference this Gabe Newell quote.

                                                                  Don’t ever, ever try to lie to the Internet, because they will catch you. They will deconstruct your spin. They will remember everything you ever say for eternity.

                                                                  1. 26

                                                                    It’s my birthday tomorrow. I’ll be the ripe old age of 29.

                                                                    🥳

                                                                    1. 3

                                                                      Happy birthday!

                                                                      1. 2

                                                                        Thanks Vaibhav!

                                                                        Still a bit jealous of you that you got to meet Haskell God.

                                                                      2. 3

                                                                        Happy birthday! 29 is an awesome age. Old enough that nobody can call you a kid anymore, but young enough that shit hasn’t started to go south yet. Enjoy!

                                                                        1. 2

                                                                          🎉 Feliz Aniversário. Enjoy your day!

                                                                          1. 2

                                                                            29 is the new 19!

                                                                          1. 4

                                                                            A former employer hired an “Agile Coach” for about USD $5,000 for the day. He spent a few hours mumbling about what Agile is, extended a bunch of generic platitudes, and generally wasted everyone’s time.

                                                                            At this point I’m quite convinced Agile is a weird religious cult. Agile Coach A says Agile is x; Agile Coach B says Agile is not x, but y.

                                                                            I don’t care what it is. It’s not setting foot in my organisation.

                                                                            1. 3

                                                                              Agile is a weird religious cult

                                                                              It’s also a tool to covertly implement micromanagement.

                                                                            1. 8

                                                                              I have never found meaning in my work, apart from when I was a musician.

                                                                              I love my work now, but I expressly wanted to work in a boring industry (because “boring” industries are usually full of money), with technology I enjoy (typed FP), and with a general healthy working arrangement (output, not hours; distributed team by default; async communication by default; lots of autonomy). It is satisfying being able to solve problems for industry people. I have never been satisfied implementing dumb solutions to problems using dumb technologies just because a middle manager forced me to. That I currently get to develop my typed FP skills every day on the job and generally work in a sane way is meaning enough for me.

                                                                              If I really wanted meaning from my work, I would have to go work in genetic engineering with CRISPR or something. There are a couple of diseases/viruses I would love to punch squarely on the nose, but I’m not sure how transferable my skills as a slightly cargo-culty web developer are. It’s probably better that I focus on my business, try and get rich, and then invest in other businesses working on the problems I care about.

                                                                              1. 2

                                                                                That is interesting. Really nothing wrong with working for money. and sounds like you have interesting aspirations as well, just not your focus right now. Thanks for sharing!

                                                                              1. 12

                                                                                You may laugh at me, but let’s see who gets the last laugh when some junior lady with 1000 Twitter followers becomes your tech lead.

                                                                                Yeah. Apparently, some people even seem to optimise for this from the outset, and use a veneer of charisma, silly faces, and emoji to try to cover the fact that they clearly don’t know what they’re talking about. The charlatanry is strong in this industry, especially among the web development crowd, which is unfortunate because I count myself as among them.

                                                                                For me personally, an example of that is Redux. Being initially developed for JS, it doesn’t fit TypeScript application at all, in my opinion. But, you guessed it — it’s community-approved, which means everyone uses it, which means I have to. It doesn’t matter what I think about it when every job listing requires knowledge of Redux or MobX.

                                                                                I was with you until this point. What about Redux has anything to do with types? That’s a completely unrelated concept, and your opinion here seems totally unfounded given that Redux is essentially just a JavaScript implementation of the Elm architecture, and Elm is a typed language.

                                                                                1. 1

                                                                                  Hi! ✌(◕‿-) ✌My name is Julia. I’m a full-stack developer specializing in Java and JavaScript.

                                                                                  This has to be a parody account.

                                                                                  1. 1

                                                                                    It may even be worse than that. I thought something was suspicious about the formulaic and spammy nature of that person’s posts, and they had a similar structure to the tweets of the person who invited them.

                                                                                    Both accounts have since been banned, as it appears the inviter was a sockpuppeteer.

                                                                                    Utterly disgraceful behaviour. Good riddance.

                                                                                1. 12

                                                                                  You may laugh at me, but let’s see who gets the last laugh when some junior lady with 1000 Twitter followers becomes your tech lead.

                                                                                  Oh how scary, you might have to work for a woman! SpoooOOOOooooky

                                                                                  Also lol @ him thinking 1000 Twitter followers is a lot

                                                                                  1. 8

                                                                                    Oh how scary, you might have to work for a woman!

                                                                                    That’s not the sentiment I got from his post, but I can see how someone would read that sentiment into it.

                                                                                    1. 4

                                                                                      I think this is the first comment I’ve downvoted, and I feel I owe an explanation.

                                                                                      Also, of course you’re in the Chicago area. Want to meet up and program a drone to do backflips? I’m up by North & Clybourne’s Apple store.

                                                                                      1k followers is a lot. I’ve been getting my Twitter game on for about a month now, and it’s remarkable how slowly that follower count goes up. It feels like you have to shout if you think this tweet is nice, be sure to like, comment, and subscribe! and generally be super annoying. Say, by plugging my twitter right now: https://twitter.com/theshawwn

                                                                                      A distant second: as the gap between men and women in tech narrows, there will be an approximately equal number of clueless people of both genders. I think using “clueless lady” is less about the lady and more about the clueless.

                                                                                      Mm, I didn’t actually downvote you. I’ll let you off this time with a philosophical discussion.

                                                                                      1. 5

                                                                                        Also, of course you’re in the Chicago area. Want to meet up and program a drone to do backflips? I’m up by North & Clybourne’s Apple store.

                                                                                        I’d be down! I live in uptown and am self-employed, so am pretty flexible on times. Switch to DMs?

                                                                                        1k followers is a lot. I’ve been getting my Twitter game on for about a month now, and it’s remarkable how slowly that follower count goes up. It feels like you have to shout if you think this tweet is nice, be sure to like, comment, and subscribe! and generally be super annoying.

                                                                                        To me the 1k thing indicates the OP isn’t all that familiar with Dumb Twitter Politics, which makes me a bit skeptical of how much he knows here. 1k is a lot for many people, but a lot of “”“influencers””” have 10k, 50k, 100k+ followers. In part that’s because for a lot of these people, building cachet is part of their job description. Maybe they’re often sent on the conference circuit, or they’re tech ambassadors, or their business relies on word-of-mouth. I’m actually in the last boat myself: the more reach I have, the more potential clients hear about me. So I consciously choose to spend time on the Twitter game.

                                                                                        Re getting more followers: I’ve done best by treating Twitter like a serious writing platform. 280 characters is about fifty words, and if you write a series of tweets (tweetstorm) then each has to, by itself, contain an insight. That’s a fun set of constraints, so I try to do organized, researched tweetstorms. Insightful, well-written pieces get shared around, which means more followers.

                                                                                        1. 2

                                                                                          1k followers is not a lot. It’s such an easy metric to game. I got bored of gaming the system at roughly 6k followers. It is quite surprising also how many people in high positions decide to take you seriously at that point too. And then you get conference talk offers, interview offers, etc. It’s kind of ridiculous really, and I empathise with the author.

                                                                                          1. 1

                                                                                            So what’s the secret? Sure, I could throw $5 at fiverr for a bunch of fake followers, but then I’d be as fake as a brownie.

                                                                                            1. 4
                                                                                              • Write some programmer-oriented content (jokes work well, as do tips about JavaScript or some simple Bash stuff).
                                                                                              • Use a script to follow all active accounts following some well-known programmer like Jeff Atwood, Paul Irish, or whoever.
                                                                                              • Occasionally unfollow people who don’t follow you back.
                                                                                              1. 3

                                                                                                Point 2 seems like the effective step.

                                                                                                In fact… that rather destroys my Twitter worldview. I got excited when random people seemed to follow me, like it mattered what I did. But apparently, it might just be the fact that I follow someone else.

                                                                                                Thanks for the tip.

                                                                                                EDIT: The naive approach would destroy the quality of the tweets you see in your twitter feed, though. I wonder if doing it manually is scalable.

                                                                                                1. 4

                                                                                                  The naive approach would destroy the quality of your twitter feed, though.

                                                                                                  Many Twitter power-users don’t use their feed anyway. They create lists of the people they care about, and that becomes their feed. I mean, do you think Eric Elliott (someone who has definitely boosted their profile with this strategy) really pays attention to 13,000 people?

                                                                                                  I wonder if doing it manually is scalable.

                                                                                                  It’s a tonne of real tedious work, over a fairly long period of time.

                                                                                                  1. 2

                                                                                                    Your own feed becomes useless once you follow a few hundred people. I used a private list for the people I actually followed.

                                                                                                  2. 2

                                                                                                    Yes that is the basic recipe. I got bored out at 2000 followers.

                                                                                                    The sad thing is that there is no need to be original. Just search for a “100 best programmer jokes” blog post. Spread the content over 100 tweets with just a few per day. Follow lots of people to make them take a look at your spam. Some will like/follow/retweet you. Unfollow the others. Do that for a few months and you will have thousands of followers.

                                                                                                    1. 2

                                                                                                      Indeed all the iamdevloper account did was steal other people’s jokes. I wrote a little programming joke tweet which had over a thousand retweets. That guy posted my tweet as his own, and then when I admonished him for it, he denied it and called me a liar. When I provided links and screenshots, he deleted his tweet and blocked me.

                                                                                              2. 1

                                                                                                Oh then feel free to downvote me real hard if you ever cross my way. The ultimate social penitence. Make me a social media crook and my followers fly away, make me so employers are scared to loose their own followers if they hire me.

                                                                                                Because that’s what I want to go through.