On occasion you meet a developer who seems like a solid programmer. They know their theory, they know their language. They can have a reasonable conversation about programming. But once it comes down to actually producing code they just don’t seem to be able to do it well.
You would probably think they’re a good developer if you’ld never seen them code. This is why you have to ask people to write code for you if you really want to see how good they are. It doesn’t matter if their CV looks great or they talk a great talk. If they can’t write code well you probably don’t want them on your team.
After a fair bit of trial and error I’ve come to discover that people who struggle to code don’t just struggle on big problems, or even smallish problems (i.e. write a implementation of a linked list). They struggle with tiny problems.
So I set out to develop questions that can identify this kind of developer and came up with a class of questions I call “FizzBuzz Questions” named after a game children often play (or are made to play) in schools in the UK.
In this game a group of children sit around in a group and say each number in sequence, except if the number is a multiple of three (in which case they say “Fizz”) or five (when they say “Buzz”). If a number is a multiple of both three and five they have to say “Fizz-Buzz”.
An example of a Fizz-Buzz question is the following:
[quote]Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.[/quote]
Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes.
Want to know something scary ? – the majority of comp sci graduates can’t. I’ve also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.
I’m not saying these people can’t write good code, but to do so they’ll take a lot longer to ship it. And in a business environment that’s exactly what you don’t want.
This sort of question won’t identify great programmers, but it will identify the weak ones. And that’s definitely a step in the right direction.
>>124
Excuse me, >>122-san seems to have gotten my eight Susspoints.
Name:
Anonymous2009-12-10 13:32
I have OVER 1MILLIONSusspoints in my offshore SussbankSussaccount
Name:
Anonymous2009-12-10 13:32
What do you mean? >>122-kunwas supposed to get them. And this post of yours shows clearly that the prize should indeed be subtracted from your account.
I managed to do it in 5 minutes in Java, not my best code ever and I'm only a 1st year student of computer sciences. My code:
public class FizzBuzz
{
public static void main(String[] args)
{
for (int i = 1; i <= 100; ++i)
{
if (i % 3 == 0 && i % 5 == 0)
{
System.out.println("FizzBuzz");
}
else if (i % 3 == 0)
{
System.out.println("Fizz");
}
else if (i % 5 == 0)
{
System.out.println("Buzz");
}
else
{
System.out.println(i);
}
}
}
}
Name:
Anonymous2009-12-29 8:23
#include <iostream>
using namespace std;
int divideByThree(int x);
int divideByFive(int x);
fibu(1) -> 1;
fibu(N) when (N rem 3) == 0, (N rem 5) == 0 -> io:format("Fizz-Buzz~n",[]),
fibu(N-1);
fibu(N) when (N rem 3) == 0 -> io:format("Fizz~n",[]),
fibu(N-1);
fibu(N) when (N rem 5) == 0 -> io:format("Buzz~n",[]),
fibu(N-1);
fibu(N) -> io:format("~w~n",[N]),
fibu(N-1).
Name:
Anonymous2009-12-30 23:25
(define fizzbuzz
(λ(ceiling)
(let ((fb (list 'n 'n 'fizz 'n 'buzz 'fizz 'n 'n 'fizz 'buzz 'n 'fizz 'n 'n 'fizzbuzz)))
(let L ((cycle fb)
(n 1))
(if (= ceiling n)
empty
(let ((cycle (if (empty? cycle) fb cycle)))
(let ((val (if (eq? 'n (car cycle)) n (car cycle))))
(cons val (L (cdr cycle) (+ 1 n))))))))))
Name:
Anonymous2009-12-31 0:10
>>144
I rate your post -1 because it uses a capital letter in scheme. Disgusting. NO CAPITAL LETTERS!
Name:
Anonymous2009-12-31 0:13
99.9% of Computer Science papers are descriptions of efficient algorithms/data structures that are impractical to implement.
Name:
Anonymous2009-12-31 8:47
>They know their theory, they know their language.
It is better if they know mathematics and algorithmics. After, the language is less important.
Here some poeple check that x is divisible by 3 and is divisible by 5. It is faster to check that x is divible by 15.
Name:
Anonymous2009-12-31 8:48
CHECK MY ANUS
Name:
Anonymous2009-12-31 12:42
>>145
Thank you for your constructive criticism, I will work on it!!
i%3?"":"Fizz",i%5?"":"Buzz",i%15?i:0)
"1
"2
"Fizz3
"4
"Buzz5"
I might be misinterpreting the printf (I've always been bad about that) but this is not what the instructions ask.
That's it. It's at best a workaround for limitations in C++. So many fucking hacks for backwards compatibility with C...
Name:
Anonymous2010-01-05 10:17
>>164
Come to think of it, do you guys believe that if it wasn't Stroustrup's intention to keep backward compatibility with C, would the C++ be any good?
The reason Sepples failed isn't because of backward compatibility.
But of course! Actually, that's the reason it's used at all.
And so, history repeats itself.
Name:
dasuraga!8GgBtN/zr.2010-01-05 14:08
what's with people and hating c++? It's syntaxically pretty ugly, but not at all unusable(at least I enjoy using it more than it's "safer" C-likes)
Name:
Anonymous2010-01-05 14:24
>>171
That's because you're either retarded or know no other languages. That's related to the discussion; it's my way of saying, "Have you read your FQA today?"
Name:
Anonymous2010-01-05 14:30
>>172
Yeah let's get back to hating proper /prauge/ style. Hate on FOIC and retarded ass Lispers and Haskallers
fizzBuzz x | mod x 15 == 0 = "FizzBuzz " | mod x 5 == 0 = "Fizz " | mod x 3 == 0 = "Buzz " | otherwise = show x ++ " "
main = print [x | x <- [1..100], x <- fizzBuzz x]
Did you know regular (non-class) functions can't have default template arguments? I didn't. I was also surprised to find that GCC's default template depth is 500.
>>190
Occasionally sites will tempporarily go down so the admins can perform kernel updates, moving databases, updating caches, etcetera. The best thing to do is spend time with family and friends.
class FizzBuzz {
public static void main(String[] args){
int isNum =0;
for (int i =0; i <100; i++) {
isNum += (i % 3==0) ? 3 : 0;
isNum += (i % 5==0) ? 5 : 0;
switch (isNum) {
case 3: System.out.println("Fizz: "+ i); isNum = 0; break;
case 5: System.out.println("Buzz: "+ i); isNum = 0; break;
case 8: System.out.println("FizzBuzz"+ i); isNum = 0; break;
default: System.out.println(i); isNum = 0; break;
}
}
}
}
Name:
Anonymous2010-02-22 22:32
class FizzBuzz {
public static void main(String[] args){
int isNum =0;
for (int i =0; i <100; i++) {
isNum += (i % 3==0) ? 3 : 0;
isNum += (i % 5==0) ? 5 : 0;
switch (isNum) {
case 3: System.out.println("Fizz: "+ i); isNum = 0; break;
case 5: System.out.println("Buzz: "+ i); isNum = 0; break;
case 8: System.out.println("FizzBuzz"+ i); isNum = 0; break;
default: System.out.println(i); isNum = 0; break;
}
}
}
}
Name:
Anonymous2010-02-22 22:33
[code]
class FizzBuzz {
public static void main(String[] args){
int isNum =0;
for (int i =0; i <100; i++) {
isNum += (i % 3==0) ? 3 : 0;
isNum += (i % 5==0) ? 5 : 0;
switch (isNum) {
case 3: System.out.println("Fizz: "+ i); isNum = 0; break;
case 5: System.out.println("Buzz: "+ i); isNum = 0; break;
case 8: System.out.println("FizzBuzz"+ i); isNum = 0; break;
default: System.out.println(i); isNum = 0; break;
}
}
}
}
[code]
Name:
Anonymous2010-02-22 22:36
[code]class FizzBuzz {
public static void main(String[] args){
int isNum =0;
for (int i =0; i <100; i++) {
isNum += (i % 3==0) ? 3 : 0;
isNum += (i % 5==0) ? 5 : 0;
switch (isNum) {
case 3: System.out.println("Fizz: "+ i); isNum = 0; break;
case 5: System.out.println("Buzz: "+ i); isNum = 0; break;
case 8: System.out.println("FizzBuzz"+ i); isNum = 0; break;
default: System.out.println(i); isNum = 0; break;
}
}
}
}[\code]
Name:
Anonymous2010-02-22 22:37
class FizzBuzz {
public static void main(String[] args){
int isNum =0;
for (int i =0; i <100; i++) {
isNum += (i % 3==0) ? 3 : 0;
isNum += (i % 5==0) ? 5 : 0;
switch (isNum) {
case 3: System.out.println("Fizz: "+ i); isNum = 0; break;
case 5: System.out.println("Buzz: "+ i); isNum = 0; break;
case 8: System.out.println("FizzBuzz"+ i); isNum = 0; break;
default: System.out.println(i); isNum = 0; break;
}
}
}
}
Name:
Anonymous2010-02-23 1:11
>>202-206
...
Amid the successive failures, a note of suggestion.
isNum = 0 + (i%3==0 ? 3 : 0) + (i%5==0 ? 5 : 0);
You could also de-distribute the System.out.println(i); from all of the cases to the other side of the switch block but I'm not sure if that produces an optimization of run time along with reduction in redundancy. It's probably not worth it.
Name:
Anonymous2010-02-23 1:30
class FizzBuzz {
public static void main(String[] args){
>>213 repeated dynamic memory allocation over single static allocation on stack.
Nice improvement, bro.
Name:
Anonymous2010-02-23 2:10
>>214
jvm does escape analysis and also no dangling pointers.
Name:
Anonymous2010-02-23 2:17
class FizzBuzz {
public static void main(String[] args) {
for (int i = 0, isNum = 0; i <= 100; ++i) {
isNum = 0 + (i%3==0 ? 3 : 0) + (i%5==0 ? 5 : 0);
switch (isNum) {
case 3: System.out.println("Fizz: "+ i); break;
case 5: System.out.println("Buzz: "+ i); break;
case 8: System.out.println("FizzBuzz: "+ i); break;
default: System.out.println(i); break;
}
}
}
}
Sure is really Java in here. Can someone program this in a language not yet used in the thread?
Name:
Anonymous2010-02-23 2:29
definitely too much coffee-fags around...
Name:
Anonymous2010-02-23 2:30
Just one more to drive the point home. class FizzBuzz {
public static void main(String[] args) {
for (int i = 0; i <= 100; ++i) {
System.out.println( (i%3==0 ? "Fizz" : "") + (i%5==0 ? "Buzz" : "") + " " + i);
}
}
}
Name:
Anonymous2010-02-23 2:46
>>218
for multiples of three print “Fizz” ...
>instead of the number
class FizzBuzz {
public static void main(String[] args) {
for (int i = 0, isNum = 0; i <= 100; ++i) {
isNum = 0 + (i%3==0 ? 3 : 0) + (i%5==0 ? 5 : 0);
switch (isNum) {
case 3: System.out.println("Fizz"); break;
case 5: System.out.println("Buzz"); break;
case 8: System.out.println("FizzBuzz"); break;
default: System.out.println(i); break;
}
}
}
}
Name:
Anonymous2010-02-23 4:05
#lang scheme
(define (fizzbuzz x)
(cond ((and (= 0 (modulo x 3)) (= 0 (modulo x 5))) (display "FizzBuzz"))
((= 0 (modulo x 3)) (display "Fizz"))
((= 0 (modulo x 5)) (display "Buzz"))
(else (display x)))
(newline)
(if (< x 100)
(fizzbuzz (+ x 1))
(values)))
(fizzbuzz 1)
Name:
Anonymous2010-02-23 4:09
HAI
CAN HAS STDIO?
I HAS A VAR IZ 0
IM IN YR LOOP
UPZ VAR!!1
IZ VAR BIGR THAN 100?
GTFO.
KTHX
IZ VAR LEFTOVAR 15 LIEK 0?
VISIBLE "FIZZBUZZ"
KTHX
ORLY?
IZ VAR LEFTOVAR 5 LIEK 0?
VISIBLE "BUZZ"
KTHX
ORLY?
IZ VAR LEFTOVAR 3 LIEK 0?
VISIBLE "FIZZ"
KTHX
NOWAI
VISIBLE VAR
KTHX
KTHX
KTHXBYE