1. 程式人生 > >程式設計:從前有一個傻呆程式設計師,老婆交給他一項任務,他辦了四次才滿意

程式設計:從前有一個傻呆程式設計師,老婆交給他一項任務,他辦了四次才滿意

從前有一個傻呆程式設計師,他老婆交給他一項任務:“去買3斤橙子,買最大最甜最便宜的臍橙”。

 

普通人買水果直接去店裡就買了,但程式設計師不同。程式設計師心道:“大,好分辨,甜,不好分辯。水果店老闆肯定不讓每個橙子都試吃一下的”。於是問Siri,Siri說:“一般橙子屁股上有臍圈的,是母橙,母橙比較甜”。就這樣通過調研,甜度辨別的技術難題解決了。

 

接下來程式設計師開始策劃去哪裡買。經Siri調查,小區裡共有4家水果店。程式設計師心道:“這4家店每家都可能賣橙子,也都有可能是最便宜的。如果冒然去了A店買,而C店才是最便宜的,就失去了做事的嚴謹性,回來可能捱罵。嚴謹的做法應該是貨比三家,每家都看看並把價格記下來,然後選一家價格最低的購買。但是,應該先去哪家看價格呢?理論上應該先去離家的店,最後去離家最遠的店。”

 

 

經大致估算,4家店按離家距離排序,依次是ABCD。程式設計師應該先去A店。但估算畢竟是不嚴謹的,於是程式設計師請出百度地圖,在地圖上一一標上家和4家店的GPS座標,再以水果店的GPS座標分別計算離家的距離。最後得出結論,順序依次是CABD(因為C店是直接距離,店距離排序邏輯略)。

 

 

於是程式設計師去C店,得到一個結果,然後又分別去ABD各店,最終得出A店返回無窮大。A店可能沒有臍橙或有效貨存不足。其它3家店,B店最便宜。程式設計師決定去B店購買。此時程式設計師老婆打來了電話,說“叫你買個橙子怎麼去這麼半天!”,程式設計師道:“目標已經鎖定,即將完成任務”。

 

程式設計師到了B店,不敢耽擱,馬上開始了選臍橙的邏輯:

 

 

半小時後,程式設計師拎著水果回到了家。老婆罵他:“怎麼買水果比種果樹都慢!”程式設計師開始反思,這個買水果的流程是不是還有很多優化的空間?

 

第二次買橙子時,淨化資料來源與氣泡排序這兩個迴圈,程式設計師將它們合在了一起:

 

 

由於減少了時間複雜度,並且略去了第一次技術調研、系統架構的時間,這一次只用了20分鐘,但老婆大人還是嫌慢:“別人買水果幾分種,你買水果20分鐘!”

 

第三次買水果,程式設計師不再使用單隻手的氣泡排序,而使用兩隻手的快速排序法,左手向右比較,右手向左比較(演算法過於複雜,不作偽碼展示了)。這次用了15分鐘,但老婆大人仍然不滿意。

 

第四次買水果,程式設計師優化了進店詢價邏輯。前幾次買水果,程式設計師要了老闆的微信,這次出發前先給4家老闆群發了一條微資訊:“老闆,今天臍橙還有沒有,多少錢一斤?”

 

這次用多執行緒問詢,替代了之前的單執行緒走路問詢,只用了5分鐘就完成了任務。老婆滿意了。

 

程式設計師感嘆道:“程式優化果然是無止境啊!但貌似目前的邏輯還可以再優化,譬如歷次購買水果第一優先選擇基本都是B店,下次可以直接去B店。在去的路上向4家老闆發微信詢價,大概率答案還是B店。如果不是,進店前還有時間調整路線,這是執行與問詢的多執行緒。”

 

你能從這個程式設計師買橙子的故事中,看出程式設計難在哪裡嗎?

 

2018年12月29日

 

本文首發於微信公眾號“藝述思維”:從前有一個傻呆程式設計師,老婆交給他一項任務,他辦了四次才滿意