新手工程師如何向資深工程師邁進?入門到停滯?或者你一飛沖天?

Cover

目錄

  • 前言,已經成為前端工程師的你,最近如何?
  • 我開始第一份工作後三個月,感覺陷入困境?
  • 心流理論欺騙了我?
  • 黃金公式:壓力 + 休息 = 成長
  • 身為前端工程師的我,如何實行?

前言,已經成為前端工程師的你,最近如何?

Hey,我是 Engine,前端工程師,資歷三年。前面一年半的時間,我持續的觀察朋友圈裡跟我同梯找到工作的前端工程師,每個人在技術與薪資的成長幅度都不相同,前十百分比的工程師與中段的工程師開始有明顯的差距,我相信這個差距還會持續擴大。

這一次我想談談針對這些現象的想法,還有總結一套專屬前端工程師,可行的成長方式。

這一次的書寫方式不像教科書,我想要嘗試互相對談的感覺,邀請你跟我一同思考後面會提到的觀念。接下來得標題都是第一人稱,標題裡的『我』,指的就是你。這是一句自我的反思,從自已的角度去思考這些問題。

最後,專注力何其珍貴,你可以利用目錄直接挑自己感興趣的話題先看。

我開始第一份工作後三個月,感覺陷入困境?

首先我想提 Erik Trautman 在 Viking Code School 部落格中的文章 《Why Learning to Code is So Damn Hard》(看這精闢的解析),文章中 Erik 給了一張曲線圖以及兩個名詞『資源密度』與『知識廣度』。

Erik Trautman 提出的理論圖表

上圖中上方的線圖面積代表你的舒適度,中間的間隔代表資源密度,下方的線圖面積代表知識廣度。

資源密度:代表你可以找到用來輔助你學習的教材或資源的數量

知識廣度:代表你需要成長的那個階段知識散佈範圍

舉個例子,當你在網路上搜尋『HTML』或『CSS』時大量的文章、課程資源就會浮現,但是隨著學習的知識或技巧越來越難,資源反而大幅度減少。這就是資源密度的變化,如下圖中的中間區塊,左邊密集,中間稀疏,右邊又慢慢密集。

而知識廣度就像你一開始學習 HTML、 CSS、 jQuery 時所需要的知識都集中在這些範圍內。但是當你的程度提升你可能要開始接觸 Webpack、CI/CD 的時候,同樣為了提升能力,你需要的知識可能遍佈在各種技術或概念裡面。知識分佈太廣,就會讓你花費更多時間卻獲得更少的知識量(對你需要提升的部分需要的知識量)。

這樣綜合起來,就會出先最痛苦的區域,也被 Erik 稱作絕望沙漠,也就是中段區域。

前端工程師有一個有趣的特徵,就是我們的蜜月期(手把手教學)往往是可以延續到找到工作的。什麼意思呢?就是說,你跟著一個課程或老師從頭學到尾,然後拿著作品出去面試,在你不是特別挑的情況下往往可以拿到工作機會。

那麼你的絕望沙漠就會出現在入職之後三個月,當你開始接觸各種程式寫法、開始面對各種程式需求、開始發現找不到手把手教學的資源的時候。

心流理論欺騙了我?

什麼是心流?如果你跟我一樣喜歡動漫,心流就像是籃球員打球打到眼睛放火的時候。

Zone

這種狀態在這部動漫中被稱作 Zone,這個字還不是胡亂說的,NBA 籃球員 Michael Jordan 跟 Kobe Bryant 都有提過這種狀態,是一種高度專注,聽不見觀眾的喧鬧身,同時身體可以隋心所欲的控制的狀態。

雖然感覺上非常相似,不過心流跟 Zone 還是有些差異。心流理論是:「匈牙利裔美籍心理學家米哈里·契克森首度提出,定義是一種將個人精神力完全投注在某種活動上的感覺;心流產生時同時會有高度的興奮感及充實感等正向情緒。」

這套理論其實將人迎接任務時(通常就是工作),依照任務的難度以及個人對於這樣任務的熟練度,心理會呈現不同的狀態。

Flow Chart

上圖中,越上面代表這任務的難度越高,越右邊代表你對這個任務的熟練度越高。依此為根據,我們在迎接這個任務的時候,心裡就會呈現圖中的八種狀態,任務很難而且我的熟練度不高,心理會呈現焦慮的狀態(必經之路);任務很簡單而且我的熟練度很高,心理會呈現放鬆的狀態,不過我認為對工程師來說,這時候通常是呈現無聊的狀態才對。

難度不高又很熟練的編程工作該怎麼辦?自動化啊!好吧…扯遠了。

重點在於右上角,當任務很難而且你的熟練度很高的時候,我們的心理就會達到心流狀態。你需要全神貫注才能夠面對高難度的任務,同時你又有足夠的熟練度去突破難關。

