如何成為一位遠程開發者
如何成為一位遠程開發者
來自專欄自由工作8 人贊了文章
註:本文既不是乾貨,也不是胡侃,雖然是以「遠程」為中心,但是說的又不僅僅是「遠程」,更多的是技術人員的自我追求,包括工作環境、硬技能和軟技能。
我的經歷
我第一次聽說遠程開發者,大概是看新聞知道了 37signals 這個開發團隊。
37signals
這個團隊成立於 1999 年,一開始只有 4 個成員。如今已有 50 個成員,遍布全世界的 32 的城市。總部雖然在芝加哥,但是大部分成員都是「遠程辦公」。
當時的我聽到這些覺得很玄幻,感覺不真實。然而這個團隊確實產出了幾個不錯的產品,比如 Basecamp(一個收費的項目管理軟體)和 Rails(一個風靡一時的全棧 Web 框架)。
而且這個團隊的聯合創始人 Jason Fried 還出過兩本書,一本叫 《Rework》,一本叫《Remote》。我對這個團隊是如此好奇,於是我把兩本書都買來讀了讀,從此,我確定一個想法,我一定要試試遠程工作。
Rework & Remote
Rework 這本書主要是一些商業思考,其中有兩點,我很在意。
很多公司心目中理想的員工是:20多歲,沒有業餘生活,一天工作14小時,在辦公桌下打地鋪過夜也不會崩潰的那種。
……這讓你(管理者)糟糕的管理能力僥倖矇混過關,製造出了一個「這是我們能與競爭對手抗衡的唯一辦法」。當人們家裡有事時,他們會在辦公時間內把活幹完,因為家裡還有事情等著他們去做。
那時的我突然想到,我就是那種20多歲的員工啊,幾年後,我就不是了呀。這是不是意味著,幾年後,我就不如小年輕有競爭力了?這種拼體力的做法顯然不是長久之計。
會議有毒
世界上最可恨的打擾莫過於開會,原因如下……
我在騰訊和阿里待過,相信讀者中也有不少在騰訊和阿里待過,你一定會有一個感受:會議太多、太冗長了。
他們說程序員的出路是轉管理崗,而管理崗的工作大部分就是開會。我的天哪,把會議作為我的工作內容,我真是要死了。
另一半書 Remote 則是完全在介紹遠程工作的優缺點:
為何辦公室里無法辦公?
如果你問別人,必須把工作做完的時候會去哪兒,極少有人會說「辦公室」。就算真有人這樣說,他們也會補充一句,「我會一大早趕去,趁著人都沒來的時候幹活」,或是「等到大家都走了,我留下來工作到很晚」或者「周末時偷偷溜進去」。
他們其實是想說,在辦公室里沒法工作。當人們真心想把活兒做完的時候,工作時段里的辦公室是他們最不願去的地方。這是因為辦公室早已變成了「干擾工廠」。
同樣的觀點,Joel Spolsky 也說過,他在《Joel on Software》里說他認為每個程序員應該擁有一間私人辦公室,以防打擾。
Remote 還有一些犀利的觀點:
- 別再把人生耗費在通勤路上。
- 我在阿里的時候,上班要坐一個小時的班車,下班也是,再加上準備時間,我每天有 3 個小時浪費在通勤路上。
- 何必擠在大城市。
- 優秀的人不可能都住在一個城市。如果沒有遠程工作機會,很多人根本就不會對另一個城市的工作機會感興趣,北上廣深杭五個地區的程序員你司只能選擇一個,除非你司已經有能力在全國各地開分公司。
- 大公司都不這麼干,為什麼我們要這麼干?
- 從大型企業身上尋找最新的高效做法真的不明智。
關於遠程的理由我不再繼續列舉了,如果你有興趣,可以在多看上買這兩本書的電子版看看。
第一次遠程
上面說的都是國外的事情,中國真的有遠程工作的條件嗎?
我在第一個遠程工作之前,也有此疑慮。然而我在不知不覺中已經實現了遠程工作,連我自己都沒發現。
事情是這樣的,從騰訊離職後,我回到武漢光谷,在一個跨國的小團隊繼續做前端開發。當時跟我合作的是一個美國的 Python 後台開發小哥(下文中就叫他 S 吧),需求方在英國。
當時團隊有兩間辦公室,由於我不喜歡空調,所以我一個人跑到沒有空調的辦公室幹活了(這豈不就是傳說中的私人辦公室)。另外 S 在我入職一周後就飛回芝加哥了,從起就開啟了我的私人辦公室 + 遠程辦公模式。
當時我跟 時差大概 12 小時,我們需要在三個月完成一個複雜的類似 Photoshop 的在線廣告編輯器(但是功能沒有 PS 那麼多,只有圖層、縮放、裁剪等常見功能)。這段時期是我職業生涯中效率最高的一段時期。我倆用 Gtalk 溝通,需求文檔放在 Google Docs,每晚六點我會告訴他我完成了哪些功能,需要他提供哪些介面,然後下班回家。然後他幾小時後起床,看了我的郵件之後開始開發,他寫完代碼後發郵件告訴我,他完成了哪些功能,需要我調試哪些介面。
就這樣日復一日,沒有會議,沒有打擾,靜下心寫代碼的感覺真好。
從那時起我才知道,遠程開發離我並不遠。
第二次遠程
後來我去了阿里,從阿里出來之後,我決定只看遠程開發的團隊,當時我認為中國最吸引我的團隊就是彩程(出品過 http://Tower.im 和 http://Zhiren.com)。而且我已經提前一年就開始了解他們了。結果就是順利的加入了這個團隊。
期間面試、工作的體會後面會講到。
以上就是我關於遠程的經歷。
如果你也想成為遠程開發者可以看看我下面的分析。這個可能是大部分觀眾想聽的(我猜)。
如何成為遠程開發者
我主要從事 Web 開發,所以下面的分析主要是跟 Web 開發相關的。
大公司的分工
Turbolinks 5 的開發團隊在 Youtube 上發布過一個視頻,講的是 Web 架構的演化,很有意思,我在一年前對這個視頻進行了部分翻譯,取名為《Web 開發不應該這麼複雜》。
十年前 Web 開發就是簡單的 MVC,瀏覽器端就是一些簡單的 JS:
現在一個單頁面應用的架構是這樣的:
後端依然是 MVC,但是前端加了三部分:
- 一是前端 MVVM、單向數據流框架,這當然還要包含前端路由。
- 二是為了保證 SEO 和首屏渲染速度,添加了 Server 端的 JS Runtime,用來渲染 View。
- 三是為了獲取符合頁面要求的數據,在 Server 端 Model 與 Client 端 的 Model 中間加了一個中間層,比如 GraphQL。
這些變化的好壞暫且不評,但是它預示著大公司(Facebook、Google)的技術架構有了越來越多中間層。
康威定律說:軟體產品的結構就是其創造團隊的組織結構的鏡像。
這種變化反映出大公司的分工越來越細,Facebook、Google 開發團隊的組織結構就像是這樣:
這與上圖中的技術架構非常相似。
這說明大公司的分工越來越細。
- 分工細有什麼好處呢?——好招聘。找兩個分別會前後端的開發者,比找一個前後端都不錯的全棧開發,成本低多了。
- 分工細有什麼壞處呢?——增加了溝通成本。一個產品,要有五個角色參與:產品、設計、後端、前端、測試,這五個角色還有可能分屬不同的部門,因此每次溝通成本都挺高的。
就以前後端為例。中國 Web 開發從 AJAX 興起以來就掀起了一場「前後端分離」的運動。這場運動創造了一個前所未有的名詞:「前後端聯調」。
什麼是「前後端聯調」相比很多 Web 開發者都知道。那就是後端不好好寫單元測試與集成測試,讓前端發請求調用以達到測試的目的;前端不好好寫 Mock 和測試,讓後端輸出數據以達到測試的目的。
一般來說聯調都要耗費一天時間,我見過最坑爹的居然耗費了一周時間。
分工過細使得我們嚴重依賴「面對面溝通」,這就使得遠程開發變得不可能。
遠程團隊需要多面手
大部分人在嘗試遠程之前,最疑惑的就是大家怎麼溝通的?總覺得視頻會議不如面對面來得親切友好。
但是我實際體驗下來的感覺是相反的,遠程開發團隊的溝通可能更流暢一些。
正是由於知道溝通可能出現問題,所以團隊會用各種措施預防溝通不暢的發生。
溝通損耗是必然存在的,就算是面對面也不能避免。損耗一般存在於溝通中轉。產品經歷跟設計師溝通,設計師跟前端溝通,前端再跟後端溝通,中轉幾次,信息就面目全非了。
所以遠程團隊對開發者的要求一般都是老手、多面手。如果你觀察過國內遠程團隊對技術棧的選擇,會發現大部分都只招聘「全棧工程師」,比如 Rails 全棧或者 JS 全棧。只招前端或後端的也有,但大部分是外包。
我還記得彩程面試我的時候,雖然對我的定位是主前端的工程師,但是依然會問我關於需求分析、產品設計、後端開發、開源項目、畫圖軟體和自驅動力相關的問題。
因為遠程團隊希望把需求跟你講清楚之後,你一個人就能完成大部分分析、設計和開發工作(當然還會有一個人 review 你的所有工作)。
如果說給你個需求,你兩天還不動工,還說自己在「等設計稿、等介面」,那就沒法開發了。
這就是為什麼我說「在大公司呆久了,可能就沒法做遠程開發者了」。因為這兩種團隊對人才的需求完全不一樣。
我該如何準備
假設你現在很想加入一個遠程團隊,你需要做哪些準備呢?
1. 最重要的是培養自己的自律,或者是主觀能動性。
你需要讓這個團隊相信你很自律,或者主觀能動性很高。換句話說就是你不會在工作的時候渾水摸魚。
那麼如何做到這一點呢?那就是提供證據或者養成習慣,比如
- 你是某個開源項目的核心貢獻者之一,而且你是自發貢獻代碼的。
- 你堅持健身或跑步已經五年了。
- 你在公司里主導過一些項目的立項、開發和維護。
- 你用代碼解決了實際生活中的問題。
等等。只要能證明你不是一個混吃等死的碼農,而是一個有追求的程序員的事迹都可以說出來。
2. 盯住幾個遠程團隊
國內的遠程團隊並不多,我接觸過的有彩程、墨刀和 http://pubu.im,更多信息你可以到 這裡 以及遠程.work 查看。
我推薦你在每年的三四月份投遞簡歷,因為那個時候是崗位最多的。
你應該提前半年甚至一年就確定求職範圍和技術棧,然後針對性的做出一些作品或者 Demo。這樣你求職的時候不至於出現技術棧不符的情況。目前需求比較大的技術棧就是 Rails 和 JS。
遠程團隊招聘一般喜歡直接用一個實際需求來查看你的適應能力。比如讓你用一個周末解決一個小需求。
因為這樣能直接考察你獨立解決問題的能力。比如我當時被要求解決一個線上表格問題。給我一個周末的時間,讓我給出初步方案。
那我就得溝通需求、分析需求、畫出草圖、確認需求、理解現有技術架構,然後去實現它,中途有問題的話就主動溝通。
你會發現代碼能力其實可能只佔 50% 的比重,更多的是你的做事方式適合符合這個團隊。所以你預先了解團隊是很重要的。
3. 成為多面手,同時能獨當一面
所謂多面手不是說「樣樣精通」,而是你在技術上不「偏食」,也就是不會對某些技術產生抵觸情緒。
在一個遠程團隊中,你經常需要一個人解決問題,而解決這些問題用到的技術各種各樣。
在大公司里你是可以馬上讓身邊的同事支援,但是在遠程團隊,一些小事自己動手是最好的。你可能會說我不專業做得不好怎麼辦。沒事的,會有人 review 你的代碼的。
同時你也要 review 別人的代碼(這是一種程序員之間學習和交流的方式),所以你至少要能看懂別人的代碼,即使這種語言你用得不多。
同時,你還要能獨當一面。一個遠程團隊雖然都是全棧,但是有些人側重後端,有些人側重前端,還有些人是運維、DBA。你應該能在關鍵時候利用你的經驗獨當一面。
所以遠程團隊的招人標準有時候比 BAT 高很多。
在這裡我推薦你學習一下 Rails 這款經典的全棧 Web 開發框架。這個框架涉及 Web 開發的各個方面的最佳實踐,包括資料庫、系統部署、系統測試、後台開發、前端開發。
4. 表達與溝通
這一點是最難提升的。遠程團隊對成員的表達能力是要求更高的,因為需要你在視頻會議中讓每個人明白你在說什麼,也需要你弄清需求方的需求的明確含義。
提升這部分能力我的建議就是平時要寫作和演講。
把還就沒寫的博客撿起來,平時有心得就在例會上跟大家分享,都是不錯的方式。
日積月累,等你面試的時候,就能侃侃而談了。
5. 了解如何書寫更高質量的代碼
很多大公司其實並沒有嚴格實行單元測試、集成測試、代碼覆蓋率測試、代碼 review、持續集成、持續部署等最佳實踐。
但是遠程團隊一般不會有專職的測試,所以你的代碼質量是要你自己保證的。這些提高代碼質量的措施就顯得尤為重要了。
6. 以文檔為交流中心
以前我在工作的時候發現,公司里很多基礎框架和組件的文檔都特別爛(說得就是阿里),你如果要用一個同事寫的東西,你就得去他的工位上找他,面對面討教。
而當時我的工作就是提供框架和組件給我的 12 個後台開發同事。如果我繼續依賴這種面對面的溝通,我會忙死。
所以我就把所有的功能都在 gitlab 上以 README 的形式寫出來了,即使是坐在我左邊的人,要使用我的組件,我也是讓他先看文檔。這麼做之後,溝通更高效起來了。
我的建議是,你平時工作中,也多做一些「去依賴」的事情,這樣你在遠程與別人合作的時候,就更順暢。
遠程的優缺點
我已經連續遠程工作一年多了,說說優缺點吧。
優點
- 做事效率更高了。由於不用通勤,所以我一般去樓下吃完早餐就回到家裡的辦公桌前寫代碼了。一旦投入代碼,就會發現時間過得很快。更重要的是沒人打擾你(老婆去上班了)。
- 時間變多了依然是由於不用通勤,所以多出來了一些時間,當然這些時間也沒閑著,用來準備自己的飯菜了……
- 不用待在北上廣了目前我是在武漢買的房,北上廣的真買不起。
- 更多時間陪家人了雖然我工作的時候基本不跟家人說話,但是相伴左右也是一種安心呀。沒有了那種在外飄著的感覺。
說起來好像優點也不是很多呀……
缺點
- 加班並沒有減少由於生活和工作邊界的模糊,所以我時常忘了停止工作……大家知道 Deadline 臨近的時候,我們的寫代碼意願是很高的。所以我只好設置鬧鐘,強制自己不要工作太久。
- 疏離感有些人會因為太久待在家,而感覺與社會脫節了,有一種疏離感。我倒是沒有這種感覺。我一般都回去知乎或 V2EX 上吹水,好不快活。有些人為了消除這種疏離感,會故意去人多的咖啡館辦公。
- 收入變少如果你希望拿著跟 BAT 差不多的工資遠程辦公,可能國內還沒有團隊能滿足你。收入會有一定的減少。這就是你在決心找遠程工作前最需要考慮的問題了。不過這種問題可以通過降低生活成本(不是降低生活質量)來解決。就比如我從杭州搬回武漢,就省了每個月的房租了。
哪些人不適合遠程工作
- 自律能力差的人
- 技能單一的人
- 經驗不到兩三年的人
- 與人溝通不流暢的人
- 特別在乎大公司的高薪的人
一些鏈接
程序員客棧【程序員客棧-領先的程序員自由工作平台】
一早一晚社區【 http://yizaoyiwan.com/ 】
實現【 https://shixian.com/ 】
遠程工作【 http://yuancheng.work/remote-frontend-jobs 】
作者:方應杭
來源:掘金原文鏈接:如何成為一位遠程開發者 - 閱讀 - 掘金
推薦閱讀: