|
最近,100offer 在知乎上受用戶邀請(qǐng)回答問(wèn)題「爬蟲工程師的未來(lái)方向在哪?」。從這個(gè)問(wèn)題中,可以感受出 Python 工程師在職業(yè)發(fā)展中遇到的困惑。 許多程序員走上編程崗位,最初的誘惑都是出于對(duì)計(jì)算機(jī)編程的喜愛(ài),但工作 3-5 年之后,對(duì)于那些想在工程師這條路上走得更遠(yuǎn)的人來(lái)說(shuō),未來(lái)方向究竟在哪里,很少有人能得到清晰的思路。 為此,我們找來(lái)了 Python 領(lǐng)域的知名人物、100offer 用戶劉曉明(知乎 ID :Gashero ),他運(yùn)營(yíng)著一個(gè)高質(zhì)量的技術(shù)博客,同時(shí)也是大牛級(jí)的知乎活躍用戶,還是中國(guó)最資深的 Python 工程師之一。通過(guò)他和 Python 語(yǔ)言之間的故事,來(lái)向各位讀者展示一個(gè)資深的 Python 工程師是如何修煉而成的。 劉曉明正在操作一臺(tái)四旋翼無(wú)人機(jī) 你是我們唯一雇得起的 Python 博主 2007 年,劉曉明從河北唐山南下來(lái)到上海找工作,身上只帶了 700 塊錢,這時(shí)他二十出頭,剛畢業(yè)一年。來(lái)上海是為了面試一家國(guó)內(nèi)知名視頻網(wǎng)站,劉曉明在一家二星級(jí)酒店住了六天,終于拿到了入職 offer ,他松了一口氣。 在那年,全國(guó)只有三家公司公開招聘 Python 工程師,而他已被前面兩家拒絕。公司領(lǐng)導(dǎo)這么向劉曉明解釋錄用原因:「全國(guó)在寫 Python 博客的一共就 6 個(gè)人,只有你是我們雇得起的。」 劉曉明是個(gè)在技術(shù)上不安分的人,在去視頻網(wǎng)站以前,他進(jìn)過(guò)唐山本地的有線電視網(wǎng)絡(luò)公司,也做編程方面的實(shí)習(xí)。在剛畢業(yè)時(shí),他為一家企業(yè)的 web 系統(tǒng)寫了一套代碼生成器,可以用輸入的 Python 模式批量生產(chǎn) Java 的 web 代碼,包括每個(gè)數(shù)據(jù)庫(kù)表的 CRUD 操作界面。這樣一來(lái),劉曉明每十五分鐘就能完成同事一個(gè)月的工作量,但結(jié)果是被當(dāng)時(shí)領(lǐng)導(dǎo)嚴(yán)厲批評(píng),原因是引入了新的編程語(yǔ)言,而其他人不會(huì)。 Python 顯然不屬于領(lǐng)導(dǎo)們眼中流行的編程語(yǔ)言,即使在十幾年后,劉曉明也承認(rèn),這款本質(zhì)上極易上手的語(yǔ)言在中國(guó)仍然知名度不高,而在世界范圍內(nèi),也仍徘徊在 TOIBE 編程語(yǔ)言排行榜的前十位,與 C 語(yǔ)言、Java 還有相當(dāng)距離。 劉曉明對(duì)編程的熱情來(lái)自 1997 年,一個(gè)做生意的親戚帶當(dāng)時(shí)還是中學(xué)生的他入門了 DOS,當(dāng)時(shí)流行的語(yǔ)言是 QBasic 和 C 。進(jìn)入高中后,劉曉明接觸到了Pascal 、Visual Basic 等。他第一次去網(wǎng)吧的時(shí)候,同去的朋友在搜索“奇怪的東西”,以及混聊天室,劉曉明卻打開本地的 outlook ,注冊(cè)了一個(gè) etang 郵箱,并在網(wǎng)吧主機(jī)上練習(xí) C 語(yǔ)言、VB 和 Delphi ??傊@樣的一個(gè)孩子將來(lái)不去學(xué)計(jì)算機(jī)簡(jiǎn)直是不合理的。 大學(xué)四年中,劉曉明通過(guò)自學(xué),搞定了 Delphi6/7、C Builder5、CORBA 編程、DLL、系統(tǒng)編程等。大學(xué)后半期還學(xué)了 Java 里的 JSP、Servlet,Visual C ,以及 Visual Fox Pro 和 Turbo C 。最關(guān)鍵的,是他邂逅了日后最稱手的編程兵器——Python。 2005 年,大三的劉曉明在編程原理課程設(shè)計(jì)的作業(yè)面前犯了拖延癥,他在一本名為《簡(jiǎn)明 Python 教程》的電子書那開了小差,用一周時(shí)間學(xué)會(huì)了里面介紹的編程語(yǔ)言,累計(jì)學(xué)習(xí)時(shí)間不超過(guò) 9 個(gè)小時(shí),最終他用 Python 完成了課程設(shè)計(jì)。 「這是我大學(xué)階段所有課程設(shè)計(jì)里唯一沒(méi)有延期的。很多人研究 Python 是因?yàn)楹枚钊?CS 學(xué)科很多高級(jí)主題時(shí),Python 能發(fā)揮出更加強(qiáng)大無(wú)比的力量?!箯拇艘院螅瑒悦鞒蔀榱?Python 的狂熱粉絲。 由于這款編程語(yǔ)言的中文資料奇缺,英文不好的劉曉明只好硬著頭皮去研究有關(guān) Python 原版資料,這反倒替他鍛煉出一身英語(yǔ)本領(lǐng)。他利用幾個(gè)月的閑暇時(shí)間完成了 mod_python 文檔的翻譯,并把接近 6 萬(wàn)字( unicode 字符計(jì)算)的譯文貼到自己的博客上。從那以后,劉曉明關(guān)于技術(shù)的知識(shí)攝取渠道全部變成了英文文檔和原文書籍。 Python 是最稱手的編程語(yǔ)言 進(jìn)入視頻網(wǎng)站以后,劉曉明掙脫了原先的技術(shù)束縛,使用任何編程語(yǔ)言或工具都不再被視為另類,他開始了大刀闊斧的嘗試技術(shù)理念。這一年的 11 月,劉曉明只回了四次家,其他時(shí)間全部泡在電腦上研究 CDN,用這一個(gè)月的時(shí)間,劉曉明弄清楚了所有和 CDN 相關(guān)的知識(shí)。第二年,劉曉明得以參與公司一個(gè)耗資4000 萬(wàn)的系統(tǒng)項(xiàng)目,成為團(tuán)隊(duì)中僅有的兩個(gè)程序員之一。 從那以后,「這家公司想開發(fā)任何和 CDN 有關(guān)的東西,都離不開我了?!?/p> 也正是同一個(gè)時(shí)期,劉曉明開始有意識(shí)地在博客上更新編程技術(shù)內(nèi)容,他隨時(shí)在上面發(fā)表自己的操作感想,包括封裝 libpcap 、做網(wǎng)絡(luò)抓包、以及通信劫持,儼然是個(gè)黑客。他一度希望尋找比 Python 更好的語(yǔ)言,為此嘗試了 Lua、Erlang 等。 「在 2008 年到 2010 年之間,我研究過(guò) Lua ,很多游戲腳本是用 Lua 寫的,包括魔獸世界,關(guān)于 Lua 我寫了將近 18 萬(wàn)字筆記,也用它做了一些信息安全上的程序,但 Lua 有一些缺點(diǎn),比如作用域、模塊支持等方面的問(wèn)題。后來(lái)還研究過(guò)一陣子 Erlang ,一個(gè)函數(shù)式編程語(yǔ)言,寫了 37 萬(wàn)字的筆記,但后來(lái)也是一直沒(méi)怎么用過(guò)?!?/p> 最終,劉曉明發(fā)現(xiàn)還是 Python 最符合自己對(duì)于最佳通用語(yǔ)言的需求。即便是對(duì)Erlang 產(chǎn)生興趣期間,劉曉明也嘗試做了 C node 的 Python 封裝,使得Python 與 Erlang 互相可以發(fā)送消息、組建群組。而此后,當(dāng)劉曉明涉及硬件開發(fā)任務(wù)時(shí),他同樣嘗試過(guò)封裝 Cubieboard 和 RaspberryPi 的 GPIO、SPI 等眾多外設(shè)的 Python 接口。 在 2013 年,劉曉明在為一家開發(fā)音視頻識(shí)別系統(tǒng)的企業(yè)服務(wù),他使用 Python 設(shè)計(jì)出一套對(duì)重復(fù)項(xiàng)目進(jìn)行自動(dòng)識(shí)別的程序,從而將人力識(shí)別工作量降低到1/20 。而通過(guò)自己原創(chuàng)和 NumPy 的封裝,音視頻識(shí)別任務(wù)每天至少會(huì)經(jīng)歷十幾次甚至幾十次迭代,優(yōu)化算法參數(shù)。這讓劉曉明在不到兩年時(shí)間里取得的音視頻識(shí)別效果超過(guò)了某些大學(xué)實(shí)驗(yàn)室多年的研究。 「對(duì)于各個(gè)領(lǐng)域的研究者,我是真心推薦 Python 的。用上 NumPy 和 SciPy,你就擁有了極致的性能,頂級(jí)的可調(diào)式性,和產(chǎn)品級(jí)的穩(wěn)定性。而這也使得Python 的這套組合成為科學(xué)計(jì)算領(lǐng)域唯一能與 matlab 競(jìng)爭(zhēng)的選擇?!?/p> 同樣在 2013 年,劉曉明結(jié)識(shí)了正在創(chuàng)辦一家 G 企業(yè)的創(chuàng)業(yè)者。這位學(xué)術(shù)根基深厚的創(chuàng)業(yè)者給劉曉明留下了深刻印象,但在劉曉明看來(lái),加入他們的時(shí)機(jī)尚不成熟。 一年后,創(chuàng)業(yè)者再次邀請(qǐng)劉曉明長(zhǎng)談,這時(shí)劉曉明發(fā)現(xiàn),G 企業(yè)的團(tuán)隊(duì)中已經(jīng)網(wǎng)羅到不少牛人,包括從斯坦佛商學(xué)院回國(guó)的 CEO 。于是劉曉明以第 19 號(hào)員工的身份加入了 G 企業(yè),在 apollo 組與機(jī)器人組擔(dān)任 Senior Manager ,并成為研發(fā)團(tuán)隊(duì)中五個(gè)擁有 CTO 背景的成員之一。 在 G 企業(yè),劉曉明接觸到了許多新奇的工程項(xiàng)目,包括改裝汽車——那次是為了檢驗(yàn)一下自動(dòng)駕駛方面的相關(guān)技術(shù)。不久,自動(dòng)駕駛板塊的業(yè)務(wù)從格靈深瞳被拆分獨(dú)立出去。 「那之后就玩一些新的項(xiàng)目。比如視覺(jué)里程記憶相關(guān)的技術(shù)、行車安全方面的自動(dòng)判斷,以及做自動(dòng)標(biāo)注這類深度學(xué)習(xí)方面的技術(shù)?!苟@種深度學(xué)習(xí)領(lǐng)域的任務(wù),正是 Python 語(yǔ)言的強(qiáng)項(xiàng)。 「我推崇 Python C 的玩法,組合式語(yǔ)言。當(dāng)你發(fā)現(xiàn)性能不夠用,或者涉及到底層知識(shí)太深,干脆就自己去寫這塊,利用 Python 的 C 模塊,可以讓 Python 調(diào)用——這就是 Python 膠水特點(diǎn)的作用?!乖诓┛屠?,劉曉明不厭其煩整理出了國(guó)內(nèi)最全面的一份有關(guān) Python 的 C 模塊的文檔,總計(jì)寫了 7 萬(wàn)多字。 Python 在中國(guó)的三次風(fēng)潮 在中國(guó),Python 曾經(jīng)歷過(guò)三次風(fēng)潮,第一次就發(fā)生在 2007 年,當(dāng)時(shí) Google 進(jìn)入中國(guó)市場(chǎng),人們也隨之關(guān)注到,在這家明星公司的工程師里,Python 語(yǔ)言的使用率出人意料的高。第二次風(fēng)潮發(fā)生在 2009 年到 2012 年,中國(guó)互聯(lián)網(wǎng)創(chuàng)業(yè)潮到來(lái),許多公司急于迅速搭建網(wǎng)絡(luò)架構(gòu),而開發(fā)環(huán)境友好的 Python 就成為許多工程師的選擇。第三次則是在 2015 年至今,由深度學(xué)習(xí)概念導(dǎo)致的技術(shù)潮流。 作為完整經(jīng)歷了這三次程序員扎堆學(xué)習(xí) Python 的風(fēng)潮的 Python 使用者,劉曉明看到了中國(guó)程序員對(duì)于技術(shù)風(fēng)向的捕捉與饑渴,盡管這些技術(shù)往往誕生在海外,但國(guó)內(nèi)的技術(shù)工作者總能短時(shí)期內(nèi)掌握,并利用龐大的市場(chǎng)人口進(jìn)行檢測(cè)。今年 3 月,劉曉明選擇前往一家創(chuàng)辦于美國(guó)的科技企業(yè),帶領(lǐng)技術(shù)團(tuán)隊(duì)進(jìn)行軟硬件開發(fā)。多次往返硅谷和中國(guó)的經(jīng)歷,讓他甚至產(chǎn)生一種感覺(jué):和中國(guó)的程序員們相比,硅谷程序員們似乎過(guò)于追求舒適了。 劉曉明并非對(duì) Python 毫無(wú)怨言,在與 Python 的 12 年接觸里,除了 Python3 的出現(xiàn),這套語(yǔ)言本身幾乎沒(méi)有什么變化。而 Python3 和 Python2 之間存在不兼容的情況,無(wú)法直接升級(jí)。 「很多編程語(yǔ)言、甚至一些庫(kù),動(dòng)不動(dòng)搞不兼容升級(jí),用戶馬上就跑光了。」劉曉明自己仍然在使用 Python2.7 的版本。他拿前幾年興起過(guò)的 D 語(yǔ)言舉例,每次小版本升級(jí)都不兼容,如今已經(jīng)沒(méi)有多少人聽(tīng)說(shuō)過(guò)它的消息了。但盡管如此,劉曉明仍堅(jiān)信,Python 是一個(gè)架構(gòu)師最值得結(jié)交的朋友。 什么樣的人能成為優(yōu)秀的 Python 工程師/架構(gòu)師 從第二份工作開始帶團(tuán)隊(duì)時(shí)算起,劉曉明的團(tuán)隊(duì)經(jīng)驗(yàn)已經(jīng)超過(guò)7年。他承認(rèn)自己偏愛(ài)有自學(xué)能力的人,至于本科學(xué)歷的出身,劉曉明并不在乎,在他的團(tuán)隊(duì)里,員工讀到大二退學(xué),或者干脆沒(méi)讀過(guò)大學(xué),都不稀奇。與之相對(duì)的,只會(huì)按部就班學(xué)習(xí)老師教授內(nèi)容的乖孩子,很難受到劉曉明的看重——「有幾種人我肯定不招,一種是去報(bào)名技術(shù)培訓(xùn)班的,另一種是不會(huì)翻墻的?!?/p> 他甚至親自設(shè)計(jì)了一個(gè)圍繞 Python 的四周入職培訓(xùn):第一周讀完《簡(jiǎn)明 Python 教程》,適應(yīng) Python 開發(fā)環(huán)境;第二周嘗試寫爬蟲,深度了解 re、urllib2、sqlite3、threading,queue 等模塊;第三周學(xué)習(xí) web 開發(fā)框架,推薦 flask、webpy 之類;第四周給產(chǎn)品做個(gè)小功能。據(jù)劉曉明說(shuō),有的員工完成這個(gè)周期可以只用一天。 到 2017 年為止,劉曉明在 Python 編程領(lǐng)域已經(jīng)混跡超過(guò) 12 年,這讓他變得比大部分 Python 程序員都更加資深。在一則知乎問(wèn)答上,劉曉明半開玩笑似的回答有關(guān)“如何面試 Python 程序員”的問(wèn)題,他給出的回答是:「問(wèn)他認(rèn)不認(rèn)識(shí)我?!?/p> 常年更新博客的習(xí)慣讓劉曉明交了不少朋友,在 Gtalk 上,他一度擁有超過(guò)四百位 Python 領(lǐng)域的愛(ài)好者朋友。他頻繁登錄與 Python 底層與第三方庫(kù)相關(guān)的技術(shù)文檔,進(jìn)行筆記整理和翻譯工作。 「每種技術(shù)都有對(duì)應(yīng)的社區(qū),Python 是比較有特點(diǎn)而容易的。大部分國(guó)內(nèi)開發(fā)者都會(huì)去 Python 中文郵件列表,現(xiàn)在托管在 Google groups 上?!眲悦黠@然深得其益,“總之,要做筆記,然后交一些不錯(cuò)的朋友?!?/p> |
|
|
來(lái)自: Levy_X > 《Python學(xué)習(xí)資料》