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