Featured image of post FizzBuzz

FizzBuzz

FizzBuzz 到底是什麼?

大家好!

今天我想寫寫關於「FizzBuzz」的事。

無論你是覺得「啊,那個我知道!」的人,還是「好像聽過,但不太清楚」的人,請稍微陪我一下。幾分鐘就能讀完,或許你會覺得「原來如此」。


「不會寫 FizzBuzz 就不夠格當程式設計師」是真的嗎?

簡單來說,FizzBuzz 大概是這樣的東西。

1
2
3
4
5
6
7
8
9
for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

沒錯,這就是著名的「FizzBuzz 問題」。

依序查看 1 到 100 的數字,
如果是 3 的倍數就顯示「Fizz」,如果是 5 的倍數就顯示「Buzz」,
如果是兩者的倍數就顯示「FizzBuzz」,非常簡單。

儘管如此,不知為何它常常被當作「程式設計師的最低測試」來對待。面試時會出現,社群網路上也時常看到「連 FizzBuzz 都不會寫的人…」這種高高在上的發言。

不過,請等一下。

真的能斷言「不會寫 FizzBuzz = 不會寫程式」嗎?


不是會不會,而是有沒有會的「狀態」

的確,FizzBuzz 要求對語法的理解和基本的邏輯思考能力。所以用來「確認基礎」是可以理解的。

但是。

環境不同,結果也會不同。

例如,

  • 在初次見面的面試官面前感到緊張時
  • 突然被交給一塊白板,手邊沒有編輯器時
  • 突然想不起「咦,modulo 是什麼來著?」時

……這些情況,難道沒有嗎?畢竟是人類,我想是有的。

所以,與其說「能不能寫出 FizzBuzz」,不如說「能不能讓自己處於能寫出 FizzBuzz 的狀態」,其實才是更重要的。


常見的「多練習就好」建議的陷阱

一談到這個話題,很容易就會出現「所以要每天練習!」這樣的建議。

的確,透過反覆練習就能寫得很流暢,這是事實,本身也是好事。但是,如果站在「不會寫 FizzBuzz 就不及格」的前提下,它有時就會變成單純的恐懼。

也就是說,很容易形成「犯錯了 = 自己很沒用」的感覺。

例如,早上睡過頭的那天,是不是很容易覺得「自己是個懶惰的人…」?但那可能只是身體剛好累了而已。

FizzBuzz 也是一樣的。


雖然這麼說,FizzBuzz 仍是個好問題

儘管如此,並不是說 FizzBuzz 不好。

相反地,我覺得這是一個非常好的問題。規則簡單,也很容易擴充。例如,試著像這樣改變一下,思考就會變得更深。

1
2
3
4
5
6
7
for i in range(1, 101):
    output = ""
    if i % 3 == 0:
        output += "Fizz"
    if i % 5 == 0:
        output += "Buzz"
    print(output or i)

這是一個「不用 if-elif-else 也能寫出來」的例子。感覺有點聰明吧。

也就是說,FizzBuzz 不僅僅是「做不做得到」,它也能成為觀察「如何寫」以及「理解到什麼程度」的入口。


總而言之

我覺得不必對能不能寫出 FizzBuzz 賦予太多過度的意義。

就算寫不出來,那也可能只是「現在狀態不太好」,而且事後仔細想想能寫出來的情況也很多。

不用著急,慢慢前進吧。

程式碼是人類寫的。既然是人類,就有忘記的時候,也有緊張的時候。一邊接受這些,一邊慢慢前進,我想這樣就足夠了。

那麼,今天也輕鬆地寫程式碼吧。

comments powered by Disqus
使用 Hugo 建立
主題 StackJimmy 設計