資深工程師身上的 N 項特質,N = 12
我們身處在軟體工程師的大海、河川、小溪或水溝中,總是常聽到大家問一個古老的問題:「Junior 工程師要怎麼變成 Senior 工程師?」
老實說我沒辦法跟你說你怎麼做就馬上能讓你從 junior 工程師變成 senior 工程師,因為 senior 工程師不像超級賽亞人一樣可以說變就變的,還是有什麼開關或植入晶片就馬上有效果,如果有這種開關或晶片也請幫我安裝一打。
我沒辦法也不太喜歡給那些常在農場文上看到像是「要訓練獨立思考能力」、「要有解決問題的能力」之類的抽象建議,除非有附上實際的訓練及成果檢核方式,不然這樣的建議有說跟沒說可能差不多。不過,我倒是可以跟各位分享我從那些優秀工程師朋友們身上觀察到的 N 項神奇特質,N = 12。我不知道到底是這些特質讓他們變的優秀,還是因為他們優秀才有這些特質,但既然他們能站在那個位置,表示一定有值得學習、致敬的地方。
這篇文章的文字可能有點長,如果大家懶得看文字,也可以點開影片配雞排,不方便看用聽的也行。
另外,如果你對於學習程式或是轉職軟體工程師有興趣,可參考另一篇文章「程式為什麼這麼難學?」。
N 項特質
1. 技能熟練
首先第一個,也是最最最基本的,就是他們對自己專業領域的技能是熟練的,例如不管是前端、不管是後端、不管是資料庫或是 Operation。
我想大家以前小時候都在國文課本裡讀過一個故事,講說有一個賣油的老翁,他可以用非常高超的那個技巧,可以把油滴進那個非常小的銅幣裡面,他說其實沒什麼,就是熟練而已。一個優秀工程師,不管是打字速度或是他使用的工具,可以很熟練的去做到想做的事情,這很重要。不然在旁邊看他用一陽指在慢慢打字或是不熟練的慢慢操作開發工具,你大概怎麼樣也不會覺得他有多厲害。
2. 匠人精神
當然不是只有熟練,還要把事情做好,而且做到最好。有個我很喜歡的名詞叫「匠人精神」,我也很希望我自己可以做到這種程度。事情也不用多,就是把事情做到最好就好。我們可能會在日本的美食節目上會看到一些老師傅,他這輩子就只捏壽司,捏到年紀已經七八十歲身體還是很硬朗,然後你會發現門口排隊的客人總是一大串還不一定排的到。為什麼?這已經不是錢的問題了,因為大家就喜歡專業。我在那些優秀的工程師、大神朋友身上都有看到類似的特質。
不知道大家有沒有配合過厲害的設計師,他們有時候會跟你刁畫面上少一個 pixel、間距不對、按鈕位置不對,或是怎麼跟設計稿不一樣,他們並不是故意為難你,因為這就是他們的專業跟堅持,這很重要。
有些人會覺得,算了啦,隨便啦,這哪有關係,這個老闆也不管、客人不會在意這個啦...
這個「隨便啦」的說法,我比較少聽到優秀的工程師們在他們的專業上會這樣說,這也是要從 Junior 變成 Senior 的一個很重要的關鍵,要對一些事情開始認真,不要就是隨便的給放水流。
匠人精神是超棒工程師的神秘武器,對每個細節都超級認真,追求卓越。或許這些小細節無足輕重,但這些出色的工程師會不停地追求卓越,我認為這就是為什麼他們可以跟 junior 工程師拉開距離的最主要原因。
3. 跟風
我觀察到這些工程師朋友們他們還有另外一個特質,就是他們會跟風。我這個跟風不是負面的形容詞,我這裡跟風的意思,像最近的這半年來 AI 比較紅,他們會花時間去學這個新技術而且願意應用在他們手邊的專案上。
這是一個很重要的特質,有些人會覺得說「算了,那個是年輕人在學的東西,我們不要學」,或是「那個東西現在還不穩定,再看看」,但是我看到比較優秀的工程師朋友們會試著去跟這些新的技術,最後用不用是其次,但至少會願意去學習,不會排斥。
願意學習新技術,這也很重要。
4. !隨波逐流
雖然優秀工程師們會跟風、隨風而動,但不會盲目。學習歸學習,他們會審慎評估新技術的價值,看它是否適合自己的專案,然後才考慮應用。我不知道他們是怎麼訓練的,但他們都有自己的判斷力,不會被短期潮流牽著鼻子走。
5. 動手實作
除了主動學習之外,他們也不是只有出一張嘴巴,還會動手去做。他們的實作能力都很強,有一些想法或 idea,說不定一個晚上就把東西拼出來了,非常有行動力。
這也是我自己很喜歡的一個特質,就是實際動手做。Linus 也講過「show me the code」,你講那麼多幹嘛,就給我看你的程式碼,剩下的不用講。
跟 Nike 運動鞋的那個勾勾一樣,不要講那麼多,做就對了!
6. 不怕踩坑
實作的過程中一定會踩坑,但這些人他們也沒在怕,就踩下去,多踩多健康,反正踩坑踩久了就習慣了。在踩的過程中,不論是新技術還是舊技術,在踩坑的過程可能會發現「咦...我原本這樣做好像不太順,我是不是應該弄一些自動化的方法?」
然後他們就會想辦法去改善流程、增加 DX(Developer Experience),讓他們自己或其它同事在用這個工具或者流程的時候會有一種「哇~」的舒暢感。
不斷的踩坑,然後因為覺得不舒服、覺得痛了,就改善它,這也是我看到這些人身上的特質。
7. 喜歡閱讀
我有一次在一本書上面看到一段話「在禮拜一到禮拜五讀書是為了維持不敗,禮拜六讀書是為了超越別人,禮拜天讀書是為了超越自己」。
閱讀是個很重要的習慣,對軟體工程師來說更是如此,不管是紙本書還是網路技術文章都一樣,閱讀是保持競爭力或是超車的關鍵。我在這些優秀的工程師朋友們身上都有看到這個特質,沒有例外。
8. 愛現、樂於分享
不只這樣,他們看完書或學到新技術後,他們還很愛現(稱讚意味),他們會在社群網站上面說我最近看了什麼書或分享閱讀心得。樂於分享、愛現這件事情,那些優秀的工程師朋友們幾乎每一個都有。
他們愛現,有些會寫書、寫文章,有些會拍影片,然後去投稿研討會,上台分享,讓更多人知道。因為其實我們都深信,在分享的過程中,不管是技術上還是非技術上,會得到的回報遠比想像的還要多很多,正是那句「施比受更有福」,有做過這件事的人就知道我在講什麼。
我非常相信,分享跟交流才會讓這個世界進步,越是藏招、越是不想跟別人分享,這件事情不健康也不會進步,對個人或對這個世界都是。
9. 培養後進
優秀的工程師不只懂技術,還知道怎麼培養新人。新人可能是你的同事、下屬,但目標都一樣:培養他們超越你。這或許聽起來怪怪的,但在技術圈,這樣的分享和交流是很正面的。而且在教導技術同時,你也會發現自己也在不斷成長,然後整個團隊也會進步。
當愛現、樂於分享、培養後進的這個風氣一但在公司或團隊做起來之後,通常就會吸引到更多優秀的人一起加入團隊,進入正向循環後便一發不可收拾,到時候你想擋都擋不住。
10. 會說故事
因為愛分享、培訓新人,所以通常這些人的說故事能力都蠻厲害的。說故事能力是指可以把複雜技術用白話的方式,講到連阿嫲都聽得懂。愛因斯坦曾經說過「如果說你沒有辦法用簡單的方式解釋它的話,就代表你對這個東西其實認知是不夠的」。
這個我非常認同,所以我在面試人的時候,我常會故意問一些看起來簡單但背後原理有點複雜的問題,例如在前端的面試題中,常會在 for 迴圈裡面跑個 setTimeout
,故意印個 i 出來,然後問你這會印出什麼來?如果面試者有背過這個題目可能答的出來,但我通常會繼續再問說你覺得為什麼是這個結果,如果答案是背來的,很可能就答不出來或是亂講一通了。
11. 善於溝通
另外,這些優秀的工程師通常擁有很不錯的情緒管理及溝通技巧。這不僅包括同事、老闆、下屬溝通,還要能夠把複雜的技術以簡單明瞭並且有耐心的傳達給非技術人士。
12. 友善
最後一點,也是我覺得很重要的一點,就是這些人對自己可能很嚴格、很要求,但對其它人(特別對地位相對比較低的人)通常都蠻友善的,他們不會去臭別人的工具說「什麼?你還在寫 PHP 喔」或是「蛤?你在寫 Ruby,這年頭誰還在寫 Ruby」
有啊,我,我還在寫 Ruby!(舉手)
Be nice,友善這個特質很重要,不然就算技術再厲害也不容易受到其它人的敬重。我認識那些厲害的工程師朋友們大部份都很友善,樂於助人,嗯...但說不定那些不友善的人我也不會想去認識所以因此有取樣偏差也說不定 :)
教練,我想變強...
以下我列出一些可以練習、自我要求的項目,希望對各位在前進 senior 工程師的這條路會有幫助。但再次提醒,就算每項都做到了也不表示會成功,不過持續做下去,雖不中亦不遠矣。
1. 對技術的熟練度
第一點,不論是前端、後端還是全部端都一樣,就是要對自己專業領域的技術的熟練度一定要夠,這有點廢話,對技術不熟就什麼都不用講了。
2. 深度 > 廣度
需要學習的知識越來越廣,當面臨深度跟廣度的選擇的時候,如果可以的話,選擇深度大於廣度的效果會比較好。大家其實心裡都知道,樣樣通就樣樣鬆,但身體總是忍不住會分心或貪心都碰一些。
大部份的人沒有精神時光屋或是妙麗的時光器,每個人的時間跟精力都是有限的,盡量把有限的技能點數往深度點,長遠來說對往資深工程師這條路的幫助是比較大的。
3. 團隊 > 個人
我不會告訴你說你該學什麼語言或框架,這個不是我們這篇文章要討論的重點,但在做技術選型的時候,要先考慮的絕對不會是你個人自己爽,覺得這個好酷喔就用下去了,不是這樣子的。
你要考慮到現在目前的這個團隊裡面,他們對於這個技術的接受度以及能不能 handle 它,現在已經是團體戰,如果你要往更資深的方向前進的話,要考慮的不是你只有自己一個人而已。
4. 領導技能
領導技能指的不是帶人,大家可能聽過一個名詞叫一個職稱叫 Tech Lead,這個名字是 Tech 加一個 Lead,所以其實是帶領技術方向。例如說公司想要用某一個框架或架構,為什麼用它一定其原因在。
但要做到這點,要做到滿多功課:
- 花時間研究該技術的優、缺點、適用的地方
- 提出想法,說服長官或同事接受這個新技術
- 提出實際的作法,跟著大家一起做
5. 時間、專案管理
如果你只有一個人,也許你只要做好你自己個人時間管理就好,但如果在一個團隊裡的話,要做的事情就是這個專案的管理,不要覺得這是長官或 PM 的事,管好手邊每項工作的進度,這對你的長官、工作夥伴都是好事,對你要往資深工程師這條路更是重要的練習。
6. 輸出
你可能學了很多的課程、看了很多的書,不要只有看進去而已,你也可以試著「輸出」。輸出是指說你可以寫文章、拍影片或者是說在一些社群的小聚上面主動報名跟大家分享最近學到的東西。
相信我,學會「輸出」之後,你會學到更多。
7. 自我評估
要知道自己的價值在哪裡很重要,但要怎麼做?如果你不知道怎麼評估,有一個比較簡單比較務實也相對客觀的評估方式,就是面試。
對,就是找工作的那個面試,我並不是要你常常換工作,而是你可以把你的履歷開著,或是大概每一、兩年就去外面投個履歷,去找面試官聊聊天,試試看你現在的等級在什麼地方。
如果你感受不到你自己有沒有變厲害、感受不到自己的價值的話,就讓市場來決定你的價值,試一下市場的水溫你就會知道了。
不一定需要的...
以下列出兩點我個人覺得對於成為資深工程師這條路不一定有直接幫助的 nice-to-have
的項目。
1. 工作年資
有些人認為資深工程師就是一定要工作年資滿 5 年、10 年、20 年之類的,但我認為對資深工程師來說,年資是條件之一,但並不是必要條件。
有些公司可能會因為年紀到了或者是年資到了,在公司待了 8 年、10 年了,所以公司幫你加薪變成一個管理職,帶一些新人,職稱順便就變成資深工程師了。這個跟我心目中的資深工程師不太一樣
雖然這樣講可能有點傷人,但有些在業界工作號稱有 10 年經驗但事實上是只有 1 年經驗,然後這10 年在做一樣事情,希望我們都不是這樣的人。
雖說年資不是必要條件,但也不可能就是三個月就掛資深工程師,你又沒有精神時光屋。通常在業界做 2 ~ 3 年左右,只要不要太混,通常都會做出不錯的成績出來。
2. 擔任管理職
在台灣有些公司做久了就會被拉起來變管理職,但管程式、管技術跟管人是完全不一樣的技能。
我自己其實很不喜歡管理職,我覺得管人好複雜,管程式簡單多了。如果你擔任管理職可以讓整個團隊更進步是蠻好的,但以一個資深工程師來說,帶不帶人倒不一定是個一定要有的經歷。
更何況不少工程師被昇級成管理職就不寫程式了...嗯,這又是另一個故事了。
「你想要寫程式寫到幾歲?」
最後,這個問題我不知道大家有沒有想過,也許各位還很年輕,但這個問題我從 20 幾歲就被問到現在,現在已經 40 多歲了還在問,我的答案就是:我根本沒有想過這個問題。
為什麼要想這個問題?我喜歡寫程式、我喜歡教學、我喜歡做這件事情,我做這件事情是快樂的,為什麼我需要設定一個期限?如果是在做開心的事,不就是做到累、做到到自己不能做為止嗎?
所以對我來說,我大概會寫程式寫到不能寫為止吧 :)
成長是一條漫長、甜蜜但偶爾帶點痛苦的一條路,變強這件事不會在一夜之間發生。以上內容大家可以當做是在這條路上的幾項 checklist,最終能不能成功還是得取決於各位的實際行動和努力。
享受這段旅程,不要讓自己太疲憊,保持快樂,一起變成更優秀的工程師吧!
工商:想學 Python 嗎?我教你啊!
想要成為軟體工程師嗎?這不是條輕鬆的路,需要有足夠的決心、設定目標並持續學習,我們的 ASTROCamp 軟體工程師培訓營提供專業的前後端課程培訓,幫助你在最短時間內建立正確且扎實的軟體開發技能,有興趣而且不怕吃苦的話不妨來試試看吧 :)