1. 6

    Even better: get rid of the hierarchy in favor of flat storage with tags and indexed search. This is already a reality in Gmail and macOS. And S3 and other blob stores are similar.

    Either option requires rethinking all of our existing tools, though, especially the ones for software development, so I’m not holding my breath.

    1. 12

      My blog has twenty years of posts (5,200+) and I have about twice as many tags (10,000+) as I do posts, and I still have trouble finding stuff via tags. Often times, when I write a post, the tags I include won’t be the tags I expect them to be when I go looking for the post in the future. It’s hard to properly tag stuff, and I have about a 50/50 shot of find a post via the tags I used.

      Just an observation I have.

      1. 2

        But it’s still better than a heirarchy

      2. 6

        I like hierarchies though! I want the “science” tag to include everything in the “physics” tag and also a few other things. Hierarchical tags FTW

        1. 3

          Even better: Logic programming. In addition to the hard-coded tags, we should be able to write a set of prolog / datalog rules like Tagged(X, "science") :- Tagged(X, "physics") to automatically assign “soft” tags. This would make it really easy to tag and re-tag things, and it would make searching really flexible!

        2. 4

          See “Designing better file organization around tags, not hierarchies”.

          I’m mildly obsessed with this type of idea. The poster child is Apple’s Newton, which didn’t have a filesystem at all, rather a shared graph database called the “soup”.

          Also, I’ve been building a b-tree and hash based storage manager, and ruminating that, from a database perspective, a filesystem is just a shitty database with a very limited schema and a terrible lack of durability (not to mention A, C and I, too.)

          1. 2

            I’ve been pondering this idea on and off for years! It has occurred to me that you might actually be able to bridge the gap by treating a path, like “/home/george/foo.txt” as referencing a file with tags “home”, “george”, and “foo.txt” (or maybe “foo” and “.txt”). The only problem is that a tag-based filesystem could contain more than one file with those tags, so maybe you’d just take the first one or something. It’s definitely not perfect.

          1. 2

            I’m looking at you, proofs. But even proofs aren’t really mathematics. Students do proofs because instructors ask them to do proofs; they’re not actually proving anything novel.

            That so many students leave high school with this attitude about math is a failure of our education system. A proof is nothing more than a thorough explanation for why something is true. In math, unlike many other fields, we have the luxury of being able to decide with absolute certainty that certain facts are true. Logical fluency is one of the main benefits of a math education, with advantages reaching far beyond the classroom. The more math I learn, the more easily I’m able to jump into unfamiliar topics.

            I would even venture to say that American colleges should get rid of the usual Calc 1/2/3 sequence, which is more about rote memorization than understanding, and have everyone take proof-based real analysis and linear algebra courses instead (with some applications sprinkled in, to keep things grounded in reality – there are tons of easy examples to draw from in physics / computer graphics / engineering / etc).

            1. 11

              What’s different about computer science, at least for me, is that it’s accessible. One of the most complicated topics in computer science is operating system design…but I can sit at a computer and just piddle around and get an intuitive idea of “process” and “file” and what-have-you. I can do this with no prior foreknowledge beyond how to type and read and basic “computer literacy” skills.

              Pick a similarly complicated topic in mathematics, say, topology. I can’t sit down with basic “math literacy” and just piddle around and get an intuitive feeling for topology. Maybe there’s a way to do that, but I don’t know how.

              1. 15

                I used to feel this way, until very recently. What changed for me was that I realized I should be reading a math book with a notebook next to me. I know this sounds stupid or obvious, but it wasn’t to me. So when I read a definition, I rewrite it in the notebook and I try to really understand it. The very next thing is usually a very simple proof using that definition. I read the statement of the proof, and then I try to write the proof without looking at what’s in the book. Reading proofs is still a new skill for me, so they’re fairly opaque looking anyway, and it’s not hard for me to ignore it while I make my attempt. After five or ten minutes of struggling, I’ll read the proof in the book and by then, it’s like the struggling has made me really think about what’s going on, and I usually am in the right frame of mind to understand it. This also takes some time. I’ll wind up copying the proof from the book into my notebook, but in my own words or (occasionally) other notation.

                This isn’t that different from what you do with computer science by reading with a computer nearby. In both cases, you don’t really expect to understand what you’re reading on your own, without doing some experimentation.

                I have a Dover book on topology, Mendelsohn’s Introduction to Topology, and I have been trying to work through it for a long time. I’m in a class on abstract math now, and I’m hoping that I’ll make more progress in the topology book after I get through the class. But I was actually starting to get somewhere with it following this approach.

                1. 1

                  I would very much appreciate some book recommendations if you’ve got the time.

                  1. 6

                    Introduction to Graph Theory notoriously espouses the ideas outlined here: https://www.goodreads.com/book/show/388049.Introduction_to_Graph_Theory

                    1. 1

                      Thank you, added to the list.

                    2. 3

                      Sure! On what? The text for my class is Introduction to Abstract Mathematics but the other book I mentioned is Introduction to Topology.

                      1. 1

                        Thank you!

                      2. 2

                        Pinter, “A Book of Abstract Algebra” is great for self-study. Each chapter is a short presentation of some basic definitions, followed by a series of exercises designed to guide you through discovering important facts for yourself. I highly recommend it!

                        1. 1

                          And it’s on the list too, thank you.

                    3. 10

                      I can’t sit down with basic “math literacy” and just piddle around and get an intuitive feeling for topology. Maybe there’s a way to do that, but I don’t know how.

                      You can. It’s not called “math literacy”, it’s called mathematical maturity. It takes a lot of practice – the equivalent of a good chunk of an undergrad degree to develop it. It’s a fuzzy concept (literacy is more binary), but it’s when you become more self-sufficient. You come up with your own examples to probe different concepts, you don’t need someone to tell you if a proof or line of thinking is correct, you start to see the broader consequences of why a result is true and what it means outside of how it was defined, you start to see how different results are connected and how while a book or a paper took one path to a result there are many paths that could have been followed, etc.

                      operating system design…but I can sit at a computer and just piddle around and get an intuitive idea of “process” and “file” and what-have-you. I can do this with no prior foreknowledge beyond how to type and read and basic “computer literacy” skills.

                      This is because a lot of problems in computer science and still pre-theoretical. We muddle our way through what a good operating system should look like because we don’t have a theory that lets us formally define what “good” is and then reason about “goodness”. It’s the same in machine learning. We have theory to talk about how to optimize a function, but we don’t have theory to talk about what object detection really is as a problem besides “match the labels people give to objects”.

                      Eventually, this will change. Theory in physics took a long time to mature. The ancients could ask questions about atoms, gravity, magnetism etc. just fine. And they came up with plenty of reasonable hypotheses, some of which they even tested. That’s where we are in computer science today. Fixing the situation and finding theory where these big questions can be asked precisely and where they can be given answers took 1000+ years. Hopefully computer science will move much faster.

                      1. 9

                        As a software engineer, I agree that software feels more accessible. But most us of were never taught mathematics in school. And by most I am suggesting a very significant majority. It would be terribly difficult for math to feel accessible if that’s true. In Paul Lockhart’s referenced diatribe (https://www.maa.org/external_archive/devlin/LockhartsLament.pdf) against the way math is taught, he makes a very strong case for this.

                        1. 3

                          In my first year of CS, I wrote some code that took a lot of samples from a uniform random distribution, bucketed them, and made a bar-plot of them (effectively plotting something like the probability distribution function – although I didn’t know this concept at the time). The result was as expected.

                          Then, I replaced the random sample by the sum of two random samples. Suddenly the box-plot started looking more like a tent function. I didn’t understand why, but this seemed interesting! I tried the product of two random samples as well, which gave a similar interesting result.

                          I was a little bit annoyed that I didn’t immediately understand something so simple. I understood how random numbers work, and how sums work, so certainly I should be able to deduce how the sum of two random variables behaves?

                          I then sat at my desk for a long time and, by trying to understand the various graphs my code produced, gained a good intuition for pdfs, cdfs, and the concept of convolution. I just loved being able to have a problem, and just solve it by virtue of thinking hard enough about it.

                          I started a maths degree after that year.

                          Edit: On the other hand, I feel like in computer science it is much more common that you just have to know how certain things work under the hood, while there is zero indication of how you possibly can find out. I’ve had this experience when I used Arch Linux and NixOS a lot. It’s also common in C++. If you take a pointer to an element in a vector, it’s fine. If you do it but then add an element to the vector, your pointer might or might not point to accessible memory.

                        1. 2

                          I saw this talk when first learning Haskell, but it didn’t really “click” for me until I started using the coq proof assistant. Every program you write is converts “evidence” of one or more propositions into “evidence” of the proposition that you want to prove. I recommend spending a bit of time with the jscoq version of the Software Foundations book!

                          1. 1

                            Continuing reading (= making exercises) through the chapters of Software Foundations, Logical Foundations (the first book in series). I’m on Inductively Defined Propositions chapter now. This is so much fun really.

                            1. 1

                              Nice, I just finished going through LF recently as well and found it very rewarding. There’s even a jscoq version of the SF books so you can coq on the go :)

                            1. 9

                              A possible interesting point of comparison might be the content-addressable language Unison, whose author had this to say about dependency management.

                              1. 2

                                That’s what an “Epic” is for.

                                1. 4

                                  No, I can’t agree. Epics are much larger bodies of work. What I’m saying is down to individual task, it’s better to go in pairs.

                                  1. 2

                                    Unless we are talking about pair-programming, two people are not going to work on the same thing, just two very related things, so you can create two related but separated subtasks for only one person each.

                                    At work we create a lot of those (micro) epics

                                    1. 2

                                      Sure they will. They will talk, design, review, pair program, have some meetings when one person will be busy and come back to sync a little later and so on. They are going to have fun, learn from each other and do better job faster than a lone person would.

                                      Or at least that’s the plan.

                                  2. 1

                                    Do you mean “epoch”?

                                    1. 4

                                      Jira speak for multiple stories on a single task

                                  1. 2

                                    Why favour top posting over inline responses?

                                    1. 15

                                      Because that’s how email works in the world outside of free software mailing lists.

                                      1. 4

                                        True. Probably because it’s easier to compose an email using top posting. But when I send inline responses to my non-tech friends and colleagues who have been using Outlook and top posting their whole life, they usually appreciate it.

                                      2. 2

                                        It was just a reference to how HEY works - there’s only top posting there, presumably because it makes it easier to follow an email thread. At first I was annoyed by this, but now I kind of like it.

                                        1. 6

                                          Why does it make it easier to follow an email thread? Surely it is easier to follow a discussion if answers come after questions, reactions after statements.

                                          1. 3

                                            It’s really a UX problem. It’s really easy to mess up the formatting such that your inline replies are interpreted as part of the quoted text itself, and will appear collapsed by default to the recipient. So I never reply inline, because I want to make sure my full message is seen.

                                            1. 2

                                              It really depends on the message, though, right? We can’t operate with the assumptions that every email is just a list of questions that needs answers. Plus, even when you’re top posting you can copy bits from the original message to embed them in your answer and provide an additional context for me. For me the main point is that by sticking to top posting you make it very clear in which order a conversation unfolded. Just like with old-school paper letters.

                                              1. 7

                                                For me the main point is that by sticking to top posting you make it very clear in which order a conversation unfolded.

                                                Threads do that better. It is also more manageable than different people coming up with ad-hoc quoting methods for top-posting (often using different colours, fonts, etc and saying things like “responses inline in green below”). Trying to sort through a conversation like that is much more difficult than it needs to be.

                                        1. 2

                                          I found it interesting that Triton’s original frontend language was a C dialect unimaginatively named Triton C. This version’s frontend language is a Python EDSL, which shows what people want, I think.

                                          1. 3

                                            all I want is static analysis of tensor dimensions :(

                                          1. 6

                                            I recently finished working my way through “Logical Foundations” by Pierce et al. and found myself wishing I had been exposed to a dependently-typed language like Coq much earlier. Logical Foundations covers a good chunk of what students might see in an intro discrete-math course, and would provide an excellent opportunity for students to gain hands-on experience with Curry-Howard, decidability, and stratified type systems.

                                            There’s even a really nice jscoq version of Software Foundations so students wouldn’t need to worry about wrangling ugly Coq Makefiles.

                                            1. 16

                                              Bullshit around Python at a previous gig is what finally convinced me to just shove things into containers and say fuck it, embrace Docker.

                                              Thanks Python. :|

                                              1. 2

                                                I work in ML and the fact that the whole ecosystem is founded on Python spaghetti has made me seriously reconsider working in this field long-term. Network architectures are the perfect use case for static (if not fully dependent) types. I’m at least hoping Julia will disrupt things.

                                                1. 1

                                                  Julia is still dynamically typed and in my very limited experience the type system doesn’t help as much with catching bugs as one would expect.

                                                  Maybe I was just doing it wrong and you’re supposed to run a separate linter to catch trivial mistakes. But you can do the same thing in Python with mypy and type annotations so I’m not sure that counts.

                                              1. 12

                                                This doesn’t even scratch the surface of Haskell comprehensions. They’re a full SQL-like sublanguage and they can operate over non-list Monads.

                                                Some of their SQL-like abilities https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/generalised_list_comprehensions.html#generalised-list-comprehensions

                                                output = [ (the dept, sum salary)
                                                         | (name, dept, salary) <- employees
                                                         , then group by dept using groupWith
                                                         , then sortWith by (sum salary)
                                                         , then take 5 ]
                                                

                                                All of the examples above are filters & maps, but with parallel comprehensions they can behave like zips: [ (x+y) | x <- [1..10] | y <- [11..20] ]

                                                Monad comprehensions are even more powerful. This syntax works for anything, not just a list. It works for optional values, non-deterministic code, stateful code, generating actual database queries, etc.

                                                1. 4

                                                  See also Wadler 1990, “Comprehending Monads”. I read this when I was first trying to grok monads, and it clarified a lot of things for me. After using Python, seeing that monads are “just” list comprehensions really helped!

                                                  1. 2

                                                    Hah. Yes, the list of things that monads “just” are is endless from “just list comprehensions” to “just burritos”. It’s better to focus on specific monads that are interesting and get a feel for them rather than looking to analogies. No one analogy is really enough. For example, if you think of them as list comprehensions it’s harder to see what transformers or comonads would be about.

                                                  2. 1

                                                    I mean, if you turn on more extensions they get more features, but naked Haskell they don’t do quite so many things :)

                                                    Conversely, in naked Haskell you have do which works for any Monad, including list, and has almost-identical syntax to the comprehensions

                                                    1. 4

                                                      Just because your compiler might, without any flags, default to “naked C++” meaning C++98 doesn’t mean that this is what C++ is today :)

                                                      Extensions are how Haskell evolves and they represent the language as it is today. This is like writing an article comparing C++ to Java but silently using C++98 (pretty much exactly because “naked Haskell” is Haskell 98). Missing out on 20 years of development will make anything seem less interesting.

                                                      It’s really unfortunate that we call them extensions. Maybe language feature flags or something would have been better.

                                                      Actually, you’re more right than you think. Even more modern comprehensions are simple to convert to do notation.

                                                      1. 1

                                                        Naked Haskell is at least Haskell2010, not 98! The fair comparison for new C++ versions is new Haskell versions. The fair comparison for Haskell extensions in C++ land would be things like GNU C++. Haskell does a much better job of course by naming all extensions and making them source-level opt-in.

                                                        And yes, that comprehensions can be written with do was my whole point :)

                                                        1. 3

                                                          Haskell2010 is not an actual language standard. It continues the terrible messaging of the community. Haskell98 describes the language in 1998, it’s a language standard. The community tried to write a new language standard, to describe new Haskell (Haskell Prime). And it was a disaster (repeatedly). Haskell 2010 is a minor update to 98 that doesn’t even describe the language as it was in 2000 never mind 2010. This is all described and explained in the report.

                                                          Even if there is an updated language spec one day, and there may never be, it would not change the situation with extensions. The language will always work by having a ~98 core and then having you enable extensions on top of it. All because this has been such an incredibly successful way of evolving the language.

                                                          Extensions aren’t 2nd tier in any way. Haskell in 2021 is GHC’s implementation plus a bunch of extensions enabled.

                                                    2. 1

                                                      Most of the time I use list comprehensions as a replacement for loops. I was not aware that Haskell has these capabilities. I try to use the subset that works in Python, Erlang and other languages.

                                                    1. 4

                                                      This is pretty cool, but I think it needs an explicit way to model time somehow. The idea of facts negating facts previously in the system without the sequence being made explict makes me very nervous.

                                                      1. 8

                                                        There’s Alvaro 2009, “Dedalus: Datalog in Time and Space” which adds timestamps to datalog for modeling distributed systems. It works basically the way you’d expect. Related is Hellerstein & Alvaro 2019, “Keeping CALM: When Distributed Consistency is Easy”.

                                                        For more fun additions to datalog, see also Flix and Datafun.

                                                      1. 7

                                                        Typescript has been a massive improvement in my JS-related.adjacent work: front end, Deno, React Native tsx, etc. It’s really incredible how much more productive I feel when working on my RN app with great typing across the whole app. The work by the TS team is incredible.

                                                        That said, does anyone else feel like TS is now a solved problem and the new versions are chipping away at the edges? I haven’t seen a feature in quite a while that has made me say “Oh man, finally, that’s great”.

                                                        Performance improvements are always welcome, of course.

                                                        1. 6

                                                          For me, the aliased conditions improvement is a “oh man, finally, that’s great”.

                                                          In terms of the JS ecosystem as a whole, I’m eagerly awaiting Record and Tuple immutable primitives and standardization of decorators.

                                                          1. 1

                                                            Very interesting, thanks for the link!

                                                          2. 5

                                                            I agree on the whole. The one big feature I wish Typescript had is pattern matching along the lines of any other strongly typed functional language, but I imagine its authors will want to wait for the corresponding TC39 proposal to reach some higher stage before designing its TypeScript implementation, assuming it doesn’t stall.

                                                            I also find it difficult to fathom the difference between what the compiler claims can be “trivially” inferred and what cannot be inferred at all. On the one hand, control flow analysis of aliased conditions is a feature that leads me to suspect there are many similar inferences to chip away at. On the other, the language server is already pretty slow and I have to imagine additional inferences come with a performance cost.

                                                            1. 2

                                                              Pattern matching would be great! But yeah, it seems like something to put into JS/ES and then added to TS.

                                                            2. 3

                                                              I’ll be very happy if they keep chipping away at dependent types. For instance, “correlated record types”.

                                                              1. 2

                                                                I feel like I’ve hit that issue without realizing that’s what I wanted to do. Thanks for the link.

                                                            1. 6

                                                              I had some plans for this Saturday, but cancelled them because I was presented the opportunity to get vaccinated! Japan is still quite far behind, but things are picking up. I guess my (very small) company somehow made it on the list because of our centrally-located office space. I’ve only been there three times! Hopefully that changes soon, I miss in-person work.

                                                              1. 2
                                                                1. 10

                                                                  You might also like alas if in squire. :)

                                                                  journey sq_dump(args) {
                                                                      arg = run(args.a1)
                                                                  
                                                                      if kindof(arg) == 'string' { proclaim('String(' + arg + ')') }
                                                                      alas if kindof(arg) == 'number' { proclaim('Number(' + string(arg) + ')') }
                                                                      alas if kindof(arg) == 'boolean' { proclaim('Boolean(' + string(arg) + ')') }
                                                                      alas if kindof(arg) == 'unbenknownst' { proclaim('Null()') }
                                                                      alas { dump(arg) }
                                                                  
                                                                      proclaim("\n")
                                                                      reward arg
                                                                  }
                                                                  
                                                                  1. 1

                                                                    Haha amazing. ‘kindof’ could also have been ‘natureof’

                                                                  2. 7

                                                                    Ada, Perl, Ruby and a couple of languages inspired by them.

                                                                    When I was way younger and jumping programming languages a lot that felt like the main thing I always got wrong, elif, elsif, elseif and else if.

                                                                    The last one despite being the most to type feels the most logical to me, being a combination of what’s already there with else and if, but is also the closest to a natural language/English.

                                                                    1. 1

                                                                      It should really be else, if or else; if to be even more like English and to really make it hard for parsers.

                                                                      1. 3

                                                                        x equals thirty-three or else... if your hat is green, of course. Good luck, parser! o7

                                                                      2. 1

                                                                        After discovering cond in Lisp, I wished every language had it instead of if, else and the various combinations of those two.

                                                                      3. 4

                                                                        ruby?

                                                                        1. 3

                                                                          Ada uses elsif. I wish all these elifs, elsifs, elseifs and else ifs keywords were interchangeable.

                                                                        1. 9

                                                                          The best interview I had was at the place I work right now. Absolutely no leetcoding. It was entirely verbal. 4 rounds:

                                                                          • Intro call, discussing the role, compensation, etc.
                                                                          • Chat with the lead engineer about my previous work (somewhat technical)
                                                                          • Chat with my potential teammate—this was technical, but mostly just open ended questions. I interviewed for an SRE role, so “what would you do in this scenario” or “how would you approach this problem”, type of questions. I didn’t prep at all for this. Felt like a friendly chat, really.
                                                                          • Final round—culture fit. My interests, what I think of the product, etc.

                                                                          That said, we also do take-home challenges for software engineering roles and I think that’s perfectly fine, as opposed to whiteboarding. A small task, something that can be solved in about 2–3 hours and not more; a call a few days after to discuss your solution.

                                                                          I’ve seen some companies have a “work day” interview, where you work with the team you’re interviewing for, for a day—starting from the standup call, doing your assigned task, and a review at the end of the day. This is a great way to assess the candidate’s fit with the rest of the team—that’s what ultimately matters at the end, anyway.

                                                                          1. 6

                                                                            That said, we also do take-home challenges for software engineering roles and I think that’s perfectly fine, as opposed to whiteboarding.

                                                                            I hate take home assignments with a passion. They’re so much worse than whiteboarding.

                                                                            Either they’re so small they don’t show any more than a whiteboard session would, or they’re massively disrespectful of my time. And because the interviewer isn’t in the room with the candidate, it’s easy to do the latter: the time investment is one sided.

                                                                            Many good candidates with jobs, families, and other commitments don’t have a day to be screened by every company they want to talk to.

                                                                            1. 5

                                                                              Basically, I wish companies offered both options. I get really nervous during interviews and would rather just spend a few hours beforehand working on the assignment, so I can come to the interview confident and ready to talk about my solutions. As long as the scope is reasonable I don’t mind it too much. For other candidates who might not have time, there should definitely be a self-contained option.

                                                                              1. 3

                                                                                I have gone through home assignments twice in my career. Both have asked for me to bill my time and paid it with a fair rate. I think that is the only correct way to do home assignments. Others should be rejected on the spot.

                                                                                I spoke to a company the beginning of this year and they were doing an open source product. Their assignment was basically “pick one of these GitHub issues and send us a PR.” The issues were somewhat trivial - fixes in config file parsing [1], that mostly aimed at showing you could find your way around the code. It looked like half a day’s work. I rejected the company for other reasons and ended up not doing the work on that assignment, but I liked the setup nonetheless.

                                                                                Many good candidates with jobs, families, and other commitments don’t have a day to be screened by every company they want to talk to.

                                                                                Those were not screens - I have gone through the screening steps beforehand. I agree that having day long screens is terrible. Unfortunately the alternative isn’t much better. I’ve went through “two hour” coding/algorithms screening tasks and, if you add the prep for that, you can easily land at half a day’s work. Yes, I hate HackerRank “exercises”.


                                                                                [1] I know many people are reluctant to do “free” and “real” feature work for a company that they have not started actually working for, but in this case it was obviously not something that was a core product feature, and, as I already mentioned, was paid in full. If you are asked to do free work, run away and never look back.

                                                                                1. 1

                                                                                  I think that is the only correct way to do home assignments.

                                                                                  If they’re asking you to complete real company-related tasks I agree. However, what if they’re asking you to do the type of meaningless problems you might find in an interview? Suppose we’re past the screening stage. Normally candidates aren’t paid for their time in a regular onsite interview, beyond travel accommodations, so I don’t see why it should be any different for a project done at home.

                                                                                  1. 4

                                                                                    Normally candidates aren’t paid for their time in a regular onsite interview,

                                                                                    Normally an onsite interview costs the company engineer hours. A take home interview costs the company nothing. When interviewing costs nothing, the tendency is to throw shit at the wall and see what sticks. This isn’t theoretical – I’ve seen people say “we don’t have the bandwidth for interviewing, let’s do take-home assignments before we bring them in.”

                                                                                    The money isn’t enough to make a difference in my life – but its a signal that my time’s not being wasted.

                                                                                    They’re still an interview format I find to be an unpleasant time sink compared to whiteboarding, but that’s a personal preference. If a company is paying, it at least indicates they’re trying to be thoughtful.

                                                                                    1. 1

                                                                                      A take home interview costs the company nothing.

                                                                                      That is not true at all in my experience. The company doesn’t have someone sitting in the room with you, so the time cost is invisible to you as a candidate, but someone has to evaluate your code after you submit it. I did a bunch of that at my last job and doing a thorough code review including coming up with followup questions typically took more of my time than an in-person interview slot would have. And we always had at least two reviewers for each submission.

                                                                                      1. 1

                                                                                        and doing a thorough code review

                                                                                        Replace ‘thorough’ with ‘superficial’ for all but the few applications you like the most, and you’ve got the approach I’ve generally seen taken (or advocated) with take-home interviews.

                                                                                        There are certainly places where this isn’t the case. Paying for the interview is a way to convince me that you’re one of those places.

                                                                                        1. 2

                                                                                          We do blind reviews. No resume. Just whether it’s product or platform, as those tests are different. I always read every word written and often take the time to figure out how much work would take to get it working. I approach it much like a random github project or PR. Is this something I can build off of? Can I drop it in and use it? Or is it mostly there and I can quickly fix a bug? On the other side of the spectrum, do I have to do most of the problem to get it working? Do I have trouble understanding how to even get started running or even reading the code?

                                                                              2. 1

                                                                                I see you’re working on some open source projects. Out of curiosity, what proportion of interviewers ask you to walk them through your contributions?

                                                                                1. 2

                                                                                  It came up at most of the smaller companies.

                                                                                  However, the open source code I write is also not usually directly relevant to the work that I would be doing (intentionally, for a number of reasons, including being in a small niche, avoiding non-compete issues and burnout).

                                                                                  The better interviews I’ve done have been a mix of whiteboarding system architecture, and pairing on debugging and writing a project.

                                                                                  But the thing that really makes interviews fun is having a competing offer in hand. Highly recommend it as a stress reduction strategy.

                                                                              3. 1

                                                                                Chat with my potential teammate—this was technical, but mostly just open ended questions.

                                                                                This approach works well for me both as an interviewer and as an interviewee when coupled with a code walkthrough. E.g. Walk us through a recent project. What does it do? How’d you start it? What was the hardest part to write? What did you learn? What would you do differently? What were the most frustrating limitations of the tools you used? Many of these questions lead to follow-up questions and then settle into an illuminating, non-adversarial conversation. Open source or otherwise unrestricted code is preferable, but a take home assignment suffices as a substitute.

                                                                                1. 1

                                                                                  A small task, something that can be solved in about 2–3 hours and not more; a call a few days after to discuss your solution.

                                                                                  This was part of our interview process as well. After a brief phone interview we would have the candidate login to a remote system (this was all on clean VMs). You would do this alone. Then we’d call back and have the candidate walk through the code that they wrote, explaining the design choices made and their solution. This was for a web based software development shop so we had front end / back end specific tasks.

                                                                                1. 5

                                                                                  Even though salaries are lower at probably all or almost all German companies, there is one good thing: We don’t have these hilarious job interviews (yet?). This makes up for it quite a bit in my opinion. On reddit I just read that you have these coding interviews for all kind of engineering levels, even for positions in which you’re mostly coordinating and mentoring?

                                                                                  Good read, very funny imo.

                                                                                  1. 2

                                                                                    It depends on the company. I’ve had different experiences with different companies.

                                                                                    1. 1

                                                                                      What are your interviews like?

                                                                                      1. 3

                                                                                        Depends a bit on the interviewer. In my experience the interview itself is usually talking about previous experiences and expectations on the role. There are also interviewers using standard questions like “Where do you see yourself in 5 years?”, “What are your greatest weaknesses?” and so on. And we don’t have that many rounds of interviews (2 was the maximum I had up to now), but those lots of interview rounds might only be a FAANG-thing?

                                                                                        Stuff that reminds me a bit of coding exercises: At one company I had to fill out a psychology-like survey from which they wanted to infer whether I fit the role and the team. And one very big company (>200k employees) had an online screening phase where you had to do a lot of logic and basic math exercises.

                                                                                        My interpretation would be that the talk heavy approach is much more subjective and personal sympathy will have a great influence. It also heavily depends on the interviewer how it goes. On the positive side it’s much more flexible for different requirements and roles (e.g. maybe I need somebody who’s a good mediator, because the team is falling apart, and I can live with him being only mediocre programmer).

                                                                                        1. 6

                                                                                          “What are your greatest weaknesses?” and so on.

                                                                                          Can I get the whiteboard coding question instead, please?

                                                                                          1. 2

                                                                                            In my experience the interview itself is usually talking about previous experiences and expectations on the role.

                                                                                            Wow, this is really foreign to me, it sounds nice. I’m a recent-ish grad so interviewers see me like a cog in the machine and so far I can count on one hand the number of times I’ve been asked about past experiences or given concrete details about the role!

                                                                                            1. 5

                                                                                              I’m not in Germany but geographically close(-ish), and this interviewing style is still pretty common around here, too, albeit the FAANG approach is being cargo culted more and more lately. Interviewing recent graduates in this context is actually loads and fun and, honestly, one of the most rewarding things I’ve ever done. I was on the team that conducted intern interviews (and many interns then applied for junior positions) – over the course of three years I must’ve easily spoken to a hundred people in this context, maybe more.

                                                                                              You’d think you got nothing to talk about but if you approach it with an open mind, you not only get to talk a lot, you get to learn a lot. All recent graduates had a course they particularly liked, some piece of homework they thought was particularly challenging and/or interesting and so on. Of course, many people have cool pet projects and whatnot but there are a lot of good students out there who just lay low and study well, and you got a lot of stuff to talk about with them, too. Something piqued their interest at some point and they can talk about it for days if you’re non-confrontational about it.

                                                                                              Also, you get to learn a lot about how the people you’re interviewing think about code, programs, data structures and algorithms, tools and so on – way more than you can learn based on how well they know their Cracking the Coding Interview.

                                                                                              (tbh I think whiteboard coding interviews are a particularly stupid way to go about hiring fresh graduates, who’ve learned them recently and don’t have much experience outside school. Unless you’re Google(-like) and specifically want to optimize your interviewing process for hiring smart young people who follow directions without asking questions and are willing to jump through any absurd hoop that an arbitrary system installs, whiteboard interviews are a bad idea IMHO. But I digress.)

                                                                                              Plus you get a very refreshing perspective from someone whose curiosity, enthusiasm and dedication haven’t been blunted by 10+ years of management and hiring blunders, organisational narrow vision, office politics and all that crap. Sure, 90% of it is naive posturing, but the rest of 10% is the kind of brilliant insight that’s very hard to get after a few years in a corporate office. My colleagues did everything they could to avoid being on the interview team – I loved it, because every time I talked to someone fresh out of school, no matter how tough things were going, I would get a reminder about why I picked a career in this field in the first place, and it just made my fsckin day.

                                                                                          2. 2

                                                                                            In German mostly, I’d imagine.

                                                                                        1. 5

                                                                                          We’re linking to twitter “threads” now? :(

                                                                                          1. 5

                                                                                            I was agonizing about what to link here. The interesting thing is the email, but it starts in the middle. The missing “intro paragraph” is this tweet. My fear was that, should I link the email directly, folks would scan just the first screen full of text and bail out, not getting to the “Okay, so let me try to restate and summarize all this” line.

                                                                                            What would have been the better way to share the content in this case?

                                                                                            1. 6

                                                                                              Twitter content is on topic - or rather, on-topic content on Twitter is not disallowed simply because it’s on Twitter.

                                                                                              You did the right thing here.

                                                                                              1. 1

                                                                                                I don’t know, but twitter uses so much malware that I can’t even view the site in Firefox. And I don’t have a crazy amount of anti-tracking stuff running.

                                                                                              2. 3

                                                                                                Soon we’ll be linking to an Instagram post of multiple screenshots of a twitter “thread”.

                                                                                                1. 2

                                                                                                  It really is a shame that so many technology discussions happen on Twitter of all places. I get FOMO about it sometimes but I just can’t be bothered to deal with the dysfunctional UI. I once followed a Columbia CS professor to follow his research, but I had no choice but to also see him posting photos of spoiled food asking “is this avocado with brown spots still safe to eat?”