1. 6
  1. 10

    This was from 2007. Do people still see this problem nowadays? Admittedly all the interviewing I’ve done recently has been somewhat removed from the front lines, and I’m hiring for positions where people would be working in a somewhat obscure language (Clojure) but I’ve never seen anything like this.

    1. 5

      In 2014 i had a group project at uni. The group had 12 people, and the top-grade student wasn’t able to implement a histogram computation for a grayscale image. Which is basically “foreach(pixel) array[pixel] += 1” He also wasn’t able to ask for help in the two days he struggeled with a solution. So my N=1 sample here is that it was necessary 7 years later, and it probably still is

      1. 5

        I have had my first experience at hiring programmers this year and although I have not had the issue described in the article (we do not advertise publicly and are not hiring entry level people at this time), I have also had issues with people who won’t ask for help. For me this is the worst possible failure. If a person came and said “I actually don’t know how to write a loop in this language” I would be patient enough to evaluate how fast they can learn, knowing they would need to do a lot of it. But people who get stuck on things that there is no way they could possibly know (e.g. internal company design decisions we forgot to inform them about) and then just waste time trying to puzzle it out without the required information… I can’t work with people like that. You send them some work with a two week deadline, and they say they are making progress, and then 2 hours before the deadline you find out they have done nothing at all.

        1. 2

          Yeah, exactly. Just openly saying that one cannot do something, but is willing to learn (and is able to) is way more worth than people telling you they can do everything and then fail doing so.

        2. 2

          Not to defend the student, who should have asked for help, I suspect that the idea you can do array[pixel] probably just didn’t occur to him, so he got stuck. Similarly for fizzbuzz, I think many coders just don’t know about % because you don’t use it very often. A problem for junior/poor coders is you get stuck in certain places, and then there’s nowhere to go but to try some xyproblem.info nonsense.

          1. 4

            I think many coders just don’t know about % because you don’t use it very often.

            Maybe it depends on the level of abstraction, but I use % (or, more often, bit-twiddling special cases of it) quite a lot in C/C++. That said, you don’t actually need % for fizzbuzz. The pattern repeats every 15 elements, so if you don’t know about modulo arithmetic (which is surprising, since it’s a pretty important part of a computer science degree, even if you don’t know that there’s a built-in operator for it) then you can write something like this:

            long i=1;
            while (1)
            {
              printf("%ld\n", i++);
              printf("%ld\n", i++);
              printf("Fizz\n"); i++
              printf("%ld\n", i++);
              printf("Buzz\n"); i++;
              printf("Fizz\n"); i++;
              printf("%ld\n", i++);
              printf("%ld\n", i++);
              printf("Fizz\n"); i++;
              printf("Buzz\n", i++);
              printf("%ld\n", i++);
              printf("Fizz\n"); i++;
              printf("%ld\n", i++);
              printf("%ld\n", i++);
              printf("FizzBuzz\n"); i++;
            }
            

            This implementation doesn’t require modulo arithmetic at all. If I saw this in an interview, I’d then ask how to do it in a single printf call in the loop. This would then hit an interesting corner case in C, because argument order is undefined and so a correct solution couldn’t use i++ in the arguments and would have to look like this:

            long i=1;
            while (1)
            {
              printf("%ld\n%ld\nFizz\n%ld\nBuzz\nFizz\%ld\n%ld\Fizz\nBuzz\n%ld\nFizz%ld\n%ld\nFizzBuzz\n",
                 i+1,
                 i+2,
                 i+4,
                 i+7,
                 i+8,
                 i+11,
                 i+13,
                 i+14);
              i += 15;
            }
            

            So you can actually write C FizzBuzz implementation with a single statement in the loop body and no arithmetic other than addition.

            This isn’t a particularly optimised FizzBuzz, but it’s very simple and the required knowledge to build it in any language is:

            • Loops
            • Addition
            • Outputting strings and integers
            • The rules of FizzBuzz
            • The ability to spot a repeating pattern in a trivial sequence
        3. 3

          Yes. I regularly interview candidates for dev roles. Somebody handed in this:

          def oh_god_why():
              return MyClass.__init__()
          
          class MyClass(object):
              def __init__(self):
                  # notice the lack of `pass` here
          

          I don’t even dare guess what they meant.

          That’s one example. I’ve… seen things.

          1. 1

            You’re misjudging “this person has spent about 5 minutes to google for python syntax, a language they probably never used before” for “this person has never programmed”. Sure it could be true, but it’s not a string indicator - especially the pass is something that is very weird to someone being used to C-like languages. void foo() {} is perfectly fine.

            1. 4

              I’m not sure I can agree with this. An average developer proficient in C should not be so confused that they would submit something like that above (assuming that’s a verbatim submission).

              I wouldn’t expect perfection, or even idiomatic usage or the language, but if you’re sending in code to apply for a job the code should at least make sense. I would not want to hire someone willing to send in code that doesn’t make sense - though I would also accept submissions in nearly any language that a candidate is familiar with.

              1. 3

                I interpreted it as a whiteboard/realtime thing. Of course that changes if it was actually submitted with someone being able to test it.

                1. 2

                  Oh, yeah if we’re talking whiteboard then that all goes out the window.

                  1. 2

                    It wasn’t in realtime, they had to refactor a tiny codebase in their own time and submitted that.

                    1. 2

                      Well…then…I think I would ask why submit it at all?

                      1. 2

                        I would ask the same… but the person in question emailed that in.

                2. 1

                  I’d expect someone who says they know Python in their CV to well… know Python. And I’m not claiming this is proof of “has never programmed”, I’m saying it’s proof that people that can’t program apply for programming jobs.

            2. 2

              In this video, Mike Acton says that he sees programmers being incompetent in three main areas:

              1. Practice
              2. Reasonable defaults
              3. Problem-solving skills

              The first point is really interesting; he suggests that as professionals, we should be constantly be practicing, trying to fill gaps in our knowledge. When’s the last time we set aside 30 minutes to do programming knowing that we’re going to delete the whole thing right after we’re done and repeat tomorrow?

              1. 1

                I wonder how the applicants had to submit/present their solution. I’m not sure if I’d manage to write a syntactically correct & compiling FizzBuzz in C or so on a whiteboard. Is a missing ; already a reason to fail the test?

                1. 2

                  I think the whole procedure is to filter out people who aren’t able to think like a programmer. I wouldn’t sort someone out who’d make syntax errors, but otherwise has the right logic applied to their solution, because this is where you can’t get help. The compiler will tell you a syntactical or semantical error, but never logic one

                  1. 4

                    I did have one interview where I literally said something like “I don’t remember if it was .strip() or .trim() or whatever” and it was marked down as an error, so I guess the spectrum allows for “you missed a ; here”

                    1. 9

                      That sounds like a great interview. You learned that the company valued memorising details that are trivial to look up over thinking skills.

                      Interviews are a bidirectional communication channel. I don’t know what information was transferred towards them but they efficiently communicated that they’re not the kind of place you’d want to work.

                      1. 3

                        I had an interview where someone asked about inner vs. outer join and I said, “Oh, I just google that every time.” Didn’t get the job. :-)

                        1. 4

                          That’s a good way of telling someone who writes a little bit of sql from someone who writes it regularly. Whether or not that’s relevant information is another question.

                          1. 2

                            Yeah, or someone who uses an ORM or someone who avoids creating tables that require JOINS or …

                            I think part of what throws me off about the question is that I never use either by that name. I use LEFT JOIN (which is one kind of inner join) pretty much exclusively, although I did have cause for a CROSS JOIN the other day.

                  Stories with similar links:

                  1. Why Can't Programmers.. Program? (2007) via user545 3 years ago | 12 points | 30 comments