最近的工作,變成了Python全棧工程師
大家好我是螞蟻,本文不是廣告^_^
實在是沒想到,工作快8年了,最近的工作變成了一個Python全棧工程師。
Python在我8年工作經(jīng)歷中,一直都在使用,不過從來都不是主語言,我的主語言是JAVA,用Python會做不少"輔助"的事情,比如數(shù)據(jù)處理、定時任務(wù)、報表計算、Web頁面等等。
半年前我跳槽到了當(dāng)前的新公司,是一名推薦系統(tǒng)架構(gòu)工程師。
我的工作圍繞推薦系統(tǒng)工程架構(gòu)展開,大團(tuán)隊的編程語言用到了3個,分別是C++用于底層推薦引擎、JAVA用于業(yè)務(wù)對接、Python用于機(jī)器學(xué)習(xí)和模型部署。
因為我所在的小組是推薦中臺,更加偏重部署流程化的事情,Pythong更適合這個場景,因此是主語言,而同時我也需要了解團(tuán)隊其他的技術(shù)也得掌握C++/JAVA,但它倆現(xiàn)在是副語言。
從來沒想到,副語言竟然轉(zhuǎn)正了,每天寫的最多的代碼,變成了Python。
而用Python開發(fā)的首要技術(shù)模塊,是Flask的Web服務(wù),這個服務(wù)會提供給公司的推薦算法使用,可以自動化的配置模型、發(fā)起上線部署流程,是一個公用的平臺。
## 分割線
相對于Java/C++,Python在開發(fā)一個Web部署類產(chǎn)品上,有明顯的優(yōu)勢:
^_^,不由自主的又開始推銷Python,不過這次結(jié)合下我的工作
1、開發(fā)非常快速
相比JAVA/C++的語法,Python真的是簡潔明了,不用考慮類型適配,有大量的強(qiáng)大類庫支持,比如用Python實現(xiàn)下載、解壓、移動文件、上傳等等
2、調(diào)試DEBUG方便
如果要調(diào)試C++程序,即使一點點代碼,恐怕得花至少5分鐘去編譯、替換二進(jìn)制,并且只能通過打印日志的方式調(diào)試。
JAVA其實在小項目DEBUG調(diào)試很方便,然而我們基礎(chǔ)架構(gòu)的JAVA是給第三方用的,結(jié)果也導(dǎo)致出問題DEBUG很麻煩。
而用Python,哪里有問題,Pycharm打個斷點,幾分鐘就能揪出罪魁禍?zhǔn)祝袔讉€寫C++的同學(xué)用過幾次Python,簡直大呼過癮。
3、一門語言搞定很多場景
Python在我這里主要用于Flask Web開發(fā),但是它也承擔(dān)其他的事情,比如配合Pandas/Seaborn做數(shù)據(jù)分析可視化、同時用于tensorflow機(jī)器學(xué)習(xí)模型的訓(xùn)練代碼開發(fā),相對來說更加多能。
## 分割線
然而,用Python開發(fā)Web項目,也會遇到一些問題:
1、代碼難以規(guī)范、復(fù)雜模塊凌亂
JAVA是代碼規(guī)范+結(jié)構(gòu)組織的典范,C++我敢說比Python更爛。
而Python這門語言,入門特別容易,并且能快速參與項目開發(fā),很容易大家各自為政寫出不規(guī)范的爛代碼。
最近在研讀谷歌的Python代碼規(guī)范,就是想建議大家把代碼寫的規(guī)范,別人更易讀和維護(hù)。
谷歌Python規(guī)范文檔:
https://google.github.io/styleguide/pyguide.html
2、會遇到性能問題
很多性能問題,其實是和編程語言無關(guān)的,而是和代碼本身的邏輯有關(guān)。
然而,Python好像更容易出現(xiàn)這類問題。
遇到了問題,需要通過閱讀代碼、性能分析等手段找到問題,然后解決。
如果是并發(fā)問題,還要更多的深究多線程、多進(jìn)程、協(xié)程等機(jī)制。
不過我反而也覺得這是個機(jī)遇,說明Python是可以深挖的、有能長期積累的技術(shù)方向。
## 分割線
最后分享下,我現(xiàn)在工作用的Pythn用于Web的技術(shù)棧:
網(wǎng)關(guān):Ngnix
前端:vue.js
后端:Flask,gevent.pyuwsgi,requests
存儲:MySQL、本地文件
分析:Pandas、Seaborn、Jupyter notebook
模型:Tensorflow
## 分割線
最后,謝謝大家訂閱我的公眾號。
