• 106 Posts
  • 32 Comments
Joined 4 years ago
cake
Cake day: January 20th, 2021

help-circle



  • The gold standard for me would be “adversarial collaboration” as described by Scott Alexander here and here. The first describes a conflict about psychic psi powers research. The amazing twist is that both sides wrote a paper together. The second article describes a similar collaboration about fact-checking. Essentially, this is “debate until they reach an agreement” with the additional requirement that they publish a joint statement afterwards.

    So, if you are in an intense discussion with somebody, the best you can do is to write a blog post together. It requires both of you to present the evidence in a neutral way and derive conclusions such that you both agree with the reasoning. The process will make you work out where exactly you disagree (the quality of the sources? different values? missing knowledge?).

    Is that realistic though? Such a collaboration is much more effort than a reply to a comment which triggers me. It is the best way to make progress in the overall debate.

    Is that the goal here though? We don’t care so much about the result or progress of a debate but only to keep it civilized so everybody feels welcome to continue. An “unproductive” discussion is ok as long as all participants are nice to each other.


  • I’m thinking in incentives a lot.

    • Apple wins if I buy more Apple stuff, so they are incentivized to pull me into their ecosystem. This means they will neglect integration with non-Apple services.
    • Google wins if I click on more ads, so they are incentivized to show me more desirable ads. Getting private data is crucial for this.

    If you are willing to go through the hassle of flashing your own OS, then buying Android hardware is the way. However, if you just want to buy something that works out of the box as much as possible, then Apple wins the privacy aspect in my opinion.












  • Comparable and bigger projects do use other languages: Hacker News (Arc/Lisp), Lobste.rs (Ruby), Reddit (first Lisp, then Python).

    I’m not sure if we really disagree. If I were to start something like Lemmy, Python would give me a quicker start because I have some Django experience. On the other hand, your argument to use a strictly typed language is a good argument as well. Since Lemmy is growing nicely, you certainly did not make a wrong choice. Way to go!


  • I have used D. It certainly isn’t perfect and has some historic baggage even though it is not mainstream.

    As a language, I’d say it is strictly better than C/C++ but of course the ecosystem is not as big and mature. D spoiled me and I miss many features whenever I use C++ at work. You could describe D as C++30 without the baggage.

    Rust is for serious systems programming. In other domains, the rigor imposed by its type system is not necessary and something like Python is fine. The strength of D is that it can cover it all. You can write D in an easy going way and then it looks like Python in terms of lines-of-code and boilerplate. You can also make D code more strict with annotations (maybe even to Rust borrow checker strictness in the future). Best of all, you can transition from easy to strict and also do that only partially for critical parts of the codebase.

    Overall a great language but it seems not that much better than alternatives that it gets the big adoption it deserves.








  • I’m currently reading Large-Scale C++ Software Design by John S. Lakos, 1996. It is superficially outdated. For example, it doesn’t use UML notation but invents its own for no good reason.

    Its big selling point is that it covers “physical design”, which is about files, folders, and dependencies between them. I rarely see that it other books but it is important.

    You can find some videos from John Lakos at CppCon where he summarizes the key points.

















  • For example, Conway’s Law: Let’s assume you have a web app. You also have enough developers to split them into three teams. You can either split according to the parts (Frontend team, Backend team, Batch team) or you could use some other method, like split by function (Chat team, Video team, Account Management). You could also split them by skills (Dev team, Ops team, Designer team).

    You can now pick your poison, where you want the app to be more consistent according to Conway’s Law. If you split by parts, then there will be a well defined API between front- and backend and changing it takes some discussion. If you split by function, the API will be fluid but the different functions will not feel as consistent to the users. If you split by skill, new features will take longer but the servers are more reliable and the logos are very consistent.

    The effects will be weak if the three teams are in the same open floor. They will be extreme if each team is on a different continent and timezone.