2020/01/07

軟體工程師之生存法則

本文不對外開放喔, Sorry

當你剛到新公司或新專案環境:

  • 最初的關鍵Domain knowhow 需要靠同事! 但是發問前先自己想過一次, 不要問太多笨問題
  • 把開發環境建構起來, 基礎知識 + 詢問同事目前設定方法 + 文件閱讀
  • 測試文件與軟體部門指南(如果有), 可以快速幫助你了解部門的重點
  • 部門電子檔存取方式, 怎麼下載上傳以及使用
  • 盡快記下你聽到的英文縮寫專有名詞, 絕對要查詢出來並理解內容, 才不會蜜月期後雞同鴨講狀況外
  • 老闆要你做什麼? 看哪些文件與記住哪些流程? 部門常用軟體工具是什麼?
  • 以Issue為本體導向, 追蹤, 除錯, 解決, 以及寫出test case
  • 追本溯源的精神, 文件與Source code盡量跟原廠找最新的, 或公司內部設計就自家找最新來參考
  • 畫出軟體大架構圖, 以便日後追蹤程式碼不迷路
  • 晶片廠會有自己習慣的語法與變數, 筆記下來避免每次都要重心追蹤原始定義
  • 軟體各層之間傳遞方式, global variables, function call, command, message
  • Files 與 Source code library 使用時要注意權限。
  • 寫Code寫得好,職場生存就沒啥煩惱囉。

專業領域 你的起始點:

我不知道在看這篇文章的你是在人生的什麼位置。
1.你是即將出社會或是社會新鮮人
2.已經在職場打滾過幾個年的工程師
3.”資深” 工程師,
4.還是已經即將退休或被迫退休的工程師

如果你是第1種人,那恭喜你了,你有機會贏在人生的起跑點上,在剛開始工作的時候就知道軟體工程師不只需要提升自我技術能力而已,更應該像經營公司一樣來經營自己,最後靠自己賺錢贏得自己人生的自主權。

如果你是第2種人,那其實也還不壞,你或許經歷過一些職場的現實,或許沒有,但是你大概知道軟體工程師是怎麼樣的職業,你也還有時間和機會,你有更多的選擇,你可以朝著管理職邁進,也可以朝著技術大神的道路前進,但記得多認識一些人脈和經營自己,當你變成”資深” 工程師的時候會很有幫助。

如果你是第3種人,那你的處境就會比較嚴峻一點,在這個時期,一些和你資歷差不多的同事有些已經是管理職了,他們的年資和職位看起來似乎是比較相襯,如果你還是工程師的話或許是一個技術蠻厲害的”資深” 工程師,對於公司經營者來說或許有不同的看法,”資深” 意味著CP值不高,如果公司需要 Cost Down 的時候可能會先拿你開刀,所以應該時時保持警惕,廣結善緣多累積人脈,更要積極經營自己,努力開創出其他的賺錢來源。

如果你是第4種人,你的未來已經無法自己決定,當現實的大刀砍向你時,最好你已經有了其他的收入來源,這時再想經營自己已經有點來不及了,如果你有累積一些人脈或許還能找到救命的浮板,否則你只能找到薪資與你的技術不相襯的工作或是向軟體工程師的職涯說再見。

職場叢林的生存法則

每個人都想要升職加薪,但是到底該怎麼做呢?其中最重要的關鍵就是要承擔更多的責任。
*負責困難的專案
*幫助團隊成員
*整理技術文件
*成為問題終結者

當你做到了以上的事情之後你就是團隊不可缺少的角色,你就有了升職的機會,即使老闆不喜歡你,也沒辦法請你離開,因為你已經成為團隊中的關鍵角色,但是還有一件事情是你必須要做的,那就是提高自己的能見度,這樣你付出的努力才能被看見,以下提出一些方法可以讓大家參考一下。
*寫工作日誌並寄給主管
*常找主管討論工作上的事
*找機會簡報或是提供教育訓練
*會議上要提出個人想法
最後提醒大家,軟體工程師就是要不斷的學習新知,適時的表現出來,然後遠離辦公室政治,因為你永遠不知道誰會贏。

不管你的職業生涯是否遇到危機或是瓶頸,請先趕快盤點一下你手上的籌碼。

1.你的年齡
2.你會的技能
3.你有的資源
4.你的CP值

年齡在就業市場是一個存在的隱形歧視,不過不難理解,大家的刻板印象年紀較大的人頭腦比較不靈光,無法快速學習,而且一般的主管也不想找一個比自己老比自己有更多職場經驗的人。

技能就是你的武器,有好的武器才能應付各種挑戰,尤其是程式語言你更要花時間評估和學習,要有系統化的去學習和你工作相關的知識,最好能夠多去教別人,這並不只是在做功德,還可以強化你對知識的掌握度與表達能力。

資源包括你的親朋好友同學,工作過程中接觸過的老闆、同事、廠商和客戶等等,平常需要經營一下人際關係,等到你需要幫助的時候才會有人伸出援手,請注意即使別人願意幫忙,你自己還是要有一定的實力才行。

