1. 4

    I doubt that this response is exactly what you were looking for, but if you’re at all interested in “doing the most good possible with your career”, a la the effective altruism movement, then AI safety research in academia or at a nonprofit like MIRI, OpenAI, or Ought.org, or even at a for-profit org like DeepMind seems like a pretty good bet in expectation, if you can swing it. You can check out an overview of this idea and possible ways of getting involved here.

    And if you’re looking for something slightly less sci-fi (/more near-term) (but still something like “doing a lot of good with your career”), I think working on self-driving cars is one of the most high-impact things you can do right now. It’s still a relatively small field, and if you can counterfactually bring the advent of ubiquitous self-driving cars nearer by one day (admittedly this is quite difficult), that corresponds to roughly one thousand lives saved.

    Disclaimer: I currently work at MIRI, and used to work at the autonomous car company Cruise (in both cases, because I take this line of argument very seriously). I don’t speak for either employer. I also don’t think that this line of reasoning is necessarily the right way for most people to go about choosing a career, and I mainly mention it in case you find it interesting or useful.

    1. 2

      Out of curiosity, why do you not think getting a career to “do the most good” is a good line of reasoning? (Or am I misreading you) I’m currently thinking of moving into a more socially impactful career myself.

      1. 3

        It’s not that I don’t think it’s a good line of reasoning - I do; I just also don’t want to imply that I think everyone is obligated to think that way.

        1. 1

          I just also don’t want to imply that I think everyone is obligated to think that way.

          A radical thought in itself. 🙂

        2. 2

          Not GP, but it seems pretty well settled that in most circumstances (probably not autonomous cars though, which I imagine pay pretty well) the best way to aid it with your career is to make a boatload of cash however you can, and use the cash to fund the work you feel should be done.

        3. 2

          and if you can counterfactually bring the advent of ubiquitous self-driving cars nearer by one day (admittedly this is quite difficult), that corresponds to roughly one thousand lives saved.

          This is a completely ridiculous statement. There’s no evidence whatsoever that self-driving cars would be any safer than real cars which actually exist. And if you were good enough to actually make a difference to such a field, you’re smart enough to make an impact somewhere that actually has a bat’s chance in hell of ever actually going anywhere.

          The self-driving car hype is absurd.

          1. 1

            There’s no evidence whatsoever that self-driving cars would be any safer than real cars which actually exist.

            This is pretty obviously false, conditioning on self driving cars working at all. See, e.g., https://crashstats.nhtsa.dot.gov/Api/Public/ViewPublication/812115

            And as someone with experience of the current state of the art, I’d bet at 4:1 odds (with some better operationalization, and up to a limit of around $200; PM me) that we’ll start seeing widespread adoption of self-driving cars within this decade, conditional on no major economic disasters.

        1. 29

          Does anyone know if any actual kernel devs have been involved with this threat? Something that isn’t pointed out in this (imo pretty biased) article is that the initial email was sent more-or-less anonymously, from an account hosted on cock.li, which seems to be at least spiritually 4chan-related. This makes me suspicious that the whole thing was invented as a “look how much backlash there is against these grievous CoCs!” stunt. This suspicion is strengthened by the misleading reference to the Drupal case, which seems to have been mostly in spite of a lack of CoC violations.

          [edit: there is some discussion of this type of issue on LKML]

          I mostly found it interesting because I had always assumed that you couldn’t rescind viral licenses like the GPL.

          1. 3

            There is a reason the GNU foundation requires a copyright assignment for contributions. An author is allowed to revoke licenses to any code they write under many licenses.

            Google also requires a copyright assignment for any code you contribute to projects they oversee for similar reasons.

            Linux sides not have such a requirement which gives the contributors a lot of power.

            1. 3

              How does that change anything? The point is the law permits the transfer to be terminated.

              1. 5

                There is a reason the GNU foundation requires a copyright assignment for contributions. An author is allowed to revoke licenses to any code they write under many licenses.

                But not under the GPL. You absolutely cannot rescind your license under the GPL.

                Google also requires a copyright assignment for any code you contribute to projects they oversee for similar reasons.

                No, Google requires a copyright assignment for the same reason as many other companies: so that they have complete control and can use the software commercially and sell it under a proprietary license.

                1. 4

                  On what grounds do you believe that the GPL doesn’t allow you to rescind your license?

                  1. 2

                    On the grounds that there’s no mention in the GPL that it allows you to rescind your license.

                    1. 1

                      I’m not sure that the GPL has to specifically allow it.https://www.law.cornell.edu/uscode/text/17/203

                      In the case of any work other than a work made for hire, the exclusive or nonexclusive grant of a transfer or license of copyright or of any right under a copyright, executed by the author on or after January 1, 1978, otherwise than by will, is subject to termination under the following conditions

                      It does indicate that there are restrictions on when 35 years after you can do the revoking and how much advance warning (on the order of 2 years) is necessary. But no where in the relevant US code do I see anything saying that you must specify that a license is revokable in order to allow for revoking a license.

                      1. 1

                        The GPL is a contract with consideration. As I understand it you cannot simply terminate a contract without reason, but if you do so and then you’re sued I don’t think you’ll necessarily be forced to honour the contract by the court. Courts are generally apprehensive about forcing people to do things and prefer to impose damages.

                      2. 1

                        GPL is still copyright, it’s just an attempt at subverting it. The developers are still the actual owners, and whenever it’s redistributed, it’s always redistributed under their own terms, namely those specified in the COPYING file. They aren’t slaves to their own conditions, they have the same right to remove it as they have to enforce it – it’s not public domain after all.

                        1. 1

                          You can’t just unilaterally revoke a contract. If you download and then redistribute my software under the GPL I can’t just tell you to stop. That’s literally the whole point of the license.

                          1. 1

                            No, but I can stop distributing newer versions under that license.

                            1. 1

                              Absolutely. But then the ‘kill switch’ these developers have is just the freedom to stop working on the kernel. That’s a freedom they’ve always had, nothing new. The suggestion is that they can ‘rescind’ or ‘revoke’ their license and stop others from continuing development or continuing distributing existing versions. I see no reason why that would be true.

                    2. 3

                      Did you not read the article? GPL2 definitely DOES allow one to rescind the license.

                      1. 15

                        that article was awful. I mean, if your quoting anonymous comments from 4chan, what you’re doing isn’t journalism

                    3. 1

                      I always thought projects did this to be able to change the license.

                      1. 1

                        Changing the license is a similar operation to revoking a license in my mind so it makes sense that both reasons would behind the practice.

                    4. 3

                      I mostly found it interesting because I had always assumed that you couldn’t rescind viral licenses like the GPL.

                      You were and are right: you cannot do so. The idea that you can’t because it doesn’t explicitly say you can’t is utterly absurd. The entire point of a copyright license is that you are licensing the work to others. There’s nothing in that license that says you can rescind it, thus you can’t rescind it. It’s pretty simple. The entire world of free and open source software is built upon this premise. If people could just go around and rescind the licenses to their contributions it would destroy free and open source software.

                      1. 9

                        So the analysis link seems excessively long, but here’s the relevant part of the law.

                        https://www.law.cornell.edu/uscode/text/17/203

                        You don’t have to build a rescinding clause into the license. It’s provided by law. Unless there’s some other reason this isn’t applicable.

                        1. 6

                          Seems like (section a.3 is saying) revocation can only occur after 35 years after initial grant, and within a 5 year window? Weird.

                          1. 2

                            Ah, this is a good point that I had missed: This particular way of rescinding a license actually isn’t possible for the next few years, since Linux isn’t that old. So the argument described by the possibly-troll lawyer is closer to the way this might actually work, though it seems way more tenuous to me now.

                            1. 2

                              But that part is only relevant for people who have already been granted the license correct? I am very definitely not a lawyer and could easily be wrong here. However it seems like there could be an argument that Current users of the kernel would be allowed to continue to exercise their use under the license but that no future versions of the kernel could be published with the code in question. That could have the effect of preventing bugfixes to current kernel versions, as well as stalling kernel development for some time as the core devs worked to strip out and replace all of the code that is no longer licensed to be used.

                              How the relevant law applies with a viral license is a question that seems unsettled to me and likely would need to go through the courts to settle the question.

                    1. 3

                      Serious question from a fully paid up member of the tinfoil hat brigade: Why protonmail?

                      Don’t forget that if you’re sending messages you also have to consider the recipient. If your hardware is hosed, theirs may well be too. On that basis perhaps mail should be avoided depending on your threat model.

                      One option would be to use something like a BeagleBone black as it’s open source and I believe verifiable.

                      Another option would be to use a disconnected host for creating, encrypting and viewing messages then a separate host for relaying. This was the basis for a project I did (and cancelled) a few years back.

                      1. 1

                        Yeah, I guess I’m imagining that I’d be able to give my correspondents their own copy of the setup, and instructions on how to use it. I’m definitely not expecting that emails I send to random people will magically be safe from now until the end of time.

                        1. 2

                          If you’re talking about dedicated hardware at both ends, why not signal?

                          1. 1

                            Signal’s proprietary central server and TOFU-oriented protocol add a lot of attack surface that doesn’t exist in other approaches.

                        2. 1

                          The answer to the question “why protonmail” is mainly that I’m not sure what else to do. I have long given up hope that I’ll ever convince anyone to manually use PGP. Protonmail is a platform that I might be able to convince people to use; - has a nice UI and can conform to people’s existing habits and tools.

                          Edit: Reading this next to my other response does seem to make it clear that I’m confused about how other people ought to relate to the hypothetical system involved here. Obviously they can’t be allowed to just use their phones to read messages, so I’m not sure in what sense they should be allowed to stick with their existing habits.

                          1. 1

                            if it’s just secure email wouldn’t spiped suffice?

                        1. 2

                          Maybe there should instead be a set of “content notification”-style tags, in a different color (to indicate that they’re flags rather than community topics in themselves): One for sex, one for violence, one for classified material, maybe one for politics, and so on. This would let people decide for themselves what is NSFW in their particular context.

                          1. 3

                            I think adding several tags, or a tag infrastructure is going too far. I’d much rather have a simple NSFW tag, that if it catches too much I’ll figure out later when I get home. Most of the time on lobsters there won’t be any NSFW articles, we don’t typically post NSFW things. If you wouldn’t like to see it in your workplace mark it NSFW, and if you don’t care, then don’t mark it. This is not a trigger warning solution, this is a “There are possible job consequences that would mean I can’t read this site at work”, I’d much much rather have false positives than fail to filter something because someone put it under (content warning: very specific nsfw thing that I didn’t know to filter). Adding a content warning infrastructure is a much bigger request than just a single tag.

                          1. 17

                            This is a curious legal thing, but it isn’t tech related at all. Maybe a better fit over at HN or Reddit.

                            1. 2

                              The “About” page suggests that what is on- and off-topic is determined by which tags exist (unfortunately? maybe incorrectly? or maybe I’m just misunderstanding). Perhaps this tag should be changed to say “tech law” if the community doesn’t want to see arbitrary interesting legal articles.

                              1. 2

                                I believe that it is understood that all of those tags function in the context of technology. Otherwise we’d expect to see (further) abuse of the culture, art, law, and other tags.

                                Lobsters is just as much about what isn’t here as it is what is here.

                            1. 5

                              Several people here are recommending CMake as an alternative. I’ve only interacted with CMake at a fairly surface level, but found it pretty unwieldy and overcomplicated (failed the “simple things should be simple” test). Does it have merits that I wasn’t seeing?

                              1. 3

                                CMake can generate output both for Unix and for Windows systems. That’s one (good) reason lots of C++ libraries use CMake.

                                1. 2

                                  CMake is pretty nice and has nice documentation. You can also pick stuff up from reading other people’s CMakeLists. For simple projects the CMake file can be pretty compact.

                                  1. 3

                                    I actually found the CMake documentation to be quite terrible for new users. The up-to-date documentation factually describes what the different functions do, but has very little examples of how to actually write real-world CMake scripts. There are a few official tutorials that try to do this, but they are made for ancient versions like CMake 2.6. So in order to learn how to use CMake, you are stuck reading through tons of other peoples scripts to try to deduce some common best practices.

                                    While modern CMake is not terrible, you often have to restrict yourself to some ancient version (2.8.6 I believe is common) in order to support certain versions of CentOS/RHEL/Ubuntu LTS (and there were some big changes in CMake around 2.8.12/3.0).

                                    Also, having string as the only data type has led to some absurd corner cases.

                                1. 2

                                  I’m kinda confused - the graphs at the beginning seem to show the opposite of what the author is claiming. For a given number of executions, the shorthand (in blue) seems to take more time, not less. What am I missing?

                                  1. 4

                                    Looks like the axes are flipped. The x-axis is actually time taken, and the y-axis is the number of executions. The labels are wrong, too: notice how it says the “number of executions” is 0.000001.

                                  1. 8

                                    This is the third or fourth post from the last few days from yegor256; All of them have been right on the line between hilariously and terrifyingly bad advice. One of them (“How much do you cost?” I think it was called) lingered in the top spot on the home page because there were so many rebuttals in the comments. This list is not a recipe for a good career or a good life.

                                    1. 17

                                      The idea that the go language designers and implementors are nondogmatic is an interesting assertion to make, but it’d be better if there were a citation or an example. Certainly there are, famously, many more counterexamples, so it would be great to understand why the author has this belief. Is it from experience? Or is it from an ardent wish that it be true?

                                      1. 9

                                        I am a huge fan of Go, bet businesses on it, have had great successes with it, that said…

                                        … why the author has this belief. Is it from experience?

                                        I have no doubt that this is the truth. I believe the core team is very willing to discuss things at length, non-dogmatically with those they consider peers (language designers, researchers). But how they dealt with the community in both tone and substance was another thing all together – they set the dogmatic “no questions” (less charitably, “we are right”) tone absolutely, and the community followed.

                                        Or is it from an ardent wish that it be true?

                                        Or I suspect, a hope for the future. Which is fine, if your community has issues, try to change them and the change has to start from people with voices with enough reach, rsc is one of those voices.

                                        1. 9

                                          The go team are a bit similar to how openbsd works. If its clear you dont know what you are talking about, you will be redirected to go-nuts.

                                          Tbh i think they are incredibly patient with lots of bad and unresearched suggestions. Good suggestiona get a great deal of consideration

                                        2. 6

                                          rsc is just one of the Go designers/implementers, and is probably somewhat less opinionated than, say, Rob Pike.

                                          My guess is rsc is reposting this as much as a reminder to himself as to others. Go is probably more famous for what it expressly leaves out than what it leaves in, and so remembering to say why something was left out is pretty hard versus just saying “because that’s not Go.”

                                          1. 5

                                            The idea that the go language designers and implementors are nondogmatic is an interesting assertion to make

                                            I don’t think he’s actually making that assertion - he’s saying that the conversations language designers (of different languages) have amongst each other don’t appeal to dogma. Citations, then, could really only come from specific recorded conversations amongst only language designers.

                                            There is this slightly disappointing panel with Bjarne Stroustrup, Rob Pike, Niko Matsakis (of Rust), and Andrei Alexandrescu (of C++ and D), whose most dogmatic participant seems (to me) to be Rob Pike, but if you’re hoping for an in-person flame war, it’s not there.

                                            1. 3

                                              Replied something like this to dwc, but I’m surprised the focus here ended up on the Lisper saying that language designers are comfortable talking about tradeoffs because they had to wrestle with them while designing.

                                              Seems like a nice enough anecdote and my reaction wouldn’t be to demand citations proving anyone’s thoughtfulness. But more fundamentally, the story was just a stop on the way to asking users to “[r]emember that none of the decisions in Go are infallible” and “present the engineering reasons fairly.” Hard for me to find that objectionable.

                                            1. 10
                                              1. prioritize projects in void
                                              2. break a project into milestones in void
                                              3. plan milestone in pomodoro-sized chunks in void
                                              4. write basic protobuf files for milestone
                                              5. write mockable messenging system (and clock, disk, io…) that plugs into either sockets/real version or a test harness that will use quickcheck to induce partitions, swizzle messages, fill disks and advance clocks rapidly in fake time
                                              6. write correctness properties of system
                                              7. write e2e test for milestone
                                              8. write unit test for component
                                              9. write component while quickcheck is blasting away, catching tons of assumptions as I go
                                              10. when I hit pomodoro boundaries, distract myself as much as possible, prefer physical activity, let subconscious GC the problems I was thinking about a little bit.
                                              11. load test with loghisto and opentsdb (logarithmically bucketed histograms ftw)
                                              12. dstat, flamegraph for guiding optimization

                                              (my projects tend to be performance-minded reliable distributed systems)

                                              tools:

                                              • void information organizer for the terminal
                                              • tmux + vim
                                              • rust / erlang / python
                                              • opentsdb
                                              1. 6

                                                Wow, I’m really glad I read through this discussion section - I was recently going through a new year planning exercise and wishing I had something basically identical to void.

                                                It’s also really instructive to read about distributed system programming specifically - I’ve recently been doing stuff at work that would benefit from a lot of this structure. Thanks for writing it up!

                                              1. 13

                                                I’ve written a TUI minesweeper game and a cellular automaton library, both basically scratch projects, around 200 lines. Nothing serious yet.

                                                However, after using it for these, I think I will prefer it in the future for anything where I would have otherwise used C or C++, and where it’s possible to use Rust. I really like lots of things about it, but the most important ones for me apart from safety are:

                                                • Traits and generics, which provide, for me, the biggest benefits of using statically typed languages. Whenever I use dynamically typed languages the thing I miss the most is the ability to specify interfaces.
                                                • Pattern matching and good error handling mechanisms, without exceptions. This gives you a really nice sense that you’ve fully understood all possible situations at each call site when you compile your code.
                                                • Expression-orientedness. This is mostly a personal aesthetic preference.
                                                • Modern ecosystem features; primarily dependency management. The benefits of this are pretty obvious at this point, I think, if you’ve ever used Ruby, Node, or Pip, and compared the experience to C and C++.
                                                • No GC - this at least gives me hope that I’ll be able to use it as a C replacement in almost every arena.

                                                Unfortunately, since Rust isn’t yet available on most embedded platforms, I don’t see any obvious near-term major projects, so I’ll keep building toys instead. My next one may be a Rust client library for ROS.

                                                Things that would make my life easier if they were in Rust:

                                                • More target platforms. I want to write my home automation stuff in Rust and right now that isn’t possible.
                                                • Better compilation times. They’re working on this but it’s still not great.
                                                • Type-level integers. This is one of the very few remaining C++ features that would make a big difference for me if ported to Rust.
                                                • A REPL. There used to be one, but it fell behind the current nightly build and has never caught up. This is necessary for things like Jupyter notebooks or good web playgrounds. If Rust had this I might be able to give up Python for almost everything.
                                                1. 2

                                                  A cellular automation library? Could you elaborate on that?

                                                  1. 3

                                                    Sure - it’s basically just a trait describing what a cellular automaton’s API needs to look like, and some boilerplate for stepping through time. I also started on an easy way to visualize 1D and 2D CAs, but didn’t finish it. Next steps (apart from the visualization library) might be a function to back-drive reversible CAs, or generate rules from given state transitions.

                                                    1. 2

                                                      Ah, cellular automaton. I read automation and I was hoping you were working with cellular radios. I need some help getting started with those. Still a cool project! :D

                                                1. 8

                                                  I took honors linear algebra in college, used linear algebra for differential equations, signals, machine learning, and robotics, used it for work, used it in my free time.

                                                  I did not understand it until I watched this series.

                                                  Video lectures can be so much more than a blackboard/whiteboard facsimile, and I hope to the gods that 3blue1brown makes more in-depth lecture series like this one, and I hope even more that other educators take this series as an example of what’s possible.

                                                  1. 12

                                                    Pages with lots of mathematical expressions tend to take a long time to be rendered with MathJAX; KaTeX is a similar tool that’s much faster: https://khan.github.io/KaTeX/