低級程序員和高級程序員的區別

jopen 9年前發布 | 20K 次閱讀 程序員

 

低級程序員認為自己與高級程序員的區別, 主要是高級程序員任何功能都能編碼實現, 編碼速度快, 代碼無 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% 準確的, 例如, 如果對方系統誤報呢? 但其它的異常情況可以根據實際情況來忽略. 如果你發現這段代碼還有重要的邏輯上缺陷, 歡迎告訴我.

記住, 低級程序員和高級程序員的區別在于邏輯和抽象.

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!