
編程是枯燥的,除非……
作為一個開發(fā)者,我干同一份工作的時間不會超過兩年。
每一份新工作都是一次職業(yè)的飛躍,而且在我們這個行業(yè)中,高頻跳槽本來就很常見。但是我前任,前前任,前前前任,前前前…任雇主對于我的辭職并不開心。有些甚至試圖挽留我,但是我已經(jīng)厭倦了,我真心無法繼續(xù)留下來了。
(免責(zé)聲明:我很幸運(yùn)地生活在程序員供不應(yīng)求的地方,不過后來我發(fā)現(xiàn)換工作并不總是一個很好的選擇?。?。
我現(xiàn)在是Enki的聯(lián)合創(chuàng)始人和CTO。我負(fù)責(zé)工程文化。我的部分工作是要確保我們的開發(fā)人員永遠(yuǎn)不會像我過去那樣覺得工作無聊枯燥。
在我的團(tuán)隊的共同努力下,我們制定了防止程序員感到無聊枯燥的策略,并應(yīng)用到公司里。由于這一策略到目前為止一直運(yùn)作良好,所以在這里我想和大家一起分享。
在Enki公司,我們可以放肆地沖鋒具有挑戰(zhàn)性的問題。為很多有趣的事情寫代碼,解決大量有趣的謎題。因此,“無聊”并不是一個迫切的問題。甚至剛開始的時候,你完全找不到它的蹤跡。但是,隨著時間的流逝,無聊會像藤蔓一樣漸漸爬滿大樹,然后在最糟糕的時刻擊垮你。
這就是為什么我們要建立一種拯救無聊的文化來盡早解決這個問題的原因。
時間太長;學(xué)不到東西
開發(fā)人員感到無聊枯燥最常見和最明顯的原因是,項目的持續(xù)時間過長。
我在我第一份工作中就親身經(jīng)歷了這種體驗。我們團(tuán)隊的任務(wù)是通過一個便捷API來準(zhǔn)備和提供財務(wù)數(shù)據(jù)。一開始因為數(shù)據(jù)的復(fù)雜性和規(guī)模,令我非常興奮。同時我從中也學(xué)會了如何高性能地分析數(shù)據(jù)和API設(shè)計。但是一年以后,我們依然工作于完全相同的數(shù)據(jù)集,用著完全相同的技術(shù)。我只是成為了某個特定方面的“專才”,也沒有什么可以學(xué)習(xí)的新內(nèi)容。
我無法改變團(tuán)隊或項目,因為對于公司而言,這種重復(fù)性的枯燥的任務(wù)是有意義的。并且由于我熟知數(shù)據(jù)和技術(shù)而無法換到其他崗位。我沒有理由只是為了學(xué)習(xí)新的東西而去更換現(xiàn)有的技術(shù)。在我表明了我的枯燥和沮喪之后,因為問題依然沒有解決,所以我選擇了跳槽。
在我們的團(tuán)隊中,我們嘗試著不讓任何人從事相同的代碼、產(chǎn)品和數(shù)據(jù)集超過三個月。三個月的時間是我們?nèi)我舛ǖ?,或許對于規(guī)模較大的公司而言,顯得太短了點。但是我們主張快速轉(zhuǎn)換。
為了做到這一點,我們提出了一個全棧文化。我們每一個開發(fā)人員都能夠工作于(或者可以很快學(xué)會)代碼庫的任何部分。
另一個預(yù)防枯燥的方法是經(jīng)常性地討論。我們每個星期都有直接、開放、一對一的討論。如果開發(fā)人員開始覺得過于舒服或已經(jīng)熟能生巧了,那么就到了轉(zhuǎn)換工作的時候。
維護(hù)遺留代碼很無聊
當(dāng)項目處于維護(hù)模式,即開發(fā)人員90%的時間都花在了修復(fù)bug,而不是開發(fā)新功能的時候,你可以報告給我們——正式或非正式的方式都可。
有人會說,維護(hù)是不可避免的。舊代碼需要支持。建造軟件就像蓋房子。你需要維護(hù)的老房子,并時常翻新。是這樣的嗎?
是的,但又不是。問題的關(guān)鍵是態(tài)度。
我曾經(jīng)有一個導(dǎo)師,他對此抱著一種玩世不恭的心態(tài)。他將無為當(dāng)作理所當(dāng)然。他總是說,軟件開發(fā)工作就是這樣的;假如生活強(qiáng)奸了你,那就躺著享受吧。
維護(hù)模式有時是糟糕的技術(shù)決策加之缺乏勇氣才導(dǎo)致的結(jié)果。
大型,整體式的,依賴關(guān)系復(fù)雜的代碼庫往往需要額外的維護(hù)工作。與此相反的是,架構(gòu)良好的微服務(wù)基礎(chǔ)結(jié)構(gòu)就顯得較為靈活。當(dāng)微服務(wù)出現(xiàn)故障的時候,你可以更換它。你可以使用不同的語言或技術(shù)從頭開始重寫。這樣你就可以學(xué)到新的東西,而不是簡單地修補(bǔ)舊的代碼。如果你的架構(gòu)還不允許這么做,那么你需要采取步驟來改進(jìn)它,并在此過程中學(xué)習(xí)一些開發(fā)技能。
微服務(wù)策略只是解決“枯燥”維護(hù)問題的方法中的一個。還有一個措施是構(gòu)建智能工具,使維護(hù)變得更加高效和樂趣。這方面的一個極端例子就是,F(xiàn)acebook對他們那個龐大的PHP代碼庫做的事情。他們在熟練掌握PHP的基礎(chǔ)上構(gòu)建了自己的編譯器和自己的類型語言(Hack),既方便維護(hù),又提高了開發(fā)體驗。雖然我懷疑Facebook依然沒有完全“解決”遺留問題,但聽上去它讓工作變得更有趣了。
復(fù)制/粘貼很無聊
還有就是編碼,編碼,還是編碼。
在我以前的一些工作中,我寫了很多收效甚微的代碼。例如,我曾為了數(shù)據(jù)整合寫過Groovy和Python腳本。數(shù)據(jù)很復(fù)雜,有許多不一致的模式,這使得大多數(shù)地方無法做到自動化。因此,我不得不寫大量的代碼,而我的同事因此認(rèn)為我學(xué)到了很多東西。
但其實我并沒有學(xué)到很多。為什么?
因為50%(沒有計算過,純粹是夸張手法?。┑拇a是從Stack Overflow直接復(fù)制/粘貼來的。還有40%則復(fù)制/粘貼自其他腳本。無論是我同事的腳本,還是我的,都是如此。很多很多代碼都是重復(fù)性的。很少涉及創(chuàng)造和學(xué)習(xí)。
那么對此我們又是怎么做的呢?
作為一個團(tuán)隊,我們要關(guān)注其他人寫的代碼類型。我們會審查,同步和回顧代碼。如果發(fā)現(xiàn)有人一個星期都沒有生產(chǎn)創(chuàng)造性的代碼,那我們就會去查看原因。
有時,問題的根源在于技術(shù)。我們可能比我們應(yīng)該的做了更多的腳本和配置工作。在這種情況下,我們會增加自動化。不過,很多時候,是因為我們基于某種原因做了太多的復(fù)制/粘貼工作。在這種情況下,我們會共同承擔(dān)這個枯燥的工作以便于盡快完成。
內(nèi)部工具通常很沒意思
作為開發(fā)人員,我們希望創(chuàng)建定制的內(nèi)部工具來解決具體問題,因為創(chuàng)造新事物總是令人興奮不已。此外,打造定制的解決方案常常比重復(fù)利用現(xiàn)有的解決方案更清潔。但學(xué)習(xí)專有工具要比學(xué)習(xí)流行的開源技術(shù)無趣多了。
為什么?
因為你不能跟你的朋友交流專有工具;它成不了你吹噓的資本;你不能在Hacker News上看到它的身影;你不能在編程馬拉松中使用它;它在你秘密的業(yè)余項目中也毫無用武之地。
但是,很多企業(yè)陷入創(chuàng)造的陷阱——他們所創(chuàng)造的東西反而會帶來更多的煩惱。換句話說:他們解決了一個短期的挫折,從長期來看卻會導(dǎo)致更多的挫折。
我對此深有體會。在我曾經(jīng)的一份工作中,對于大規(guī)模數(shù)據(jù)集成,我被約束必須使用公司制造的DSL。在我看來,它就是另一種類似于SQL的術(shù)語(夸張手法)。我更喜歡使用和學(xué)習(xí)低級的開放式技術(shù),例如Spark。如果沒有這種限制的話,我的效率能高5倍都不止(請不要糾結(jié)這個數(shù)字,領(lǐng)會精神?。?
什么樣的文化可以預(yù)防這種情況呢?
我們應(yīng)該盡量偏向于開源技術(shù)。勇于面對最前沿的技術(shù)。毫不留情地拋棄自定義代碼,只要有開源技術(shù)成熟到足以取代這些自定義代碼。而當(dāng)我們自己編寫的代碼變得夠格通用的時候,開放源碼。
偶爾我們也會犯錯。例如,曾經(jīng)有一段時間我們使用agenda.js庫來安排我們的后端工作,因為它看上去既現(xiàn)代化又鼓舞人心。但是最后,它反而讓事情變復(fù)雜了,所以我們只能回頭用一個舊的更可靠的技術(shù)(略顯古老的cron?。?。盡管如此,我們也沒有后悔用它試驗,因為這是一個寶貴的學(xué)習(xí)經(jīng)驗。
做一只程序猿很無聊
令開發(fā)者無聊的另一個常見原因是糟糕的人力管理。更具體地講是從上而下,獨裁地管理開發(fā)人員。
自認(rèn)為目標(biāo)遠(yuǎn)大的主管有時候會使用這種管理風(fēng)格而不自知。特別是當(dāng)一個項目不會進(jìn)展良好,或截止期限將至的時候。在壓力的作用下,獨裁統(tǒng)治會成為一種自然反射——討論時“一言堂”,不接受集思廣益,沒有經(jīng)過辯證和解釋就直接告訴大家去做什么。目的就是為了節(jié)省時間,盡快完成工作。
不過很多被管理的員工也不一定會生氣:事實上,有些人還很享受直接被告知要做什么。當(dāng)然,告知的方式得合適。
不過,這里還有一個隱藏成本。
你在開發(fā)人員寫代碼之前就準(zhǔn)確告知了他們該如何編碼,將這個智力和創(chuàng)造性的過程變成了一個機(jī)械的過程:換句話說,就是將開發(fā)人員訓(xùn)練成了程序猿。
除非是黑客在攻克邊界情況,或是,程序需要做一個臨時補(bǔ)丁,否則參與的開發(fā)人員總是希望能了解“為什么”他們要采取這種做事方式而不是另一種。當(dāng)一個開發(fā)人員不再關(guān)心重大決策以及決策背后的原因的時候,也是他準(zhǔn)備換工作的時候。
如何避免這種情況?
鼓勵公開討論的文化。一個用于討論,制定戰(zhàn)略和計劃的定期論壇是一個團(tuán)隊所必須的。為了保持這樣的文化,每個團(tuán)隊成員都應(yīng)該保持警惕。
特別是當(dāng)舉步維艱的時期(或最后期限正在逼近的時候),學(xué)生需要說出他們的心聲,而導(dǎo)師需要仔細(xì)聆聽。
做一天和尚撞一天鐘很無聊
最后但并非最不重要的一個原因:一個封閉的環(huán)境中會成為樂趣的絕對殺手。
這在開發(fā)領(lǐng)域或高科技產(chǎn)業(yè)并不罕見。也適用于幾乎任何辦公室工作。每天都在同一間辦公室,面對同樣的人,沐浴同樣的文化,做同樣的工作……即使是在一個高速發(fā)展的環(huán)境下,即使所有情況客觀都是“好”的,大家也會對這些好的地方習(xí)以為常,然后開始對那些不那么好的部分悶悶不樂耿耿于懷。
那么我們該怎么戰(zhàn)勝它呢?
關(guān)鍵因素是多樣性:雇用不同背景和不同來源的人(例如目前我們團(tuán)隊的6個人就來自于英國,法國,俄羅斯和希臘4個不同國家)。如果團(tuán)隊中的每一個人都能會我們的文化帶來新鮮要素,那么即使每天面對同樣的人也會變得有趣,也會變得不那么難以忍受。
同時,我們努力創(chuàng)造走出去的機(jī)會。
比如,我們會去公共場合聚會,會一起去參加編程馬拉松。我們都有自己業(yè)余項目,并致力于最喜歡的開源工具。我們甚至?xí)r不時地會幫助其他團(tuán)隊承擔(dān)技術(shù)含量不那么高的工作(如招聘,營銷,分銷…)。不是因為我們擅長這些,而是為了能有一個變化。
我們還組織團(tuán)隊搞活動(例如Secret Cinema),每周舉辦一次不預(yù)定日程的“enkithon”活動。有時候,我們會一起過把黑客的癮。有時候,我們會頭腦風(fēng)暴一個新點子。有時候,我們會沉溺于玩英雄聯(lián)盟。甚至我們還一起去泡吧。不到最后一秒我們自己也不知道要去做什么,直到我們共同決定。
我們對抗無聊和枯燥的方法或許還不成熟,還有點混亂。但就像食譜一樣,每一份食譜都不能自稱是絕對完美的。調(diào)整用量,更換配料,反復(fù)練習(xí)才能精益求精。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03