程序員你爲什麼這麼累?

大家一提到程序員,首先想到的是以下標籤:苦逼,加班,熬夜通宵。但是,但凡工作了的同學都知道,其實大部分程序員做的事情都很簡單,代碼CRUD可以說毫無技術含量,就算什麼不懂依葫蘆畫瓢很多功能也能勉強做出來,做個多線程併發就算高科技了,程序員這行的門檻其實還是比較低的。(這裏說的是大部分,有些牛逼的,寫算法、jvm等的請自動跳過)

是不是覺得很矛盾,一方面工作不復雜,一方面卻累成狗。有沒有想過問題出在哪裏?有沒有想過時間都花在哪裏呢?

對於我個人來說,編碼還是一個相對輕鬆的活(我是負責公司it系統的,沒有太多技術含量,數據量大,但併發量不大)。從工作到現在,我加班編碼的時間還是比較少的,我到現在爲止每天還會編碼,很少因爲編碼工作加班。

大家寫的東西都是一些crud的業務邏輯代碼,爲什麼大家這麼累,加班加點天天都是奮鬥者?我從自己帶的項目中觀察中發現,大部分人的大部分時間都是在 定位問題 + 改代碼,真正開發的時間並不多。定位問題包括開發轉測試的時候發現問題和上線後發現問題,改代碼的包括改bug和因爲需求變動修改代碼(後面專門開一貼說如何應對需求改動)。

所以說,simple is not easy。很多人就是因爲覺得簡單,所以功能完成自己測試ok了就算了,沒有思考有沒有更加好的方式。歸根到底是因爲編碼習慣太糟糕,寫的代碼太爛,導致無法定位頻繁修改頻繁出問題。(後面我會詳細講一些我看到的大部分的編碼問題。)

其實,對於個人來說,技術很重要,但是對於工作來說,編碼的習慣比技術更加主要。工作中你面試的大部分技術都不需要用到的。工作中,因爲你的編碼習慣不好,寫的代碼質量差,代碼冗餘重複多,很多無關的代碼和業務代碼攪在一起,導致了你疲於奔命應付各種問題。

所以我作爲SE,不管接手任何項目組,第一步就是制定代碼框架,制定項目組的開發規範,把代碼量減下去。事實上證明,這一步之後,大家的代碼量能下去最少1/3,後臺的問題數下降比較明顯,大家的加班會比之前少。

給大家一個直觀的例子。下面是controller的一個刪除數據的接口,我來之前大家寫的這個樣子的(其實一開始比這個還差很多),功能很簡單,輸入一個對象id執行刪除返回是否刪除成功。大家有沒有覺得有什麼問題?

PostMapping("/delete")
public Map<String, Object> delete(long id, String lang) {
  Map<String, Object> data = new HashMap<String, Object>();
  boolean result = false;
  try {
    // 語言(中英文提示不同)
    Locale local = "zh".equalsIgnoreCase(lang) ? Locale.CHINESE : Locale.ENGLISH;
    result = configService.delete(id, local);
    data.put("code", 0);
  } catch (CheckException e) {
    // 參數等校驗出錯,這類異常屬於已知異常,不需要打印堆棧,返回碼爲-1
    data.put("code", -1);
    data.put("msg", e.getMessage());
  } catch (Exception e) {
    // 其他未知異常,需要打印堆棧分析用,返回碼爲99
    log.error(e);
    data.put("code", 99);
    data.put("msg", e.toString());
  }
  data.put("result", result);
  return data;
}

其實上面的代碼也沒有大問題。而我接手之後,我會開發自己的代碼框架,最後制定代碼框架交付的代碼如下(這是controller的部分):

PostMapping("/delete")
public ResultBean<Boolean> delete(long id) {
  return new ResultBean<Boolean>(configService.delete(id));
}

用到的技術就是AOP,也不是什麼高深技術。怎麼樣?代碼量就一行,特性一個都沒有丟。這就是我們項目組現在的controller的樣子!(如果恰好有我帶過的項目組的人,看到ResultBean<>應該很熟悉應該知道我是誰了)

所以說技術無所謂高低,看你怎麼樣用。上面的代碼簡單說一下問題,第一,lang和業務沒有什麼關係,我後面的代碼框架去掉了(不是說我後面的代碼沒有這個功能,是把他隱藏起來對開發人員透明瞭,使用的技術就是ThreadLocal)。第二,前面那個代碼,實際上幹活的就只有一行,其他都和業務代碼沒有一毛錢關係,我的代碼框架裏面完全看不到了。

使用的技術真的很簡單,但是編碼效果非常好,因爲大家不要因爲使用的技術初級就覺得不重要!!使用這套框架後,大家再也不需要大部分時間都寫一些無聊的代碼,可以有更加多時間學習其他技術。說實話,在我項目組的開發人員都是比較幸運的,覺得能學到東西,不是像其他項目組,寫了幾年都是一樣的CRUD代碼,雖然我比較嚴厲,但是還是願意待在我項目組,畢竟加班比其他項目組少啊。

這就是我說的工作中,編碼習慣(或者說編碼風格)比技術更加重要。我工作了也有很長時間了,我覺得我個人價值最大的地方就是這些,技術上其實我懂的也和大家差不多,但編碼上我還是覺得可以超過大部分人的。後面我會把我們這些業務系統中大家編碼的問題一個一個寫出來,並把我的解決辦法分享出來。初定議題如下:

  1. 接口定義規範
  2. controller規範(ResultBean的格式和原因請看這裏)
  3. 日誌規範
  4. 異常處理規範
  5. 國際化規範
  6. 參數校驗規範
  7. 工具類規範
  8. 函數編寫建議
  9. 配置建議

這些規範不是網上的那些編程規範,說實話那些又長又繁瑣,實踐中證明很難落地,我這裏的規範都比較少,一針見血,你看了便知。敬請期待!

原文鏈接:程序員你爲什麼這麼累?—曉風輕
發佈了34 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章