對我個人來說CP值是前面3項的綜合評估,但是對於公司老闆來說他認為的CP值應該是為公司賺的錢和薪水的比值,到底你有多厲害從來都不是考量的重點,一切都是商業的考量。

你的倚天劍與屠龍刀: 學習 & 行銷

軟體工程師最重要的兩個武器就是專業技術學習能力與自我行銷能力,這猶如倚天劍與屠龍刀一樣的神兵利器,如果你好好的加強這兩項能力再往後的生涯中你將會無往不利。

1. 自主專業技術學習 Learning

資訊技術是個無時無刻都在更新的領域,身為軟體從業人員,必須保持不斷學習的熱忱,自主學習更是必須具備的基本能力。也許跟從小沒有補習的學習經驗有關,自主學習以及學習新技術對我來說不是太困難的事。個人學習經驗不一定適用於每一個人,不過這一章節提供的「十步驟學習法」,也是很值得參考,這十個步驟分別是:
1.綜觀全貌:針對想學習的主題,進行基本的研究。
2.決定範圍:根據第一步驟收集到的資訊,提出適當的學習範圍。
3.定義成功:提出言簡意賅的敘述,定義投入學習後所能獲得的成功樣貌。
4.尋找資源:為你要學習的主題,盡可能尋找更多的資源。
5.建立學習計畫:針對學習主題,建立自己的學習路徑。
6.篩選資源:瀏覽在步驟四蒐集到的資源,找出哪些內容最有助於學習。
7.學習恰到好處的基礎知識:只學剛好夠用的資訊,盡快進入實作階段。
8.實作:把在步驟七所學到的知識,實際付諸行動。
9.具備足夠學以致用的知識:瀏覽蒐集的資源,深入學習計畫裡的模組。
10.教導他人:透過教導他人的過程,補足自身的學習落差。
其中,針對想學習的主題,步驟 1 至 6 做一次,然後就你所建立的學習計畫,重複步驟 7 至 10。

關於學習能力…
軟體工程師這個行業的特性就是要一直不斷的學習,要學得快、學得精並且學得準,怎麼說呢?曾經聽過一個笑話,程式語言和架構一直在推陳出新,有些東西你還沒學會就已經過時了,這當然有點誇張,但是也點出一個軟體行業的特性就是要不斷的學習。學習是講究方法的,以下提供幾點參考。
*系統化學習 (最好買書或是閱讀有完整介紹的網站)
*實作練習 (這是學習中最重要的步驟,避免你只會紙上談兵)
*教導別人 (所謂的教學相長,教導別人會使你更了解所學習的內容)
*解決問題 (學習最終的目的就是要解決問題,在這程中你的實力會慢慢的累積)

2. 自我行銷 Marketing Yourself

當我們願意把自己的職涯視為企業來經營,「自我行銷」理所當然地就變成很重要的一件事。何謂行銷?行銷的核心就是把產品(服務)和需要該產品(服務)的人連結在一起;何謂自我行銷?顧名思義就是把自己和那些對你提供的能力有需求的人連結起來。

我們在應徵工作時,個人履歷基本上就是個廣告,用於行銷自己所提供的服務。而在履歷之外,還有許多可以為自己爭取曝光的機會。例如:部落格文章、Prodcast 節目、線上影片、雜誌文章、書籍、程式研習營、研討會等。其中,寫部落格文章可能是最容易入門的方式,寫文章的許多好處就不在此贅述。寫文章不難,但能夠持之以恆並不簡單,這也是我自己持續要努力的方向。

自我行銷是一般軟體工程師比較缺乏的部分
這並不是我們沒有這樣的能力或是這樣的管道,而是我們不知道為什麼要自我行銷,到底能帶來甚麼好處,簡單來說就是告訴別人你會什麼,當別人對你的能力有需求的時候就會想到你,當然還有其他的效益後續還會針對這個主題作探討。目前先列一些行銷管道給大家參考。
*部落格 (ex:發表教學或是心得文章)
*Youtube (ex:拍攝程式教學影片)
*github (ex:上傳side project 或是提交 pull request)
*Facebook粉絲團 (ex:與同好交流討論問題)
*參加研討會 (ex:學習交流新知識並認識新朋友)

職涯規劃 Career

我想每個人都知道職涯管理的重要性,但可能很少人會以「企業」的角度來思考、管理自己的職涯。事實上,不只是軟體工程師,如果能夠以經營一家企業的角度來思考自己的職涯人生,將會改變我們的思考方式,並且更留心、更積極主動地管理自己的職涯。

以商業角度而言,每家企業提供的產品與服務也不大相同,因此發展自己的專業很重要,你可能是一個網頁前端工程師、後端工程師、 App 開發者或是 DevOps 維運人員。甚至,我們可以思考是否能專為某個特定類型的客戶或產業提供服務?身為一位軟體工程師,我們所提供的服務就是創造軟體。在這個資訊化的時代,各行各業都有資訊系統、軟體開發的需求,但是一個軟體真正有價值的地方,並不是技術,而是解決了什麼樣的問題。程式語言只是工具,是需要結合各種 domain knowledge,才能產生作用。

