FizzBuzz란 결국 무엇인가?
안녕하세요!
오늘은 “FizzBuzz"에 대해 써보려고 합니다.
“아, 그거 알아!” 하시는 분들도, “뭔가 들어본 적은 있는데 잘 모르겠다” 하시는 분들도 조금만 어울려 주세요. 몇 분이면 읽을 수 있고, 어쩌면 “그렇구나” 하고 고개를 끄덕이게 되실지도 모릅니다.
“FizzBuzz를 작성하지 못하면 프로그래머 실격"이라는 말은 사실일까?
FizzBuzz를 대략적으로 설명하자면 이런 식입니다.
| |
네, 이것이 바로 유명한 “FizzBuzz 문제"입니다.
1부터 100까지의 숫자를 순서대로 확인하면서,
3의 배수라면 “Fizz”, 5의 배수라면 “Buzz”,
두 수의 공배수라면 “FizzBuzz"를 출력하는 아주 간단한 문제입니다.
그런데 왜인지 “프로그래머로서의 최소한의 시험” 같은 취급을 받는 경우가 많습니다. 면접에서도 출제되고, SNS에서는 “FizzBuzz도 못 짜는 녀석이…” 같은 우월감 섞인 발언도 심심치 않게 보입니다.
하지만, 잠깐만 기다려 보세요.
정말로 “FizzBuzz를 작성하지 못했다 = 프로그래밍을 할 수 없다"라고 단언할 수 있을까요?
할 수 있느냐가 아니라, 할 수 있는 “상태"인가
확실히 FizzBuzz는 구문에 대한 이해와 기본적인 논리적 사고를 요구합니다. 그렇기 때문에 “기초 확인” 용도로 쓰인다는 점은 납득이 갑니다.
하지만 말입니다.
환경이 다르면 결과도 달라집니다.
예를 들어,
- 초면인 면접관 앞에서 긴장했을 때
- 갑자기 화이트보드를 건네받고, 수중에 에디터가 없을 때
- “어라, modulo가 뭐였지?” 하고 갑자기 떠오르지 않을 때
…그런 적 없으신가요? 사람이니까요. 있을 수 있다고 생각합니다.
그래서 “FizzBuzz를 작성할 수 있는가"보다 “FizzBuzz를 작성할 수 있는 상태로 자신을 이끌 수 있는가"가 사실 더 중요하지 않을까 생각합니다.
흔한 “훈련하면 OK"라는 조언의 함정
이런 이야기를 하면 “그러니까 매일 연습해라!“라는 조언이 나오기 마련입니다.
물론, 반복 연습을 통해 술술 작성할 수 있게 되는 것은 사실이고, 그 자체는 좋은 일입니다. 하지만 “FizzBuzz를 작성하지 못하면 실격"이라는 전제에 서게 되면, 단지 공포로 변해버릴 수도 있습니다.
즉, “실수했다 = 나는 안 되나 보다"라고 느끼게 되는 구조가 되기 쉬운 것이죠.
예를 들어, 늦잠을 잔 날 “나는 게으름뱅이야…“라고 생각하기 쉽지 않나요? 하지만 그건 어쩌다 몸이 피곤했을 뿐일지도 모릅니다.
FizzBuzz도 마찬가지입니다.
그렇다 해도, FizzBuzz는 역시 좋은 질문이기도 하다
그렇다 해도, FizzBuzz가 나쁘다는 것은 아닙니다.
오히려 아주 잘 만들어진 질문이라고 생각합니다. 규칙이 간단하고 확장하기도 쉽습니다. 예를 들어 이렇게 바꿔보면 좀 더 사고가 깊어집니다.
| |
이것은 “if-elif-else가 아니더라도 작성할 수 있다"는 예시입니다. 꽤 스마트하죠.
즉, FizzBuzz는 “해냈는가"뿐만 아니라, “어떻게 작성하는가"나 “어디까지 이해하고 있는가"를 파악하기 위한 진입점도 될 수 있습니다.
그렇기 때문에
FizzBuzz를 할 수 있는지 여부에 너무 과도한 의미를 부여하지 않아도 된다고 생각합니다.
작성하지 못했다 하더라도, 그것은 단지 “지금 좀 컨디션이 안 좋았다"일 뿐일지도 모르고, 나중에 차분히 생각하면 할 수 있는 경우도 많습니다.
조급해하지 말고, 천천히 나아가 봅시다.
코드는 사람이 작성하는 것입니다. 사람이니까 잊어버릴 수도 있고, 긴장할 수도 있습니다. 그런 점을 받아들이면서, 조금씩 나아갈 수 있다면 충분하다고 생각합니다.
그럼, 오늘도 편안한 마음으로 코드를 작성해 봅시다.
