同樣是一樣的計算機專業畢業,進入職場的職位和工作都差不多,為何有些程式員短短幾年就成長為全能選手或領域專家,有些程式員還在做CRUD?
程式員的重複勞動陷阱
不知道大家有沒有這樣的感覺,每次加入一個新的公司/組,一開始總是要學這個學那個,可能會花很多時間看現有的代碼,然後花一些時間實作一點點小的功能,等到經過一段時間後,自己對工作越來越得心應手,提來的類似需求馬上就可以做,以做得多做得快為驕傲,覺的這樣可以更受老闆青睐,可以升職加薪。
我在畢業第三年的時候加入前公司,在加入公司的第一個季度,我主要再做一些邊緣工具以及了解系統,從第二個季度開始在組裡的核心業務上開發。當時自己為了能夠快速的出成果,會從組裡所有的任務裡挑看着比較容易實作的做,往往一天就可以做完一個或者兩個任務。做完一個任務後,發現backlog裡面有相似的任務,我也“趕緊”搶過來assign給自己,然後快速的做完,送出code review。從那個季度開始我每個季度做的工單越來越多,超過組裡的所有其他成員,自己也對自己的“高效”洋洋得意,覺的自己工作的非常充實,進步很大。
然而在這個過程中,我已經不知不覺得掉到“重複勞動”的陷阱中去了。
我們在寫代碼的時候,有一個原則交叫DRY(Don't Repeat Youself)原則,簡單通俗的說就是不要copy paste代碼,能抽象成函數的抽象成函數,能抽象成基類的抽象成基類。但是程式員的工作本身也應該遵循一樣的道理,那就是盡量不要做重複的工作。
重複勞動對程式員的危害
回到開篇的問題,同樣是一樣的計算機專業畢業,進入職場的職位和工作都差不多,為何有些程式員短短幾年就成長為全能選手或領域專家,有些程式員還在做CRUD?
大部分的技術學習曲線類似于上圖,經曆過短暫的入門期和相對長一些的積累期之後,可能大部分技術都會進入到高效期。在入門期和積累期的時候可能技能使用的效率會低一些,進入到高效期之後,随着技能使用的效率大大提高,工作所産生的“輸出”也越來越大。是以“高效期“給人以充實的假象。
一旦自己的某項技術進入到高效期,在此基礎上的提升會非常困難,可能之前工作三個月所掌握的新知識,比之後一年在工作中積累的要多。有時候我們看一個程式員工作了5年,但是他可能第一年學習并熟悉所用的技術,接下來4年都在做相同的工作,解決類似的需求,那麼他的5年工作經驗等于1年乘以5。
而有些程式員,他每工作一段時間之後,都會鑽研技術更深的部分,或者去學習新的技術,總是保持着在嘗試自己并不擅長的領域,那麼這樣的程式員,他的5年工作經驗會比前一種程式員要多。
如何擺脫重複勞動的循環
既然重複勞動的危害這麼大,那麼我們是否可以擺脫重複勞動的循環呢?
有的時候,程式員自己也不想老是重複的幹類似的東西,但是無奈被派發的任務重複的很多,似乎自己可以選擇的不多。
在我自己在第三年大量重複勞動之後,我的經理找到我談話,說我不應該這樣重複自己,同樣的事情做一兩次就好了,再重複的做對自己的幫助不大。我分享一下我是怎麼樣避免重複的勞動的:
- 找到Pattern,解決一類問題而不是一個問題。當你解決了N次類似的需求的時候,是否可以把這些問題抽象出來,是否可以去自動化的實作這類需求?改了N次bug之後,是否可以發現bug的規律,能夠開發出靜态分析工具來抓住這些bug?
- 嘗試用新的技術解決同樣的問題。有時當項目的實作并沒有多少規定的時候,我們可以在一定的***度下嘗試新的工具。今年年初的時候我去嘗試修改一個已有的内部工具前段,持着學習新技術的心理,我用Redux重新實作了前段,而不是在原有的jQuery的前段基礎上修改。
- 嘗試換崗。換崗位可以直接的讓你接受不同的項目,做一些不同的事情。我在上家公司的第一組待了近三年才換組,現在來看應該更早的時候嘗試不同的事情。換崗位也會帶來一些其他的問題,比如到新崗位之後可能會影響晉升速度,需要重建立立自己的權威等等。
- 換工作。換工作是一個終極大招,它會帶來很多其他的變化,不建議隻是為了脫離重複勞動而換工作。如果沒有養成良好的學習習慣,那麼換一份新工作之後也很有可能陷入到新的重複勞動的循環中。
重複勞動不可以完全避免
重複勞動是否可以完全避免呢?
我覺的是不可以避免的。以上的内容都是基于程式員成長的角度去分析問題,重複勞動是有害的。但是将程式員的勞動視為價值輸出的話,熟練的價值輸出确實也是程式員的價值之一,可以争取到更高的薪酬。
我們站在組織的角度上來看,重複的需求永遠存在,這些重複的需求需要被完成。如果在人員配置有限的情況下,不可避免的單個個體成員需要去進行一定的重複勞動。而由于時間上的緊迫性,可能必須要用高效粗暴的方法來實作。
如果你是公司的初創成員,需要在初期做大量的重複工作來從無到有的實作新的産品,那毫無疑問這是應該做的,因為這樣的重複勞動帶來的收益可能是巨大的。
希望大家在工作中都可以正确的認識到重複勞動的陷阱,讓自己能夠保持持久的成長。