胡陽:汗水鋪就程式碼之路,三分天註定,七分靠打拼
胡陽 前搜狐資深開發工程師,現任知乎資深開發工程師
2008年開始,他寫部落格11年了。
僅最近兩年內,部落格的訪問量累計超過600萬。
2017年,他釋出了《Django企業開發實戰》視訊課,廣受學員好評。2019年,實體書出版。
「時間在我看來並不是虛無的,是非常具體的東西,一分一分,一秒一秒,都很具體。」——胡陽
入門——興趣並非偶然
胡陽說,他是「笨鳥先飛」的那種人。
高考後,胡陽第一志願報的是機械工程專業,他查了下專業背景,需要繪圖,於是就開始在家自學。
不過這番準備沒派上用場,因為報考結果出來後,他的專業是資訊計算科學。
他想起高中發過一本 Visual Basic 的教材,但因為高考複習緊張,沒時間上機。於是,在等待大學入學的這段時間,他把書翻了出來開始研究。
入學後,他發現 VB 是大學的基礎課,上課教的竟然就是暑假自己學的內容。全校無論什麼專業的人都在學,而當其他同學上機還是一臉懵的時候,他已經會寫了。
胡陽說:「我們為什麼會對一件事情感興趣?一種情況是你對這件事情真的有天分,一開始上手就比別人學得快。另外一種是你比別人起跑要快。」
成就感激起了他的興趣。除了 VB 之外,網際網路有無數的未知在引人探索。
為什麼電腦執行得慢?什麼是中病毒?所謂的「黑客」怎麼入侵網站?懷著好奇,大一那年,他把課餘時間大多花在學習研究網路安全上。
他在網上能找到很多黑客類的教程,比如演示怎麼去入侵一個網站。但是怎麼去實踐呢?這類教程的時效性太高,網站不會敞開門在那等著。
當然,方法也是有的。那時就有 X-scan 掃描器、挖掘雞這類傻瓜式工具,只要填一個網址,它會幫你掃描有什麼漏洞。
但問題是,這不太有趣,就算黑進網站了也只能說明是人家這個工具寫得好。
於是,胡陽的興趣轉向了加密與解密的方向,與脫殼相關的內容。當時還是桌面 APP 的時代,下載之後就可以很方便地實驗,很多方法他試過後,發現完全可行,這給了他信心。
不過,軟體終究是程式設計師寫出來的,胡陽覺得自己還是得去學程式設計。
恰在這時,學校有一個資訊科技興趣提高班來招生,他想:那就去試試吧。這個決定完全改變了他接下來兩年的大學生活。
米老師一手創立了興趣提高班,他不僅一個人教所有的計算機基礎課,而且引導大家探索性地學習,相比於照本宣科,他更在意的是啟發大家從不一樣的角度看問題。
胡陽說:「你會感覺整個視野被開啟了。」
在興趣提高班,大家因為同樣的熱情聚集在一起,甚至寒暑假也留在學校。這兩年,時間和汗水為他打下了堅實的地基。
畢業時,在其他人在就業市場中迷茫的時候,他已經去了師兄的公司搞開發。他說:「這個行業能夠讓你以自己的方式去做有價值的東西。因為開發一個軟體需要依賴的外部成本很低,只需要有一臺電腦就能搞定。對我來說比較幸運的是,這個事剛好是我感興趣的,並且可以有不錯的收入,能夠養家餬口。」
程式設計,不只是一份工作而已
2011年,他從 Java 轉到 Python 開發。
HR 問他:你學了多久 Python 並能正式工作?他回答:「一兩天。」
他在回答裡推薦了3本書,還有自己做過的專案練習程式碼。
為什麼會選擇做出這樣的改變呢?
那時,胡陽才剛畢業不久。工作後,他發現公司會接各種專案,比如Java、.NET、PHP、VB,哪個方向他都沒辦法去深入地學習。他想給自己定一個計劃,卻不知道怎麼做,前路一片迷茫。
輾轉反側了幾個月後,他決定辭職。
那一年,他在部落格中寫道:「我選擇走軟體這條路,不是為了一份工作,是從純對技術的熱愛出發的。或許我還沒有那麼多的人生經歷,不瞭解生活的本質。但是我一直在告訴自己,有些事,你要是想做的話,即便不知道是不是和你想的一樣,那你應該去做,因為這樣你才能夠看得更多。」
一年後,他加入了搜狐。
他說:「在搜狐六年的時間,相當於又上了一個大學了。」
第一年,他每天都在拼命學習。他說,雖然之前有了一年的工作經驗,但還是覺得自己什麼都不知道。
這樣的狀態持續了一段時間後,他的學習曲線逐漸平緩。不過很快,他又面臨了全新的挑戰。
部門變動對於一名普通員工意味著什麼?有人只能被挑選,也有人擁有更多的選擇權。因為在部門變動或業務擴充套件後,總會有一些機會出現。那些做得好的人,這時會浮現出來,他會被提拔到更高的位置,帶團隊負責更大、更多的業務。
所以,胡陽發現,攻克了業務和技術之後,他得帶團隊了。
一開始,他沒有多想,只是用之前老大的方法來帶大家。不過,管理會分散精力,在業務膨脹之後,甚至面對全新業務的時候,他有點手忙腳亂了。
於是,他開始思考:技術人應該怎麼做管理呢?
新手管理者的痛苦在於,他會糾結:「這哥們怎麼寫得這麼慢?我寫早就寫完了。」
不過,他發現自己可以換個角度想問題:「把這件事情交給他,就等於你已經做了。為什麼呢?相當於你本來是一個單核的 CPU,變成多核了,對吧?你可以同時接多個任務,雖然其中一個跑得比較慢,但是其他的都運轉得非常快,所以整體你的產出還是足夠高的。況且他也會成長,會不斷變快的。」
他總結,本質上 leader 要思考的是團隊整體,從而不斷地把這個專案的 feature 往前推進。
不過,管理的確會消耗精力,他沒有足夠時間持續地輸出或輸入程式碼,也不能具體負責某個專案的開發,但會寫一些「打雜的」程式碼,解決出現的小問題。
他說,自己會在業餘時間學習,保持對技術的感覺或者敏銳性。
搜狐媒體大廈
胡陽進搜狐的初衷很簡單,就是想找一個流量大的平臺,參與做一個好產品。
從他剛加入時,搜狐就是一家成熟的公司,擁有成熟的系統。他從慢慢熟悉新聞業務開始,維護了它大概六年的時間。
2018年,在搜狐的最後一年,他其實有點沮喪。
尤其是參與團隊管理之後,他對公司變革的意義有了更深的體會。「你發現在部門變動或者商業調整之後,技術的價值其實沒有那麼大。就是說,你可以把這件事做好,但是如果換一個人來做,哪怕做得不是很好,結果也沒有太大差別。」
對於技術人來說,最大的否定莫過於此。
可是,怎樣才能最大程度地發揮他技術的價值呢?
他想要參與一個自己喜歡的產品的構建。這也是他選擇加入知乎的原因。
他不太愛看新聞。他認為,對於新聞這種高流量產品,雖然也存在一些正經的報導,但更多是所謂的「標題黨」,無論標題再誘人,它的資訊對你毫無用處。而知乎成立不久他就註冊了賬號,他覺得,大家貢獻的內容更偏知識和經驗,對使用者來說更有價值。
於是,他登上了知乎這艘「海盜船」。
來到知乎,他的第一感覺是:這個地方後端真多。
因為和之前相比,搜狐門戶是媒體屬性,把新聞釋出出來,大家去看,流程就結束了。而知乎是一個 UGC(使用者原創內容)的社群平臺,所有人都是可參與的,業務更加複雜,儘管功能整合在一個社群裡面,但下面細分的內容都是獨立的產品。而且大家經常在群裡交流,技術氛圍非常濃。
他覺得上家公司像一個大的船群,大家朝著共同的目標各自前進。而現在的則像一艘大船,大家一起讓船駛向共同的目標。
寫部落格——分享技術和經歷
從 2008 年開始,胡陽已經寫部落格 11 年了。
部落格內容不僅包括技術,還有他的讀書筆記、對某事的感想、找工作的歷程、年度總結,等等,像是一條河流,沿著過去流淌到現在,一路的景色清晰可見。
他前幾年有一個習慣,看到一個好部落格的時候,會從頭開始把所有內容看一遍。除了看內容,他還會揣測作者當時是什麼狀態、想法、這個人的成長過程是怎樣的。這是他會堅持寫部落格的一個原因,把自己的經歷共享給大家也是某種意義上的開源。
2017 年,搜狐部門變動,上層戰略都在調整,他手上的事情停了,時間突然空了出來。他想:畢竟工作時間也挺長,在搜狐已經呆了五年,他希望能有一些具體的東西留下來。
「為什麼這麼講?比如說我有很多同事換公司之後,就不再用 Python 了。無論他之前的經驗有多少,只對他自己來說是有價值的。因為有這些經驗,他可以快速地去適應另一種新的技術。
「當你跟他共事,你會發現,原來他懂這麼多。而他轉行了之後,其他人可能也有同樣的感覺,但是肯定不如你也用 Python 時的這種體驗更直接。這在一定程度上是一種浪費。
「但如果他把經驗變成書或者視訊,哪怕之後真的不做這個語言,或者不做這個行業了,它對別人還是有幫助的,因為這是沉澱下來的東西。」
另一方面,這樣也有助於技術的學習。
他說:「怎樣學技術才能做到又快又好呢?一是帶著問題去學習。比如你遇到一個 bug,怎麼都搞定不了,剛好有一本書能解決,那你肯定會特別投入地把書看完。另外一種就是我常用的方式——以教代學。」
既有輸入,又有輸出,中間就是大腦在提煉總結,理解吸收。
那年,他做了《Django企業開發實戰》的視訊課,學員的反饋很好。後來,他把內容進一步細化完善,整理成了紙質書,2019 年初在圖靈出版。
Django是基於MVC(model,template,views)構造的開源Web開發框架,可以顯著提高工作效率。 胡陽舉了個具體的例子:「如果用Tornado框架寫一個新feature,我需要先把資料庫設計好,之後寫model層增刪改查的部分,寫controler層資料整合的部分,再寫HTTP層介面部分,然後用阿里開源的antd去寫前端。無論你的feature有多簡單,這套都要走完,很繁瑣。
「而用Django的話就會簡單很多。因為Django是基於model構建的,把模型設計好資料庫就有了,然後再配置一下admin,頁面就已經有了。按照前後端分離的邏輯,你只需要配一個Django REST framework,所有restful 介面就有了。然後你根據model寫rest framework的配置,就基本上已經完善了,剩下只要花時間寫前端邏輯就好了。所以它是生產工具,能極大地提高生產力。」
讓自己的歷史不斷向前
「時間在我看來並不是虛無的,是非常具體的東西,一分一分,一秒一秒,都很具體。」
有多少人會執著地記錄自己十年的變遷呢?有人覺得這毫無意義,因為過去發生的已經消散。
但這是關於一個人的歷史。我們無法想象一個只凝固於現在的,沒有歷史的國家;而如果一個人走在一步一消散的臺階上,也無法判斷自己是向前,在原地,還是在倒退。
除此之外,胡陽也更明白自己時間的定義。
「你看老大爺大媽,滿頭白髮,在街邊走路,你知道你以後也會是這個樣子,這是不可避免的。有時候我覺得人生是一眼可以望到頭的,每個人都這麼幾十年的時間。
「對我來說,時間是一個刻度,它也是一個容器。
「如果說它是刻度的話,比如說一個小時,人生其實是由無數這樣的一個小時組成的,對吧?而說它是容器,是指你可以填充不同的內容。比如我們每個小時都在閒扯,這個容器也同樣填滿了。」
它有什麼樣的意義呢?他舉了一個程式設計師們很熟悉的例子——程式設計馬拉松(Hackathon)。
「很多科技公司都會定期組織 Hackathon 活動,如果你沒有參與過,你可能體會不到 24 小時內能完成多少任務。當我們被限制,要把一些內容放到固定的時間容器中,往往我們會想方設法來達成目標。
「它會有一個倒數計時,你看還剩一個小時的時候,還有兩個工作沒做,你嘩嘩譁就開始寫,這時候效率會非常高。
「所以你參加完 Hackathon 就會知道,24 個小時,每個小時你能做到什麼。
「很多剛入行的程式設計師,他們估算時間的單位都是一天或半天,有時候說‘OK這個需求我排一下’,可能就排到兩週。大家早上起來往這一坐,就11點了,還沒進入狀態,中午該吃飯了。然後下午2點睡醒之後,把上午沒做的事情再做一下。
「說到時間管理,其實最關鍵的就是:你真正的單位時間是什麼?
「同樣是一個小時的單位,你能完成多少事,能往時間容器裡填充多少東西,在你放 10% 的精力和 100% 的精力的時候是不一樣的,後者才是真正的單位時間。只是很多人會有意無意地忽視。」
如何做到這一點呢?胡陽說,祕訣就在於「狀態的切換」。萬事開頭難,所以關鍵的是先把自己切換到那個狀態裡面。
舉個實際的例子,他分享了自己寫部落格時的經驗。「平時工作比較忙的時候,其實回家是不想寫東西的。你往那一坐,不想再對著電腦輸出,因為太累了。
「這時候的解決方案,就是你先隨便寫個開頭。然後,當你繼續寫完一段之後,會覺得自己寫得不好,這時你已經在這個狀態裡面了。那就再去寫一些好的東西出來,最後把開頭刪掉,或者把開頭再重新寫一遍。」
無論是大學時的「笨鳥先飛」、職場上做的選擇,以及這些年不斷地學習和分享,驅動他的馬達是什麼? 胡陽說:「其實我自制力沒那麼好,特別累的時候,也不太想做比較消耗大腦精力的事。
「但是我不太能接受長時間去做同樣的事情,或者說我長時間沒有資訊攝入,我會覺得特別可怕,覺得特別枯燥。
「所以我無論是寫部落格,去看技術或者其他書,我其實是在不斷地瞭解新的東西。因為,本質上我會特別害怕,我始終在重複一件事情。」
他全力以赴,一心探尋自己的極限,永不停息地向前,時間會給所有付出一個完美的答案。
文:李冰
採訪:樂馨,李冰
圖片來源:胡陽
Django企業開發實戰
資深開發工程師the5fire多年開發經驗總結
本書以從零開發一個部落格系統為例,介紹Django在日常工作中的應用。
相關文章
- 轉貼:胡陽:汗水鋪就程式碼之路,三分天註定,七分靠打拼
- 人工智慧鋪就巴西“智慧農業”之路人工智慧
- 李天陽
- 網路安全管理:三分技術加七分管理(轉)
- 圖片比例縮放 不丟真的C#程式碼----努力加汗水哦C#
- 重走JAVA程式設計之路(二)註解Java程式設計
- 程式碼簡化之路
- 批次域名註冊如何賺錢?GoDaddy來幫你!成為投資贏家就靠它!Go
- 學程式設計,註定孤獨程式設計
- 三分建設,七分運營|用現代化安全運營應對資料安全風險
- CSS程式碼註釋CSS
- php程式碼註釋PHP
- Java之路第3天Java
- 45天拿下位元組跳動offer!就靠這個面試真題庫,內幕首次公開!面試
- 通達信陽了又陽選股指標公式原始碼指標公式原始碼
- 百道Python面試題實現,搞定Python程式設計就靠它Python面試題程式設計
- 從這3個渠道瞭解流行程式語言,漲薪就靠它!行程
- 可信前端之路-程式碼保護前端
- 有趣的程式碼註釋
- 請停止程式碼註釋
- javascript如何註釋程式碼JavaScript
- 公務員之路3.0註冊分析
- jQuery|前後臺xml互動就靠它了jQueryXML
- 胡永:聯想集團IT監控體系架構變革之路!架構
- 網路釣魚鋪天蓋地,防不防,如何防?
- 換個心境搞IT,在IT職場如何打拼?
- 換個心境搞IT–在IT職場如何打拼?
- 三分鐘圖解 MVCC,看一遍就懂圖解MVC
- 聊聊「低程式碼」的實踐之路
- 程式碼修煉之路-木桶佈局
- 天氣預報程式碼大全
- 實現陽曆和農曆顯示日期的javascript程式碼JavaScript
- 第3天:定義語言編碼(轉)
- 程式碼才是最好的註釋
- HTML 程式碼註釋規範HTML
- 備註程式碼怕自己忘了
- 註釋程式碼的13技巧
- Java程式碼註釋規範Java