FizzBuzz 到底是什麼?
大家好!
今天我想寫寫關於「FizzBuzz」的事。
無論你是覺得「啊,那個我知道!」的人,還是「好像聽過,但不太清楚」的人,請稍微陪我一下。幾分鐘就能讀完,或許你會覺得「原來如此」。
「不會寫 FizzBuzz 就不夠格當程式設計師」是真的嗎?
簡單來說,FizzBuzz 大概是這樣的東西。
| |
沒錯,這就是著名的「FizzBuzz 問題」。
依序查看 1 到 100 的數字,
如果是 3 的倍數就顯示「Fizz」,如果是 5 的倍數就顯示「Buzz」,
如果是兩者的倍數就顯示「FizzBuzz」,非常簡單。
儘管如此,不知為何它常常被當作「程式設計師的最低測試」來對待。面試時會出現,社群網路上也時常看到「連 FizzBuzz 都不會寫的人…」這種高高在上的發言。
不過,請等一下。
真的能斷言「不會寫 FizzBuzz = 不會寫程式」嗎?
不是會不會,而是有沒有會的「狀態」
的確,FizzBuzz 要求對語法的理解和基本的邏輯思考能力。所以用來「確認基礎」是可以理解的。
但是。
環境不同,結果也會不同。
例如,
- 在初次見面的面試官面前感到緊張時
- 突然被交給一塊白板,手邊沒有編輯器時
- 突然想不起「咦,modulo 是什麼來著?」時
……這些情況,難道沒有嗎?畢竟是人類,我想是有的。
所以,與其說「能不能寫出 FizzBuzz」,不如說「能不能讓自己處於能寫出 FizzBuzz 的狀態」,其實才是更重要的。
常見的「多練習就好」建議的陷阱
一談到這個話題,很容易就會出現「所以要每天練習!」這樣的建議。
的確,透過反覆練習就能寫得很流暢,這是事實,本身也是好事。但是,如果站在「不會寫 FizzBuzz 就不及格」的前提下,它有時就會變成單純的恐懼。
也就是說,很容易形成「犯錯了 = 自己很沒用」的感覺。
例如,早上睡過頭的那天,是不是很容易覺得「自己是個懶惰的人…」?但那可能只是身體剛好累了而已。
FizzBuzz 也是一樣的。
雖然這麼說,FizzBuzz 仍是個好問題
儘管如此,並不是說 FizzBuzz 不好。
相反地,我覺得這是一個非常好的問題。規則簡單,也很容易擴充。例如,試著像這樣改變一下,思考就會變得更深。
| |
這是一個「不用 if-elif-else 也能寫出來」的例子。感覺有點聰明吧。
也就是說,FizzBuzz 不僅僅是「做不做得到」,它也能成為觀察「如何寫」以及「理解到什麼程度」的入口。
總而言之
我覺得不必對能不能寫出 FizzBuzz 賦予太多過度的意義。
就算寫不出來,那也可能只是「現在狀態不太好」,而且事後仔細想想能寫出來的情況也很多。
不用著急,慢慢前進吧。
程式碼是人類寫的。既然是人類,就有忘記的時候,也有緊張的時候。一邊接受這些,一邊慢慢前進,我想這樣就足夠了。
那麼,今天也輕鬆地寫程式碼吧。
