如何成為一位遠程開發者

來自專欄自由工作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,每晚六點我會告訴他我完成了哪些功能,需要他提供哪些介面,然後下班回家。然後他幾小時後起床,看了我的郵件之後開始開發,他寫完代碼後發郵件告訴我,他完成了哪些功能,需要我調試哪些介面。

就這樣日復一日,沒有會議,沒有打擾,靜下心寫代碼的感覺真好。

從那時起我才知道,遠程開發離我並不遠。

第二次遠程

後來我去了阿里,從阿里出來之後,我決定只看遠程開發的團隊,當時我認為中國最吸引我的團隊就是彩程(出品過 Tower.imZhiren.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. 最重要的是培養自己的自律,或者是主觀能動性。

你需要讓這個團隊相信你很自律,或者主觀能動性很高。換句話說就是你不會在工作的時候渾水摸魚。

那麼如何做到這一點呢?那就是提供證據或者養成習慣,比如

  1. 你是某個開源項目的核心貢獻者之一,而且你是自發貢獻代碼的。
  2. 你堅持健身或跑步已經五年了。
  3. 你在公司里主導過一些項目的立項、開發和維護。
  4. 你用代碼解決了實際生活中的問題。

等等。只要能證明你不是一個混吃等死的碼農,而是一個有追求的程序員的事迹都可以說出來。

2. 盯住幾個遠程團隊

國內的遠程團隊並不多,我接觸過的有彩程、墨刀和 pubu.im,更多信息你可以到 這裡 以及遠程.work 查看。

我推薦你在每年的三四月份投遞簡歷,因為那個時候是崗位最多的。

你應該提前半年甚至一年就確定求職範圍和技術棧,然後針對性的做出一些作品或者 Demo。這樣你求職的時候不至於出現技術棧不符的情況。目前需求比較大的技術棧就是 Rails 和 JS。

遠程團隊招聘一般喜歡直接用一個實際需求來查看你的適應能力。比如讓你用一個周末解決一個小需求。

因為這樣能直接考察你獨立解決問題的能力。比如我當時被要求解決一個線上表格問題。給我一個周末的時間,讓我給出初步方案。

那我就得溝通需求、分析需求、畫出草圖、確認需求、理解現有技術架構,然後去實現它,中途有問題的話就主動溝通。

你會發現代碼能力其實可能只佔 50% 的比重,更多的是你的做事方式適合符合這個團隊。所以你預先了解團隊是很重要的。

3. 成為多面手,同時能獨當一面

所謂多面手不是說「樣樣精通」,而是你在技術上不「偏食」,也就是不會對某些技術產生抵觸情緒。

在一個遠程團隊中,你經常需要一個人解決問題,而解決這些問題用到的技術各種各樣。

在大公司里你是可以馬上讓身邊的同事支援,但是在遠程團隊,一些小事自己動手是最好的。你可能會說我不專業做得不好怎麼辦。沒事的,會有人 review 你的代碼的。

同時你也要 review 別人的代碼(這是一種程序員之間學習和交流的方式),所以你至少要能看懂別人的代碼,即使這種語言你用得不多。

同時,你還要能獨當一面。一個遠程團隊雖然都是全棧,但是有些人側重後端,有些人側重前端,還有些人是運維、DBA。你應該能在關鍵時候利用你的經驗獨當一面。

所以遠程團隊的招人標準有時候比 BAT 高很多。

在這裡我推薦你學習一下 Rails 這款經典的全棧 Web 開發框架。這個框架涉及 Web 開發的各個方面的最佳實踐,包括資料庫、系統部署、系統測試、後台開發、前端開發。

4. 表達與溝通

這一點是最難提升的。遠程團隊對成員的表達能力是要求更高的,因為需要你在視頻會議中讓每個人明白你在說什麼,也需要你弄清需求方的需求的明確含義。

提升這部分能力我的建議就是平時要寫作和演講。

把還就沒寫的博客撿起來,平時有心得就在例會上跟大家分享,都是不錯的方式。

日積月累,等你面試的時候,就能侃侃而談了。

5. 了解如何書寫更高質量的代碼

很多大公司其實並沒有嚴格實行單元測試、集成測試、代碼覆蓋率測試、代碼 review、持續集成、持續部署等最佳實踐。

但是遠程團隊一般不會有專職的測試,所以你的代碼質量是要你自己保證的。這些提高代碼質量的措施就顯得尤為重要了。

6. 以文檔為交流中心

以前我在工作的時候發現,公司里很多基礎框架和組件的文檔都特別爛(說得就是阿里),你如果要用一個同事寫的東西,你就得去他的工位上找他,面對面討教。

而當時我的工作就是提供框架和組件給我的 12 個後台開發同事。如果我繼續依賴這種面對面的溝通,我會忙死。

所以我就把所有的功能都在 gitlab 上以 README 的形式寫出來了,即使是坐在我左邊的人,要使用我的組件,我也是讓他先看文檔。這麼做之後,溝通更高效起來了。

我的建議是,你平時工作中,也多做一些「去依賴」的事情,這樣你在遠程與別人合作的時候,就更順暢。

遠程的優缺點

我已經連續遠程工作一年多了,說說優缺點吧。

優點

  1. 做事效率更高了。由於不用通勤,所以我一般去樓下吃完早餐就回到家裡的辦公桌前寫代碼了。一旦投入代碼,就會發現時間過得很快。更重要的是沒人打擾你(老婆去上班了)。
  2. 時間變多了依然是由於不用通勤,所以多出來了一些時間,當然這些時間也沒閑著,用來準備自己的飯菜了……
  3. 不用待在北上廣了目前我是在武漢買的房,北上廣的真買不起。
  4. 更多時間陪家人了雖然我工作的時候基本不跟家人說話,但是相伴左右也是一種安心呀。沒有了那種在外飄著的感覺。

說起來好像優點也不是很多呀……

缺點

  1. 加班並沒有減少由於生活和工作邊界的模糊,所以我時常忘了停止工作……大家知道 Deadline 臨近的時候,我們的寫代碼意願是很高的。所以我只好設置鬧鐘,強制自己不要工作太久。
  2. 疏離感有些人會因為太久待在家,而感覺與社會脫節了,有一種疏離感。我倒是沒有這種感覺。我一般都回去知乎或 V2EX 上吹水,好不快活。有些人為了消除這種疏離感,會故意去人多的咖啡館辦公。
  3. 收入變少如果你希望拿著跟 BAT 差不多的工資遠程辦公,可能國內還沒有團隊能滿足你。收入會有一定的減少。這就是你在決心找遠程工作前最需要考慮的問題了。不過這種問題可以通過降低生活成本(不是降低生活質量)來解決。就比如我從杭州搬回武漢,就省了每個月的房租了。

哪些人不適合遠程工作

  1. 自律能力差的人
  2. 技能單一的人
  3. 經驗不到兩三年的人
  4. 與人溝通不流暢的人
  5. 特別在乎大公司的高薪的人

一些鏈接

程序員客棧【程序員客棧-領先的程序員自由工作平台】

一早一晚社區【 yizaoyiwan.com/

實現【 shixian.com/

遠程工作【 yuancheng.work/remote-f

作者:方應杭

來源:掘金原文鏈接:如何成為一位遠程開發者 - 閱讀 - 掘金

推薦閱讀:

相关文章