近年來越來越多人跨領域、跨職能進入軟體產業,無論是前端或後端開發,甚至系統軟體都有許多人願意挑戰。
畢竟,軟體開發是一條具有挑戰性和成就感的道路,且無論在什麼樣的崗位,都能拿到不錯的薪水糊口。對於原本非資訊領域的人來說,富有極強的吸引力。
因此,如何在軟體開發的職涯上找到方向並且定位目標是一件重要的事。
概括來說,軟體產業的轉職樹如下:
Junior,以下簡稱Jr,是所有軟體工程師的第一站。當你具備寫程式的能力,並且拿到進入公司的門票,那麼你已經是一個Jr了。
Senior,以下簡稱Sr,是Jr的第一次轉職,在公司內部稱為晉升。一但在工作領域中取得不錯的成果,且熟悉公司內部的組織分工,並能完成每次被交付的使命,那麼就有很大的機會能夠晉升成為Sr。
Principal,以下簡稱Pr,這是作為軟體工程師的最後一哩路。除了能夠完成當下的事務,同時也具備規劃未來方向的能力,並且兼具能夠領導團隊的統禦力,那麼就有資格被承認為Pr。
Architect,稱為架構師,這在軟體開發來說是一條比較特異的路。並不是每間公司都有這樣的職位,且架構師在每個不同的組織也扮演不同的角色。也許你會聽過Digital Architect、System Architect、Solution Architect等,這些都是架構師的範疇且每個角色都有不同的定位。
因此這個系列文會帶領每個讀者了解架構師是什麼?需要具備什麼樣的能力?要怎麼規劃職涯發展?
但首先,讓我們回到原來的轉職樹上。
身為一個資深架構師,我的答案是不一定。
讓我們換個角度來理解轉職樹。
用傳統RPG的職業來表示就類似這樣。
如果你的目標是在新手村附近做個普通冒險者,有著不錯的收入並且過著相對輕鬆的生活,那麼初心者就足夠了。
畢竟,採藥草、打史萊姆並不需要你放隕石術。
但當你不滿足於打史萊姆,想要挑戰更高階的怪物,例如獨眼巨人,那麼你就需要更強力的武器、更有威力的法術。我想此時你需要的正是魔法師這樣的位階。
直到,獨眼巨人都無法滿足你的那時。你眼裡所看見的是遠古巨龍,你需要的不僅是無與倫比的法術,你同時也需要組織你的團隊,要規劃戰術,需要預先制定站位、分配角色最後執行狩獵。那麼,你就需要具備領導力、洞察力、執行力等,大魔導師或大賢者才有辦法勝任。
是不是每個人都想狩獵遠古巨龍?我相信不是,因此這裡的職階並不代表著位階高低,僅僅只是想達成的目標不同罷了。
即便是狩獵遠古巨龍,同樣需要有人在背後維繫後勤,例如提供藥草。無論是什麼樣的角色,都有他的一席之地,就算只是初心者,他採集藥草的能力說不定比大魔導師還厲害。
讓我們回到初心者的例子。初心者要如何能夠轉職成為魔法師呢?
採一輩子的藥草、打一輩子的史萊姆是不可能的。這樣頂多能夠讓採集藥草的效能非常好而已。
要能夠轉職成為魔法師,必須要試著挑戰更高級的任務。需要離開新手村,去尋找新的怪物,例如:獸人,並且嘗試擊敗他才有可能繼續升級。因此你需要花費時間移動、投入金錢升級裝備並且思考攻略的方式。
這些同樣應用在Jr升級成Sr的過程。需要花費額外的時間學習並且持續練習寫程式的技巧、買書、參加研討會並且思考如何將這些獲得的技能運用在工作之中。一但工作的成果得到累積,就如同狩獵了無數獸人、巨型蜘蛛、沙蟲等自然而然就能取得向上晉升的門票。
一但目標是遠古巨龍,且已經成為獨當一面的魔法師,那麼下一個問題是:有兩條截然不同的道路,該選擇哪一條?
讓我們先從Pr和架構師的差別談起。
X軸是軟體產業需要具備的硬實力,撇除溝通、協調、語言能力等軟實力概括列了大項。Y軸是等級分,但也只是示意,畢竟每個人具備的等級是不同的。
從示意圖中可以看出,Pr的程式能力應該是頂天了。Pr應該具備非常優秀的程式能力,同時在其他面向上也具有一定的等級。
至於架構師,不得不說,架構師沒有這麼強大的程式能力,因為架構師的時間必須要花費在更多周邊的技能。舉例來說,架構師需要了解各種不同的資料儲存,並且能夠在系統設計時給出精準的意見。此外,架構師還需要理解軟體業界的趨勢,並且掌握系統演化的方向,例如微服務的興起,要如何將單體解構?又例如,為了解決實時(real-time)問題而提出的串流架構背後的精神和原理。再舉個例子,除了一般滿足商業邏輯的應用,架構師還必須負責最近方興未艾的大數據分析和機器學習,有各種框架可以選擇,又該如何挑選?
這些其實都是架構師的日常,在各種選項當中做出抉擇,而其背後所必須要投入的學習時間是非常可觀的。
回到原來的問題,為什麼必須要在架構師和Pr間做抉擇?因為這兩條路線的養成過程是截然不同的。
以Pr來說,Pr可專注在單一一個領域不斷深耕,例如:電商,其了解電商的各種實務需求,如何管理庫存?金流、物流如何整合等。並且專精使用1-2種程式語言,能夠完成各種電子商務的產品需求。
以架構師來說,架構師必須要在複數領域下累積實務經驗,且同時通曉複數程式語言,無論前後端、資料分析、數據工程,都需要具備眼界和經驗。以我來說,我待過各種產業:
同時各種產業運用的程式語言也不相同:
身為架構師,這些都只是表面上看到的。實際上,各種資料儲存、各種程式框架都必須深入了解。
如果,學習是你的興趣,那麼也許架構師可以是你的選項。
上述提到了架構師背後所需要具備的各種能力,我相信很難在一個30天的系列文中詳細闡釋,但藉由這系列文應該有辦法讓大家了解一個核心問題:「架構師是什麼?」
對我來說,軟體架構就是一個不斷取捨的過程。但到底取捨什麼?有什麼需要考慮?在這系列文會一一為你開路。
因此整個系列文會包含下面幾點:
看起來包山包海的綱要,其實就是架構師的日常,歡迎大家來體會。