有一種東西會讓你輕易地感受到這種心流狀態,答案就是電子遊戲,尤其是關卡型的。

電子遊戲的設計背後有心理學的理論支撐,關卡的設計一定要是你目前能力再稍微困難一點點,卻又不能太難。你需要努力才能夠突破當前的難度,然後你的能力提升了,他們就在給你更難一點的難度。

這樣的設計會形成正回饋,正回饋會形成習慣迴路。如果稍微改造一下,就能夠產生依賴性。

那麼,學習程式語言不是也可以用這樣的方式去學嗎?是可以,可惜不現實。這樣的學習方式有兩個重點:

  1. 難度要拿捏的精準
  2. 回饋要頻繁且有足夠力道

關於第一點,你一定玩過學習程式語言的遊戲,像是學習 FlexBox 語法的 FlexBox Froggy。第一個問題是製作成本太高,所以在 Junior 前往 Senior 的路上會碰到較深入的技術不會被做成遊戲,因為受眾範圍太小。這也是一開始提到的資源密度開始稀疏的原因。

另一個主要的問題是難度的成長幅度不夠。像這款遊戲實際上包含的知識量有限。如果要以感覺舒適的難度成長幅度來設計關卡,你的學習幅度絕對追不上其他人。

關於第二點,頻繁的回饋在前端處理畫面的時候還可以,這也是我們在學習上的優勢。不過環境架設呢?設計模式呢?仔細觀察一下,是不是我們卡關的部分往往都是比較難獲得回饋的技術。

綜上所述,心流狀態在我的理解中並不是快速成長的位置。現實中能夠獲得成長的位置往往是位於 arousal (覺醒) 與 anxiety (焦慮) 之間遊走,你感覺到痛苦,不斷在碰壁,熱情被消磨。難道只能夠這樣子嗎?

我們來討論看看可行的策略。

黃金公式:壓力 + 休息 = 成長

我們先聊一個你一定熟悉的模型理論:舒適圈。舒適圈被畫成一個多心圓,最內圈就是舒適圈,當你越往外走就會越不舒適,所以中心有一股拉力會將你往回拉。那麼走到外圈有什麼好處呢?

第一個好處是外圈可以讓你成長,第二個好處是舒適圈其實可以擴張。所以在外圈待久了,自我成長了之後,原本的外圈就變成了舒適圈。如此以來就能夠向更外圈跨出去。

The Comfort Zone

這是一個耳熟能詳的理論模型,就算沒有看我前面說的一大段,你可能也已經知道這個理論。需要注意的幾點是:

  1. 不是離舒適圈越遠越好,當離得太遠時你的表現會快速惡化,更別想有效提升自己。
  2. 離舒適圈足夠遠又不會太遠的位置被稱作「甜蜜點」,代表成長夠快,同時又不會不堪負荷。

不過這邊請注意!聽我說。甜蜜點一點都不甜蜜,我更喜歡叫他焦慮點,因為真正待在那個位置時,其實你是處在非常焦慮的狀態。

結論是:當你感受不到焦慮的時候,你並沒有在快速成長。

當你感到高度集中,心靈馳騁,時間飛快的時候,你是處於心流狀態。你的工作效率會很高同時對這份工作感覺充滿熱情,這樣很好。

當你感覺焦慮不已,不斷碰壁,感覺在挖山洞一樣每一步都走得萬分艱辛。也很好,只要你有在前進,儘管告訴自己你正在快速成長。

那麼哪一種狀態比較好呢?最好的狀況就是讓這兩種狀態互相交互出現。只是要注意,當你處在高度成長的焦慮狀態時,要「主動」、「積極」、「計畫性」的休息。

這就是這篇文章的重點:

  1. 找到焦慮的位置而不是心流的位置。
  2. 當你開始走到快速成長的位置時,你要更加積極的休息。

身為前端工程師的我,如何實行?

你要去擁抱撞牆期。你嘗試、你痛苦、你主動休息。

我很喜歡自己學習使用 Vim 的過程,有一個 IDE 的套件可以讓我在寫程式的時候使用 Vim 的指令。我在一開始非常痛苦,光是讓光標移動都卡的要命。但是當我持續使用,每一次感受到進步都是在『隔天上班的時候』。

今天的成長會體現在明天。這是一種非常正面的感受。但重點是你要強迫自己走到焦慮點,然後再給自己時間放下程式碼好好休息一下。

當你學習新框架、新設計模式,你反覆看文件卻無法理解概念或是不斷忘記語法,你很痛苦,那就三不五時起來喝點水或者去走走。

你可以告訴自己:這是一個對你來說有難度的學習(或練習),所以你承諾自己努力撞牆半個小時、一個小時,然後就起來喘口氣,轉換一下心情。

『進入心流,高度專注,開心工作』並不是成長最快的狀態,當你找到那心流點為外圍的焦慮點時才是。

參考資料:

linengine@gmail.com

Taipei, Taiwan

signature