編程是無聊的,除非……

編程是無聊的,除非……

作為一個開發者,我幹同一份工作的時間不會超過兩年。每一份新工作都是一次職業的飛躍,而且在我們這個行業中,高頻跳槽本來就很常見。

我現在是Enki的聯合創始人和CTO。我負責工程文化。我的部分工作是要確保我們的開發人員永遠不會像我過去那樣覺得工作無聊枯燥。

在我的團隊的共同努力下,我們制定了防止程序員感到無聊枯燥的策略,並應用到公司裡。由於這一策略到目前為止一直運作良好,所以在這裡我想和大家一起分享。

時間太長;學不到東西

開發人員感到無聊枯燥最常見和最明顯的原因是,項目的持續時間過長。

我在我第一份工作中就親身經歷了這種體驗。我無法改變團隊或項目,因為對於公司而言,這種重複性的枯燥的任務是有意義的。並且由於我熟知數據和技術而無法換到其他崗位。我沒有理由只是為了學習新的東西而去更換現有的技術。在我表明了我的枯燥和沮喪之後,因為問題依然沒有解決,所以我選擇了跳槽。

編程是無聊的,除非……

如何預防無聊和枯燥感?

在我們的團隊中,我們嘗試著不讓任何人從事相同的代碼、產品和數據集超過三個月。三個月的時間是我們任意定的,或許對於規模較大的公司而言,顯得太短了點。但是我們主張快速轉換。

為了做到這一點,我們提出了一個全棧文化。我們每一個開發人員都能夠工作於(或者可以很快學會)代碼庫的任何部分。

另一個預防枯燥的方法是經常性地討論。我們每個星期都有直接、開放、一對一的討論。如果開發人員開始覺得過於舒服或已經熟能生巧了,那麼就到了轉換工作的時候。

維護遺留代碼很無聊

當項目處於維護模式,即開發人員90%的時間都花在了修復bug,而不是開發新功能的時候,你可以報告給我們——正式或非正式的方式都可。

有人會說,維護是不可避免的。舊代碼需要支持。建造軟件就像蓋房子。你需要維護的老房子,並時常翻新。是這樣的嗎?

是的,但又不是。問題的關鍵是態度。

我曾經有一個導師,他對此抱著一種玩世不恭的心態。他將無為當作理所當然。他總是說,軟件開發工作就是這樣的;假如生活強姦了你,那就躺著享受吧。

如何避免呢?

維護模式有時是糟糕的技術決策加之缺乏勇氣才導致的結果。

大型,整體式的,依賴關係複雜的代碼庫往往需要額外的維護工作。與此相反的是,架構良好的微服務基礎結構就顯得較為靈活。當微服務出現故障的時候,你可以更換它。你可以使用不同的語言或技術從頭開始重寫。這樣你就可以學到新的東西,而不是簡單地修補舊的代碼。如果你的架構還不允許這麼做,那麼你需要採取步驟來改進它,並在此過程中學習一些開發技能。

微服務策略只是解決“枯燥”維護問題的方法中的一個。還有一個措施是構建智能工具,使維護變得更加高效和樂趣。這方面的一個極端例子就是,Facebook對他們那個龐大的PHP代碼庫做的事情。他們在熟練掌握PHP的基礎上構建了自己的編譯器和自己的類型語言(Hack),既方便維護,又提高了開發體驗。雖然我懷疑Facebook依然沒有完全“解決”遺留問題,但聽上去它讓工作變得更有趣了。

複製/粘貼很無聊

還有就是編碼,編碼,還是編碼。

在我以前的一些工作中,我寫了很多收效甚微的代碼。例如,我曾為了數據整合寫過Groovy和Python腳本。數據很複雜,有許多不一致的模式,這使得大多數地方無法做到自動化。因此,我不得不寫大量的代碼,而我的同事因此認為我學到了很多東西。

但其實我並沒有學到很多。為什麼?

因為50%(沒有計算過,純粹是誇張手法!)的代碼是從Stack Overflow直接複製/粘貼來的。還有40%則複製/粘貼自其他腳本。無論是我同事的腳本,還是我的,都是如此。很多很多代碼都是重複性的。很少涉及創造和學習。

那麼對此我們又是怎麼做的呢?

作為一個團隊,我們要關注其他人寫的代碼類型。我們會審查,同步和回顧代碼。如果發現有人一個星期都沒有生產創造性的代碼,那我們就會去查看原因。

編程是無聊的,除非……

有時,問題的根源在於技術。我們可能比我們應該的做了更多的腳本和配置工作。在這種情況下,我們會增加自動化。不過,很多時候,是因為我們基於某種原因做了太多的複製/粘貼工作。在這種情況下,我們會共同承擔這個枯燥的工作以便於儘快完成。

做一天和尚撞一天鐘很無聊

最後但並非最不重要的一個原因:一個封閉的環境中會成為樂趣的絕對殺手。

這在開發領域或高科技產業並不罕見。也適用於幾乎任何辦公室工作。每天都在同一間辦公室,面對同樣的人,沐浴同樣的文化,做同樣的工作……即使是在一個高速發展的環境下,即使所有情況客觀都是“好”的,大家也會對這些好的地方習以為常,然後開始對那些不那麼好的部分悶悶不樂耿耿於懷。

那麼我們該怎麼戰勝它呢?

關鍵因素是多樣性:僱用不同背景和不同來源的人(例如目前我們團隊的6個人就來自於英國,法國,俄羅斯和希臘4個不同國家)。如果團隊中的每一個人都能會我們的文化帶來新鮮要素,那麼即使每天面對同樣的人也會變得有趣,也會變得不那麼難以忍受。

同時,我們努力創造走出去的機會。

比如,我們會去公共場合聚會,會一起去參加編程馬拉松。我們都有自己業餘項目,並致力於最喜歡的開源工具。我們甚至時不時地會幫助其他團隊承擔技術含量不那麼高的工作(如招聘,營銷,分銷…)。不是因為我們擅長這些,而是為了能有一個變化。

我們還組織團隊搞活動(如Secret Cinema),每週舉辦一次不預定日程的enkithon”活動。有時候,我們會一起過把黑客的癮。有時候,我們會頭腦風暴一個新點子。有時候,我們會沉溺於玩英雄聯盟。甚至我們還一起去泡吧。不到最後一秒我們自己也不知道要去做什麼,直到我們共同決定。

我們對抗無聊和枯燥的方法或許還不成熟,還有點混亂。但就像食譜一樣,每一份食譜都不能自稱是絕對完美的。調整用量,更換配料,反覆練習才能精益求精。

英文原文:Coding is boring, unless…


分享到:


相關文章: