fizzbuzz
技術是由一萬個細節組成的,哪怕一個這么簡單的題目,也有如此故事多的點 。我也不敢說自己是什么高手,起碼寫了許多年代碼,也就把自己寫代碼的思維展示給大家,希望對有心人有所幫助 。非初學者向,雖然題是個簡單的題,但要求讀者有一定的敏捷工程實踐及DDD相關經驗 。
FizzBuzz是一個經典的TDD入門題目游戲,麻雀雖小,五臟……勉強算全吧 。Stack Overflow創始人曾經在他的一本書里寫到,“不要假設程序員都會寫程序,招一個程序員來先寫個FizzBuzz看看,結果可能會令你吃驚 。”
我當時不信,于是在一個招聘活動上拿這個的一個完整版做了題目,結果也確實挺讓我吃驚的,吃驚在哪我先賣個關子,后面詳細說 。后來教人寫程序也用了樹這個題幾百遍了,見識過各種各樣奇怪的錯誤 。
我們今天就用這個題目為例,來盡量闡述一些道理,fizzbuzz python 。這個題的需求有很多步,就好像軟件開發中很多需求是一個版本一個版本迭代出來的,所以我們這個題目也一個迭代一個迭代來 。
迭代一迭代一的需求如下:
你是一名翻譯體育老師,在某次課距離下課還有五分鐘時,你決定搞一個游戲 。此時有200名學生在上課 。游戲的是什么規則是:
讓中文所有學生拍成一隊,然后按順序報數 。學生報數時,如果所報數字是3的倍數,那么不能說該數字,而游戲要說Fizz;如果所報數字是5的倍數,那么要說Buzz 。不同于憑本能思考,這里我們講一個套路:我們做軟件開發的時候可以刻意分三個問題域來考慮問題,我稱之為業務域、方案域、實現域 。這三個域有什么用呢?
當我們在進行軟件開發的時候,有時會陷入無思路的狀態,一旦陷入這種狀態人容易焦慮,卡很久卻沒什么進展 。這個時候我們往往是處于一種所謂的unknow unknown的狀態 。也就是不知道自己不知道什么 。新人最容易陷入到這種狀態,只好盯著屏幕看半天 。這個時候就需要先意識到自己處于這個狀態,然后就可以借用這三個域作為跳板跳出這個狀態 。
首先來看看你的問題到底在哪個域,在不同的域要采用不同的方法來探尋問題到底是什么,在這基礎上就逐漸有了思路 。這就是這三個域的用處 。
具體怎么用呢翻譯?我們一個個來說 。
業務域首先說業務域,這里的業務用以代指需求音標 。
以這個題為例,我們在讀需求的時候會發現一個問題,被3整除返回Fizz,被5整除返回Buzz,被3和5整除返回什么?
這個問題很明顯,就屬于業務域的問題 。
那么業務域的問題,我們通常讀音怎么處理呢?
有的同學就直接腦補了:
腦補一:能被3和5整除,那就故事是先被3整除唄,那就Fizz 。腦補二:能被3和5整除,那就返回FizzBuzz唄 。那么以上哪個腦補是對的fizzbuzz呢?
答案是以上都不對,腦補本身就不對,腦補只是猜測,猜測不經驗證樹就是偽需求 。當我們遇到業務域的問題,不要自己腦補,請去與需求方確認需求 。
(題外話:當然,你帶著兩個腦補去找需求方是可以的,甚至于是很好的,因為這樣需求方就能更容易的聽懂你的問題,比你問被3和5整除返回什么要更具體 。這個題目里被3和5整除是很清楚的,但在工作中,提一個抽象的問題,然后跟上兩個可能的具體的解決方案也能幫助對方理解 。)
確認需求時最重要的讀就是對概念的理解建立共識,識別概念的邊界 。前者還好,后者容易疏忽,同一個名詞即便在需求當中,由于上下文的不同也有可能指的是兩個概念,這部分內容本篇不作詳細討論 。
相關經驗推薦
- 家譜英語
- 第三天英文怎么寫 第四天英文怎么寫
- oliver怎么讀 oliver怎么讀英語人名
- 蘋果的英語怎么讀 螞蟻的英語怎么讀
- 即使是這樣英語怎么說 即使這是色情
- 新年賀詞中英文對照50字 英語新年賀詞50字
- 你喜歡吃水果嗎的英語怎么說 問別人喜歡吃什么水果的英浯怎么說
- 制造商一定要在外包裝上寫嗎 制造商一定要在外包裝上寫嗎英語
- 云南2023年普通高等學校招生第二次英語科目聽力考試和口語測試公告
- 云南高考第二次英語聽力考試需要戴口罩嗎
