[隨筆] Developer 自我養成之路

在軟體開發這一條路上,developer 可以從哪幾個方向去累積自己成長的能量,怎麼樣可以避免自己見樹不見林。

這篇文章分享我個人的一些經驗,希望能對茫然的開發人員們,提出多一點的角度供大家參考。

前言

最近上下班在捷運上通勤的時間很長,剛好看到對岸社群的一篇文章:「小王的架构师之路

基本上我挺不喜歡這種浮濫的標題,但內容卻是挺剛好地描述了我最近這一兩個月,常跟一些公司的主管,以及 junior developer 回答跟分享的主題相關:「Developer 該怎麼走出跟一般人不一樣的成長之路」 

請原諒我用如此模糊冗贅的描述,一時間找不太到好的形容詞

看著這篇文章的描述,就跟自己在軟體開發職涯一路走來的感覺有點像。

究竟要走上這樣一條路,是靠天分、特質還是努力,還是都要有,我也說不上來。但我很肯定的是,文中提到的幾個重點我很認同,因為這幾乎是成長必備的要點。

關鍵點

不要不求甚解

當你站在巨人的肩膀上解決了你眼前的難題或需求,試著培養興趣,試著找回你那個 developer 的好奇心,那怕你只是試著去瞭解,但最後看不懂而停止,你還是養成了自己的這個思考習慣,這個思考習慣是你開始學習的「火種」,相當重要。

若想要瞭解問題原因,設計的思路,這會很自然地強迫你思考,強迫你去看別人寫的程式碼,強迫你學習好的跟避開不好的寫法。

你會碰到的問題,大家也會碰到

這通常代表著兩件事:

  1. 第一,你碰到的問題,如果這個世界上別人也會碰到,那麼別人是怎麼解決的。在這之前,你可以思考一下你想怎麼解決,然後跟別人的作法比較一下,自然就會走到上述「不要不求甚解」的段落。
  2. 第二,如果這個問題大家都會碰到,也沒有什麼好的方式可以解決(至少你得已經有能力判斷什麼叫好的方式)。當你覺得麻煩、慢、笨、難用,那這就是創造價值之所在。盡你所能去解決這樣的問題,你就是第一個受益者,因為你獲得了快樂、能力、經驗還有生產力。而且,把這分享出去,幫助他人解決問題,你的價值就不只是一個人的價值,而是團隊、社群、全球的價值。

找到你有興趣的領域,用最舒服的方式學習

在我剛踏進這一行沒多久時,我寫了一篇文章來描述我找到的學習方式,請見:[工作心得]面對學習未知技術的恐懼

我知道當時的文章排版得相當醜陋,2009年當時對設計還沒有觀念,加上 blog 系統改版,之前的文章 layout 就還沒時間調整。

 對我來說,最舒服的學習方式,就是沒有壓力的學習。什麼叫有壓力,什麼叫做沒壓力。當你有時程壓力,就是最常見的一種壓力。

所以,我在發生問題之前學習,我平時的消遣就是看看自己有興趣的領域,有哪些文章很有品質的作者發表了哪些資訊,去瞭解這些資訊要解決的問題跟需求是什麼。很多時候,你得透過這方式才知道,原來還存在著這樣的需求。沒有經過這一段,很可能會讓自己還是停留在 Don’t know don’t know 的階段。

引述電影《神鬼交鋒》(Catch Me If You Can)的一段台詞:

Carl Hanratty: I'm going to let you fly tonight, Frank. I'm not even going to try to stop you. That's because I know you'll be back on Monday.

Frank Abagnale, Jr.: Yeah? How do you know I'll come back?

Carl Hanratty: Frank, look. Nobody's chasing you.

當你沒有壓力時,你可以很自在地學習,這會幫助你找到你有興趣的領域,或是幫助你在有興趣的領域中,更深入的學習。那怕你正努力看的東西對現在的你來說可能相當難以理解,但這段時間跟投入,絕對不會浪費。原因有二:

第一,就像 Steve Jobs 的一段話 

You can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future.

你現在學習的每個片段知識你得相信在未來適當的時機,他們就會串連起來發揮作用。

如果你的片段越多,連起來的機率就越大。所以學習曲線一直以來都不是線性的,而是當你學得越多,接著你就學得越輕鬆。只是大部分的人都跨不過去一開始的那一道障礙。 

第二,如果這個東西這麼難懂,那麼對很多人來說,是一樣難懂的。你已經花了一段時間跟心力,去發現「它很難懂」。而別人連這段時間都還沒有投入,當未來在實務上真的發生這樣的問題或需求時,你需要暖機的時間就比別人少一點

因此,當你在發生問題之前學習,而其他人在發生問題時才學習,對你來說這根本不是問題,對他來說是沒碰過的問題。自然對旁人或你的老闆來說,就會覺得你是有 talent, potentiality 的員工。

