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 设计