真實工作中的編程,與在校coder有哪些不同?

工作中的編程和學校裏最大的不同在於:在完整的流程規範下,同事間協同開發,按時按量交付,並不斷測試迭代優化,最終能穩定的用於生產。

有人說這是軟件開發,並不是編程啊。對這就是工作編程和學校編程的差異,工作編程不僅僅考慮代碼,代碼是爲系統服務的,而系統中千絲萬縷的結構都與編程息息相關。

比如作爲程序員,你需要搞定設計文檔、流程圖、僞代碼、接口、測試用例,冒煙迴歸測試等等,以及與產品經理、UI工程師、測試工程師、數據工程師等進行配合。

所以你會注意到工作裏的開發不僅僅是單純地編程,它更像是修建一棟大樓,從規劃、設計、審覈、施工、裝潢、再審覈、交付等等,需要把設想中的建築變成現實。

而學校裏的編程更像是設計圖紙搭局部模型,今天做個浴室、明天做個廁所,而且用料標準也不固定,沒法形成建築。

因爲我是做數據分析的。拿數據平臺開發來說,一方面有任務流程、數倉設計、命名設計、調度管理等事項,另一方面SQL開發也有很多規範。

從需求調研規劃、規範定義、模型設計、自動化開發,到測試驗證、數據資產管理等都需要注意。

對於SQL開發,不是傳統認知的寫代碼run成功了事。它有編碼規範、註釋規範、DQL規範、DDL規範、運算符規範、表別名命名規範、調度配置規範、數據同步規範、std清洗規範、分區規範、維表使用規範等等要求。

這是在企業數據開發中需要嚴格遵守的,可能在學校裏寫個SQL並不會考慮這麼多。

除了開發流程規範的差異外,編程本身也有很大不同,就是剛剛提到的代碼規範。

學校裏編程基本都是書本上或者老師教的步驟,一二三四實現了就可以,很難用到實際開發裏。

現在各大互聯網公司都有自己的代碼規範和code review,比如騰訊、谷歌。

騰訊員工發過一篇code review,簡單列幾個:

  1. 對於代碼格式規範,100%嚴格執行,嚴重容不得一點沙。
  2. 文件絕不能超過 800 行,超過,一定要思考怎麼拆文件。工程思維,就在於拆文件的時候積累。
  3. 函數對決不能超過 80 行,超過,一定要思考怎麼拆函數,思考函數分組,層次。工程思維,就在於拆文件的時候積累。
  4. 代碼嵌套層次不能超過 4 層,超過了就得改。多想想能不能 early return。工程思維,就在於拆文件的時候積累。

谷歌開源項目風格指南,對各種語言大型開源項目都給出了代碼規範:

拿Python來說,它分別對風格規範和語言規範做了詳細說明。

對於Python異常處理,有如下建議,異常必須遵守特定條件:

  1. 優先合理的使用內置異常類.比如 ValueError 指示了一個程序錯誤, 比如在方法需要正數的情況下傳遞了一個負數錯誤.不要使用 assert 語句來驗證公共API的參數值. assert 是用來保證內部正確性的,而不是用來強制糾正參數使用.若需要使用異常來指示某些意外情況,不要用 assert,用 raise 語句,

  2. 模塊或包應該定義自己的特定域的異常基類, 這個基類應該從內建的Exception類繼承. 模塊的異常基類後綴應該叫做 Error.

  3. 永遠不要使用 except: 語句來捕獲所有異常, 也不要捕獲 Exception 或者 StandardError , 除非你打算重新觸發該異常, 或者你已經在當前線程的最外層(記得還是要打印一條錯誤消息). 在異常這方面, Python非常寬容, except: 真的會捕獲包括Python語法錯誤在內的任何錯誤. 使用 except: 很容易隱藏真正的bug.

  4. 儘量減少try/except塊中的代碼量. try塊的體積越大, 期望之外的異常就越容易被觸發. 這種情況下, try/except塊將隱藏真正的錯誤.

  5. 使用finally子句來執行那些無論try塊中有沒有異常都應該被執行的代碼. 這對於清理資源常常很有用, 例如關閉文件.

其他具體請看:GitHub - google/styleguide: Style guides for Google-originated open-source projects

綜上,學校是學習編程基礎建立認知的地方,很難把所學用到工程開發裏。而工作是教會你怎麼用編程創造有價值的產品,這其中有太多東西需要你去學習、運用、深化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章