1、引言程序員
原計劃是昨天(每週日寫一篇博客)寫博客,可是昨天去北大上課了,學習回來晚了,有點累了就沒有寫,只好今天補上了。不知不覺我已經工做了4年了,按照年限,我應該是高級的水平了,但是如今的我,自我感受仍是處於一個低級。以前諮詢了不少大牛,問他們怎樣才能成爲一個高級程序員,工做經驗,技術掌握,開發的效率等等。最後獲得的是思想邏輯和抽象。網絡
2、低級程序員和高級程序員區別:學習
低級程序員認爲本身與高級程序員的區別,主要是高級程序員任何功能都能編碼實現,編碼速度快, 代碼無 bug。 正如一慣的那樣, 低級程序員之因此低級,正是由於他們勉強能看到(或者根本看不到)事物的表象而看不到本質。因此,低級程序員總結出的一切東西,你均可以大膽的忽略。編碼
因此,咱們來聽聽高級程序認爲本身與低級程序員的區別是什麼。高級程序員之因此高級, 在於他們認識到代碼 bug 是不可避免的,有千萬種理由能夠致使 bug,但他們能夠在設計和邏輯上保證(追求)滴水不漏,並用邏輯的百分之百準確性還減小代碼 bug。 沒錯,嚴謹的邏輯能力是高級程序員區別於低級程序員的最主要緣由。設計
能夠舉一個簡單常見例子: 網絡購票終端的開發。固然,比低級程序員還低級的程序員作不出來。 咱們先看看低級程序員是怎麼作:開發
order = Db::new_order(); ret = Network::place_order(order); if(ret == TRUE){ order.finish(); }else{ order.cancel(); }
你看到的沒錯,這段代碼邏輯清晰,通常 90% 的狀況都能正常工做,有的甚至能達到 99%, 在某些特定的時間段,這樣的系統 100% 能正常工做(幾乎是完美的系統)。博客
你可能發現了問題:網絡是不可靠的,網絡請求可能發出去了, 也可能沒發出去;對方可能收到了,也可能沒收到;響應可能由對方發出去了,也可能沒發出去; 你可能收到了響應,也可能沒收到。效率
可是, 低級的程序員會這樣解釋:我用的是 TCP 協議,"TCP 是一種可靠的傳輸協議", 哈! 好笑的照本宣科。 這種低級程序員, 不只在於他們寫出了邏輯上不完備的系統, 並且還惡劣地引經據典來作錯誤的辯護。但他們引用的經典是不合時宜的(不能支撐他們的結論)。重構
正確的作法應該是假設上面的每一行代碼均可能中斷執行,而後進行相應的對策。正如狹義上的網絡協議實際上是廣義上的交互協議, 咱們可能把 TCP/IP 協議上的許多思想和機制應用到系統間的交互上來。終端
簡單來說, 能夠加上就是重試(超時重傳)和對帳(請求確認)。因此, 邏輯上更準確的代碼應該是這樣:
Process_0{ order = Db::new_order(); } Process_1{ order = Db::find_new_order(); ret = Network::query_order_result(order); if(ret == NOT_FOUND){ ret = Network::place_order(order); if(ret == TRUE){ order.finish(); }else{ order.cancel(); } } }
Process_0 和 Process_1 是相互獨立的處理邏輯。
Process_0 即處理用戶交互, 接受訂單。
Process_1 請求服務提供商進行對帳。進行採購下單(補單), 更新訂單狀態。
上面的代碼邏輯實現了重試(超時重傳),對帳(請求確認)。但上面的代碼在邏輯上還不是 100% 準確的,例如,若是對方系統誤報呢? 但其它的異常狀況能夠根據實際狀況來忽略。
記住,低級程序員和高級程序員的區別在於邏輯和抽象。要成爲一個高級程序員,要作到工做上的嚴謹,認真,注重細節的地方,看到別人看不到的問題。能想到一切可能出現的bug,把出現率都降到最低,而且代碼都是重構以後的,不能再重構了。
3、總結
以上只是我的的看法,表明我的的一些見解,若是不符,你們就當看看而已。O(∩_∩)O哈哈~