Egocentric flame war tech interviews



  • The thing that pisses me off the most about applying to jobs is the possibility of getting into a technical interview with some arrogant developer asking totally unrelated questions.

    Take for example this job position:

    Senior Software Engineer
    The role involves working on the development of the product GUI and WS...
    Experience with Web application development
    Experience with SQL

    Now, you would except the questions to be asked are regarding this position, but in this and many others, you'd be wrong. In this particular case the test was to write a binary tree.

    OK, easy enough although I haven't done this in the 15 years since I left school.

    And that's when things start to roll down because person conducting the interview feels the need to break your confidence and leave the interview within a higher state of confidence in his self.

    • What's the O for a search/insert/delete in a binary tree?
    • Implement a method to sum the values of all the elements in the tree.
    • Do it with recursion.
    • Force the tree to be unbalanced (Really? Listen, can we move on?)

    Now, did this person ask me anything about HTML? About CSS? About HTTP? No, because that wouldn't make him feel like a superior entity!

    Since I was pissed, my time for the questions came, so I shot:

    Me: Say, do you know how streams in Java8 work?
    Him: We don't use Java8 around here.
    Me: Do you know the difference between PATCH and PUT (here you have some obscure shit motherfucker)?
    Him: I don't know what PATCH is. Any other question?
    Me: yes, why is session data stored in cookies in HTTP?
    Him: Listen, we have to finish.... bla bla bla
    Me: It's because HTTP is stateless. Thanks. Good bye.

    Either way, I wasn't going to take the position so I didn't really care about when they told me I didn't meet their criteria, although I did all the binary tree stuff he asked me for. Makes me wonder who got the job.

    Next time you're conducting a technical interview, stick with the position description, and ask stuff related to it in a direct way, don't come to me with abstract questions. If you want me to tell you what a Future is, just ask. Don't expect me to write every data structure or algorithm from the top of my head and to also know the O notation, who invented it and how to implement it in brainfuck.



  • I wasn't there to see, but if you apply for a "Senior Software Engineer", I would expect you to know the bare basics of data structures. I wouldn't hire anyone who wouldn't spit O(log n) for the common case of binary tree operations. And knowing how to implement one of those structure shows that you know what you're doing when writing

    new HashMap()
    new TreeMap()
    new TreeSet()
    new LinkedHashMap()

    Sorry to say this, but while that other guy might be an asshole, you just proved to them you would be useless in a team lead position.
    Did you consider that the guy already decided not to continue to the WS/Web/SQL part because he already had made his mind about you?



  • Also possible the interviewer was in his comfort zone with the cs stuff and not so much with the web. Having done a few interviews myself lately, it's not a pleasant feeling when the candidate says something you don't know much about.

    That said, he should have made a better effort.



  • You're an idiot.

    Did you just call a person dickhead arrogant developer just because he asked you basic programming stuff such as binary trees? Because you found that coding a function that sums the values of all the elements in a binary tree would "break your confidence"?

    We are not talking red black trees here or something even remotely obscure which I would concede someone 15 years out of school does not remember (actually, 5 seconds would be enough to forget about them). We are talking about binary trees. Two fscking pointers (or references, in your favourite language). What's next, do you forget how how arrays work?

    And why the fuck do you write "BinaryTrees" using CamelCase? This is not some freaking retarded HTML 7.0 'technology'. This is a basic data structure that almost every computer program in the world uses it in some way. Yes, that includes web applications.

    This is what is wrong with 'web programming' these days. I can barely recognize the old TDWTF in this site anymore, specially ever since this crappy forum software was installed. One writes software for idiots, the universe manages to provide bigger idiots...

    Would you trust someone who whould hesitate to write a function that sums all the nodes in a binary tree? Would you trust him enough to allow him anywhere near your JavaScript codebase? Or Java? Even if he happens to have memorized the Java documentation?



  • @presidentsdaughter said:

    Did you consider that the guy already decided not to continue to the WS/Web/SQL part because he already had made his mind about you?

    Would have been the longest interview ever.

    @presidentsdaughter said:

    I wasn't there to see, but if you apply for a "Senior Software Engineer", I would expect you to know the bare basics of data structures. I wouldn't hire anyone who wouldn't spit O(log n) for the common case of binary tree operations. And knowing how to implement one of those structure shows that you know what you're doing when writing

    Really? Knowing the basics of course is a must (what is HashMap? when to use a LinkedList?) but the hell I would know from the top of my head how to implement all of those.



  • @jape said:

    We are not talking red black trees here or something even remotely obscure which I would concede someone 15 years out of school does not remember (actually, 5 seconds would be enough to forget about them). We are talking about binary trees. Two fscking pointers (or references, in your favourite language). What's next, do you forget how how arrays work?

    Well, that escalated fast.

    My rant is not about the binary tree (better?) question per se. My rant is that with the whole field of themes, asking elementary, yet hard to remember stuff that's is mostly unrelated to the position is not the best strategy unless you're in this for some subjective reasons.



  • Well I agree with that. But then the exemple in the OP is extremely poorly chosen.

    Asking to implemented a linked list or a binary tree is certainly a good programming candidate filtering question. Asking to implement a self-balancing tree is more debatable, albeit I would still say it's a good question if you give enough time and are more interested in the reasoning than in the final algorithm.



  • Fizz



  • Buzz



  • Discourse is a barrier to FizzBuzz



  • Usually I just assume they want to see how you work on a problem, but in one case I was being marked by a machine.

    The machine was unit-testing my code, but I wasn't allowed to see what the unit tests were, and if I strayed outside the bounds of the test question ("you should only need to change 2 lines of code") I wasn't allowed to see my standard output to echo what it was doing.

    I didn't get a very good mark for obvious reasons. I tried to explain that the test wasn't necessarily helpful, but apparently he didn't understand, simply responding with "but you failed the test".

    So to recap:

    • Hidden unit tests
    • Hidden standard output
    • Too much stock put into a useless test, either that or their employees actually work under those conditions, apparently. People other than me, because I would rather jump into a volcano than make that career choice.

    I guess it annoys me because it was a waste of time.



  • @presidentsdaughter said:

    I wouldn't hire anyone who wouldn't spit O(log n) for the common case of binary tree operations.

    WTF‽



  • @boomzilla said:

    WTF‽

    Don't apply for a job in his workplace. I know binary trees and why to use them but damn if I could spit that out in an interview off the top of my head. I haven't had to implement something like this in over 3 years, though I don't remember having any real struggle with it.

    I'd probably just stand in a corner and scream the roots and leafs are coming to get me while holding a piece of paper with the number 7 written on it above my head.



  • I'm a senior developer and I just interviewed 2 guys this week. I didn't feel the need to ask them anything about binary trees, big O, if they know how to implement a hash on the fly. And why not? Because it wasn't relevant to the job. The project they would be working is java code with a very large, already in place structure. If I got a programmer that decided to roll there own hash map instead of using the built in Java one then I would definitely be talking to them about not wasting time on shit like that. I sent them a small test to gauge the basic understanding of the language and syntax but it was mostly to gauge their ability to search for solutions and implement them because thats what the job is.

    I think what the OP was trying to say was that sure, given 3 minutes with google he could have refreshed him memory with the all the big O notation of all the different types of searches that you learn in college but was that relevant to the job? Is that the programming he was going to do? If not, it's just interview fluff to make your self feel better.


  • Discourse touched me in a no-no place

    @presidentsdaughter said:

    I wouldn't hire anyone who wouldn't spit O(log n) for the common case of binary tree operations.

    Only true if you keep the tree balanced. I once worked with a developer who forgot that part in the tree structure he used to implement strings (itself an odd decision) and had the problem normal things like basic reading a string from a file would build a structure in the worst possible way: a linked list, linked in the wrong way, with lots of extra overhead per character for the tree branch not taken.

    Trees might be theoretically nicer than arrays, but arrays have this tricky habit of working better in practice (due to better memory locality and so better use of the facilities of real hardware).



  • @dkf said:

    Trees might be theoretically nicer than arrays, but arrays have this tricky habit of working better in practice (due to better memory locality and so better use of the facilities of real hardware).

    You can store trees in arrays (and I wouldn't be surprised if a well-optimized implementation of a tree-based container did just that, for exactly the reasons you mention), so what's the point of this statement? (Also, please don't answer with 'hash maps are the answer', because unlike a self-balancing BST with its unconditional guarantee of O(log n) time for key operations, a hashed associative container can get thoroughly rubber-hosed by its input data.)

    Now, for linked lists on the other hand...it's pretty hard to justify using one over a contiguous structure.



  • @dkf said:

    Trees might be theoretically nicer than arrays, but arrays have this tricky habit of working better in practice (due to better memory locality and so better use of the facilities of real hardware).

    So many things are like that. And of course, in most situations it makes no practical difference.



  • "Well, I'd be happy to answer that question, but what I'd rather talk about is the skills that I have that I can bring to this position. Since you're hiring me to be a web developer, lets talk about that. For example, last year I developed a web application using xxxxxxxx"...

    That would have been a much better answer. In my experience, the interviewer is mostly trying to get you to talk. In this case, he's trying to guage your level of competence. If you understand that up front, you can take over the conversation and lead the conversation where you want it to go; addressing your skills, and still address his needs.

    Also, I've come to learn that even in a large tech community (I'm in Minneapolis) its a small world. If you piss off someone who is in a hiring position, word will get around, and it will be that much harder to get another interview somewhere else.

    A better way to handle this would have been to say "After learning about this position and this company during this interview, I've decided that this company would not be a good fit for me. I'm more interested in doing XXX and I'm looking for those opportunities". A truthful statement; and you've saved the interviewer some time, because now he can move on to the next candidate without spending any more time considering you for the position.

    Even better would be to leave the interview with something like the following: Now that I know the kind of person you're looking for, if I know someone like that I'll be sure to have him apply. In the meantime, if you hear of a company with an opening doing XXX, could you let me know?



  • @presidentsdaughter said:

    I wasn't there to see, but if you apply for a "Senior Software Engineer", I would expect you to know the bare basics of data structures. I wouldn't hire anyone who wouldn't spit O(log n) for the common case of binary tree operations. And knowing how to implement one of those structure shows that you know what you're doing when writing

    new HashMap()
    new TreeMap()
    new TreeSet()
    new LinkedHashMap()

    Sorry to say this, but while that other guy might be an asshole, you just proved to them you would be useless in a team lead position.Did you consider that the guy already decided not to continue to the WS/Web/SQL part because he already had made his mind about you?


    I'm willing to give a junior, esp. a self-taught junior, a pass on basic data structures. But for a senior developer to not at least have a passing familiarity with what's in Chapter 2 of The Art of Computer Programming? What sort of Java/C#/web-programming fairy-land did the OP grow up in?

    @jape said:

    You're an idiot.

    Did you just call a person dickhead arrogant developer just because he asked you basic programming stuff such as binary trees? Because you found that coding a function that sums the values of all the elements in a binary tree would "break your confidence"?

    We are not talking red black trees here or something even remotely obscure which I would concede someone 15 years out of school does not remember (actually, 5 seconds would be enough to forget about them). We are talking about binary trees. Two fscking pointers (or references, in your favourite language). What's next, do you forget how how arrays work?

    And why the fuck do you write "BinaryTrees" using CamelCase? This is not some freaking retarded HTML 7.0 'technology'. This is a basic data structure that almost every computer program in the world uses it in some way. Yes, that includes web applications.

    This is what is wrong with 'web programming' these days.


    Oh heavens yes. I'm all for having people learn a scripting language as their first language (Python in particular is good for this). But if your education as a programmer stops there, you are a fool for letting it. Even if you aren't ever required to re-implement a basic data structure, you need to understand what they do well enough to not do something stupid; it also helps when you have to go find an oddball data structure or algorithm for an oddball job (I did a fair bit of research into interval trees for my job recently; we aren't rushing off to use them, but it's another tool I can put in my back pocket for the future).

    @Minkey said:

    I'm a senior developer and I just interviewed 2 guys this week. I didn't feel the need to ask them anything about binary trees, big O, if they know how to implement a hash on the fly. And why not? Because it wasn't relevant to the job.

    I'm sorry, but basic Big-O is

    1. not that hard at all ('loops are linear, partitioning is log, and nesting multiplies' will get you through 90% of code/algorithms)
    2. quite important when your profiler points the finger at something you wrote (no amount of nano-optimization or compiler wizardry will save you from quadratic or cubic behavior when a better algorithm exists).

    Now, I'll grant folks that a self-balancing BST is over the top (I'd have to read up in order to implement one myself). But a basic tree traversal? This should be in the realm of what anyone beyond a drooling code monkey can figure out on their own.



  • @DrPepper said:

    In the meantime, if you hear of a company with an opening doing XXX, could you let me know?

    Let me know too, that sounds like quite the opportunity.



  • @Minkey said:

    I didn't feel the need to ask them anything about binary trees, big O, if they know how to implement a hash on the fly. And why not? Because it wasn't relevant to the job. The project they would be working is java code with a very large, already in place structure. If I got a programmer that decided to roll there own hash map instead of using the built in Java one then I would definitely be talking to them about not wasting time on shit like that.

    What? Do people even fail to realize that big O notation is useful for deciding when to use data structures and algorithms, not about how to implement them?

    If they don't know that binary trees generally offer logaritmic access then they're garbage programmers. We're not even entering technical details here. We're not talking about the "wouldn't know how to write a binary tree" programmers (which already sounds ridiculous to me, do these people understand other basic concepts such as recursion?). We're talking about the "would incorrectly use a HashMap instead of Vector/Array" variety.

    As said, this is what's wrong with web development.



  • @tarunik said:

    You can store trees in arrays (and I wouldn't be surprised if a well-optimized implementation of a tree-based container did just that, for exactly the reasons you mention), so what's the point of this statement?

    Storing a tree in an array is a bit of a pain if you want to dynamically add/remove elements. Essentially, either you degenerate into using indices, at which point your array essentially becomes a memory pool and you're pretty much back to the non-array case; or you end up doing tons of memory shuffling to keep the array ordered. (E.g., all implementations of std::map<> & co I've seen allocate nodes from the heap rather than being backed by an array/vector.)


  • Discourse touched me in a no-no place

    @tarunik said:

    Also, please don't answer with 'hash maps are the answer', because unlike a self-balancing BST with its unconditional guarantee of O(log n) time for key operations, a hashed associative container can get thoroughly rubber-hosed by its input data.

    Hash maps are the answer.

    :stuck_out_tongue:

    For an extremely large class of problems (well, it's more of a complement class) hashing is just fine. As long as you avoid the rabbit hole of perfect hashing, which is theoretically wonderful but utterly impractical.



  • @thegoryone said:

    I know binary trees and why to use them but damn if I could spit that out in an interview off the top of my head.

    How is that even possible?

    I just can't believe that someone not able to come up on his own with a function performing a simple recursive post-order sum of a binary tree would call himself a "programmer" . It's a one liner in most languages!

    You just can't claim you know binary trees without knowing how to do at least a walk. It's that simple.


  • mod

    @Eldelshell said:

    you would except expect the questions

    I see that no one has FTFY.



  • When you don't use something very often, it does tend to get a bit fuzzy at the back of your head. Sure, give me 30 minutes and I'll work something out if I have any previous experience with it but not in the middle of an interview. Plus I'm a PHP developer (PHP is to development as Leyton Orient are to Champions league football) and the nature of my work doesn't really revolve around sifting through data. Last time I think I used a simple binary tree was with associative arrays iirc when hashes weren't cutting it.

    It was the same during the transition from 4 to 5 when I hadn't touched OO languages since University. I could remember the basics, the definitions and roughly how it was supposed to work, but I couldn't have sat down and done it.


  • Grade A Premium Asshole

    Perhaps the interviewer was not being an egocentric asshole, but instead trying to catch you off guard and see how you react? Sometimes in an interview a perfectly acceptable answer is, "I have not worked with that for 10 years because it has not been required in my current position, but I do not think it would take me long to get back up to speed."

    Also, did it ever occur to you that while you are venting here about him being an egotistical asshole, he is having a conversation with his co-workers that starts roughly with, "You will not believe the bullet we dodged by not hiring this prick I just finished interviewing."?


  • mod

    @Eldelshell said:

    Next time you're conducting a technical interview, stick with the position description, and ask stuff related to it in a direct way, don't come to me with abstract questions.

    Companies can't list every detail about a position in a listing. Maybe the position you were interviewing for has some indirect link to binary trees. Here's a tip: the interviewer almost always knows more about the position than you do.


  • mod

    @presidentsdaughter said:

    I wouldn't hire anyone who wouldn't spit O(log n) for the common case of binary tree operations.

    Why? I haven't been able to spit the O of most anything off the top of my head in years. That doesn't make me a worse developer.



  • Hey, @cartman82 - Your intern found TDWTF!



  • @dkf said:

    Only true if you keep the tree balanced.

    Re-read what I said: common case. Worst case would still be O(n). If you keep a balanced tree, then worst case would also be O(log n)



  • Forgetting is natural, and not a problem. Not being able to come up with a trivially simple postorder walk in less than 5 minutes definitely is a severe problem. I wouldn't hire anyone who doesn't.

    I am just talking about the following snippet:

    def sum(root):
        # Base cases be damned.
        return sum(root.left) + sum(root.right)
    

    Can't you really come up with something like this in 2 minutes? Can you believe someone who would not come up with this would be able to say he knows 'programming'? Recursion?

    And if you've been able to come up with the above how many more minutes you need to change it to become find instead of sum? add?

    And logarithmic vs linear time at least, for the sake of god.

    Not being able to do this should be embarrasing for every programmer out there. Not knowing OO is only embarrasing for those applying to OO positions or maintaing big OO codebases. That's a huge difference. I don't think any programmer out there could confidently say "they don't need to understand or use binary trees".



  • @jape said:

    I don't think any programmer out there could confidently say "they don't need to understand or use binary trees".

    I can't remember when I've actually had to use one at the level you're describing. Originally I thought this was sarcasm:

    @jape said:

    How is that even possible?

    I just can't believe that someone not able to come up on his own with a function performing a simple recursive post-order sum of a binary tree would call himself a "programmer" . It's a one liner in most languages!

    You just can't claim you know binary trees without knowing how to do at least a walk. It's that simple.

    Now it's too late to take back my like. Perhaps I'll become a blakeyesque like hermit in response. :frowning:



  • @boomzilla said:

    I can't remember when I've actually had to use [a binary tree] at the level you're describing.

    I'd just like to add, I'm the guy who argues that doing programming is doing math.



  • @boomzilla said:

    Originally I thought this was sarcasm

    The entire thread reads like sarcasm to me. I've always thought Amazon/Google-style interviews had gone too far but this is the exact opposite.

    I've been assuming so far that understanding recursion was also required for a "programmer" position. Do I really have to re-examine my assumptions? Or will the relax, we were joking post come soon?



  • @jape said:

    I've been assuming so far that understanding recursion was also required for a "programmer" position. Do I really have to re-examine my assumptions? Or will the relax, we were joking post come soon?

    Yeah, a programmer should understand recursion. And I've certainly used that plenty. Eh...maybe I was getting hung up on the terminology, though I still can't remember the last time I needed to actually implement something like a tree.



  • @abarker said:

    I see that no one has FTFY.

    Thought I was going to frist that...



  • What's the context of the PATCH and PUT question?


  • Discourse touched me in a no-no place



  • @presidentsdaughter said:

    I wasn't there to see, but if you apply for a "Senior Software Engineer", I would expect you to know the bare basics of data structures.

    And that has what to do with the UI and webservices? (Which is what I assume "WS" stands for here.)

    @jape said:

    Did you just call a person dickhead arrogant developer just because he asked you basic programming stuff such as binary trees? Because you found that coding a function that sums the values of all the elements in a binary tree would "break your confidence"?

    It's irrelevant to the job. He might as well asked about the valve timings on a '65 Barracuda.

    @jape said:

    Two fscking pointers (or references, in your favourite language). What's next, do you forget how how arrays work?

    Any language worth using to build web UIs doesn't even goddamned have pointers.

    @jape said:

    Would you trust someone who whould hesitate to write a function that sums all the nodes in a binary tree? Would you trust him enough to allow him anywhere near your JavaScript codebase? Or Java? Even if he happens to have memorized the Java documentation?

    I would, yes.



  • @thegoryone said:

    I'd probably just stand in a corner and scream the roots and leafs are coming to get me while holding a piece of paper with the number 7 written on it above my head.

    YouTube superstardom.



  • @jape said:

    I just can't believe that someone not able to come up on his own with a function performing a simple recursive post-order sum of a binary tree would call himself a "programmer" . It's a one liner in most languages!

    Yes but it's also the type of implementation detail wankery that good programmers try to move away from so they can get on with solving actual problems.

    I don't need to know how to implement every collection in C# to know how to pick the best one for a particular circumstance, and the latter is the bit that matters. Except when it doesn't at all, which is 99.5% of the time anyway.

    For a UI position, I'd much rather have a candidate tell me whether they prefer an eye-tracking setup or a 1-to-1 hallway usability testing with cards. Or explain how to judge when a A/B or Multivariate test plan should be implemented, and how to draw conclusions from its results.

    That's a million times more relevant to the position.



  • Oh yah, that's obscure as shit. I don't think I've ever, EVER, seen HTTP PATCH used.


  • I survived the hour long Uno hand

    I was once asked in an interview if I could name off all the HTTP actions. I came up with "POST and GET, obviously, and there's some others... I think there's DELETE, and PUT?" I was told, "eh, close enough." :)

    I routinely see people having no idea what takes so long in their code :( The ability to figure out what the fuck you're asking the machine to DO and why it takes a long time is way more useful and also way more rare than being able to rattle off HTTP actions or status codes or what have you that's readily available on google.



  • @blakeyrat said:

    It's irrelevant to the job. He might as well asked about the valve timings on a '65 Barracuda.

    So he won't use any data structures in his job? Then it's not a programmer. A codemonkey at best.

    If he's using any data structures, then at least he should know how to use them. I'm not even asking about memorizing stuff which is what you're wrongly suggesting with your broken analogy. Binary trees are as much as programming basics as a linked list is. They're quite probably taught during the second day in most introduction to programming courses.

    @blakeyrat said:

    Any language worth using to build web UIs doesn't even goddamned have pointers.

    Which is why I said references. If you are by any chance thinking right now that "web UI languages doesn't have references" please think it very carefully before hitting Reply and wasting bandwidth.

    @blakeyrat said:

    Yes but it's also the type of implementation detail wankery that good programmers try to move away from so they can get on with solving actual problems.

    I don't need to know how to implement every collection in C# to know
    how to pick the best one for a particular circumstance, and the latter
    is the bit that matters. Except when it doesn't at all, which is 99.5%
    of the time anyway.


    No sorry, this is about using data structures. I've already mentioned several times I'm not going to ask anyone to recall from memory any complex data structure such as a red black tree.

    And if you can't know whether tree queries are linear or logaritmic, please tell how the hell are you going to pick the "right data structure for a particular circumstance", cause I would love to hear it. Divine revelation, perphaps?


  • I survived the hour long Uno hand

    Javascript doesn't have data structures, it replaced them all with JSON, duh. No JS programmer ever needs to understand how to structure data, that's a backend programmer's job.



  • @Yamikuronue said:

    I was once asked in an interview if I could name off all the HTTP actions. I came up with "POST and GET, obviously, and there's some others... I think there's DELETE, and PUT?" I was told, "eh, close enough." :)

    I routinely see people having no idea what takes so long in their code :( The ability to figure out what the fuck you're asking the machine to DO and why it takes a long time is way more useful and also way more rare than being able to rattle off HTTP actions or status codes or what have you that's readily available on google.

    I'd probably just reply and say, "I'll show off my knowledge by correcting you, they're called verbs."


  • Discourse touched me in a no-no place

    @blakeyrat said:

    Oh yah, that's obscure as shit. I don't think I've ever, EVER, seen HTTP PATCH used.

    I'd never even heard of it. I just googled "patch and put" and that was about the 3rd link--the other two, from the summary--clearly were not relevant, so I just assumed the RFC was right.


  • Discourse touched me in a no-no place

    There's also HEAD and maybe a couple even more obscure ones.

    As for performance I'm amazed at how many people guess where the slowdown is. The kind of code I deal with you can usually predict what'll be slow, but I will, if nothing else, use one of the poor man's profilers to see.


  • Discourse touched me in a no-no place

    @jape said:

    So he won't use any data structures in his job? Then it's not a programmer. A codemonkey at best.

    In college I had to write a complete B-tree or maybe B+-tree implementation (it was 20 years ago.) I haven't needed to do anything like that since, or, frankly, even use a tree in a decade or more.


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.