1. 12

    Professional historians have a generic name for teleological historiography: Whig history. It’s a predictable and ubiquitous consequence of history being written (only) by the victors. As such, it’s still unfortunately predominant in the histories of science and technology.

    1.  

      So, sort of inevitable?

      1.  

        Yes. Every culture has heritage: origin stories, ancestor myths, explanations of who “we” are and how we got to be that way. The idea of history as a dispassionate study of (relatively) objective truths is what’s unusual. It doesn’t come easy.

    1. 8

      I kept waiting for the author to make a case, but it was just a series of assertions without evidence. I don’t know what I feel about teleology in technology but I do know that the article doesn’t make a solid case against it. The addition of just one plausible alternative history where we ended up with radically different tech would be a start.

      1.  

        The “Shock of the Old” by Edgerton is a relevant book on the topic.

        1.  

          I mean, I did lead with a mention of Engelbart, and went on to briefly describe Kay & Nelson’s work. I assumed any reader with an interest in the history of technology would be at least vaguely familiar with them, but there are links to Mindstorms & The Augmentation of Human Intelligence in the text.

          I’m working on a survey of interesting & plausible alternatives that have accessible demos at the moment, so you could always take a look at my research materials.

        1. 4

          It’s tempting to build this up into a case against type checking. I don’t want to do that. Often safety is so important that you want to have guarantees built into the code. But there’s something about doing the mental work to just know that what you’ve done is correct.

          An interesting chicken and egg type question is raised for me here. Are the benefits of types as appealing if you haven’t already felt the pain of having to be constantly meticulous — even paranoid — by working without them?

          Here’s the thing. We should know that our tests will pass before we run them. We should be right most of the time. The times when we are wrong? Well, we should really stop then and figure out what we were missing. Where did our mental model of the behaviour of the code diverge from the actual behaviour of the code? That’s the space where bugs happen.

          I like this approach. I think it even isn’t exclusive to programming. When I was a musician, I remember one exercise to improve your ability to express an idea through your instrument is to sing the phrase you’re playing at the same time as you’re playing it.

          1. 2

            Yes, I think a lot of these practices apply in other areas too. I wish I’d mentioned in the blog that you can do the same thing with the type checker. Before compilation, be sure that it will pass. When it doesn’t there’s something to learn.

            1. 2

              My most-recent proposal for people learning software development is an easy/safe language first designed for purpose, then a realistic one like Python/Go that’s still easy, and then something like C. Perhaps throw something between first and second option that has no safety at all. Might be first language with checks removed. Teacher tells them to solve tricky problems with no types or GC so they run into all kinds of problems. They experience the pain. Then, they’re shown later on how type and memory safety prevent those specific errors with what tradeoffs.

              What you think?

            1. 1

              I’ve seen sub-tweeting but this is my first experience of what appears to be sub-blogging in the wild.

              1. 2

                What I find interesting is that the issue of Null/Maybe/Either doesn’t come up when you do imperative design. Imagine a head function that takes a closure that is called when a list has a head and is not called otherwise:

                head([1,2,3], (x) {

                // x will be 1 here, create whatever side-effect you need in this case

                })

                If you need the error case, supply an additional closure as an argument.

                What is distressing to me about this is that functional-style is elegant in so many ways but not in the case of error handling.

                1. 4

                  What is distressing to me about this is that functional-style is elegant in so many ways but not in the case of error handling.

                  Weird, for me this is actually one of the biggest selling point of functional programming for me.

                  1. 3

                    I’m struggling to follow this example. You’re essentially providing a default value, which could be expressed as:

                    head' x = fromMaybe x . listToMaybe

                    What in your view qualifies as elegance in the case of error handling? In what way is the FP approach, i.e. wrapping the value in an algebra to preserve composability, inelegant? The idiomatic way of doing this in FP is to explicitly model and handle the potential for failure. I’m not sure how it could be more “elegant” than this.

                    1. 1

                      I’m not providing a default value, just an action on success. If the closure is called, it can do anything or nothing with the value (head) it receives.

                      Head is a contrived example. The more typical way that this works in OO is to just pass along your results on success to another object. If there’s a problem, you just don’t pass them along. There is no need to check for an error at the other end.

                      1. 1

                        Head is a contrived example.

                        Indeed, and quite confusing.

                        It’s difficult for me to argue for or against a particular approach in this case. Without a better example, I would have to ask: Why do you want side effects here anyway?

                    2. 1

                      Well, given the safe head’ function that returns Maybe a, is the following (but pardon my Haskell, it’s probably wrong) not elegant?

                      f :: [a] -> Either a, String
                      f l = case (head’ l)
                             when Some a then Left a
                             when Nothing then “error message”
                      

                      where the name of f probably suggests something about what the function does, especially in case of errors?

                      Or are you specifically concerned about the lack of flexibility in the error handling?

                    1. 19

                      I’m deep diving c2 and it’s a mindbending mix of primary-source history, paradigm archaeology, elitist flamewars, and utter crackpottery. This is a proto “falsehoods programmers believe about X” I found in a tangent of a tangent of an argument on whether OOP or databases were better. Because those two things are apparently incompatible.

                      The linked article is pretty great though!

                      1. 16

                        “I’m deeping diving c2 and it’s a mindbending mix of primary-source history, paradigm archaeology, elitist flamewars, and utter crackpottery.”

                        Those were heady times, but threads on lobste.rs are going to appear much the same in 20 years.

                        One of my favorite things is to go to used book stores and flip through print books and magazines from 20-60 years ago. You get the sense of life of an era. You see misplaced passionate certainty, and then you look at us and you have a chance to imagine what the future will think.

                        1. 4

                          I discovered it shortly before they shut down comments from new folks. c2 is awesome. I recommend digging through it all. :)

                          1. 3

                            …it’s a mindbending mix of primary-source history, paradigm archaeology, elitist flamewars, and utter crackpottery.

                            Ah yes. Good thing none of those has ever showed up on Lobsters. /s

                            …an argument on whether OOP or databases were better. Because those two things are apparently incompatible.

                            They actually are.

                            1. 2

                              A mismatch doesn’t equal incompatible. My work handles lots of data that absolutely should be in a relational database and it’s worth any additional friction it might cause is a reasonable trade-off for other benefits (reporting, sane modelling, etc).

                              1. 2

                                I don’t think I’ve seen anybody on lobsters (yet!) claim that they solved the halting problem.

                                1. 1

                                  …that happened?

                              2. 2

                                …and it’s a mindbending mix of primary-source history, paradigm archaeology, elitist flamewars, and utter crackpottery.

                                I find the same phenomenon in books about “programming your microcomputer” from the 70s and 80s, especially the crackpottery.

                                1. 1

                                  That list of peculiarities sounds like a weird mix of challenging fun and hellish nightmare.

                                  1. 1

                                    There was an interesting crackpot (or?) on C2 called “TopMind” (“top” for “Table-Oriented Programming”). He was antagonistic towards OOP but the OOP people were pretty hostile to his critiques too, so I kind of liked him as an underdog. And OO was almost religious there, due to its founding as an OO pattern discussion forum. TopMind’s ideas included the benefits of storing procedural code in tables, the superiority of FoxPro, etc.

                                    1. 1

                                      I think the most cringeworthy example here is this, which is a perfect example of How Not To Argue For HOF.

                                  1. 20

                                    My sense now is that Alan Kay’s insight, that we can use the lessons of biology (objects are like cells that pass messages to each other), was on target but it was just applied incompletely. To fully embrace his model you need asynchrony. You can get that by seeing the processes of Erlang as objects or by doing what we now call micro-services. That’s where OO ideas best apply. The insides can be functional.

                                    1. 17

                                      “If you want to deeply understand OOP, you need to spend significant time with SmallTalk” is something I’ve heard over and over throughout my career.

                                      1. 5

                                        It’s also a relatively simple language with educational variants like Squeak to help learners.

                                        1. 7

                                          I have literally taken to carrying around a Squeak environment on USB to show to people. even experienced engineers tend to get lost in it for a few hours and come out the other side looking at software in a different way, given a quick schpiel about message passing.

                                        2. 4

                                          If you don’t have any Smalltalk handy, Erlang will do in a pinch.

                                          1. 2

                                            And if you don’t have Erlang handy, you can try Amber in your browser!

                                          2. 1

                                            I went through the Amber intro that /u/apg shared. I’d love to dive deeper. If anyone has any resources for exploring SmallTalk/Squeak/Etc further, I’d love to see them. Especially resources that explore what sets the OO system apart.

                                            1. 2

                                              I’m told that this is “required” reading. It’s pretty short, and good.

                                          3. 16

                                            I even wrote a book on that statement. My impression is that “the insides can be functional” could even be “the insides should be functional”; many objects should end up converting incoming messages into outgoing messages. Very few objects need to be edge nodes that turn incoming messages into storage.

                                            But most OOP code that I’ve seen has been designed as procedural code where the modules are called “class”. Storage and behaviour are intertwingled, complexity is not reduced, and people say “don’t do OOP because it intertwingles behaviour and storage”. It doesn’t.

                                            1. 2

                                              This.

                                              Whether the implementation is “functional” or not, the internals of any opaque object boundary should at least be modellable as collection of [newState, worldActions] = f(old state, message) behaviours.

                                              We also need a unified and clearer method for namespacing and module separation, so that people aren’t forced to make classes (or closures-via-invocation) simply to split the universe into public and private realms.

                                              To say that the concept of objects should be abandoned simply because existing successful languages have forced users to mis-apply classes for namespacing is as silly as the idea that we should throw out lexical closures because people have been misusing them to implement objects (I’m looking at you, React team).

                                            2. 5

                                              If there’s one lesson I’ve learned from software verification, it’s that concurrency is bad and we should avoid it as much as possible.

                                              1. 8

                                                I’m not entirely sure this is correct. I’ve been using Haskell/Idris/Rust/TLA+ for a while now and I’m now of the opinion that concurrency is just being tackled at the wrong conceptual level. In that most OOP/imperative strategies mix state+action when they shouldn’t.

                                                Also can you qualify what you mean by concurrency? I’m not sure if you’re conflating concurrency with parallelism here.

                                                I’m using the definitions offered by Simon Marlow of Haskell fame, from Parallel and Concurrent Programming in Haskell:

                                                In many fields, the words parallel and concurrent are synonyms; not so in programming, where they are used to describe fundamentally different concepts.

                                                A parallel program is one that uses a multiplicity of computational hardware (e.g., several processor cores) to perform a computation more quickly. The aim is to arrive at the answer earlier, by delegating different parts of the computation to different processors that execute at the same time.

                                                By contrast, concurrency is a program-structuring technique in which there are multiple threads of control. Conceptually, the threads of control execute “at the same time”; that is, the user sees their effects interleaved. Whether they actually execute at the same time or not is an implementation detail; a concurrent program can execute on a single processor through interleaved execution or on multiple physical processors.

                                                While parallel programming is concerned only with efficiency, concurrent programming is concerned with structuring a program that needs to interact with multiple independent external agents (for example, the user, a database server, and some external clients). Concurrency allows such programs to be modular; the thread that interacts with the user is distinct from the thread that talks to the database. In the absence of concurrency, such programs have to be written with event loops and callbacks, which are typically more cumbersome and lack the modularity that threads offer.

                                                1. 5

                                                  Also can you qualify what you mean by concurrency?

                                                  Concurrency is the property that your system cannot be described by a single global clock, as there exist multiple independent agents such that the behavior the system depends on their order of execution. Concurrency is bad because it means you have multiple possible behaviors for any starting state, which complicates analysis.

                                                  Using haskell/rust/Eiffel here helps but doesn’t eliminate the core problem, as your system may be larger than an individual program.

                                                  1. 10

                                                    All programs run in systems bigger than the program

                                                    1. 1

                                                      But that’s not an issue if the interaction between the program and the system is effectively consecutive (not concurrent), I think is the point that was being made. A multi-threaded program, even if you can guarantee is free of data races etc, may still have multiple possible behaviors, with no guarantee that all are correct within the context of the system in which operates. Analysis is more complex because of the concurrency. A non-internally-concurrent program can on the other be tested against a certain input sequence and have a deterministic output, so that we can know it is always correct for that input sequence. Reducing the overall level of concurrency in the system eases analysis.

                                                      1. 2

                                                        You can, and probably should, think of OS scheduling decisions as a form of input. I agree that concurrency can make the state space larger, but I don’t believe it is correct to treat concurrency/parallelism as mysterious or qualitative.

                                                    2. 3

                                                      Using haskell/rust/Eiffel here helps but doesn’t eliminate the core problem, as your system may be larger than an individual program.

                                                      They help in reducing the scope into the i/o layer interacting with each other. I think an example would be helpful here as there isn’t anything to argue for your stated position so far.

                                                      But lets ignore language for the moment and give an example from my work. We have a network filesystem that has to behave generally like a POSIX filesystem across systems. This is all c and in kernel, so mutexes and semaphores are the overall abstractions in use for good or ill.

                                                      I’ve been using TLA+ both as a learning aide in validating my understanding of the existing code, and to try to find logic bugs in general for things like flock() needing to behave across systems.

                                                      Generally what I find is that these primitives are insufficient for handling the interactions in i/o across system boundaries. Aka lets take a call to flock() or even fsync(), you need to ensure all client systems behave in a certain way when one (or more) systems make a call. What I find is that the behavior as programmed works in general cases, but when you setup TLA+ to mimic the mutex/semaphores in use and their calling behavior, they are riddled with logic holes.

                                                      This is where I’m trying to argue that the abstraction layers in use are insufficient. If we were to presume we used rust in this case, primarily as its about the only one that could fit a kernel module use case, there are a number of in node concurrent races across kernel worker threads that can just “go away”. Thus freeing us to validate our internode concurrent behavior logic via TLA+ and then ensuring our written code conforms to that specification.

                                                      As such, I do not agree that concurrent programming should be avoided whenever possible. I only argue that OOP encourages by default bad practices that one would want to use when programming in a concurrent style (mixing state+code in an abstraction that is ill suited for it). It doesn’t mean OOP is inherently bad, just a poor fit for the domain.

                                                      1. 1

                                                        I feel that each public/private boundary should have its own singular clock, and use this to sequence interactions within its encapsulated parts, but there can never really be a single global clock to a useful system, and most of our problems come from taking the illusion of said clock further than we should have.

                                                    3. 4

                                                      I would go exactly tangential and say that the best software treats concurrency as the basis of all computation. in particular, agnostic concurrency. if objects are modeled to have the right scope of visibility and influence, they should be able to handle messages in a perfectly concurrent and idempotent manner, regardless of cardinality.

                                                      1. 2

                                                        Take Clojure for example, and I think concurrency is not that bad, and there is no reason to avoid it. Mutability and intertwining of abstractions is what leads to problematic situations. Functional programming solves that by its nature.

                                                        1. 4

                                                          Even if the program is immutable, you ultimately want the program to have some effect on the outside world, and functional programming doesn’t magically fix the race conditions there. Consider having a bunch of immutable, unentwined workers all making HTTP requests the same server. Even if there are no data races, you can still exceed the rate limit due to concurrency.

                                                    1. 72

                                                      Ethics are inseparable from technology, since technology enables and inhibits actions, which are subject to ethical consideration; ergo, the creation of technology is an set of actions subject to ethical judgements.

                                                      1. 34

                                                        I’d go even further than that, attempting to exclude “ethics”, broadly construed, has helped to enable a social environment within technology circles that has legitimated a great deal of what people are now rightly reacting to, the surveillance, the effects the brain of using gambling machines as a design template for websites, the unwillingness of corporations to take any responsibility whatsoever for the effects that their products have on society at large, Uber (all of it), and on and on.

                                                        1. 14

                                                          I agree with both of you. On the other hand, I also kinda see the point of wanting a space that’s focused in technical aspects, and understand OP’s fear of ethical/political discourse dominating this forum. And in the other other hand, I also feel that not speaking about the ethics of technologies, and actively discouraging this kind of discussion, is, in and of itself, a way of speaking about it, agreeing with it.

                                                          So, yeah, that’s hard. I got no solutions.

                                                          1. 8

                                                            Regarding the “fear of ethical/political discourse dominating this forum”—I understand, but we wouldn’t have to have all of these discussions if people would just stop being unethical :-) The more discussions we have now on this topic, the fewer we’ll need to have in the future. But if we don’t talk about it then, as you point out, things are only going to get worse.

                                                            1. 13

                                                              I think there’s a bit of a difference between discussing the ethics of a company and aggressively attacking a person.

                                                              The main top comment raises some points and actually encourages discussion, which admittedly doesn’t really happen in that thread. A large portion of the top upvoted comments are people chiming in and (essentially) saying “me too”. The top comment responding to a maintainer is incredibly aggressive towards the maintainer who stepped forward, only tangentially relates to the parent comment, is arguably a personal attack against that person and discourages discussion through the tone. Yet it’s more upvoted than the technical comments below.

                                                              In addition. it’s easy to forget that there are people on the other side of these usernames. It reminds me quite a bit of This is Phil Fish, a case study on how people can associate people with something larger, sometimes in damaging ways. It’s not quite the same, but I see similar parallels in how the community tends to treat employees of certain companies (yes, like Palantir… but Google also comes to mind).

                                                              I’d like to see more comments that encourage discussion, like the most upvoted top-level comment, and less comments saying “me too”, “I agree with this”, or borderline attacking the poster, like the most upvoted response to the maintainer.

                                                              1. 10

                                                                The more discussions we have now on this topic, the fewer we’ll need to have in the future. But if we don’t talk about it then, as you point out, things are only going to get worse.

                                                                That’s an interesting theory. I haven’t seen any evidence to support it on any of the other discussion forums I’ve used, but I suppose it might be true somewhere. I think friendlysock’s take is more accurate: by encouraging (tolerating? normalizing?) aggressive and reflexive positions on non-technical issues, we will get more of them here, not less. And eventually, the “bad money” will drive out the good, just like it does everywhere.

                                                                1. 6

                                                                  Indeed - I think we have a plethora of examples of politics taking over, and few (none?) of political discussion settling debate so that everyone can move on.

                                                                2. 8

                                                                  The more discussions we have no on this topic, the fewer we’ll need to have in the future.

                                                                  I disagree with this in so many ways. We cannot possibly come to some end resolution where everyone agrees on a certain set of ethics, and even if that magically happened, we cannot all agree on the best way to act upon those ethics. Political conversation already permeates way too much of society. I don’t need to see it in a forum for technical discussion. If we’re going to try to think of ways for technology to be abused, we’re not going to produce anything. Further, I think we’re totally dismissing all the great things that same technology has done and can continue to do because it can be abused. If someone wants feedback on their submission, I don’t personally want to see politically-oriented discussion around it in this particular forum.

                                                                  If the broader group of folks here wants this to become a political-friendly abyss, I’m fine with stepping away. But I don’t get that feeling right now.

                                                                3. 3

                                                                  This is basically my opinion, too.

                                                                  (I haven’t posted more in this an the other meta threads this week because I’ve been very busy starting a new job, but as I’m catching up today I’ve really appreciated all the thoughtful discussion exploring these questions that don’t have easy answers.)

                                                              2. 36

                                                                I think you have a point here that is both truth and lacking utility, but may be getting upvotes because hey, who wouldn’t upvote ethics in technology?

                                                                Here are some of the practical issues with supporting debates about “ethics”.

                                                                First, what do we mean by “ethics”?

                                                                Are we just wanting to talk about right and wrong? That’s often a matter of aesthetics. When I was born, it was pretty commonly held that homosexual acts were Evil, that psychoactive drug usage was Corrupt, and that democracy was unquestionably Good. None of those things are unerringly true anymore.

                                                                You might say “But friendlysock, those are matters of morals, as opposed to organized systems of beliefs that are analyzed in the context of practicing agents!”, and I would agree. That being the case, what is the point of having discussions that end up going basically:

                                                                • “You’re immoral!”
                                                                • “No, you’re immoral!”
                                                                • “You both act in clear hypocrisy of your professed morals!”

                                                                That discussion leaves everybody angry, takes up a lot of space, and doesn’t teach anybody anything. Worse, it breaks the operating regime of the site, because people will inevitably just blindly upvote the folks whose aesthetic matches theirs, and downvote or flag those that don’t–or worse, devolve into namecalling.

                                                                Okay, well, what about big-E Ethics?

                                                                So, we skip out on thinly-veiled callout threads and we’re just gonna limit ourselves to talking about big-E Ethics. Academic/philosopher stuff like meta-ethics and normative ethics and subtopics like utilitarianism and virtue ethics and state consequentialism and so forth.

                                                                And those are really fun topics. We have problems with those as the basis for subthreads though:

                                                                • Hardcore philosophy (despite our having a tag by that name, since that usage is looser) is off-topic.
                                                                • Most users (myself included!) are completely underskilled to talk big-E Ethics without a lot of clarifying back-and-forth and education in threads. Even assuming we have the skill to do all of that in a subthread (we don’t) and that we avoid falling back into moralizing (we won’t), such conversations suck all of the air out of the room for the technical discussion. That Palantir thread had us scrolling to the very bottom to get anything involving code or tech.
                                                                • We’re gonna end up having the same discussions over and over again, as the big-E Ethics questions are, rather famously, undecidable.

                                                                Okay, fine, what about professional ethics?

                                                                Sure! If people want to talk about how a given thing violates professional ethics, then I think that is healthy. Here is the ACM Code of Ethics. Use that as a starting point in a subthread.

                                                                Note though that we still don’t have professional organizations in the sense of, say, Professional Engineers. Our profession isn’t organized enough for that. So, talking about “professional” ethics is kinda hard.

                                                                ~

                                                                Overall, I just don’t think that the “ethics” discussions are what people are actually after here. I think people want to callout and shit on other folks, and that they want to show to their friends solidarity in an aesthetic. This damages one of the only good venues for safe technical discussion on the ’net today.

                                                                And I won’t stand for that.

                                                                1. 30

                                                                  I would, gently, point out that adjucating morals to aesthetics (the study of beauty, and of which the current post-Romantic admits a separate aesthetic for each individual) is not a stance that is particularly admirable.

                                                                  Simply keeping “Lobsters about tech” is a big E ethics decision, with ramifications that ripple out.

                                                                  If you want to demand that people treat other people well, that is a stable ethical choice that is supportable and relatively decidable.

                                                                  ~

                                                                  But to be clear, working for Palantir - or other major enabler of violence & repression that generates widespread sideeye, is both a technical and an ethical choice; pointing this out and pushing back against consuming technical material from such an enabler seems perfectly reasonable.

                                                                  We can debate whether working for Palantir is ethical - it probably also enables benefits to LEOs working complex cases and addressing real social harm. Many times on other social media sites, employees of ethically tangled companies will comment and discuss the complexity and reality of working in these environments. There is a very real debate, it’s not an open and shut thing where some group of activists come in and screams.

                                                                  I reiterate: technology and ethics are intertwingled. While some contexts are more neutral than others, very few are pure neutral.

                                                                  1. 12

                                                                    @pnathan I didn’t want to wade into this muck, but you seem genuine. In my mind is not whether debates about ethics is good or bad, but rather what is lobste.rs for? There are PLENTY of places on this big internet to get on a soapbox and yell about whatever gets your goat. I want a quiet corner where I can just read about technical things. Code, decisions behind code, some PLT, some math and the occasional bit of humor. Perhaps the people here saying, well Kaushik, its time to go away somewhere else because that’s not what lobste.rs is for any more, and I will join the stragglers as we exit out of yet another refuge inundated by the loud and obnoxious soap box crowd.

                                                                    1. 10

                                                                      I’m 100% with you here. I see way too much soap boxing and bickering pretty much everywhere else on the internet. This was a safe haven for technical discussion without the political theater. If it’s going to become that, I’ll be happy to leave and try to form yet another community where we are trying to avoid this kind of stuff.

                                                                      1. -2

                                                                        leave and try to form yet another community where we are trying to avoid this kind of stuff

                                                                        I’ll wager that ethical questions will inevitably follow you there, as they are inextricably part of the human experience, whether or not the primary topic is tech.

                                                                        1. 4

                                                                          I’m not trying to avoid them entirely, I just want a forum for technical discussion. Not everything has to be polluted with other topics and agendas

                                                                          1. 1

                                                                            You might find the more focused discussion you seek in a special-interest forum. General-interest fora will attract general topics of conversation.

                                                                            1. 11

                                                                              Lobsters has been that forum for me until recently.

                                                                              1. 0

                                                                                That’s interesting. I hear many voices in this thread expressing the same. I never saw this website as something like that, I just saw it as a place where some relatively niche computing topics are aggregated.

                                                                                1. 7

                                                                                  You’re also relatively new here compared to some of us, so that probably feeds into it. The site has grown quite a bit since I joined.

                                                                                  1. 1

                                                                                    I was reading this website for a long while before I got an invitation, but it is fair to say my account history is relatively new. When I started reading, most posts seemed to get an average of 1 or 2 comments. It’s hard for me to reconcile this—some folks are lamenting that recent discussions are not in keeping with the historical tone of the site, but the site has been historically silent on most topics.

                                                                                    1. 5

                                                                                      Try looking at it from a different perspective. Perhaps the absolute level of good quality comments hasn’t moved too much, but perhaps the absolute level of low quality comments has increased. If that’s true, it increases the signal-to-noise ratio and can lead to the “we used to have more good quality content here” observation.

                                                                                      1. 2

                                                                                        I was being very generous with the comment count. Even today, when I posted that comment, half of the front page articles had zero comments. Perhaps the signal level is just too low to begin with. Maybe there’s no consensus on what the signal is.

                                                                      2. 4

                                                                        you seem genuine

                                                                        That’s one of the nicest things someone not my wife has said to me for some time. :) Thank you.

                                                                        My basic thought is that I also want a corner where we can seriously talk about highly technical things, but we should be aware and also talk about the broader ramifications of our work, because we have the technical background to get the implications of our work and be correct about how it works, and to talk about the ethical implications of how a specific capability works/doesn’t work (whereas I have deep suspicions of an arbitrary op-ed columnist whinging about tech and begging for regulation).

                                                                        To ask for a soapbox free zone seems completely ok - to ask for an ethics-free zone is an ethical choice that selects for specific social choices (as non-obvious as that may seem). To be specific: I’m not sure discussing the ethics of a new compiler gets us anywhere, but if its produced by Dr. Evilheart Murder Enterprises, maybe we need to discuss if using it supports D.E.M.E., and if we can redeem the technology from its production in the context of D,E.M.E. I don’t think that this is some lefty social justice agenda I’m asking for…. Maybe I’m wrong.

                                                                      3. 12

                                                                        I acknowledge the intertwingling, abstractly. But it seems you’re not addressing friendlysock’s actual concern. Is an announcement thread by a new user who happens to be the maintainer of an open source project an appropriate place to have the “very real debate” about whether working for that person’s employer is an ethical choice? When a commenter on that post engages in a blatant personal attack and is rewarded with upvotes aplenty, is the “very real debate” being furthered?

                                                                        1. 10

                                                                          I would say so: it’s an opportunity for the software developers of Palatir to make a case that they are acting in an ethical fashion, that the world is complex and they are producing a net good. When I worked for a Famously Bad Reputation company, we were encouraged to defend the company. This would have definitely been a place where the maintainer could have defended themselves - if company policy allowed, of course.

                                                                          One of the interesting bits of social psych is conformity matters. If the general community shuns X group, to the point where its a permanent black mark on the record generating firings/no-hirings and it’s not something anyone is comfortable around at church, marrying family members, etc, then the X group diminishes into the fringe. Whether you are conservative or liberal, you wind up having a conformity and a social order. I’m not personally sure where to draw that line and place the mark, but Palantir is a popular target for placing that mark.

                                                                        2. 8

                                                                          I would, gently, point out that adjucating morals to aesthetics (the study of beauty, and of which the current post-Romantic admits a separate aesthetic for each individual) is not a stance that is particularly admirable.

                                                                          Why not? There’s a huge variation in morality within our own culture, let alone looking across cultures. You can find people that believe that it’s immoral for two people with the same groin-endianness to get married, and others who think that it’s immoral for to accumulate a large amount of money. You have people who think that allowing dictators to abuse their people is immoral, and others who think that intervention is a bigger evil. You have people who think that it’s important to protect the freedom of users with copyleft licenses, and people who think that copyleft immorally restricts commercial use of software. You have fights between which supposedly divinely inspired book written thousands of years ago by uneducated sheep herders/traders/warriors/… is the primary authority on how to live your life. The list goes on, and all of them have people who believe one thing or the other.

                                                                          The shifting scene of prevailing ethical thought really does make it more like aesthetics than people are often comfortable admitting. Yes, it has longer term effects on people’s lives, and yes, it’s got some underlying principles, but it’s certainly not some sort of fixed beacon of truth.

                                                                          Why do you think that there is a universal set of ethics that people subscribe to? And if you don’t, do you really want this site to be either the battleground for deciding this, or a community of yes-men who boringly signal that yes, they are indeed a part of the in-group?

                                                                          There are lots of valid and interesting discussions to have on these topics, but to me, they detract from lobste.rs.

                                                                        3. 2

                                                                          The book that revived virtue ethics as a viable project, MacIntyre’s After Virtue, points out how (and explains why) contemporary ethical debates have a peculiarly shrill and interminable character.

                                                                          1. 2

                                                                            This is a weird use of “aesthetics”. I don’t really know what you’re trying to say.

                                                                            1. 2

                                                                              I read “aesthetics” as, roughly, “something that a group of people has decided to call ‘basic human decency’, with the various external trappings this entails”.

                                                                          2. 21

                                                                            Yet I somehow suspect if I ask “What are the ethical implications of creating a webassembly backend for ocaml?” that I won’t receive quite as many upvotes.

                                                                            1. 6

                                                                              If the answer to the question “What is it built for?” is “for missile guidance systems”, we are in a different territory pretty quickly, though! Nothing technology lives without context.

                                                                              To turn this into something more tangible: when DARPA invested around 10 million for https://c2rust.com/, it definitely raised some eyebrows and sparked a couple of discussions.

                                                                              1. 9

                                                                                ARPA/military were behind the Internet, GPS, Tor, and (via defense contractors) majority of contributions to Linux kernel. Yet, most people discuss them without warnings or ethical debates in threads.

                                                                                It’s just specific things that are also talking points in liberal media.

                                                                                1. 2

                                                                                  You are making it seem like these things have not been discussed, which is definitely not the case. Also, we’re not liberal media, we’re a community.

                                                                                  1. 2

                                                                                    Most of the statements read like they were pulled out of the liberal media. Pop-culture politics. People that actually care about popular politics here, say inclusion of under-represented groups, would have people from those groups, esp women, in the main teams (eg Rust compiler/libraries), be submitting work from such underrepresented people here to Lobsters instead of white/asian males, linking to write-ups by the same in the comments, and so on. There’s just one or two people doing that consistently off the top of my head.

                                                                                    Inclusive politics here mainly equals writing comments and language policing to such people, not actually highlighting work by or bringing in underrepresented. Aka what they’d do if it really mattered. Same with employers, eco-friendliness, etc where someone could call out an OP in the majority of threads every day about the ethical ramifications of what they’re submitting. They only do on specific, popular, talking points, though.

                                                                                    I make an exception for you since your community work probably does a lot of good in inclusion. A lot of good period. On Lobsters, though, most people voting for prioritizing politics for social justice certainly aren’t boosting minorities or even ethical suppliers. So, I call BS on it really mattering to them past ego value from social signaling, virtue and shaming.

                                                                                2. 9

                                                                                  So if somebody builds a webassembly backend for missile guidance and puts it on github, is it ethical to use it for protein folding research? Or is it forever tainted?

                                                                                  1. 1

                                                                                    That’s a different question, and yes, it’s an interesting one. It’s also not like things on Github are just there. They still have a maintainer, a hosting organisation, and a leadership.

                                                                                3. 2

                                                                                  Thats a cute non-sequitur, given that no one is inserting ethical implications into things like that. Seeing as this thread was sparked by the discussion around the ethical implications of software labor being used to further the work of a surveillance contractor, its not just a worthless message-board retort, its actively muddying the waters around issues that are inseparable from ethical questions.

                                                                                4. 18

                                                                                  You’ve got to go about asking these questions in a way that actually enables the OP to respond. Instead, we got a massively passive-aggressive jab at the OP’s company:

                                                                                  I guess it may be possible to work at a seedy company and still do good stuff […] Regardless, thanks for releasing this as free software.

                                                                                  After which, the top commenter is hailed as a hero, and, to no one’s surprise, the OP didn’t respond.

                                                                                  A reword that might have actually elicited a response might have started with “Thanks for releasing this as free software!” rather than the “yeah, your company sucks, but thanks anyway” angle.

                                                                                  1. 9

                                                                                    the creation of technology is an set of actions subject to ethical judgements

                                                                                    Assuming that it is true - is it possible to have a small place (e.g. lobste.rs) which is for discussing technology without ethical implications and all the rest of the net for discussing whatever you want (also ethical aspects of technology)? Is this something you can imagine being possible or do you think that such place can’t exist? (this is a serious question)

                                                                                    1. 32

                                                                                      That’s certainly an important question.

                                                                                      I think that it’s certainly possible to mention technology without explicitly mentioning ethics. I also think that engaging in that way is an ethical position. You can separate them at the surface level of discussion, but not in the substance.

                                                                                      That said, I can certainly imagine a community in which technology is discussed but ethics is never explicitly mentioned. I would not want to be part of such a community; I would find it deeply unsettling. I do think that some people might like it, and there are a variety of reasons for that and I wouldn’t want to make assumptions about any particular person’s reasons.

                                                                                      1. 7

                                                                                        I think the problem with ethical discussions on a technical forum is that there’s not really a shared basis for those discussions. We might have a bunch of members from various religions and cultures who subscribe to widely different ideological frameworks and ethical principles. These different backgrounds are likely to be incommensurate, incompatible, and irresolvable.

                                                                                        In that way it’s similar to discussions like “Are static types good or evil?” or the famous editor wars—so called “religious flame wars” which are known to ruin communities if left to fester.

                                                                                        So indeed it is a kind of ethical decision about the norms of the community—whether ethical claims and disagreements ought to be encouraged in comment threads. There are pretty good reasons against.

                                                                                        Let’s say I’m a committed socialist or communist or anarchist. There are many such people who are programmers. Now I have very good reason to enter threads about commercial activity and ask the involved people to justify their clearly immoral participation in the tyrannical, plutocratic, deeply unjust system of capitalism. I would of course encounter a bunch of dirty capitalist apologists trying to argue against my ethical position… and we could go on for a long time… almost certainly to the detriment of the community.

                                                                                        1. 5

                                                                                          “I think the problem with ethical discussions on a technical forum is that there’s not really a shared basis for those discussions. We might have a bunch of members from various religions and cultures who subscribe to widely different ideological frameworks and ethical principles. These different backgrounds are likely to be incommensurate, incompatible, and irresolvable.”

                                                                                          You nailed it. That isn’t hypothetical: it happens in every political thread. The ending, minus rare exceptions, is everyone ends up believing what they already believed with some shunning their opponents in some way. Lobsters doesn’t work for political discussion that’s about actually changing people’s mind.

                                                                                          Of course, many of you are starting with the foundation that people wanting politics want a political discussion. They mostly don’t as evidenced by their comments in such threads. If you’re curious, I just described here the evolution of politics and behavioral patterns on this site from when I first came to where we’re at now. Given the same environment, political discussion is and will continue to be impossible because the dominant group intends for it to be. They want compliance and conversion, not discussion.

                                                                                          1. 3

                                                                                            I don’t necessarily know that changing people’s minds should be the goal, but I also don’t know that it’s impossible. I think you’re describing what happens when everyone reacts defensively. It’s indeed not possible to change someone’s mind if they aren’t willing to open up and have a real conversation, so I wish the world in general would be more open to interacting in ways that aren’t so resistant to real dialogue.

                                                                                            I’m an optimist, and I believe that when people try, they can engage with the goal of at least leaving each other with something to think about.

                                                                                      2. 6

                                                                                        I’ll suggest this (mainly tongue-in-cheek) but it might be a good solution: for every submission provide another link next to ‘reply’ called ‘ethics-reply.’ The links go to two separate discussion areas. That way, people can dip into the tech or ethics discussions as they like.

                                                                                        1. 6

                                                                                          If such a place did exist, I think you’d have trouble finding a lot of people who would want to hang out there. I’ll just jump immediately to the most extreme possible example: if someone posted an article about the technology used by the Nazis to organize the Holocaust, but discussing the attendant ethics was strictly forbidden, would you be happy participating in that discussion? Would you want to spend a lot of time talking to other people who would be happy participating in that discussion?

                                                                                          1. 14

                                                                                            if someone posted an article about the technology used by the Nazis to organize the Holocaust, but discussing the attendant ethics was strictly forbidden, would you be happy participating in that discussion?

                                                                                            I am a jew who was raised by holocaust survivors. My answer is yes. In fact, I think it’s the only way that one could have a discussion about the technology used by the Nazis that wasn’t immediately dragged off topic.

                                                                                            And, honestly, an ethical discussion would either be abhorrent or boring, since a vibrant discussion implies a difference of opinion, and anyone who has significant differences in belief with me on the ethics of systematic mass murder is someone that I don’t expect to have a productive discussion with.

                                                                                            1. 12

                                                                                              Yes to both, to be honest. I did a bit of research for a point the other day, and something occurred to me.

                                                                                              Technology, especially computing, is all about solving problems at scale and efficiently. For the most part of the 19th and 20th centuries, the domains that actually had the scale to justify theoretical work and practical development tended overwhelmingly towards things like military applications (standing armies tending to be some of the largest organized groups around) and demographics/census/taxcollecting work.

                                                                                              For better or worse, note that IBM was really good at tabulating census data, something that the Nazis took advantage of. I personally would be happy talking about techniques for tabulating that data and managing it, in hopes that it could be applied to more positive uses. Similarly, I’d be happy to learn about rocketry from von Braun, even though most of what he learned he learned by dropping explosives on British civilians.

                                                                                              1. 5

                                                                                                Let’s take the specifics. Is Palantir stuff that remarkable to be worth the inevitable fallout in the comments and personal ethical compromises? Is it really that seminal and groundbreaking?

                                                                                                It is a dilemma when we talk about say an SS officer who also happened to run the US Moon programme. But Palantir is adtech’s meaner sibling, what is there that makes it worth picking the turd pile?

                                                                                                1. 9

                                                                                                  The drop in the level of technical discussion is the issue, not the company being discussed. I’d prefer to let posts on unethical companies die in silence, rather than make this site a worse place to discuss technology.

                                                                                                  1. 2

                                                                                                    Another reason is highlighting the bad gives you less time to create the good. Most people that care can look up a company to see if there’s anything messed up. The bad or at least going with the flow are also the majority. If we’re talking companies, I’d rather people put more effort into highlighting ethical ones with useful tech or products. Basically, anything that can be a fit here on technical grounds with them also mentioning in a comment that the person, company, product, etc is good/beneficial for (reasons here). Maybe they mention some bad examples with it if trying to shame companies. Just optimize to promote more tech and examples of public benefit over just calling out bad companies who are the perpetual default.

                                                                                                    Easy example: Prgmr.com over Digital Ocean, AWS, Google, or Azure if fits use case due to ‘straight-forward offerings, great service, some nice people, and freely hosting an excellent site for deep, technical discussion.” The submission might even be about something else entirely that’s merely hosted on the ethical product/service. Then, they add a quick note about it that barely distracts from the focus on technical content. Just all flows together for the reader.

                                                                                                  2. 8

                                                                                                    the inevitable fallout in the comments

                                                                                                    The fallout is not “inevitable” - it is not a force majeure. Actual, specific, individuals CHOOSE to make it about the “ethics”. You’re asking people to appease these individuals.

                                                                                                  3. 2

                                                                                                    Would you be also ok to discuss methods of performing deadly medical experiments on people with Nazi concentration camps staff? Would you be ok to advise them how to improve the scale and speed? Would you still want to keep such discussions ethics-free? How about diacussing effectiveness of guns with the Zodiac Killer? Or advising Ted Kaczynski on bombs?

                                                                                                    edit: Please note my intention here is not to seed outrage; I’m sincerely interested in your answer, as I find it hard to imagine setting really no ethics limits, so I’m curious to gauge where would you actually set them? Or would you really want no limits?

                                                                                                    1. 6

                                                                                                      I’ll pick on your first example, because I don’t see benefit in addressing the others (I read you as making the same category of point, with those added for emphasis).

                                                                                                      Would you be also ok to discuss methods of performing deadly medical experiments on people with Nazi concentration camps staff? Would you be ok to advise them how to improve the scale and speed?

                                                                                                      Let me turn that around on you:

                                                                                                      Would you prefer they do them inefficiently, if you knew they were going to do them regardless? Would you prefer that the innocent lives lost in the nominal science of these experiments be done in vain because somebody screwed up their data collection? Would you prefer that, for the same data, they use extra prisoners because they suck at statistical power analysis?

                                                                                                      I don’t support immoral behavior, such as mass murder and torture. I do recognize that whether such things are legally or ethically permissible (again, not morally) is something that transcends individual opinion, and that where those acts fall is a function of the zeitgeist of the times. Sloppy engineering, science, and math will always be sloppy, aesthetics of the time be damned.

                                                                                                      We can’t get to identifying and fixing/discouraging/pillorying that sloppy behavior if we can’t engage with it. We can’t even get close enough to try and reclaim those lost souls if we can’t engage with them on (nominally objective) material civilly.

                                                                                                      1. 6

                                                                                                        Thanks for the interesting reply! So, I think in shortest words I could express what I think about this the following way: I would indeed prefer for them to do this ineffectively - I’d say that is the principle behind sabotage. As far as I know, sabotage works. And that’s indeed what I’d hope to be able to say I’m doing against actions I believe to be significantly unethical. (Though trying to keep my own integrity in means employed to that end.)

                                                                                                        1. 9

                                                                                                          I’m not sure sabotage always works the way one hopes. When you destroy the results of human experimentation, the data is recreated by repeating the experiments on a new set of humans. That seems like a bad outcome for those involved.

                                                                                                          I think the problem is we too often define success as hurting the bad people, and yes sabotage hurts them, but we too should consider the collateral damage of our actions.

                                                                                                          1. 6

                                                                                                            It’s not about hurting bad people. It’s about making their evil work harder and less efficient at actually hurting good people, while also trying to convince evildoers to not do the evil in the first place, and preferably do good instead and thus become good people. If doing evil is easy for them, it won’t make them do less of it, but rather more of it. They will always invent new experiments to do on a new set of humans anyway. Appeasement policy did not work on the onset of WW2. A bully must be stopped, not let continue the bullying. A child doing bad things must be reprimanded and informed/educated about bad consequences of their deeds, not spoiled.

                                                                                                            1. 1

                                                                                                              Well put.

                                                                                                    2. 5

                                                                                                      if someone posted an article about the technology used by the Nazis to organize the Holocaust, but discussing the attendant ethics was strictly forbidden, would you be happy participating in that discussion?

                                                                                                      Interesting example - you are asking if I would be interested in (discussing) e.g. technological aspects of IBM products around Second World War. Yes, this might be very interesting. I can also imagine other Nazi tech related topics that I wouldn’t find interesting (but see no reason for others not to be interested in) and in such cases I would use the hide button. Hopefully such place wouldn’t be all war tech from Nazi Germany or modern day USA ;)

                                                                                                      1. 4

                                                                                                        I would absolutely be hanging out there. That was kind of how this place has been for the most part.

                                                                                                        As to your question about Nazis, yes I would want to discuss the technology, and I’d be happy to discuss it with people in those threads. If it were completely neutral politically, there is the potential to have great technical discussion.

                                                                                                        1. 3

                                                                                                          I think you’d have trouble finding a lot of people who would want to hang out there

                                                                                                          I agree, but that’s not a bad thing, is it? This is not some sort of mass movement.

                                                                                                        2. 0

                                                                                                          s it possible to have a small place (e.g. lobste.rs) which is for discussing technology without ethical implications and all the rest of the net for discussing whatever you want

                                                                                                          No. Even if it were, this would not be it.

                                                                                                          1. 1

                                                                                                            Even if it were, this would not be it.

                                                                                                            How do you know this?

                                                                                                            1. 0

                                                                                                              Because this site is full of intelligent people.

                                                                                                              1. 9

                                                                                                                Ah. You’re implying that “discussing technology without ethical implications” is exclusive to stupid people. Do I understand you correctly?

                                                                                                                1. 2

                                                                                                                  I’m chewing on my keyboard right now!

                                                                                                                  1. 1

                                                                                                                    Discussing technology without coming up against ethical issues is impossible. I don’t think intelligent people would just skirt around them when they come up.

                                                                                                          2. 5

                                                                                                            Do you have an example of an action that would not be subject to ethical judgements? In trying to understand your claim, but I don’t sufficiently understand the definitions you’re using to determine whether you’ve made a falsifiable statement or not. Will you spend a little time describing the limits of your statement or what empirical observations support it?

                                                                                                            1. 6

                                                                                                              I would argue that there is a class of actions, e.g., selecting one knife over another in the kitchen for cooking, that has neither inherent ethic or no ethical consequence. Now, the ethic selected for consideration will affect whether you consider something to be of consequence. If, e.g., there is an ethical judgment on the Proper Utensils To Use, then that becomes of ethical consequence. Generally, societies consider actions such as killing adult humans to have inherent ethics.

                                                                                                              Suppose we choose gcc or clang - then you are supporting, ever so mildly, one development philosophy & license over another. Those licenses are widely considered to have ethical entailments. The FSF has very strong ethical stances about licensing.

                                                                                                              Now, with respect to empirical observations, I suggest weapons systems: they are an obvious technology which carries ethical implications. Other technology might be: AirBNB (affects housing), Uber (affects taxi operators), factory robots (replaces factory workers). Each of those affects jobs and thus the ability of many members of society to be fed and housed, a clear ethical question.

                                                                                                              I hope those presents samples that adequately points towards the answer you are looking for.

                                                                                                              1. 7

                                                                                                                I would argue that there is a class of actions, e.g., selecting one knife over another in the kitchen for cooking, that has neither inherent ethic or no ethical consequence.

                                                                                                                Interesting. Why do you believe that the methods that knife companies use to exploit their workers and the labor conditions of their employees would not be something to discuss? Do you believe that the environmental implications of importing knives from China rather than buying them locally has no ethical impact? What about the historical implications of Western expansion and influence in Japan, and the resulting western style Gyuto knives supplanting Sujihiki style kitchen knives? In fact, not only are there ethical implications, there are deep historical forces involved in your selection of kitchen knives.

                                                                                                                Of course there are ethical considerations in picking kitchen knives. But you might not want someone to bring them up every time you try to discuss paring potatoes, because they may be considered to be off topic by some.

                                                                                                                1. 4

                                                                                                                  Ah, this is the problem with language: I was contemplating grabbing one knife out of my kitchen bin versus another. “Selection” is a polymorphic verb over multiple objects dispatching… and yes, actual purchasing of knives exercises an ethical choice regarding the supply chain and who gets my infinitesimally small dollar choice.

                                                                                                                  It’s a bit tiring, as a friend said to me once, there is no ethical consumption under capitalism(even if you disagree with my Lefty friend there, you can get the spirit of the statement) - sometimes you do just need to get the Thing done. One has to care the appropriate amount, and respond in the proportional manner.

                                                                                                                  1. 10

                                                                                                                    there is no ethical consumption under capitalism

                                                                                                                    I’d go one step further: There’s no such thing as an unquestionably ethical action. The economic model doesn’t matter – everything is an ethical trade off. With that realization, it becomes clear that ethical debates can be shoehorned in anywhere, which is why a space where discussions on ethics are deemed off topic can be valuable.

                                                                                                                    (Edit) High quality discussion on ethics would be interesting, but quality is subjective, and discussions are prone to turn into flame wars and shaming, especially in today’s internet climate, so I’d rather have them declared off topic, at least in this little corner.

                                                                                                                    1. 8

                                                                                                                      If politics is encouraged in every applicable thread (it is now) and I wanted to join that practice (I don’t), I could be calling folks out in many (sometimes most) threads here each day on ethics around employers, code maintenance, energy use, disposable products causing environmental harm, using tech that’s non-inclusive cuz few understand it or CPU/RAM requirements price out the poor, and so on. It would be ridiculous even when true since it distracts so much from the kinds of technical submissions that brought many people to Lobsters in the first place. Especially those actually building interesting stuff vs just submitting.

                                                                                                                      It’s why I was for either ban on politics or a tag so it would be in specific threads folks could filter. Both got shot down. Here we are.

                                                                                                            2. 6

                                                                                                              You’re absolutely correct.

                                                                                                              Hell, Portland State University’s CS program even has a requirement class “CS 305 Social, Ethical, and Legal Implications of Computing”[0]. I suspect this is not an anomoly..

                                                                                                              1. https://www.pdx.edu/computer-science/cs305
                                                                                                            1. 7

                                                                                                              I describe how I failed to do what I preach and ended up writing integration tests instead of unit ones.

                                                                                                              1. 18

                                                                                                                It’s ok to take a dual approach. In fact, it’s often inevitable. Tests are a way of asking questions and documenting the answers. Some questions are high-level and others are low-level. In legacy code this is particularly true. Write unit tests for a monolithic controller and they become integration tests once you extract classes from it.

                                                                                                                1. 6

                                                                                                                  In legacy code, maybe, but this is code I wrote from scratch this year.

                                                                                                                  You’re not… the Michael Feathers are you?

                                                                                                                  1. 11

                                                                                                                    Yup. I am.

                                                                                                                    1. 10

                                                                                                                      I read “Working Effectively With Legacy Systems” a few years ago after my company moved me to a team suddenly responsible for maintaing a codebase written by a completely different team in another company. Thanks for the tips therein, even though I struggled to get any of my new teammates to read it.

                                                                                                                      A few of us that fought the good fight did eventually manage to bring order into the chaos by writing a lot of tests though.

                                                                                                                      1. 2

                                                                                                                        Great to hear. Glad I was able to help.

                                                                                                                      2. 1

                                                                                                                        You’re joking?

                                                                                                                        1. 4

                                                                                                                          Can confirm, we met in person. He’s super cool in real life, too!

                                                                                                                          1. 3

                                                                                                                            This is one of my favorite things about the internet =)

                                                                                                                    2. 2

                                                                                                                      I really like the collaboration test approach (partially) described by JB Rainsberger….

                                                                                                                      It took me awhile to realize it implied a separate, standalone module of code, that get’s reused in multiple contexts.

                                                                                                                      ie. Atila shouldn’t be testing that libclang works, that’s the job of the unit tests inside libclang.

                                                                                                                      He should be writing collaboration tests that prove that his code and libclang agree on the interface specification.

                                                                                                                      He needs to prove that his code meets the preconditions for calling the libclang code, and that his code can handle every possible return code and result permitted by the interface specification.

                                                                                                                      ie. He needs to create a collaboration test shim that is shared between his unit tests and mocks and integration test and production code that checks the interface specification.

                                                                                                                      ie. The collaboration test shim checks whether the unit tests, the mocks, the integration tests, the production code, and libclang itself all conform to (what he believes is) the documented interface, and the test shim is common standalone code that is byte exact shared (as appropriate) between all the above.

                                                                                                                      ie. The single responsibility of a collaboration test shim is to document, understand, check and enforce the interface specification for a particular concrete 3rd party interface..

                                                                                                                    3. 6

                                                                                                                      I often start from an integration/system test and work my way in. My reason is that I want to build some software because it solves a problem someone has, and the system test shows that I am solving that problem. I write a unit test when I think of some software I want to write, and the unit test shows that I have written that software. That’s fine, but I also want to know that the software I write is solving the problem :).

                                                                                                                      1. 3

                                                                                                                        I often start from an integration/system test and work my way in

                                                                                                                        Me too, I learned this by doing BDD. The thing is then writing and relying way more on unit tests.

                                                                                                                      2. 3

                                                                                                                        I might do another blog post covering how I ended up porting a codebase with pretty much only integration tests to the unit variety.

                                                                                                                        Alternative suggestion: do a blog post on switching your project to something other than libclang (what would that even be?!). That would help determine whether these concerns you’re trying to separate actually matter in practice. Porting tests is a certain amount of effort. It makes a lot more sense if it’s in aid of a specific purpose.

                                                                                                                        There’s always some dimension you can generalize in software. But if it’s never going to be needed it’s just useless work. (Or a kata, which would be a totally valid reason.)

                                                                                                                        1. 1

                                                                                                                          Somebody suggested gcc plugins. I don’t know how that works. But yes, using a different parser frontend would help point out where I’ve gone wrong.

                                                                                                                      1. 9

                                                                                                                        A function may succeed. Or it may, for example, fail because of disconnected backend. Or it may time out. And that’s it. There are only two failure modes and they are documented as a part of the API. Once you have that, the error handling becomes obvious.

                                                                                                                        I must be missing something because it really feels like there are plenty of other ways for a function to fail. Is this limited to a specific context? If it’s only for infrastructure, it still seems woefully pidgeonholed.

                                                                                                                        As already mentioned, classic exceptions are the worst.

                                                                                                                        I’m not clear on why they are “the worst”.

                                                                                                                        The discussion does hit on something that makes sense to me: think about and document the error conditions. Frankly, if you have that, the methodology of reporting the error becomes less of a hassle. But still, error handling is plauged by the fact that it is often something non-local that is affecting the computation and there is rarely any useful information or language constructs that make dealing with it anything short of a massive chore. (Correcting it usually means interacting or “conversing” with some other entity to gain the knowledge to proceed.)

                                                                                                                        1. 4

                                                                                                                          I must be missing something because it really feels like there are plenty of other ways for a function to fail. Is this limited to a specific context? If it’s only for infrastructure, it still seems woefully pidgeonholed.

                                                                                                                          POSIX is quite a good example of how it could work. Every function can return few possible error codes and that’s it. The idea is that implemeter of the function deals with the complexity and factors all possible error conditions into a small neat set of error codes that makes sense from the user’s point of view.

                                                                                                                          The rule here should be: If you don’t know what to do with an error condition, don’t just pass it to the caller. The caller understands the problem domain even less than you do.

                                                                                                                          But still, error handling is plauged by the fact that it is often something non-local that is affecting the computation and there is rarely any useful information or language constructs that make dealing with it anything short of a massive chore.

                                                                                                                          The point is to use encapsulation for errors as well as for normal functionality. If something non-local causes an error somewhere down the stack, the layer that deals with the thing (and every layer above it) should convert it into an error that makes sense in the local context.

                                                                                                                          1. 1

                                                                                                                            If something non-local causes an error somewhere down the stack, the layer that deals with the thing (and every layer above it) should convert it into an error that makes sense in the local context.

                                                                                                                            When said this way, I understand the point better. I did not get that from the original post. I think that’s a reasonable way to deal with things, although I don’t think it precludes exceptions as the mechanism for doing it.

                                                                                                                            1. 1

                                                                                                                              True, but exceptions make it super easy to screw it up. Just forget a catch block in one function and the raw low-level exception escapes up the stack. In C/Golang style of error handling you have to at least pass it up manually which will, hopefully, make you consider whether it’s a good idea in the first place.

                                                                                                                          2. 3

                                                                                                                            (Correcting it usually means interacting or “conversing” with some other entity to gain the knowledge to proceed.)

                                                                                                                            That’s why, even though it is relatively heavy-weight for an API, it seems that passing a callback to be called on error is one of the most versatile things you can do. The callback can correct the error and allow the call to proceed or just throw an exception. At deeper level, doing this allows you to interact with context at the point of detection not the point where you express your intention: the initial call that led to the error.

                                                                                                                            I think this is the closest we can come to approximating Lisp’s condition system in languages without those constructs.

                                                                                                                            1. 3

                                                                                                                              Signals and restarts are wonderful things. It’s such a shame no other language or programming system (to my knowledge) has made a serious effort to emulate it, let alone build on it. Callbacks are the best we can do – or what we’re willing to abide – it seems.

                                                                                                                              1. 3

                                                                                                                                Have you heard of the Zen of Erlang? https://ferd.ca/the-zen-of-erlang.html

                                                                                                                          1. 7

                                                                                                                            Nice, but it’s unclear to me whether the algorithm it uses is better than simple Markov Chains for entertainment value.

                                                                                                                            1. 1

                                                                                                                              Recently I actually did a project like this. You can find it here: https://tofu.wtf/buzzwords

                                                                                                                              1. 1

                                                                                                                                It does seem a bit less repetitive, but that’s probably just the large amount of data it’s been fed.

                                                                                                                                // My favorite generators are the Conservative Book Title Generator and the Startup Generator :D

                                                                                                                              1. 3

                                                                                                                                It’s really interesting that game development has its own self-contained software design method disputes and innovation.

                                                                                                                                1. 14

                                                                                                                                  I would say that game development is probably the hardest mainstream development path. It includes the following mess of problems:

                                                                                                                                  • soft-realtime performance requirements
                                                                                                                                  • a need to generate tooling for people to build highly specific data for levels/scripting and whatnot
                                                                                                                                  • lack of control of the entire stack (both some messy middleware and things like peculiarities of consoles/different PC SKUs)
                                                                                                                                  • high coupling between subsystems, since generally you have this main game state and everything is touching that
                                                                                                                                  • requirements changing can mean ripping out entire subsystems. Hard to salvage certain kinds of work
                                                                                                                                  1. 6

                                                                                                                                    And:

                                                                                                                                    • hard deadlines, especially around December every year
                                                                                                                                    • cutthroat competition and market overcrowding
                                                                                                                                    1. 2

                                                                                                                                      Add to that:

                                                                                                                                      • very little control over the hardware used to run the software at the end of the day

                                                                                                                                      At least with consoles you know what the hardware will be, but you still can’t control it. But with PC games, you don’t even know what the hardware will be. So many other areas of software development just take a ‘throw more hardware at it’ approach to problem solving. In games, you just cannot do that. The end user’s computer is the end user’s computer. You’ve got access to what you’ve got access to. Nothing you can do about it.

                                                                                                                                      1. 1

                                                                                                                                        This is the reason why I feel that web frontend development is harder than backend development. When doing backend dev, I can actually choose (or at least influence the choice of) what machine the program will run on. :)

                                                                                                                                    2. 3

                                                                                                                                      A common pattern seems to be switching away from raw pointers into integer handles that index an array where objects are allocated. It’s gaining some traction in the Rust game development community as well.

                                                                                                                                      It would be interesting to see a detailed breakdown of pros and cons of that approach when compared to e.g. reference counted C++ smart pointers. I’ve seen someone scold it as “garbage collection from the 70’s” but they didn’t elaborate their critique further. At least with regular pointers reading from an invalid value (usually) produces an obvious crash instead of a silent failure you get with handles.

                                                                                                                                      1. 3

                                                                                                                                        A common pattern seems to be switching away from raw pointers into integer handles that index an array where objects are allocated.

                                                                                                                                        This has, as I understand it, been the standard in game development for decades at this point.

                                                                                                                                    1. 1

                                                                                                                                      Ruby is a great prototyping language. That’s how I use it. irb and a little bit of Enumerable and you can spec out many kinds of data transformation fast in an FP style and then write “real” code to do the same thing. It often takes me about 5 times longer to do the translation than to do the initial coding.

                                                                                                                                      1. 2

                                                                                                                                        I think that when people say “how the machine really works” they are referring to the distance between the work people do in C and C’s unforgiving machine representation. C presents a model where, to be effective, you have to live in both worlds as once. It forces awareness of Korzybski’s map-territory relation. You see, say, a string as concept while having understand it as a (hopefully) nul-terminated set of contiguous bytes in a flat sheet of memory. I think that because we have to hold both models, it’s easy to see the abstract machine as the real machine. It’s relatively more real than the concepts we use in the language.

                                                                                                                                        1. 12

                                                                                                                                          Maybe I’m wrong, but… What does exactly stop a company like Google provide pod hosting and end up having access to all pod’s data anyway?

                                                                                                                                          I dont imagine people hosting their own pods of information. You still need a way to allow third parties to access to the plain data, so they can use it.

                                                                                                                                          Today’s problem with internet and data owning isn’t technical. It’s social and cultural. Imho.

                                                                                                                                          1. 2

                                                                                                                                            If he has done it sanely, at most such a host would be able to glean is metadata that you accessed it when and from which ip address.

                                                                                                                                            They shouldn’t be able to look inside your pod to see what you are reading and writing, or even who you are.

                                                                                                                                            Admittedly given how much other data the likes of Google already has, they would be able to do de-anonymise you based on even that little bit of meta-data, but it would be a huge huge decrease in what they have on you presently.

                                                                                                                                            1. 1

                                                                                                                                              This would require that the POD information is encrypted. Such encrypted nature wouldn’t allow a “recover password” functionality.

                                                                                                                                              And today’s society can’t live without that. And won’t understand why there isn’t a recover password option and what does it mean that “everything is lost”.

                                                                                                                                              1. 1

                                                                                                                                                That would surely be a valid added service someone could provide.

                                                                                                                                                Key escrow.

                                                                                                                                                User Alice encrypts her private key along with some agreed identifying token with Escrow provider Bobs public key. For a small fee Bob will return Alice’s decrypted private key if Alice can provide the identifying token. eg. Her drivers licence.

                                                                                                                                                If Alice doesn’t trust Bob completely, she can double wrap it with as many independent escrow providers as she wishes.

                                                                                                                                                And today’s society can’t live without that. And won’t understand why there isn’t a recover password option and what does it mean that “everything is lost”.

                                                                                                                                                That sort of translates to in today’s current practices, “I’m not prepared to pay anything and I trust my email provider with all my data and trust him to be unhackable and I trust my email password and my data isn’t worth all that much anyway.”

                                                                                                                                                I’m sure that level of password recovery (and (lack of) data security) can continue be available to you for free.

                                                                                                                                                1. 1

                                                                                                                                                  If Alice doesn’t trust Bob completely, she can double wrap it with as many independent escrow providers as she wishes.

                                                                                                                                                  I just see too many steps that the user needs to do just to secure its data. Which will never happen, because, as you just said: “I’m not prepared to pay anything and I trust my email provider with all my data and trust him to be unhackable and I trust my email password and my data isn’t worth all that much anyway.”.

                                                                                                                                                  1. 1

                                                                                                                                                    Partly we’re in the “I’m not prepared to pay anything and I trust my email provider with all my data and trust him to be unhackable and I trust my email password and my data isn’t worth all that much anyway” age of the world because we don’t trust our providers.

                                                                                                                                                    I don’t store anything valuable on facebook because I don’t trust the likes of Zuck further than I can throw him.

                                                                                                                                                    I keep my money in the bank, because it’s more secure than under my bed…. but if your money regularly got stolen or “lost” whether you had it in the bank or under your bed or in your personal safe…….. Would you even bother accumulating the stuff?

                                                                                                                                                  2. 1

                                                                                                                                                    I think the Post office should offer that service.

                                                                                                                                                    1. 1

                                                                                                                                                      In the Bad Old Days I lived in a country with government issued ID books, without which you couldn’t do anything, it was a real pain in the ass, and not terribly secure.

                                                                                                                                                      In the current day I live in NZ where there is no mandated form of ID, and if you don’t have a driver’s licence or passport, (or you lose them) establishing ID for any purpose is a nightmare even worse than ID books, and in total probably a fair patch less secure.

                                                                                                                                                      In current NZ….. they are doing exactly what you suggest. https://www.realme.govt.nz/

                                                                                                                                                      Sort of.

                                                                                                                                                      Except it doesn’t provide me with options if I don’t trust RealMe as a really secure service provider (which I don’t).

                                                                                                                                                      1. 1

                                                                                                                                                        yeah, that’s a problem. I was thinking of a physical process. Show up with fingerprints and some id. You can only get access by visiting in person and checking in. When you checkin you can get copies of private keys or whatever you deposited, and PO can send, encrypted using its public key, your public key. Or something like that. Physical security.

                                                                                                                                                        1. 1

                                                                                                                                                          Personally I’m a social progressive.

                                                                                                                                                          I strongly believe the world still needs to progress in the sense that some things that are currently illegal, should be become legal, and some things that are currently legal, should become illegal.

                                                                                                                                                          The ’net is a tool that allows us to move faster from “here to there” so to speak.

                                                                                                                                                          Now as a thought experiment, choose an event of historical progress that you agree with (eg. banning of slavery, decriminalization of homosexuality, votes for women…)….

                                                                                                                                                          …and now imagine if at the time prior to that change, every opinion you ever had was physically bound to you, and surveillance was perfect.

                                                                                                                                                          I’m pretty sure that progress would never have happened.

                                                                                                                                                          We’re nearing the point in history where surveillance will be near perfect and ubiquitous…. we need a future where speech can be anonymous.

                                                                                                                                                          Thus the identity recovery mechanisms also need to be anonymous.

                                                                                                                                                          1. 1

                                                                                                                                                            i don’t know if you need an identity recovery mechanism for an alias . A government run one seems especially wrong.

                                                                                                                                                            1. 1

                                                                                                                                                              You don’t need a recovery mechanism if your data is worthless…..

                                                                                                                                                              If the recovery mechanism is designed right, it doesn’t matter who runs it.

                                                                                                                                                              It’s more in the realm of neutral infrastructure like a bus stop.

                                                                                                                                              2. 1

                                                                                                                                                It’s deeper than social/cultural. Systems tend toward centralization. That’s just what they do.

                                                                                                                                                1. 2

                                                                                                                                                  Systems tend toward centralization because social responsabilities tend toward centralization too. Because it’s simpler and just works with a trust mechanism.

                                                                                                                                                  Once trust is gone, centralization is gone, too.

                                                                                                                                                  If you have a society that is responsible and conscient enough to see the importance of their own data, you’ll get a decentralized system easily, because each individual will be responsible of it’s own data.

                                                                                                                                                  1. 2

                                                                                                                                                    Social has nothing to do with it. You see centralization in natural physical systems too, due to the same forces.

                                                                                                                                                    1. 1

                                                                                                                                                      It has to do with social as those artificial systems are born from the society and our interactions. Just see the Conway’s Law: https://en.wikipedia.org/wiki/Conway%27s_law as an example of mapping social structures to software.

                                                                                                                                                      1. 1

                                                                                                                                                        That’s a manifestation. It happens in purely physical systems too, like leaf structure. There’s nothing social about that. Here’s a talk: https://www.infoq.com/presentations/scalability-variant-structuring

                                                                                                                                                        1. 2

                                                                                                                                                          I mean: The software borns from society, so, if society changes (being the root of software), software will change, too.

                                                                                                                                                          Thanks for the link, tho, will check out :)

                                                                                                                                              1. 2

                                                                                                                                                Are the tests themselves excluded from the revert step? Otherwise I’m not sure how we can get the option of writing a failing test first, then making it pass, which I’ve found a quite useful idea from TDD. Without that, it doesn’t seem like we can use this in good faith to write new projects or new features, because we’d just write code without ever writing tests.

                                                                                                                                                I’m trying to distill this question down to something where Beck’s answer wouldn’t be “you’re doing everything wrong and that’s why this hurts”. Like, say I have some existing code and in my main function I group several distinct interfaces together. I now want to add a new interface that does a new thing to this group. What are the steps to work on that in this flow? In TDD I might write a suite of failing tests that probe the interface of my new thing and make them pass one by one. What would I do here?

                                                                                                                                                1. 1

                                                                                                                                                  In general, the approach in TDD is to write each test right before passing it rather than writing a bunch upfront and passing them later. There’s been a lot of variation of practice but that’s the way it’s been among people directly influenced by Kent’s formulation since he started describing it in the late 90s.

                                                                                                                                                  1. 1

                                                                                                                                                    I communicated poorly; what you describe is what I do when I do TDD (having learned it from the horse’s book, so to speak), but before I start writing any code I think about the interface I’m going to write and what tests I’d eventually like to have, and then do Beck’s cycle one-by-one on those.

                                                                                                                                                1. 1

                                                                                                                                                  This aligns with my sense that indentation is generally bad in programming independently of the issues with nested scopes.

                                                                                                                                                  1. 1

                                                                                                                                                    An example for this applied pattern is given in Listing 1. It is the main rule of the specification of the operational semantics of the control construct proposed in this paper. The initial value of the mode is assumed to be INIT.

                                                                                                                                                    I really wish authors didn’t do this. Meta-circular definition is cute but unnecessarily obscurantist, especially for people reading who are slightly outside the domain.

                                                                                                                                                    1. 17

                                                                                                                                                      To me, the issue isn’t that it is an “objective” argument but rather that it is a “universal” argument. Go’s designers made a design choice based on their goals. That’s fine. The extended rationale that indentation doesn’t scale in general or work for heterogeneous environments doesn’t really follow. In fact, there’s no real need to make an assertion past Go when making a decision for Go.

                                                                                                                                                      1. 14

                                                                                                                                                        These values reflect a deeper sense within me: that software can be permanent — that software’s unique duality as both information and machine afford a timeless perfection and utility that stand apart from other human endeavor. In this regard, I have believed (and continue to believe) that we are living in a Golden Age of software, one that will produce artifacts that will endure for generations.

                                                                                                                                                        I wish I shared that enthusiasm. A lot of software is accidentally permanent. We should rewrite more.

                                                                                                                                                        1. 11

                                                                                                                                                          I wish I shared that enthusiasm. I feel like I’m stuck up to my

                                                                                                                                                          armpits in vendored flotsam, flooded by sloppy abstractions hastily implemented

                                                                                                                                                          everyday. While filled with tremendous amounts of coffee the very thought of being asked by my boss if I’m done yet brings me out in a cold sweat.

                                                                                                                                                          1. 1

                                                                                                                                                            Here’s what permanence gives you. That isn’t even the worst set of examples. ;)

                                                                                                                                                            1. 1

                                                                                                                                                              But that is not necessarily bad just because it is old. The stuff seems to work for its purpose. So why change? Bad analysis of TCO, skewed understanding of risk. Don’t know, but I take issue with just because it is old it must be bad or useless.

                                                                                                                                                              1. 2

                                                                                                                                                                My washing machine and dryer are 20 years old because they’re better than modern ones in reliability. They do the job. They were cheap to acquire. The modern ones are intentionally worse. The older ones are worth keeping around since they (a) do the job I need them to do today and (b) do it better than new alternatives in a lot of ways.

                                                                                                                                                                You can evaluate computer systems similarly. The thing is that these older systems do not do what the companies really want them to do. For one, they use a lot of space and energy that the company might want to use for something else. The systems are usually really slow. The terminal-based systems designed only for human use don’t integrate with third-party components. The data was often locked-in via proprietary formats and protocols. If mainframes, they also pay a hefty licensing fee they might be able to dodge on alternative platforms. The systems in my link are objectively worse on many or all of these attributes. Sometimes, customers still like them anyway for subjective reasons like the chemical company or warehouse.

                                                                                                                                                                One can avoid a lot of problems if they use portable software (or languages), open protocols, and open formats. Then, they can always migrate later to a better vendor. If a supplier doesn’t have these, I recommend avoiding them by default for a platform since history shows they’ll become evil eventually. Most are run by people’s whose bonuses depend on that, too.

                                                                                                                                                                1. 3

                                                                                                                                                                  I don’t disagree with any of that. My point was just that the age is not always a good proxy for these properties.

                                                                                                                                                                  1. 1

                                                                                                                                                                    That’s true.