在當了一年的工程師後,我意識到有些東西是作為工程師必須要知道的。
大部分的時候工程師都在思考寫程式的問題,但有時你要像個企業家思考為什麼公司要這個新功能,有時你要像個產品經理了解這在團隊裡的價值,有時你要像個測試工程師一樣,思考使用者可能會有什麼行為導致程式出現漏洞。這些都是在你想著要怎麼寫出這個功能前要去做的思考。
這些不同的思考模式及技巧是我當初轉換跑道到工程師時沒有想到的。在想事情時把這些都考慮進去,我想對要進入任何產業的初階工程師都會有幫助的。如果你真的實踐下面列的任何一點,我相信你軟體開發的職涯不會那麼恐懼、更有生產力,而且會有個好的開始。
不管在什麼位階你一定會要 Debug。
大部分工程師的作法是閱讀程式碼,了解這些程式碼是怎如何而且為什麼要這樣寫,然後解決問題。但當你對閱讀程式碼不是很有經驗,這個程序會花更多的時間。就算你是個有經驗的工程師,試圖瀏覽這些臭氣薰天、醜陋的程式碼實在不是件快樂的事,因為如果你是個有道德感(conscience)的工程師,你會要修復在你原本發現的 Bug 之上的程式。
我發現最好增進除錯技巧的方法就是閱讀程式碼,越多越好。就像學習任何語言,當你寫得越多讀得越多,你就進步的越大。
深入了解程式是怎麼運作的。更進一步的,學習為什麼這個功能會選擇用這項技術來實作。
細讀每行程式,看你是否能了解它們怎麼運作的。為了瞭解那些使用的技術,去問問團隊裡資深的成員,問問他們當初為什麼選擇這項技術。有可能這個方法已經過時了,你可以建議新的技術來節省時間、金錢、效能,最終這都可以讓你的公司賺更多錢,This is always a big win in your favour.。
要花時間寫一個你自己沒有辦法理解為什麼要這樣做、怎麼被使用、對使用者有什麼價值、對公司的影響的新功能實在沒什麼道理。
確保你跟你的主管談過你做的東西的價值在哪裡,這是他們的工作,以確保能夠幫助你有最好的產出。
這些討論通常在你開始開發前就會完成了,但如果你有哪些地方不清楚的,一定要問清楚要做什麼以及為什麼要這樣做,你可能會因此找到更好的方法來達成相同的目的。
承認吧,在你職涯的第一年或甚至更長的時間裡,你覺得自己很笨。
你應該要會的技術多的壓著你喘不過氣來。尋找讓你讓你感興趣的事物可以讓你在這些日子裡保持樂觀。
當你很喜歡什麼的時候,不管你在這個領域多麽不熟悉,你就是去學,這一切都很有趣,你並不期望可以知道所有的知識,但你相信有一天你會這個領域的專家。
成為這個領域的專家並且跟團隊分享你所學。
在你每天會用到技術當中,挑一個你喜歡的深入研究。
選擇每天會用到的技術,意味這項技術對會不斷的對你的團隊來說非常有價值。相反的如果選擇一個工具只會使用一兩次,雖然它很酷可以解決某個小問題,這可能很有趣,但長期下來根本不會被用到。總結來說,深入一項技術很棒,但確保你的投資會有長期的回報。
選擇一樣表示你沒有分散注意力,你可以專注並精熟在一項技術上。
我想我是在 John 的 Youtube 上學到這個技巧的。記錄你所做的事情可以讓你回顧你做了什麼、學了什麼,這也讓你可以仔細的管理每天的活動,如果你沒有常常跟主管連絡。
要用什麼樣的形式記錄都可以,但不要花太多時間。
創造一個讓你可以快速的把重要資訊填進去,並且讓你的主管快速瀏覽的表單。我也建議每週(不是每天)把這份日誌寄給你的主管。
我試著把我每天的日誌整理成一週回顧寄給我的主管,但我發現這太花時間了,所以我後來決定只做週誌,然後就直接寄給我主管。
這是我的表單裡的項目:
每個團隊都有他們擅長與不擅長的,你的團隊也一樣。
如果你已經列出你喜歡的領域,如果你已經把你每天會用到的技術整理成每週報告,你可能會想要知道什麼是你們團隊缺乏的。
在建立這個清單後,你會看到有沒有技術是你很喜歡而你們團隊不擅長的,如果有那就太棒了,你可以一石二鳥,學習你喜歡的東西同時提供你們團隊有價值的知識。
如果沒有,那就選一個你認為可以帶給團隊最大價值的技術吧。
選擇一種很好上手的工具或媒體,這樣資訊可以很容易填上去。
長期來說,任何大型公司裡都有檢視工程師的表現的方法。
但當要你寫出你過去六個月為公司做了什麼,你腦袋通常都是一片空白。
大家會發現要回想這些資訊很困難,有人甚至忘記他們昨天做了什麼,更不用說過去六個月了!
我試過幾種方法來記錄我計劃以外的事情,一開始我用紙筆來記錄哪天做了什麼事,但我發現在這個階段,你不需要去注意這能夠得到什麼,只要不斷的把東西記下來。
但這個清單很快就變得很長,紙張四散而且這些紙隨著時間變的脆弱,我們需要更好的方法來解決的這個問題,寫進 Excel 裡。
我第二個方法是用 Excel,但發現跟用紙筆時一樣陷入一場混仗當中,Excel 的形式並不好管理隨著時間做的事。所以我在網路上搜尋,找到這個免費軟體,非常好操作,而且可以輸出成 PDF 檔。
我到現在還是使用這個軟體,雖然我很喜歡 Mac 的版本。
記錄任何你不管在外部或內部有沒有直接對你工作有幫助或是其他你有興趣的技術。
如果有很多事情要做,你可能會覺得把這些清單間建立起來有點乏味,但要有耐心,一旦完成,之後都會很好更新資料。
作為一個初階工程師,你可能一直覺得你在學習但又得不到什麼知識。但在六個月後一切都會不一樣,timeline 上面呈現的很驚人,你的信心會大增因為 tiemline 上面完整了記錄了你到底完成了什麼。
在軟體開發上,不斷增進自己的技巧跟上最新的技術是很重要的,在這個領域技術是不斷在變動的,不要等你的主管提供訓練給你,自己去尋找吧。
擠出時間是另一個挑戰,這需要高度的自律以維持每天的練習,確保每天規劃的練習不要太多以至於讓你跳過去,如果一天不作,很可能接下來幾天會繼續跟著偷懶下去。
為了要對抗這些,把每天要做的練習排進行事曆裡,把狀態設為忙碌。這樣會阻止任何在這段時間想要跟你聯絡的人,提醒你每天的練習快開始了,讓自己進入每天練習的循環常態中。
如果不知道從哪裡開始,試著從這些地方下手:
網路上有很多課程,從免費的到付費課程像 Pluralsight、Udemy、Coursera 都有。
就像任何你想要進步的事情,你應要要每天練習,就算是一個小小的題目或是讀一本書的其中一頁,或是看一部影片,這些都會累積下來的。
你是怎麼學習以及解決問題是無價的。試著跟你做相同的事的人分享。有時候這比從比你資深的人還要容易學到東西。
試著讓這些資料很好搜尋,這樣當你遇到你幾個月前遇過而且已經解決的問題,就可以節省你再次上網搜尋的時間。
部落格就是個用來儲存這些資訊最簡單的方法,也是John 推薦每個程式設計師都應該要要有,因為這對每個人來說都很好取得。
確保你的部落格有作適當的標籤跟 SEO 優化。在公開媒體做這些確實讓你更有可能得到不好的評論,但也讓你可以建立你自己的威望,展現你的成長。所以忽略那些酸民(haters)持續的寫作吧。
大家都知道可以在失敗當中學到很多,但如果可以避免這些錯誤更好。
如果有人已經花了很多時間在處理這些問題,他已經知道怎麼處理,並且很願意跟你分享,你會不會想要去上他的課?這就是一個導師能幫你的。
除了可以在職涯中引導你,導師也可以讓你聽到到很多他們的經驗及所學的知識。
導師可以在你的團隊不管內部或外部。其實他們並不一定要是跟你同個領域的,只要他有你想要的知識就可以了。
有些公司,會兩個初階工程師搭配一個資深工程師,如果你覺得這對你有幫助好好善加利用吧。
但大部份時候,找導師是很困難的。
對一個學生來說,導師需要花很多的時間來發揮他最大的價值,可惜的是很多人沒有那麼多時間。所以如果你是那個幸運的學生,確定你跟你的導師雙方預期可以投入的時間、多常碰面、你們會討論什麼,這樣才不會浪費彼此的時間。
如果你的公司沒有正式的這種模式,你可以問問看你的主管能不能幫你安排一位導師。如果你沒辦法在公司裡面找到,你可去找找看些幫人找導師的網站像Mentorsme。
如果你試著在找導師,在確定他當你的導師前要先看看他們的能力、經驗還有有沒有什麼時間限制。同時要記得,你的導師是要某個你願意多花寶貴的時間在他身上的人。
我覺得記錄你的所做我為、分享你新發現的知識、認知到自己要往哪個方向走、被有經驗的人指引,這是讓一個開發者有個好的開始的關鍵。讓你有辦法回顧你過去做了什麼是建立自信心的重要關鍵,這也讓指引你要往哪個方向前進。如果你沒有將你做的事情紀錄下來這事都是做不到的。要知道這些事可以讓你知道自己做了什麼,在這個領域有哪些成長。
原文:10 Tips To Start Off Well In A Junior Dev Role