1.建立你的護城河

這是一個古老又有效的方法,要如何才能在一個組織裡面穩如泰山呢?最重要的是建立你的護城河,讓敵人攻不進來,只能與你和談,就如同巴菲特的企業護城河理論,我認為個人也可以建立自己的護城河,我們可以從以下四個方面來著手。
1.你要擁有獨門技術,整個組織只有你會
2.讓想找一個人來取代你的轉換成本非常的高
3.你經手的專案越多則越難找到能取代你的人
4.成本效率優勢,讓大家認為找你做又快又好

稀缺的人才總是最珍貴,如果整的組織都沒人會APP,只有你會,這就是你的獨門技術,如果你同時又會Android / iOS 這樣更難有人能夠取代你。

當老闆想找人取代你的時候 他需要先撥一下算盤,到底要付出多少的轉換成本,如果是非常高的成本或是根本估算不出來的話,他是很難有什麼動作的。

當你經手的專案越多,想要轉換必須付出更多的代價、更高的風險。當你一直提升獨門技術的同時,大家會覺得某項工作找你做真是又快又好,這是其他人無法競爭的地方。

在這個VUCA (volatility易變性、uncertainty不確定性、complexity複雜性、ambiguity模糊性)的時代裡,我們每個人需要幫自己多想一點,要記得諾亞方舟寓言故事的教訓,在大雨來之前先做好準備並造好船,這樣一旦有意料之外的事情發生時才能從容不迫。

軟體工程師之生存法則, 我這裡想提的是除了技術程式碼之外的軟實力, 畢竟除了技術之外我們軟體工程師也有許多該注意的面向, 這裡整理一下自身經驗, 並且聚焦在如何成為「全方位的軟體開發人員」的這件事情上。

2.財務 Financial

如果不是財務金融相關科系畢業,相信學校不會教太多關於財務的知識,但是理財卻是人生十分重要的課題。從新鮮人踏入職場的那一刻起,就應該要想想自己以後的退休計畫及目標。擬定個人退休計畫的第一步,是找出退休後每個月需要的生活費,當被動收入(就是不需要工作也能產生的收入)能達成每個月的退休生活費,就可以「正式」退休了。而究竟需要多少錢才能退休呢?這取決於我們的日常開銷,用什麼工具、手段來產生被動收入,以及有什麼樣的投資機會。

談談債務危機。現實生活中,我們時常可以看到原本是有錢人,最終卻深陷債務危機的新聞層出不窮。而—所有財務錯誤中,最大的問題就是負債,債務愈多,負擔就越重,就會離財務自由的機會越來越遠。負債的時候,存錢困難,也不太可能進行投資。雖然我們可能無法完全避開可能遭遇負債的情況,但可以避免負債時可能做出的不智行為。例如在存錢之前,應該先把債務還清;在償還債務時,根據利率來安排還款的優先序。更重要的是,應避免不必要的債務。

順便提一下,可能很多人都使用過的「就學貸款」。本書作者認為,在許多情況下,就學貸款可以算是好的債務。如果貸款能取得學位,而幫助你找到高薪的工作,那這個債務就完全值得投資。

3.健身 Fitness

健康對於一個人的重要性就不必多言。多運動能使身體更健康,進而提升工作效率,在最佳體能狀態時,專注力與生產力都會提高;處於體重過重和不健康的狀態之下,將暴露於罹患各種疾病的風險之中。

健身、健身、健身。因為很重要,所以說三次。

4.正面積極 Spirit

最後這個章節探討的是比較心靈層面的事物。不過有科學證據顯示正面思考確實可以改善健康、延長壽命,和建立人生中的各項優勢。反過來說,負面思考不僅真的會對自身造成傷害,還會妨礙我們的努力,阻礙人生的成功。

除了正向思考外,每個人也應該創造正面積極的自我形象。什麼是自我形象呢?自我形象就是去除別人對你的所有觀感,包含自我感覺良好的謊言與欺瞞後,我們如何看待自己。也許很多人會覺得自我形象是很難改變的,但事實上,每個人是有能力改變自我形象的。設定想成為的形象,然後找出能成為這個形象的目標,不斷在腦海中建立這個形象的模樣,而且表現得像自己所想的樣子,最終就能「弄假成真」。

在我們人生中一定會遭遇失敗,但是失敗不是被擊倒,而是通往成功的道路。學習擁抱失敗,在失敗中成長,讓自己一次比一次更好、變得更強。

總結 Summary

一位全方位的軟體開發人員, 不光是程式的功力有多好、解決問題的能力有多棒,或是多會運用單元測試, 而是能兼備管理職涯、實現目標以及享受人生的能力。換句話說, 一位成功的軟體開發人員,絕對不是只有埋首寫程式而已,還有怎麼生活。每個人都應該專注於個人成長,讓自己成為更好的自己。

沒有留言:

張貼留言