如果在發生問題時才學習,也就是我們常見的 SOD (stack overflow developer),在時程的壓力下,肯定是先求解決問題,而不是深入了解。即使你有興趣,你也沒時間再往深一點挖。所以他們常在發生問題時,上網找相當多相關的解決方式,接著沒有時間思考地 trial and error,哪一個範例貼上去會動,用它就對了。

所以他們總是不求甚解,解決方式往往也是迂迴、湊巧、瞎貓碰上死耗子的作法,進而欠下一屁股技術債。然後,後續的職涯人生再繼續為了還技術債而墮入無間地獄。

所以,看出來了嗎?在問題需求發生之前學習,是正向循環,你在實務上會獲得許多盈餘的紅利時間來做更多正向循環的事。你沒有壓力、快樂、有價值、有成就感、獲得知識、養成習慣。

如果是負向循環,就會永遠處於時程壓力、技術債、不求甚解、怨天尤人的情況。

找到自己有興趣的領域,也相當重要。原因是學習需要花費相當多時間與心力,才能獲得效果。就像李小龍說的:「你要怕的不是會一萬種踢腿的人,而是把一種踢腿練習一萬次的人。」一旦你找到你有興趣的領域,那你的學習就是輕鬆快樂的,你很容易就會進入心流狀態(flow),時間花在哪,成就就在哪。如果一樣得花那麼多的時間,才有機會達成成就,那麼興趣才是你持續下去的養分跟動力。否則投資還沒獲得成果,你大概就已經逼死自己了。

走出井外,看看外面的天空有多遼闊

引述自 Lee Ruddy 老師書上的名言:

在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。

和什麼樣的人在一起,就會有什麼樣的人生。

和勤奮的人在一起,你不會懶惰;

和積極的人在一起,你不會消沈;

與智者同行,你會不同凡響;

與高人為伍,你能登上巔峰。

很多 junior developer 進入職場後,以為公司內的作法就是全世界的作法,以為這樣做是正常的,以為只能這樣做,更甚養成了一些詭異的價值觀跟不好的習慣而不自知,再糟糕一點,當他們變成 senior developer 或是 leader 或是主管時,以同樣的方式去影響未來的 junior developer。

就像之前有人提到的死海效應

公司发展到一定阶段,能力强的员工容易离职,因为他们对公司内愚蠢的行为的容忍度不高,他们也容易找到好工作;

能力差的员工倾向于留着不走,他们也不太好找工作,年头久了,他们就变中高层了。这种现象叫做死海效应:

好员工像死海的水一样蒸发掉,然后死海盐度就变得很高,正常生物不容易存活。

這並不全然是 junior developer 的責任,但要走出這條死胡同,junior developer 就是得有這一份認知,走出公司以外,拓展自己的視野,尋找公司外志同道合的伙伴,你才能瞭解、分辨什麼樣的作法是好的,聰明的,適合的。

而且,學習這條路相當漫長,有同 tone 調,有可以一起互相打氣、學習、互補、依靠的伙伴,相當重要。而這一些伙伴通常都在公司外部,或許某部分原因是,因為這樣你們才不會有工作上業務的交集或利害關係。當觸角延伸到公司以外的地方,視野拓展到公司以外的地方,你的職涯跟人生會多出很多 event 的發生,就跟玩 RPG game 一樣,你得有 event 才能獲得伙伴、裝備、升等、增加 skill 技能數值的機會。

這會讓你的心像活水一樣充滿活力跟熱情,而不是把自己那口井當作全世界。

結論 

其實,機會真的是滿山滿谷的,就看你有沒有累積足夠的能力去發現機會,掌握機會。

事實上,當你發現有很多機會,自己卻苦無能力掌握,那種書到用時方恨少的感覺,其實讓人相當懊悔。

摘要一下以上幾個能讓你走得長久的重點:

  1. 找到你的興趣
  2. 知其所以然,役物而不役於物,不要不求甚解
  3. 在問題跟需求發生之前學習
  4. 找到合適的伙伴與 mentor
  5. 多看看公司以外的世界,作法,接觸更多的人事物

追求卓越,成功自然就會跟著而來。花若盛開,蝴蝶自來。

時間花在哪裡,成就就在哪裡。要投入大量時間,你得對它擁有興趣,否則光靠意志力是走不長遠的。

希望這篇簡單的整理,可以給一些茫然徬徨的朋友一點方向。也希望這篇文章能拋磚引玉,引出更多前輩或朋友的經驗或討論。

對敏捷開發有興趣的朋友,可以參考我的粉絲專頁:91敏捷開發之路

若需要聯絡我,可以透過粉絲專頁私訊或是側欄的關於我。