為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享


為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享


引子

某KSO工程師 我為什麼從python轉向go 芒果TV CTO CMGS 說說這篇「我為什麼從python轉向go」

個人認為 CMGS 的觀點句句在理。


為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享


為什麼你不應該放棄 Python

python是一門動態強類型語言。但是,仍然可能出現int + string這樣的運行時錯誤,因為對於一個變量,在寫代碼的時候,我們有時候很容易就忘記這個變量到底是啥類型的了。

int + string 這樣的運行時錯誤是因為 Python 是 “強類型“ 的編程語言,就是為了防止你們 “有時候很容易就忘記這個變量到底是啥類型的了” 這種情況。忘計這個變量到底是啥類型的,任何編程語言都無法完全避免。個人的解決方案是,不要使用全局變量,不要使用超大的類和函數,相信幾乎每一本進階編程指南都有這兩句話。

在python裡面,可以允許同名函數的出現,後一個函數會覆蓋前一個函數,有一次我們系統一個很嚴重的錯誤就是因為這個導致的。

這完全是編程經驗不夠或者團隊協作不夠導致的,在 C/Java/C++ 中,這也是經常發生的,尤其是 C++ (函數重載,模板機制),靈活和嚴格是無法完全融合的,對於一個動態語言,靈活是首先要實現的目標。

其實這個一直是很多人吐槽python的地方,但python有它適合乾的事情,硬是要用python進行一些高性能模塊的開發,那也有點難為它了。

我從來不會吐槽 Python 的性能,相反的它在目前的性能上已經非常滿意了。你需要定義一下什麼是“高性能模塊”,一般我認為,任何沒有用 C 或 C++ 甚至 Java 的,性能就是相對不重要的。

python的GIL導致無法真正的多線程,大家可能會說我用多進程不就完了。但如果一些計算需要涉及到多進程交互,進程之間的通訊開銷也是不得不考慮的。

這和對項目的架構能力有關係,一個稍大型的項目,除程序的健壯性,低耦合也是非常重要的一項。一般有一個規律,對性能要求高的場和,需要協作就少。需要協作多的場合,大多是對性能要求不高的業務邏輯。

所謂同步和異步,明顯 KSO 的工程師依然停留在 FCGI 的時代。

當我第一次使用python開發項目,我是沒成功安裝上項目需要的包的,光安裝成功mysql庫就弄了很久。後來,是一位同事將他整個python目錄打包給我用,我才能正常的將項目跑起來。話說,現在有了docker,是多麼讓人幸福的一件事情。

自從用了 pip 之後,從來沒有遇到過。另外 docker 完全不是為了解決這個問題的。

而部署python服務的時候,我們需要在服務器上面安裝一堆的包,光是這一點就讓人很麻煩,雖然可以通過puppet,salt這些自動化工具解決部署問題,但相比而言,靜態編譯語言只用扔一個二進制文件,可就方便太多了。

理想很好,當你真的試過到處丟個 Binary 出了問題的時候,相信你會懷念 Python 的。

python非常靈活簡單,寫c幾十行代碼才能搞定的功能,python一行代碼沒準就能解決。但是太簡單,反而導致很多同學無法對代碼進行深層次的思考,對整個架構進行細緻的考量。來了一個需求,啪啪啪,鍵盤敲完開速實現,結果就是代碼越來越混亂,最終導致了整個項目代碼失控。

這個簡直就是無理取鬧了,也是我最想吐槽的地方,“寫c幾十行代碼才能搞定的功能,python一行代碼沒準就能解決。” 這是缺點?這是缺點?這是缺點? 另外需要說的一點是,Python 都寫不好的同學,用 C 寫代碼幾乎就是災難。

雖然這也有我們自身的原因,譬如沒好的代碼review機制,沒有好的項目規範,但個人感覺,如果一個程序員沒經過良好的編碼訓練,用python很容易就寫出爛的代碼,因為太自由了。

沒有經過良好編碼訓練的工程師寫出的 Python 代碼至少還能看,可能還能用。你讓他寫 C 試試看。

當然,我這裡並不是說用python無法進行大型項目的開發,豆瓣,dropbox都是很好的例子,只是在我們項目中,我們的python代碼失控了。

技術管理能力不足,不做過多評價。


為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享


對於 Golang

完全沒有使用過 Golang 不做評價,用過幾個 Golang 寫的項目,評價只有一個字,disaster 。


為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享


結束

KSO 明顯是為了用 Golang 而用 Golang ,項目或團隊出了問題,不找到問題去解決問題,卻把問題推給編程語言,然後做夢似的認為換一個新的編程語言就能解決遇到的問題。簡直是對團隊和公司的不負責任。

最後,想學習Python的小夥伴們!

請關注+私信回覆:“學習”就可以拿到一份我為大家準備的Python學習資料!

為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享

pytyhon學習資料

為什麼不“從 Python 轉向 Golang”+19年最新python學習資料分享

python學習資料


分享到:


相關文章: