7 ms·
>>I once put in about 8 hours on a take home project at a company (well known in these parts) that I had tremendous respect for, only to get an email back with
by kamaal 7y ago
>>I once put in about 8 hours on a take home project at a company (well known in these parts) that I had tremendous respect for, only to get an email back with "sorry, not up to par. We need someone with more experience".
Looks like this is a common pattern with take home projects. I faced a very similar problem a few weeks back.
Though they called me for the interview. The general approach is to take some ones overnight deadline coding and code review it for a week. Then they dissect your code written in deadline duress like they are some masters of the universe. They also told me my code passed through their automated test suite, and then some programmers in their office reviewed it too.
And then after two rounds of interviews they rejected me because apparently 'cat error.log | grep 'ERROR:' | wc -l' is not how real programmers find error count, but write python programs every single time they face such a problem.
In short these places with take home interviews generally tend to be people who are full of themselves. They are also a kind of workplace full self-congratulatory people who have fallen in love with their own legend.
Haven't had a single good experience with places that give take home tests.
- reificator 7y ago> And then after two rounds of interviews they rejected me because apparently 'cat error.log | grep 'ERROR:' | wc -l' is not how real programmers find error count, but write python programs every single time they face such a problem. bulletsDodged += 1
- somebodythere 7y agoReal programmers would write bulletsDodged++;
- reificator 7y agohttps://doc.rust-lang.org/1.2.0/complement-design-faq.html#why-no---x-or-x++ https://doc.rust-lang.org/1.2.0/complement-design-faq.html#w...?
- bagacrap 7y agoour style guide dictates ++bulletsDodged;
- ErikAugust 7y agoWell, bulletsDodged++ and ++bulletsDodged mean different things in most languages. It ain't just a matter of style. :)
- reificator 7y agoBut preferring one over the other is.
- fhars 7y agoLike C++ gives you the current value of C and then increments it for some future use.
- philpem 7y agoThing is, that's not valid Python - but the OP's version is ;-)
- rhinoceraptor 7y agoIf they're dissecting it at that close a level, it's probably not a company you'd want to work for anyway. At least how I judge take home tests (for a simple backend CRUD app spec), I'm definitely not disqualifying based on surface level details like that. I don't even bother running it on my machine most of the time. What I'm looking for that it doesn't have obvious SQL injections (I've seen this a depressing number of times), it has some semblance of unit/automated tests, API validation, error handling, database migrations, good naming, and the code isn't all jammed in to one or two files.
- kamaal 7y agoThere are plenty of things in what you wrote. For example, My assignment was to build a command line app. The spec given said nothing about how bad inputs should be handled. How should they be handled? No Op? Throw exception? Friendly error messages? How? Note how the evaluation changes from one person to other, you could be someone who expects an exception to be printed, I could be someone who expects an exception to be the wrong way, and would rather prefer a No Op. As you yourself mentioned, SQL injection validations are important to you. Think of it from a candidate's perspective, you gave them a project with a certain set of features to finish in a deadline, and they need to finish it while holding a full time job. The candidate does the best they can to finish all the features. But you seem to have an invisible/opaque measurement in the form of SQL injection validation. The candidate might think you measure in terms of feature completion(Which would be correct, the project needs to work to be considered finished). The candidate could implement your spec 100% and yet get rejected. >>it has some semblance of unit/automated tests, API validation, error handling, database migrations, good naming, and the code isn't all jammed in to one or two files. In 24 hours? What are you hiring for really? And why that kind of tearing hurry? Having people to finish this kind of a high intensity ultramarathon coding drill under a crippling deadline. And then expect them to not just finish the assignment but also comply to your invisible quality checklist which no one knows but you. For a change try taking such tests yourself. Like biggish projects, under super tough time limitations, and while you are at your current day job, with all the quality checklist evaluations attached. And then have it reviewed by other programmers. You will see everyone has their own evaluation methods, and big feature projects delivered under heroic efforts, with tough deadlines tend to force you into some or the other quality compromise.
- CDRdude 7y ago> apparently 'cat error.log | grep 'ERROR:' | wc -l' is not how real programmers find error count, Perhaps real programmers would 'grep -c 'ERROR:' error.log'. I’m not sure what kind of overhead the extra pipes use.
- kstrauser 7y ago> because apparently 'cat error.log | grep 'ERROR:' | wc -l' is not how real programmers find error count I've been on the other end of that, where we were explicit that the goal of the exercise was to solve problem X with technology Y so that we could gauge the applicant's skill with Y. And yet, we'd still get submissions that used Z because it was way better at solving X than Y was. Well, yeah, we know that. That's not what we were trying to assess. I'm not saying you did that. It just gave me flashbacks to those situations.
- kamaal 7y agoWell I don't know what is being tested here. grep is a fairly old utility, which might have bugs which I don't deny. But these utilities have been debugged to complete stability by now. Besides grep itself was built on work done by other people before. https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html https://lists.freebsd.org/pipermail/freebsd-current/2010-Aug... GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the final letter of the target string, and uses a lookup table to tell it how far ahead it can skip in the input whenever it finds a non-matching character. If the idea here is to test if the candidate can come with the Boyer-Moore algorithm in an hour then I doubt something like that is even possible. Things like that are not invented by some one in an hour, the original inventors themselves likely spent a life time studying and working on problems to produce anything novel. On the other hand memorizing other people's work, which they themselves took years work in discovery, in the current of Google look-up-able knowledge, literally proves nothing. It's the exact opposite of a person capability to produce things. The whole idea of a take home test is to demonstrate capability. If submitting a working project under a tough deadline doesn't pass that test, then Im not sure what the hiring panels are even trying to do here.
- ethanwillis 7y agoIf you know that Z is the best way to solve X then why would you ask them to solve X with Y? Why not give them a problem to solve that Y is best suited for? It sounds like you got multiple solutions that used the best tool Z, but yet you reward people for being fine with using an inferior tool. That's not exactly the pool of applicants I'd want to bias my search towards. Edit: I just want to add that I don't mean to sound harsh. And maybe it would help to understand what X, Y, and Z are in your case. Details do matter!
- hvidgaard 7y agoIf someone actually told me they'd use 'cat error.log | grep 'ERROR:' | wc -l' to find an error count, they'd have to be gigantic drama queens or asshole for me to not hire them for a position, I'd even look for a different one if it's not quite the right fit for the one they're interviewing for. That is textbook example efficiency.
- swish_bob 7y agoDunno, watching people cat something then pipe it to grep drives me up the wall. I'll let piping grep to wc -l instead of just using -c pass this time though.
- ash 7y agoI prefer cat-then-pipe while using shell interactively. It's easier to add things to the middle of the pipeline. You simply move the cursor the pipe character, and type another command. Original: cat error.log | grep 'ERROR:' | wc -l After change: cat error.log | grep -v 'SENSITIVE' | grep 'ERROR:' | wc -l But with cat-less version, you have to think and sometimes even move things around. Original: grep error.log 'ERROR:' | wc -l After change: grep -v 'SENSITIVE' error.log | grep 'ERROR:' | wc -l Moreover, some commands behave differently in cat-less mode. For example, gzip: gzip file.js | wc -c # oops, we've just removed file.js cat file.js | gzip | wc -c # shows compressed size
- fhars 7y agoThey may have failed you for a useless use of cat http://porkmail.org/era/unix/award.html#uucaletter http://porkmail.org/era/unix/award.html#uucaletter