6 ms·
What's wrong with "I'd use a library" or "I'd Google it"? I think that's the most honest answer, and someone in the field for 10+ years I _prefer_ those answer
by KerryJones 6y ago
What's wrong with "I'd use a library" or "I'd Google it"?
I think that's the most honest answer, and someone in the field for 10+ years I _prefer_ those answers. I don't want someone reinventing a library if a good one exists, and I hope people Google answers (or use Stack Overflow) to find solutions that are a bit more vetted. I was at a company where they pushed for all their own coding and it was a _mess_. The amount of proprietary technology we had to maintain was ridiculous, and in most cases there was 3rd party libraries that would have handled the problem as well or nearly as well.
I agree that "I'd use a library" doesn't tell you how good of a coder someone is, but I'd much prefer a "lazy programmer" to an overly-clever, always-do-it-yourself programmer. If the point of the interview is to see how someone codes, have them code something in the realm of what they would actually be doing.
Also, to be clear, if you are incredibly clever _and_ know how to do it yourself, but seek to find the balance of when to use libraries vs when not t,o I find that the most valuable.
Background: Current FAANG employee, previously CTO of small startup
- 908B64B197 6y ago> What's wrong with "I'd use a library" or "I'd Google it"? The point of the question is to solve a problem in ~15 minutes. Algorithms and Data Structures are used for these because everyone knows them.
- justaguy88 6y agoThats the problem, they _don't_ know them and are expected to study beforehand because they're not used often in many roles
- 908B64B197 6y agoAny serious intro to CS course will have them as part of the curriculum (at least for linked list). Even when not teaching about memory, it's used to teach recursion.
- 567fghvbb 6y agoThat's fine for assessing graduates, but good developers with a lot of experience won't be as familiar with writing algorithms from scratch. They'll have to do a lot of revision for technical tests just to memorise reels of information they'd google in 10 seconds in real life.
- nerdponx 6y agoNot everyone who is a programmer starts with undergrad CS. Why not ask them to build a basic web app in their preferred framework, or read and process a basic text file, or any number of things that are more practical than implementing a low-level data structure?
- skyde 6y agoRight I expect anyone that just graduated 1 or 2 years ago to be able to write it in 15 minutes. But someone who is an expert in machine learning or SQL ... and have not used data-structure for the past 20 year would need to study for it. Do you want to hire the programmer that have 0 deep knowledge of the specific thing you are working on but can quickly tell you the content of CS 101 books or do you want someone that have skill set, experience and knowledge that complement your current team?
- etripe 6y ago> Any serious intro to CS course will have them as part of the curriculum (at least for linked list). Your implied assertion is that a CS degree is required for programming. That's a good way to select for people like you, which is one of the strongest biases in hiring. One should also take survivor's bias into account, increasing the likelihood that if you're a programmer and did a CS degree, you think a CS degree is required. Whether a "serious intro" to CS should include recursion and linked lists depends on whether you think: a. a CS degree should prepare for a programming job b. it should only prepare for a programming job c. a CS degree actually prepares for a programming job d. data structure knowledge is fundamental to programming in general My personal answers are it should prepare for a programming job, but not exclusively, and that it doesn't usually (adequately) prepare for a programming job. In that context, it should include data structures, general computer architecture and similar historic/foundational topics. I wouldn't go so far as to call them fundamental, because that implies they're must haves. I also wouldn't go so far as to say any CS course that doesn't offer them isn't serious. Maybe that school has a greater focus on preparing for the job, or maybe someone's major is more akin to IT project management than technical. In the end, a degree is: * a proxy for general intelligence * a basis for your social network * a status symbol (school pedigree) * an introduction to the topics covered * an authority argument * an indication of how well that person does at tests in an academic setting That's it. If you're lucky, someone with a degree remembers most of what they covered in classes. At best, a CS degree is correlated to someone being able do fill a programming role. What programming may require is: * General intelligence * Systems thinking (e.g. abstraction, information flows, decision trees) * Programming language skills * Patterns (architecture, design, OO/FP) * Knowledge of data structures * General IT knowledge (DevOps) * Domain knowledge * Framework familiarity * Math skills * Solving novel problems * Absorbing new knowledge * Communication skills (requirements gathering, expectation management, reporting, etc) One could arrive at these skills through passion and dedication to the hobby, learning on the job, vocational training, a bootcamp, a CS degree, a PhD and more. Of these skills, the ones least likely to be required for the vast majority of positions are math skills and data structures - beyond the absolute basics. I think it's important not to get our Ps and Qs reversed, don't you?
- deleted 6y ago[deleted]
- KerryJones 6y agoI would argue that's a bad "point of the question" -- also, many of them are in 50 minute interviews. Call me crazy, I think an interview question should test for one's ability to program well, not test their memorization knowledge. My argument is precisely that linked-list questions are a poor proxy for programming well. It's testing the wrong thing(s).
- _jordan 6y agoMay I ask if the approach you describe here was what you applied in the FAANG interview? I would be pleasantly surprised if it worked! :)
- KerryJones 6y agoThey asked no Linked-List questions (I was prepared for them, the only time I have ever used linked-lists was in interview prep). I also think the FAANG interview was pretty bad overall (took 6 months to go through), the last question was great. It required no algorithms, but a difficult problem to solve that required me to think on my feet rather than apply a known algorithm. I can also tell you that my current team leads have both emphasized the importance of being able to find information, less importance being able to do it off the cuff (which I agree with).
- balfirevic 6y ago> the last question was great What was the question?
- KerryJones 6y agoThey have pretty strict words around not sharing problems unfortunately, and while it's unlikely it would be traced back to me the potential isn't worth my job.
- balfirevic 6y agoDamn, that sounds almost draconian. Well, thanks for sharing what you could!
- cousin_it 6y ago> What's wrong with "I'd use a library" or "I'd Google it"? Saying "I'd use a library" isn't a reliable signal. If you hire based on it, everyone will just parrot it. On the other hand, being able to solve programming/math problems is a reliable signal. Linus and Jeff Dean are very good at such problems and it's not a coincidence.
- nicoburns 6y ago> Saying "I'd use a library" isn't a reliable signal. True. That's why you shouldn't be asking a question where that's a good answer in the first place. > Linus and Jeff Dean are very good at such problems and it's not a coincidence. Sure. But being good at these problems also isn't what makes Jeff Dean or Linus good programmers. Being good at solving novel problems is. The problem with the linked list question is that half of your interviewees will have seen it before and half of them wont, thus giving you quite a biased view on them.
- cousin_it 6y ago> half of your interviewees will have seen it before and half of them wont That's just not true at all. There's a huge supply of algorithmic problems and it's easy to invent new ones, so a typical problem given in an interview will be novel to pretty much all interviewees.
- prepend 6y ago> That's why you shouldn't be asking a question where that's a good answer in the first place. I’d like a better question, but time is limited and spending lots of time on explaining the context behind a real example is harder. Although it’s not like I’m married to these questions and would gladly replace them with some generic question that tries to address threading, resource management, and whatever linked lists are supposed to test.
- collyw 6y agoDisagree. The guy who built the system I am now maintaining reinvented the wheel many times. So now we have a lot of undocumented buggy code. Most people aren't programming the linux kernel, they are writing a variation on web based CRUD.
- prepend 6y ago> What's wrong with "I'd use a library" or "I'd Google it"? I meant if that’s their only answer and they aren’t able to design something like a linked list from scratch. Usually the answer went like “I’d of course use the built in class Foo, but for purposes of this answer, yadda yadda yadda” Sometimes I would get someone who would argue over wherever it’s a dumb question or try to explain how they don’t know how to make getters and setters because they would just Google the answer. So that’s a bad sign for culture, teamwork. IRL you don’t want people making their own linkedlists, just like no one should actually write FizzBuzz. But it’s helpful to filter out the number of non-programmers who apply for programmer jobs.
- collyw 6y ago>But it’s helpful to filter out the number of non-programmers who apply for programmer jobs. I keep hearing about these people, but I have never met one in 20 years.
- collyw 6y agoExactly. If I have a new problem to solve, I may have an idea how to solve it, but I might as well see how others have solved it as there may be a better solution.