如何讓你的程序員不要厭倦工作燃少? - 全棧開發(fā)者
http://www.admin10000.com/document/6870.html
作為一個(gè)程序員,我從來沒有在同一家公司工作超過兩年席里。每換一份新工作都是一次很好的職業(yè)變動(dòng)叔磷,在這個(gè)行業(yè)里跳槽如同家常便飯。但是我的前東家們對我的離去并不開心奖磁,他們其中一些人花了很大力氣想要挽留我改基,但是我已經(jīng)對一成不變的工作感到厭倦了,真的不想在同一家公司再待下去咖为。
★跽( 免責(zé)聲明:我很幸運(yùn)地生活在一個(gè)程序員工作崗位供大于求的地方,所以對我來說在換工作永遠(yuǎn)不止一個(gè)選擇案疲。)
如今我成為了 Enki 公司的合伙人與 CTO,同時(shí)我還要負(fù)責(zé)在公司里面打造工程師文化麻养。我工作內(nèi)容的一部分就是確保我們的程序員不要對工作感到厭倦褐啡,就像我過去那樣。
在團(tuán)隊(duì)的幫助下鳖昌,我們設(shè)計(jì)了一整套策略去幫助程序員們對抗工作中產(chǎn)生的厭煩情緒备畦,并將這些策略運(yùn)用到了公司的實(shí)踐當(dāng)中。距今為止這套方法還是挺管用的许昨,因此我想要和大家分享一下懂盐。
在 Enki 我們的程序員很幸運(yùn)地一直從事著具有挑戰(zhàn)性的工作。我們有很多有趣的事情需要去編碼糕档,還有大量有意思的問題亟待解決莉恼。因此如何解決「無聊」這件事情對我們來說并不很緊急。但是所有的工作都不會(huì)一開始就讓你感覺厭煩速那,無聊這種情緒是隨著時(shí)間推移蔓延開來的俐银,并且會(huì)在最糟糕的時(shí)刻爆發(fā)出來。
這就是為什么我們從公司成立之初就開始著手預(yù)防這類問題端仰,并依靠建立起一種企業(yè)文化去幫助我們的程序員克服工作中產(chǎn)生的無聊情緒(真心祈禱這套東西管用吧)捶惜。
下面就讓我們總結(jié)一下為什么程序員會(huì)感覺工作無聊,以及如何避免發(fā)生這些狀況吧荔烧。
1吱七、項(xiàng)目時(shí)間延續(xù)太長汽久,學(xué)不到新東西
引發(fā)程序員無聊情緒最常見也最明顯的原因就是一個(gè)開發(fā)項(xiàng)目拖得時(shí)間太長。
我在自己的第一份工作中就充分體驗(yàn)到了項(xiàng)目時(shí)間過長帶來的無聊感踊餐。我的團(tuán)隊(duì)要做的是通過一個(gè)通用 API 去處理金融數(shù)據(jù)景醇。一開始這項(xiàng)工作確實(shí)令人興奮,因?yàn)檫@些數(shù)據(jù)十分復(fù)雜且規(guī)模龐大市袖,很有挑戰(zhàn)性啡直。我從這項(xiàng)工作學(xué)習(xí)到了如何高效分析數(shù)據(jù)以及 API 接口設(shè)計(jì)。但是在一年之后苍碟,我們依然在針對相同的數(shù)據(jù)庫工作酒觅,使用的也是同樣的技術(shù)。我在這一針對性很強(qiáng)的領(lǐng)域已經(jīng)成為一個(gè)專家了微峰,在這項(xiàng)工作中再也沒有什么新東西可以讓我學(xué)習(xí)舷丹。
我不可能再去別的團(tuán)隊(duì)或者項(xiàng)目,因?yàn)楣靖杏X把我留在這個(gè)項(xiàng)目里才是最合適的蜓肆。我明白在這個(gè)項(xiàng)目中現(xiàn)有的數(shù)據(jù)與技術(shù)已經(jīng)用的太順手颜凯,所以不可能被替換。我無法說服公司僅僅為了讓項(xiàng)目組成員學(xué)習(xí)新知而改變原本使用的技術(shù)仗扬。我向公司表達(dá)了自己的這種厭倦情緒與沮喪心情症概,但是無濟(jì)于事,那么我只好換一份有奔頭的新工作了早芭。
如何阻止無聊情緒的產(chǎn)生彼城?
在我們的團(tuán)隊(duì)里會(huì)試著避免讓任何一個(gè)程序員接觸相同的代碼、產(chǎn)品或者數(shù)據(jù)庫超過三個(gè)月的時(shí)間退个。將時(shí)間設(shè)定為三個(gè)月也許比較武斷募壕,對于大公司來說這段時(shí)間可能也太短了。但是我們相信讓程序員在不同項(xiàng)目中快速輪轉(zhuǎn)是正確的语盈。
為了實(shí)現(xiàn)這一設(shè)計(jì)舱馅,我們在公司里提倡一種全棧文化,團(tuán)隊(duì)里的每一個(gè)程序員都能夠承擔(dān)任一部分的編碼工作(或者是能夠快速學(xué)會(huì)操作)刀荒。
預(yù)防無聊情緒滋生的另一個(gè)方法就是開誠布公地討論這個(gè)話題代嗤。我們每周都會(huì)進(jìn)行一次直接、開放的一對一談話缠借。如果一個(gè)程序員在工作中已經(jīng)感到太過舒服沒有挑戰(zhàn)资溃,或者是已經(jīng)在這一方面過于專精,那么就是時(shí)候讓他輪轉(zhuǎn)到另一個(gè)項(xiàng)目當(dāng)中去了烈炭。
2溶锭、維護(hù)代碼這種遺留問題讓人感覺太無聊
你能夠很清楚地分辨出何時(shí)項(xiàng)目就開始進(jìn)入了維護(hù)模式,不論是從正式的渠道還是別的途徑符隙,只要當(dāng)你的程序員花上了 90% 的時(shí)間去修補(bǔ) BUG 而不是開發(fā)新功能趴捅,那就代表著他們已經(jīng)進(jìn)入了代碼維護(hù)期垫毙。有人會(huì)說維護(hù)代碼是一項(xiàng)不可避免的工作,老舊的代碼需要不斷得到支持拱绑。開發(fā)軟件就像造房子综芥,你總是需要維護(hù)和翻新房子的,不是嗎猎拨?
既是膀藐,也不是。這項(xiàng)工作確實(shí)需要有人去做红省,但是問題通常會(huì)出在工作態(tài)度上额各。
我曾經(jīng)的一位職場前輩對于維護(hù)代碼具有強(qiáng)烈的抵觸情緒,他理所當(dāng)然地認(rèn)為維護(hù)代碼這種事情根本沒有什么好做的吧恃,軟件開發(fā)完畢之后就讓它們自己去運(yùn)行好了虾啦。生活簡直糟透了,你還不得不適應(yīng)它痕寓。
如何緩解這種抵觸情緒呢傲醉?
項(xiàng)目開發(fā)工作進(jìn)入無聊的維護(hù)模式有時(shí)候是由于糟糕的技術(shù)決策與缺乏勇氣的雙重作用。
一個(gè)擁有著復(fù)雜的依賴關(guān)系的龐大整體代碼庫需要額外的付出時(shí)間去做維護(hù)工作呻率,于此相反的是硬毕,一個(gè)架構(gòu)良好的微服務(wù)基礎(chǔ)設(shè)施擁有更強(qiáng)的靈活性。當(dāng)一個(gè)微服務(wù)架構(gòu)出現(xiàn)缺陷時(shí)礼仗,你可以立即采取措施去修復(fù)吐咳。你可以重新寫一遍代碼,使用不同的編程語言或技術(shù)藐守。通過這種方式挪丢,你會(huì)學(xué)習(xí)到新的東西而不是僅僅在遺留下來的代碼上修修補(bǔ)補(bǔ)蹂风。如果你的架構(gòu)不允許你重新來過卢厂,你還可以采取別的措施來改善,并且在這個(gè)過程中學(xué)到一些 DevOps 的技巧(譯者注:DevOps 就是開發(fā)(Development)和運(yùn)維(Operations)這兩個(gè)領(lǐng)域的合并惠啄,可將原本笨重的開發(fā)與運(yùn)維之間的工作移交過程變得流暢無礙)慎恒。
想要解決程序員在維護(hù)代碼中產(chǎn)生的無聊情緒有很多種方法可供選擇,公司采用微服務(wù)戰(zhàn)略只是其中一種可行方式撵渡。還有別的公司會(huì)通過打造智能工具去讓代碼維護(hù)工作變得更有效率也更有意思融柬。一個(gè)比較極端的例子就是 Facebook 對他們的海量 PHP 代碼庫所做的工作。Facebook 開發(fā)了他們自己的編譯器以及帶有 Facebook 風(fēng)格的語言(Hack)趋距,這使得他們的 PHP 代碼庫不僅便于維護(hù)粒氧,也改善了程序員的工作體驗(yàn)。我猜想這種方式并不能完全解決代碼維護(hù)的遺留問題节腐,但是它確實(shí)讓這個(gè)工作聽上去更有趣了外盯。
3摘盆、工作只剩下復(fù)制 / 粘貼這種小兒科的東西
程序員所做的工作就是不停寫代碼。
我在之前的工作崗位上曾經(jīng)產(chǎn)出了大量沒有什么意義的代碼饱苟。比如說我曾經(jīng)為數(shù)據(jù)集成而編寫了 Groovy 與 Python 腳本孩擂。這些數(shù)據(jù)相當(dāng)復(fù)雜,包含了許多不一致的數(shù)據(jù)庫對象集合箱熬,因此也不能夠自動(dòng)化運(yùn)行类垦。鑒于此我不得不編寫大量代碼,我的同事都猜想我肯定從中學(xué)習(xí)收獲了很多城须。
然而并沒有蚤认,為什么會(huì)這樣呢?
因?yàn)?50% 的代碼(這是夸張的描寫手法D鸢)是我直接從 Stack Overflow 復(fù)制粘貼過來的烙懦。還有 40% 的代碼是從其他腳本中復(fù)制過來的,有一些來自我同事的代碼赤炒,還有一些是我之前寫過的氯析。工作變成了一種重復(fù)勞動(dòng),其中沒有一點(diǎn)創(chuàng)造性與學(xué)習(xí)長進(jìn)可言莺褒。
我們?nèi)绾伪苊膺@種情況掩缓?
作為一個(gè)團(tuán)隊(duì),我們都會(huì)花時(shí)間去了解團(tuán)隊(duì)其他成員寫了哪些類型的代碼遵岩。我們在代碼審查你辣、同步以及工作回顧的時(shí)候去完成這件事情。如果一個(gè)人花了一星期時(shí)間卻只寫出了毫無創(chuàng)造性的代碼尘执,我們就會(huì)試圖去弄明白在他身上到底發(fā)生了什么舍哄。
有時(shí)候問題的根源來源于你所用的技術(shù)。我們可能使用了過多的腳本誊锭,或者是做了許多本不應(yīng)該做的配置工作表悬。如果是這種情況,我們就會(huì)添加更多的自動(dòng)化設(shè)置丧靡。有些時(shí)候我們進(jìn)行代碼的復(fù)制粘貼是事出有因的蟆沫,在這種情況下大家就會(huì)一起分擔(dān)這項(xiàng)不得不完成的無聊工作。
4温治、只能使用內(nèi)部工具也太沒勁了
作為一個(gè)程序員饭庞,我們喜歡打造一個(gè)自定義的內(nèi)部工具來解決某些特定問題,因?yàn)閯?dòng)手創(chuàng)造是一件令人興奮的事情熬荆。而且舟山,構(gòu)建一個(gè)定制化的解決方案通常要比找出一個(gè)現(xiàn)有的方案進(jìn)行再利用要好得多。
然而相比于學(xué)習(xí)一門時(shí)下流行的開源技術(shù),學(xué)習(xí)一個(gè)內(nèi)部專有工具的趣味性只有前者的十分之一累盗。 這到底是為什么呢六孵?
因?yàn)樗荒艹蔀槟愫团笥蚜奶鞎r(shí)的談資,你也不能到處吹噓幅骄,你不會(huì)在 Hacker News 上讀到關(guān)于它的新聞劫窒,你也不可以在編程馬拉松(hackathons)活動(dòng)中使用它,當(dāng)然了你也不能將其用到自己秘密開發(fā)的副業(yè)項(xiàng)目中拆座。
很多公司都跌入了打造內(nèi)部工具的陷阱當(dāng)中主巍,因?yàn)樗S之而來的就是給程序員帶來更多的無聊情緒。換句話說:你為了解決一個(gè)短期問題所開發(fā)的內(nèi)部工具反而帶來了更多后患無窮的長期問題挪凑。
在我的上一份工作中就對于這個(gè)問題有著切身體會(huì)孕索。我被限制只能使用公司自己開發(fā)的針對大規(guī)模數(shù)據(jù)集成的 DSL 語言,而我此前一直學(xué)習(xí)的完全是另一種 SQL 語言躏碳。我更希望能夠用上哪怕是 Spark 這樣開放程度沒那么高的語言搞旭。如果不使用內(nèi)部工具,我將會(huì) 10 倍投入工作菇绵,寫出的代碼也會(huì) 2 倍優(yōu)于現(xiàn)有的水平肄渗,還會(huì)讓我的生產(chǎn)力提高 5 倍(不要糾結(jié)于其中的倍數(shù)是否有數(shù)學(xué)邏輯,你只要體會(huì)我的心情就行了Rё睢)翎嫡。
什么樣的企業(yè)文化能夠避免這一困境?
在我們公司中不會(huì)對開源技術(shù)抱有偏見永乌。如果能夠重新利用相關(guān)開源技術(shù)惑申,我們當(dāng)然很樂意去做。我們不會(huì)回避前沿技術(shù)翅雏,一旦開源技術(shù)變得足夠成熟能夠取代我們現(xiàn)行的專用語言圈驼,我們就會(huì)立馬拋棄原有的定制化代碼投向開源技術(shù)的懷抱中。在我們自己開發(fā)的定制化代碼變得足夠通用之時(shí)望几,我們就會(huì)將其開源绩脆。
這么做也偶爾會(huì)犯錯(cuò)。比如說我們曾經(jīng)使用過一段時(shí)間 agenda.js 去安排我們的后端工作橄妆,因?yàn)楦杏X這種技術(shù)既尖端又令人興奮衙伶。但是不久之后它就變得太過復(fù)雜了祈坠,我們只好重新用回了之前老舊但是可靠性更高的技術(shù)害碾。即便如此,我們依然不后悔曾經(jīng)嘗試過赦拘,因?yàn)檫@也是一種寶貴的學(xué)習(xí)經(jīng)驗(yàn)慌随。
5、如果不知道自己為何寫代碼,必然厭倦工作
糟糕的人力管理也是造成程序員對工作心生厭倦的常見原因阁猜。更具體地說就是:針對程序員的自上而下的獨(dú)裁式管理會(huì)讓他們產(chǎn)生抵觸情緒丸逸。
心懷良好意圖的管理者經(jīng)常在不知不覺中就使用了這種獨(dú)裁式工作方法。尤其在一個(gè)開發(fā)項(xiàng)目進(jìn)行的不是那么順利或者是截止日期臨近之時(shí)剃袍,這種管理方法就更為常見了黄刚。在巨大的項(xiàng)目壓力下,管理者很自然地就會(huì)縮短團(tuán)隊(duì)討論時(shí)間民效,減少頭腦風(fēng)暴憔维,直接命令程序員去寫代碼,卻不解釋為何這么做畏邢,也不接受任何爭辯业扒。而管理者通常這么做的出發(fā)點(diǎn)就是想要節(jié)省時(shí)間,盡快完成工作舒萎。
如果這種管理方法能夠被理解程储,也不是每一次都會(huì)招致厭煩;事實(shí)上臂寝,有一些人還挺能接受你簡單直接地告訴他應(yīng)該做什么章鲤。當(dāng)然了,這也是建立在你的說話語氣是能被對方接受的基礎(chǔ)上咆贬。
使用這種獨(dú)裁式管理方法也有隱藏的成本咏窿。通常程序員在明確知道寫什么代碼之前,需要有一個(gè)將智力與創(chuàng)造性進(jìn)行轉(zhuǎn)換的固有思考過程素征。換句話說集嵌,如果你不讓他想明白其中的關(guān)鍵,只是一味地命令他去編碼御毅,他就會(huì)變成一只會(huì)寫代碼不會(huì)思考的猿猴根欧。
更重要的是,你應(yīng)該鼓勵(lì)程序員去追問「為什么」端蛆,這樣他們能夠更加投入到自己所做的工作中去凤粗。除非你們現(xiàn)在所做的是一個(gè)劍走偏鋒的極端玩意,或者是一個(gè)臨時(shí)補(bǔ)丁今豆,不然的話都應(yīng)該和程序員交代清楚嫌拣。如果一個(gè)程序員不再關(guān)心與項(xiàng)目有關(guān)的重要決定,也不再思考這些決定背后的邏輯呆躲,那么他應(yīng)該是已經(jīng)準(zhǔn)備跳槽了异逐。
如何防范這一問題?
想要解決這一問題最需要的就是在企業(yè)文化中建立起公開討論問題的機(jī)制插掂。要留出固定的討論時(shí)間灰瞻,讓整個(gè)團(tuán)隊(duì)都參與討論接下來該做些什么腥例、如何計(jì)劃。想要保持這種開放討論的企業(yè)文化酝润,每個(gè)人都要對獨(dú)裁式的管理方式保持警覺燎竖。
尤其是在團(tuán)隊(duì)遭遇困難的時(shí)刻(或者是截止日期臨近的時(shí)候),團(tuán)隊(duì)成員需要更大聲地表達(dá)出自己的意見要销,而管理者則更需要小心謹(jǐn)慎地聆聽大家的心聲构回。
6、日復(fù)一日的工作總會(huì)不可避免地走向無聊
還有一點(diǎn)不得不提的是:在一個(gè)封閉的工作環(huán)境里長時(shí)間工作絕對會(huì)扼殺人感知生活的樂趣疏咐。這一點(diǎn)不僅僅是針對科技行業(yè)工作者或者是程序員崗位捐凭,放諸于其他行業(yè)也是一樣的。這一條幾乎適用于任何一個(gè)后臺操作崗位凳鬓,每一天在相同的辦公室里茁肠,見著同樣一幫人,做著一成不變的工作缩举,也沒有什么不同文化的碰撞垦梆。即便是在一個(gè)快速增長的企業(yè)環(huán)境中,縱然所有的事情從客觀角度看都在「良好」運(yùn)行著仅孩,人們也會(huì)感覺自己有資格去尋找一些樂趣托猩,并且會(huì)從不那么好的事情中感到沮喪。
如何與日常工作中滋生的無聊情緒做斗爭辽慕?
解決這一問題的關(guān)鍵就是盡力創(chuàng)造多樣化:招聘擁有不同背景以及來自不同國家的員工(比如我們的團(tuán)隊(duì)現(xiàn)有的 6 個(gè)成員就分別來自英國京腥、法國、俄羅斯和希臘)溅蛉。如果你每天看到的同樣一幫人能夠給你帶來不同文化的沖擊公浪,那么上班這件事肯定會(huì)更有趣一些。
同時(shí)船侧,我們會(huì)積極地創(chuàng)造一些走出常規(guī)工作環(huán)境的機(jī)會(huì)欠气。
例如我們會(huì)一起去參加一些行業(yè)聚會(huì)以及編程馬拉松活動(dòng)。我們還會(huì)一起打造工作之外的副業(yè)镜撩,共同研究我們喜歡的開源工具预柒。除此之外我們還會(huì)不時(shí)地幫助其他團(tuán)隊(duì)完成一些不那么技術(shù)性的工作(包括招聘、市場和分銷)袁梗。這么做并非因?yàn)槲覀兌忌瞄L這些工作宜鸯,只是為了在日常工作中尋求改變。
我們還會(huì)組織一些團(tuán)隊(duì)活動(dòng)(比如一起看一場秘密電影)遮怜,我們每周還有一個(gè)固定的不需要事先預(yù)設(shè)主題的團(tuán)隊(duì)活動(dòng)時(shí)間淋袖。在這個(gè)自主活動(dòng)時(shí)間里,有時(shí)候我們會(huì)一起專研技術(shù)奈泪,有時(shí)候會(huì)頭腦風(fēng)暴出一個(gè)新點(diǎn)子适贸,有時(shí)候僅僅是聚在一起玩 LOL,或者是約好一同去泡吧涝桅。這個(gè)自由活動(dòng)的美好之處就在于當(dāng)我們坐下來討論該該去玩啥的時(shí)候拜姿,不到最后一分鐘根本就不知道要去干什么。
給生活增添這一小小的未知數(shù)成為了我們對抗無聊的終極一招冯遂。就像其他對抗無聊的方法一樣蕊肥,這也不會(huì)是非常完美的解決之道。我們要做的就是在原有基礎(chǔ)上不斷調(diào)整蛤肌,找出一些新招數(shù)壁却,并且將其不斷地運(yùn)用到對抗無聊的戰(zhàn)斗中。
來源:Medium裸准,由 TECH2IPO翻譯