知乎上有個(gè)問(wèn)題:編程到底難在哪里?
點(diǎn)擊藍(lán)色“編程幫”關(guān)注我喲
加個(gè)“星標(biāo)”哦

來(lái)源:http://t.cn/RxLwwov
目錄:
- 前言
- 回答原文
- 普通人
- 程序員
前言
知乎上有個(gè)問(wèn)題:編程到底難在哪里?知乎網(wǎng)友 DJ Hitori 的回答獲贊無(wú)數(shù)。
這篇回答并不是講述在生活中程序員如何買(mǎi)蘋(píng)果,而是以買(mǎi)蘋(píng)果為例說(shuō)明程序員如何解決問(wèn)題。程序員需要對(duì)問(wèn)題進(jìn)行透徹的分析,理清其涉及的所有細(xì)節(jié),預(yù)測(cè)可能發(fā)生的所有意外與非意外的情況,列出解決方案的所有步驟,以及對(duì)解決方案進(jìn)行盡量全面的測(cè)試。而這些正是編程難的地方。任何一點(diǎn)遺漏都會(huì)成為bug,輕則導(dǎo)致挨罵,重則導(dǎo)致經(jīng)濟(jì)損失甚至危害安全。
回答原文
普通人
我今天要買(mǎi)一斤蘋(píng)果。
程序員
我今天要買(mǎi)一斤蘋(píng)果。
因?yàn)槲抑幌矚g紅富士蘋(píng)果,所以我只買(mǎi)紅富士蘋(píng)果。
我能接受的最高價(jià)格是 10 元 / 斤。
正常情況下一斤蘋(píng)果用一個(gè)袋子能裝下,但是為防萬(wàn)一,我會(huì)帶兩個(gè)袋子。
我知道附近的 3 家水果店,所以我會(huì)依次訪問(wèn)這 3 家水果店。
根據(jù)上述條件,我設(shè)計(jì)出以下的買(mǎi)蘋(píng)果的流程:

這個(gè)流程怎么樣?我來(lái)設(shè)計(jì)一些測(cè)試樣例,測(cè)試一下這個(gè)流程。
測(cè)試發(fā)現(xiàn)一個(gè)問(wèn)題:如果水果店 0 和水果店 1 都有紅富士蘋(píng)果并且價(jià)格都低于 10 元 / 斤,而且水果店 1 的價(jià)格比水果店 0 更低,那么我希望買(mǎi)水果店 1 的蘋(píng)果,但我設(shè)計(jì)的流程會(huì)讓我買(mǎi)水果店 0 的蘋(píng)果。
為了解決這個(gè)問(wèn)題,我應(yīng)該先詢問(wèn)所有水果店的價(jià)格,然后去價(jià)格最低的那一家買(mǎi)蘋(píng)果。
經(jīng)過(guò)修改,我重新設(shè)計(jì)出以下的買(mǎi)蘋(píng)果的流程:

現(xiàn)在這個(gè)流程是不是完美了呢?不是,我還能發(fā)現(xiàn)很多問(wèn)題。
如果 3 家水果店都有紅富士蘋(píng)果但都不到一斤,但是三家店加起來(lái)能達(dá)到一斤,那么我不應(yīng)該結(jié)束流程回家,而是應(yīng)該把三家店的紅富士蘋(píng)果都買(mǎi)下來(lái)。
如果我向水果店詢問(wèn)價(jià)格的時(shí)候這家店還有紅富士蘋(píng)果,但我詢問(wèn)完所有水果店的價(jià)格后這家店的紅富士蘋(píng)果賣(mài)完了,那么我的流程會(huì)讓我試圖處理不存在的紅富士蘋(píng)果。
我走路的過(guò)程中可能會(huì)遇到突發(fā)事件,比如發(fā)現(xiàn)了新的水果店,比如袋子破掉了蘋(píng)果掉一地,對(duì)于這些情況我的流程都無(wú)法進(jìn)行處理。
啊問(wèn)題太多了我懶得再改流程了。我還是去 X 寶買(mǎi)吧。那么接下來(lái)我要設(shè)計(jì)一個(gè)在 X 寶買(mǎi)紅富士蘋(píng)果的流程……
推薦閱讀:《架構(gòu)師離職后,成為自由開(kāi)發(fā)者的第 100 天》
END
若覺(jué)得文章對(duì)你有幫助,隨手轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動(dòng)力。
長(zhǎng)按二維碼,掃掃關(guān)注哦
?「C語(yǔ)言中文網(wǎng)」官方公眾號(hào),關(guān)注手機(jī)閱讀教程??

點(diǎn)擊“閱讀原文”,領(lǐng)取 2020 年最新免費(fèi)技術(shù)資料大全
