Threads for japesinator

    1. 15

      As I discussed in a previous blog post the idea of meritocracy succeeds only in seeing dominant voices rise to the top, while marginalized ones disappear.

      This seems like an interesting speculation. Here are three pieces of evidence to the contrary:

      1. when US universities adopted meritocracy in the form of standardized entry testing in order to exclude Jews, the number of Jews accepted rose instead over the following decades;
      2. when symphony orchestras in the US adopted meritocracy in the form of blind auditions, where a screen prevented them from seeing the musician who was auditioning, top orchestras went from 5% to 25% female, and careful analysis of audition data shows that the blind auditions substantially improved women’s chances, although some of the change is due to other factors;
      3. and meritocracy in the form of the imperial exams dramatically improved Chinese social mobility, with 40% of men who succeeded in the highest level coming from non-official backgrounds, although almost entirely not from peasant classes. It was so important to social mobility that in periods when it was abolished, dynasties often fell.

      Is there any evidence in favor of this surprising speculation that meritocracy merely reinforces existing hierarchies of exclusion? The blog post linked to doesn’t mention meritocracy, but says:

      As Vanessa Au (2011) reminds us in her chapter My day of fame on digg.com: Race, representation, and resistance in Web 2.0 in the book Transgression 2.0: Media, Culture, and the Politics of a Digital Age, Web 2.0 technologies such as social media voting and ranking content simply reproduce the status quo. “And, as in real life, marginalized voices get pushed out as dominant voices support other dominant voices and they, both figuratively and literally, rise to the top” (210). We should not make that easier by denying that there are dominant and marginalized voices.

      But of course Digg and Reddit are popularity contests — the diametrical opposite of meritocracy. Nobody has proposed, I hope, replacing the FreeBSD Core Team’s technical judgment or membership decisions with a Digg-style plebiscite twitch-voting system.

      Here’s my alternative hypothesis about what’s going on: some of the people who are arguing against meritocracy in free software are upper-class people accustomed to their class privilege and so uncomfortable with social prestige hierarchies in which they are not at the top that they want to destroy them, and so they try to paint themselves as victims when their impeccable deportment and creative-writing degrees from a top school do not earn their opinions equal weight with the opinions of ill-groomed people with no degrees, poor manners, and deep technical expertise. Others just like to hurt and harass people and have discovered a socially acceptable way to do so: claim that you are doing so on behalf of marginalized groups, ideally groups you can claim to be part of yourself.

      As Meredith Patterson powerfully explains:

      My Russian coauthor Sergey Bratus points out that keeping works by “ideologically impure” persons out of public view was instrumental to Soviet systems of social control. And as @puellavulnerata acutely observes, a culture that encourages judging people unilaterally, rather than judging their actions in context, is one that allows socially-adept hierarchy climbers to decontextualise their own self-serving cruelties as “necessary for the cause” and stage witchcraft trials against the weirdoes on the margin.

      I want to emphasize that we must be careful not to believe that we have achieved meritocracy — we are far from that ideal. And of course any -ocracy is a limitation on freedom, even if a necessary one to preserve other freedoms, and having freedom and equality is better than being merely well-governed, and free software exists to give us freedom and equality, limiting the damage any -ocracy can do when it goes wrong.

      But the author is claiming that meritocracy is the problem, not that we need a lot more meritocracy.

      1. 10

        I came across some interesting research called the paradox of meritocracy although it only used three small studies with a total of 445 participants.

        The main finding is consistent across the three studies: when an organization is explicitly presented as meritocratic, individuals in managerial positions favor a male employee over an equally qualified female employee by awarding him a larger monetary reward. This finding demonstrates that the pursuit of meritocracy at the workplace may be more difficult than it first appears and that there may be unrecognized risks behind certain organizational efforts used to reward merit.

        The full article is here

        1. 4

          That is a super-interesting article, thanks for the link! I look forward to reading it and looking for papers citing it, I’m really curious what they’ll attribute the discriminatory hiring to. Having only glanced at it and kragen’s links, I wonder if maybe the big difference is bureaucracy - the systems are fairly rigid, with little room for human judgement to sneak discrimination in; these studies were all about the human judgement. But if that’s the case, I would expect the college acceptance rate to stay flat rather than rise, because people and committees still judge the applicants. The music audtions, if done blind (eg. there is no “now that we’ve heard them all play, let’s look at their resumes…” step).

          @kragen Do you happen to have any citations for the university entry testing and their effects on minority enrollment? I’ve also heard anecdotes that southeast asian minority groups are being discriminated against in Ivy Leauge enrollment (lower enrollment than merited by performance on standardized tests), so maybe there’s ongoing research here that’s worth exploring.

          Depending on the enrollment stuff, maybe there’s a coherent theory for these different studies, something like: blind, formal criterea reverse discriminatory judgement, but the idea of “meritocracy” prompts more discrimination in human judgement. This is, of course, a wild guess on a topic that folks have probably studied to death. Have to dig into the literature. :)

          1. 2

            Thank you! I will read it.

          2. 5

            Meritocracy is like security, it’s great to work towards, but dangerous to believe that you have. I read the piece as more of a critique of the “we are a meritocracy” culture than a critique of meritocracy itself.

          3. 9

            I have a few thoughts on this.

            Firstly, it is awful to be trans in America, and worse in may other places. Secondly, this awfulness is perpetuated by views like the ones expressed on the twitter post that provoked that thread. Having one’s legitimacy as a person questioned constantly is not healthy. To go back to the example expressed in numerous other places, remarkably few Christians commit suicide as a result of being told they are “denying reality” over and over again. Remarkably many trans people do.

            I do think it is reasonable to have qualms with using a product controlled by people with very different moral views than one’s one, especially when those views seem particularly bad. I would not want to use, and possibly induce a dependency on, the software of someone who thought I was delusional, and likely treated me correspondingly. I would not want to give my time to this project, tell my friends to use it, or generally endorse it. I would likely also do the same thing if my friend was treated in such a way by a maintainer.

            I cannot force Elia to change his beliefs, I cannot force the owner to remove him, or even add a code of conduct, as was suggested, and (rather rudely) dismissed. But at the same time, the core team is an integral part of an open source project, and while Elia remains on Opal’s, I will never use it, and I hope others will do likewise.

            1. 11

              I would not want to use, and possibly induce a dependency on, the software of someone who thought I was delusional.

              I thought about this long and hard, and I concluded that I cannot afford this. I am an atheist, and many great softwares are written by born-again Christians, Mozilla Firefox for example. Even if I restrict myself to boycott softwares written by extremely religious people, I would miss too much software.

              If you can avoid softwares written by people with views very different from you, great! Good for you! On the other hand, that soulds like a luxury and a very privileged position to find oneself in.

              1. 8

                It seems like you are a non-user who will remain a non-user, is this correct?

                My concern is when people who have contributed NOTHING come in and want to control the people who have actually contributed. Open Source projects live or die by contributions, this is a simple fact. Contributors are the most rare asset on any open source projects, there seems to be a new wave of people who contribute nothing but want to enact control of projects from the outside, which I find very distasteful, regardless of they are transgender, religious fanatics or flat-Earth believers.

              2. 3

                I’m curious as to how much this will select for people with free time. Many of the CTFs I’ve played in required a quite non-trivial amount of investment of time (which I didn’t mind, as they’ve been quite enjoyable), but there are certainly people who can’t afford n dozen hours to solve problems due to family/work/other obligations.

                I do think this is significantly better than the alternative, but I’m also concerned that it will just create a new class of people who do unfairly poorly in the hiring process.

                1. 5

                  Presumably you don’t need to complete the game the same week you look for a job. A score from six months ago will hopefully remain valid. It sounds like a work sample that has an extended timeframe and will work for multiple employers.

                  1. 3

                    From reading a lot of what Patrick McKenzie and Thomas Ptacek have written on hiring, I belive they are very aware of this failure mode. I think their hope is both that this takes much less spare time than resume writing, networking events, attending meetups, contributing to open source, attending hackathons, or sitting in the standard terrible technical interview; and that it provides a much better signal of whether someone will be a good employee.

                  2. 2

                    I’m trying to find a Javascript library to generate an Eliptic Curve keypair deterministically from seed input. This is for the user interface of Peergos. Keybase’s kbpgp is fantastic once you have a keypair, but can’t currently let you set the source of randomness or seed to allow deterministic generation. Any suggestions very much appreciated.

                    1. 1

                      You might be interested in SQRL and the work by djb it references.

                      1. 1

                        Thanks, SQRL looks interesting. I think I’ve answered my own question though with TweetNaCl.js which combined with scrypt should do the trick. DJB is a legend.

                    2. 6

                      Over the weekend, I went to HackIllinois and won the reverse engineering category for a kind of Codecademy for reversing project. However, the project is currently a bit terrible due to the design being driven by a pathological hatred of technology, so I’m trying to clean that up before I release it into the wild this week.

                      I’m also getting ready for the mid-term in my complex analysis class. If you’re in the market to learn complex analysis, Needham’s text is one of the best math textbooks I have ever read, and I would highly recommend it, but it takes some definite time and effort to understand (at least for me).

                      On a quite non-technical note, I should also be seeing Tannhauser at the Chicago lyric Friday, which is gonna be awesome!

                      1. 6

                        I’m gonna be trying to finish “Interface Oriented Design” (https://pragprog.com/book/kpiod/interface-oriented-design). Had already read it once, but I figure it’s been a few years since, and I wonder if I’m going to find new things in it this time around.

                        I’ve also decided that I wanted to learn a new programming language. I’ve been doing Go for the past 2 years, and I wanted to learn something functional and compiled, and I’m interested in unikernels, so I decided that OCaml might be a good fit, although Erlang might also be a good fit. Opinions please? Also, unikernels: I know I can run MirageOS on Xen, and I can run WhateverErlangHas in Xen, but is there any way to run them through like qemu during development? I’m a bit at a loss here.

                        On the Go side of the world, I’ve been working on a code generator that grabs a DB schema (for now mysql only) and craps out pretty and usable and idiomatic and statically typed Go code, without reflection. Full scope of the project would be to eventually generate basic HTTP handlers, optional caching (got some basic form of that, I need to allow users not to cache super-huge tables or something), respect constraints (got non nullables working last night), generate some basic main function too…. basically, from DB to “working go service” in one simple command line call. My evil plan is to build it as a rough prototype, open source it, bring it to my business people, show them how awesome it is, and then get paid worktime in my office to develop the product.

                        So yeah. A lot of interesting stuff on my plate. Also: OCaml? Erlang? Unikernels? Opinions! Tips! Suggestions!

                        1. 5

                          I would learn Haskell! It’s relatively practical, has tons of documentation and tutorials out in the wild, and is weird enough to expand your brain. You can bump into type theory, category theory, and other math-ish things pretty easily, and the emphasis on purity and types leads to some really cool new ways of doing things (monadic parser combinators, lenses). If you’re interested, @bitemyapp has a great guide here and you can feel free to PM me here.

                          1. 2

                            Whats the angle with Haskell contra real world stuff?

                            Is the reason you never (compared to say Golang or JS) hear about Haskell success-stories and cool, in production, awesome stuff because it’s not being used for, well, cool, in production, awesome stuff, or is it because Haskellers are just less inclined to blog and shout on twitter about it?

                            I’m asking this as a person who has been toying with Haskell for a year and a half but only toying. I have used what I’ve learnt through Haskell other places, but never done anything real with Haskell.

                          2. 1

                            You may have already read this post describing a MirageOS foray. I thought it was pretty enlightening to read someone’s actual experience.

                          3. 7

                            My talk on using types to resist timing attacks got accepted to THOTCON, which I’m really happy and excited about, but it turns out it’s rather tricky to explain the Curry-Howard isomorphism, timing attacks, and how that all fits together inside of 25 minutes and still have time for questions, so I’m working ways to do that well and with as few “magical” steps as possible.

                            I’ve also gone back to Write Yourself a Scheme in 48 Hours, which is proving very fun to work through and also has some quite interesting implementation details. I worked through it once a while back, but got extraordinarily bogged down with making the whole tower of numbers work properly and ended up with an un-salvagable mess of GHC extensions and GADTs, but a bit of experience is making things fit together much clearer.

                            Still looking at internships, I have come to the conclusion that people generally prefer one goes to college first. Nonetheless, I am hopeful, and still talking to a couple places. If anyone happens to have general pointers in this area, I would appreciate it greatly.

                            Also re: college, I’m still waiting on most decisions, but I got into U of I, which is nice.

                            1. 2

                              I looked at the parsing exercises to WYAS and decided to skip some of them so I don’t get hung up. I do plan on going back to finish them later, though.

                              1. 2

                                I recently read “An indexed model of recursive types for foundational proof-carrying code” by Appel and McAllester. I think it has some interesting ideas that may apply to tarts - for instance that functions have certain rules around their evaluation, the number of “steps” they take, and thus what values they can be applied to. It seemed to have parallels (in my mind at least).

                              2. 3

                                Looking for an internship! If you know any companies interested in hiring a summer intern with experience with security, functional programming, and math or one who’s just really interested in solving interesting problems, I would love a PM/reply.

                                I’m also going back to that timing attack resistant type systems project I was working on a lot last fall after getting accepted to speak about it at THOTCON. It turns out explaining timing attacks, the Curry-Howard isomorphism, and basic category theory is a bit tough to fit inside 25 minutes, but I think it can definitely be done.

                                Apart from that, I just finished up with the ISUSEC CTF I was helping write and run, and should be publishing code and writeups around Wednesday. This has been a good week!

                                  1. 12

                                    The Linux source code is estimated to be over 30 millions lines of code which, using conventional methods, would have taken almost 8,000 person years at a cost of over $1 trillion

                                    First, we can’t count the number of lines? We can only estimate?

                                    Second, that works out to $33,333 per line of code. Holy fuck. Really? Writing a driver for the freaking Sound Blaster card was a million dollar project?

                                    It’s also hard to square that number with 8000 person years. Figure a $100K salary. That pays for 3 lines of code per year. But times 8000 that means the Linux kernel can only be 24000 lines of code.

                                    1. 3

                                      I don’t agree with the final number either, but a line of code rewritten and analyzed 100 times is worth about 100 times as much as a line of code written and forgotten. Architecture is valuable. Code review is valuable. And final lines of code written is a terrible metric for anything.

                                    2. 3

                                      This week, I finally got the bifunctor library I’ve been spending time on to a point that I’m relatively happy with. Of course, my wish list for it is still longer than I will ever have time for, but I have the important bits, finally including some formally verified things. However, as far as I know, I am the only person that’s looked at it to see if anything will break, so if anyone wants to take a look at that, I’d appreciate it.

                                      I also just got approved to take an independent study at my university next semester on what’s probably going to be mostly lens-type-things (in computer science, not physics, that is), so I’ve been looking at some papers related to those (this one is great for covering the basics) and starting to look at Edward Kmett’s excellent library’s source a bit more in-depth.

                                      Other than that, this week I’m trying to finish up a couple college application essays (University of Chicago, I love you, but you’re really weird), and read more paper books, as I realized I haven’t done half as much of that as I should this year.

                                      1. 2

                                        It is amazing how fast time flies when you are having fun. Well, at least I consider programming fun…

                                      2. 4

                                        Abstractions are evil. They hide information that the designer thought was unimportant. How arrogant!

                                        1. 4

                                          I strongly disagree with you (though I guess that’s the point of the question). Badly used abstraction is awful, but you sometimes need a mental compression algorithm of sorts to be able to even think about what you’re working on. If it’s possible to keep the entire project in your head, then by all means do so, but people have brains with less space than a project like the Linux kernel takes up, and we need abstraction to even think coherently about things of that scale.

                                          1. 3

                                            I do not think you disagree with me at all! You even said a key word ‘compression’. Abstractions are evil because they are a lossy compression. You can also have lossless compression.

                                            The options are not No Compression vs Lossy Compression. There is a third option.

                                            Abstractions, by definition, are NOT a lossless compression.

                                            1. 2

                                              How do you differentiate abstractions and lossless compression? I think we may mean different things by abstraction here. Can you post code you would consider an abstraction and code you would consider lossless compression?

                                              1. 3

                                                Imagine an image class like this

                                                struct image
                                                {
                                                    void resize(int, int);
                                                    int width() const;
                                                    int height() const;
                                                
                                                    void make_blue();
                                                    void make_red();
                                                };
                                                

                                                VS

                                                struct image
                                                {
                                                    void resize(int, int);
                                                    int width() const;
                                                    int height() const;
                                                
                                                    void make_blue();
                                                    void make_red();
                                                
                                                    ///do whatever pattern you want
                                                    char * pixels();
                                                };
                                                

                                                The first one provides an abstraction of an image. The designer thought you would only ever want blue or red images and it hides the underlying representation.

                                                The second one is not an abstraction but a lossless compression. The designer thought you may want blue and red images, but also didn’t hide the data. This is compression and this interface is infinitely more useful than the first. A compression provides a name to data and operations without throwing away the details should you need them.

                                                While you can argue that the first one is just a bad abstraction and the second one is a good abstraction, I would argue that the first one is a bad abstraction and the second one is NOT an abstraction. Why? Because the second one does not throw out information.

                                                Even though the second one the designer was also bad because he didn’t anticipate making green images, it won’t prevent the user from doing so.

                                                Is the second one more dangerous than the first? HELL YES. But I think this is where Design by Contract can assist in regaining safety. As any function or method that uses the compression can define predicates that validate correct use.

                                                1. 2

                                                  To me that almost feels like an abstraction with a shortcut around it, which I fully support. Again, I don’t think we disagree except for semantics. I like abstractions, but I also like ways to circumvent abstractions if needed, and I think the difference in your two examples is that the first provides abstraction in a void, where the second one provides a way to avoid the given abstractions or even create your own.

                                                  1. 2

                                                    I think the word abstraction is overused and confuses people. Abstractions throw away information and retain only the information necessary for a particular use. Calling my second example ALSO an abstraction isn’t useful because the second example is qualitatively different. You can call it “Abstraction with escape hatch”, but I just prefer to call it a compression.

                                                    By the way, I am very guilty of creating abstractions that are terrible. This isn’t easy.

                                          2. 3

                                            I suppose you’d prefer to code on analog circuits then, not wanting to abstract details like discreteness of transistor states.

                                            1. 3

                                              Imagine the kind of software you can write if you were able to control the discreteness and transistor states should you choose to. An example I can think of is an FPGA. While they don’t provide that level of control, they do provide you more control than a regular CPU and you can do amazing things with them.

                                              If the designers of the transistor and discreteness could have provided you that control, they probably would have. Imagine programming software that utilizes analog circuits for REAL fuzzy logic or creating ternary systems on the fly.

                                              If you can manipulate the very nature of matter with software, would you really argue that you should hide it behind a wall of abstraction?

                                              1. 2

                                                I’m more than happy playing with that world, but I am also more than happy to, say, execute highly discrete, deterministic combinatorial algorithms. Since we truly live in the first world I’m happy for abstractions that allow me to pretend I live in the second.

                                                1. 1

                                                  And you said a key word ‘pretend’. Did you know some developers are not even aware of the first world??! They do not pretend!

                                                  1. 1

                                                    I’m pretty alright with that so long as their combinatorial proofs are correct. I’m completely willing to judge the thing built atop the abstraction and the implementation of the abstraction itself separately.

                                                    On the other hand, if the abstraction is a poor place to stand and must be dismantled then the proofs atop it might all go away. This is why mathematics tries to build theories and models both—even if your models get invalidated in some way or another your theories still hold. Then again, if your theories have no models at all then they have no use and may even be inconsistent.

                                                2. 1

                                                  I guess the only concern here is that gates, boolean logic, and discrete states are all abstractions over just wrangling raw current!

                                              2. 1

                                                Is it possible you are the same individual that programmed this game?

                                                1. 1

                                                  HAHA, my assembly is nowhere near that awesome!

                                                2. 1

                                                  “hard” is not the same as “evil”.

                                                3. 22

                                                  I’ll try this:

                                                  Object-oriented languages and object-oriented design in general is a bad idea. Data structure and functions are not the same thing, and should not be treated as such, state in general is bad, let alone multiple private states, and the amount of useless boilerplate and cruft enforced is incredibly damaging to productivity.

                                                  1. 8

                                                    Not so controversial of an idea here. Other places it is borderline religious.

                                                    I’ll also add that members are often just globals with a slightly smaller scope. It pains me to see classes where methods just reference dozens of variables outside of their function scope. Bonus points if they use inheritance.

                                                    1. 3

                                                      Objects - ML Modules - Mutability - Inheritance = ?

                                                      1. 3

                                                        Dynamic dispatch.

                                                        I started to think recently that the only thing that is at the fundamental core of OO is dynamic dispatch, everything else can be emulated one way or another without too much pain involved.

                                                        1. 2

                                                          http://stackoverflow.com/questions/13106683/dynamic-dispatch-in-haskell

                                                          I’d argue final encodings are the more fundamental and interesting thing OO focused on.

                                                          1. 1

                                                            a) I’m not sure it is even showing an interesting example of what dynamic dispatch can do.

                                                            b) That’s exactly what I meant with “without too much pain involved”.

                                                            You can build everything in every language, but will it survive more than 5 seconds in code review?

                                                    2. 5

                                                      I disagree. I agree that it is not the one-size-fits-all solution many companies, communities and developers make it out to be though. But in some situations, it a pretty natural and clean way to solve a problem.

                                                    3. 4

                                                      Two very interesting parser combinators with quite different approaches are trifecta and attoparsec. Trifecta tries much more to be a “user-friendly” parser with nice error messages, graceful failure, and generally pretty diagnostics, where Attoparsec just goes really really fast. The source code for both is relatively approachable after this, and highly recommended reading.

                                                      1. 8

                                                        Does the money here go to you? I’m totally happy to pay, as I greatly appreciate lobsters and will put money towards that, but I’m just curious.

                                                        1. 14

                                                          They have an option to add a percentage on top of their base price of $2.63 which would go to me, but I chose 0%, so no, I do not get any money from these.

                                                        2. 3

                                                          I was intrigued enough after watching Duality and the End of Reactive (video) by Erik Meijer that I stole some of the concepts to create an asynchronous transducers library, transduce-async.

                                                          This week I plan on using it as a basis, along with underscore-transducer, to dust off and rewrite underarm, a toy library I wrote a couple years ago to try to understand Reactive Cocoa, Rx*. I also would like to look more into FRP concepts (arrowized, sampling rates, etc).

                                                          I’ve decided it’s past due to learn me some Haskell, so I ordered “Real World Haskell” to get started. If anybody has any other suggestions to get started, please let me know!

                                                          1. 4

                                                            @bitemyapp has some great stuff up on github

                                                            Personally, I learned from Learn you a haskell for great good, but I’ve heard mixed reviews, so YMMV.

                                                          2. 3

                                                            This week I spent a lot of time working on a bifunctor library for idris. This should hopefully be useful for both the timing attack resistant type systems project I’ve been working on for a while now (bifunctors make things with tuples super easy) and also a couple different possibilities for an independent study I’m trying to take next semester. If anyone who knows a bit more category theory than I do could take a look at it, especially the bit about bimonads as I couldn’t find a really good reference for those, I’d appreciate it.

                                                            Apart from that, college applications are still heavily on my mind. I should be doing the first Minerva “assessment” this week, whatever that entails, and I’m still deciding on who to pick for my recommendation letters and writing/revising all kinds of essays.

                                                            Other than that, it’s been a quieter week, mostly filled with working on boring but necessary bits of my life (which, contrasted with certain non-quiet weeks of note, I can certainly appreciate).

                                                            1. 8

                                                              Last week was crazy with various scholarship/fellowship applications for grad school. In the end I went in for 2 of them, and abandoned my Fulbright application because I was struggling with it. This was basically all I got done, I had some very very long days.

                                                              I’ve not made much progress on my Idris -> Erlang compiler. I’ll get back onto that on Wednesday, once I’ve finished an assignment due tuesday (a toy compiler, so I don’t want to get confused between them both). Edwin and I have worked out a good solution to the Primitives problem I had last week, based on a paper he knew of, so that’s first on the list.

                                                              Sadly it looks as if the radio show/podcast is on hiatus this week, due to us not having a studio. This has been annoying because we wanted to interview someone, but thankfully he can make it in a fortnight, so we’ll definitely have that interview.

                                                              So, it looks like a quieter week, which is much needed after last week.

                                                              1. 2

                                                                Have you written anything or published any source code for your idris -> erlang project? It sounds really interesting and I’d love to learn more.

                                                                1. 3

                                                                  https://github.com/lenary/Idris-dev/pull/1 Contains the source code. It’s incomplete, of course, but is capable of a hello world (with my small changes to idris, also in that repo). https://gist.github.com/lenary/7abb7ad5d533bf376804 is an example of hello world.

                                                                  I’ve not really written anything yet, but it’s dissertation work, so I will be writing something eventually, at length. It’s been fun to do so far, and more docs are needed for that part of the Idris codebase.

                                                              2. 3

                                                                If you’re at all interested in low-level lazy evaluation, SICP actually walks through creating a lazy (lisp, instead of haskell) interpreter extremely well.

                                                                1. 13

                                                                  I think it’s a bit silly to talk about “functional programmers” or even “haskellers” as a whole. There are people in every community who are hostile or condescending in some way, but there are also genuinely nice and helpful people. Generalizations about groups of people are pretty much never accurate or helpful in general.