[碎碎念] 程式開發領域由菜鳥到老鳥的成長歷程 (7) - 學生階段-程式開發之職涯地圖

這是學生階段的最後一篇了,筆者就來談一下軟體開發的各階段發展的方向,也就是未來會從事什麼樣的職務,以及它所需要的能力大概有哪些。

 

PS: 圖是我畫的,但上傳過去會被加上浮水印...

由學生自學校畢業開始,經過不同時期的歷練 (以及跳槽 :) ),工作內容和範圍不會一直停在一個地方不動,當能力或經歷愈來愈多時,可承擔的工作或是任務就會變多,當然職位也會跟著升級,不過筆者所講的是業界大致的狀況,至於什麼時候才可以升級到高位,這得看公司,不是筆者所能決定的 :p。

1. 助理工程師 (Associate Engineer/Programmer)

助理工程師基本上就是軟體開發最菜的階級了,其他像是程式開發工讀生啦,或是只執行簡單的程式撰寫這種,都算是助理工程師,而它最主要的工作,原則上就是給很簡單的需求 (例如一個留言板,一個寄信程式或一張簡單的表單),因為公司很清楚助理階段的工程師不會有多大的產值,所以幾乎都是以簡單且規模小為主,而大公司通常會安排一些基本課程的培訓,像是目前公司所用的程式語言,公司使用的開發平台,資料庫操作,以及公司會用到的軟體元件等等,所以助理工程師階段最大的目標就是培養自己的程設能力,以及開始累積未來的技術資本 (Technology Capital),也要慢慢要求自己寫出比較有專業風格的程式碼。公司多半也會派任一位資深員工擔任導師的工作,以輔導助理工程師能快速進入狀況。在這個時期,大多數的練習都是閱讀範例程式碼為主,除了學習功能的開發外,也可以由前輩的程式中學習一些像是編程風格或是邏輯思維等一些專業的潛知識,這些潛知識在未來會有一定程度的幫助。
如果是以技術出身的研究所碩士,業界多半不會由助理工程師開始,而是直接以程式設計師看待,畢竟做研究一定要寫到程式,所以基本的程式功力一定有,即便要轉換不同的程式語言,學習速度也會比一般大學畢業生要來的快。

筆者建議,如果是由助理工程師開始的話,最好可以在公司待一年以上,尋求在原公司升職到 PG 或軟體工程師,若認為自己在公司發展性不佳,最起碼也要六個月以上,因為三個月基本上很難學到什麼東西,尤其是若要從頭學新的程式語言,至少要六個月才會有生產力,而且六個月以上也比較能證明自己的穩定度,未來轉職時公司也才不會對穩定性有所疑問。

2. 程式設計師 (Programmer, PG)

程式設計師是這個產業最基層的職務了,寫程式就是它的本位工作,但和助理工程師不同的是,程式設計師不再是需要有人帶著寫程式,而是自己就能寫出程式,只是可能技術能力還沒有那麼強,因此在較具規模的軟體公司或團隊,PG 是依系統分析師或系統設計師開出的規格來開發程式,不同的技術本位會有不同的 PG 領域,像 Internet 程式設計師,手機程式設計師,Windows 程式設計師,網路程式設計師等等,在 PG 時期的專業要求,最主要的就是本位工作-寫程式的速度,不能比助理工程師慢,而且能寫的東西也要比助理工程師來得多,舉個例子,以寫網站為例,助理工程師可能就只會用 Web Form 拖拉控制項的方式寫,但是 PG 就要知道怎麼處理 Web Controls, Session, Global.asax, Web.config 等較廣泛的功能。如果是規模較小的公司,PG 要會的可能就更多了。

在這個階段的重點是訓練技術的深度,以 ASP.NET 來說,最起碼的要求是能從頭到尾建置一個簡單的網站,像是 ASP.NET Starter Kit 那樣的功能,當然也要看網站的難易度,只是簡單的會員登入,狀態管理,資料庫連線,基礎 SQL 使用等都是基本要會的,而學習深度的技術應用,則是為了下一個階段來做打底的工作。

程式設計師階段筆者認為至少要 2-3 年才能累積足夠的技術資本往上走,因為技術領域太多了,光是 Web Application Development 就能講一大堆東西,更何況還有 Domain Know-How 要學呢。

3. 軟體工程師 (Software Engineer) 與資深軟體工程師 (Sr. Software Engineer)

軟體工程師和程式設計師最大的不同是,程式設計師需要有藍圖才會寫程式,但軟體工程師是自己要畫得出藍圖並同時寫的出程式,也就是要有基本的獨立思考能力,當業務或專案經理提出一個需求時,要能判斷出需要用到的技術,現有可用的資源以及大略需要的時程,並且能在自己給定的時程內將功能實作出來,軟體工程師也不再只是一個技術領域,可能需要橫跨多個技術領域,像是同時具備 Web, Windows 應用程式和資料庫開發的能力,亦或是具有手機應用的開發能力等,所以軟體工程師通常會被賦與較多的任務,部份公司的 SD 部份是由軟體工程師負責的,這也意味著軟體工程師要會寫基本的開發文件,以及和旗下的程式設計師溝通,有些還要兼做一小部份的管理工作 (例如管理)。

在這個階段的學習重點會比較偏向以系統的思維去設計與規劃程式的開發,而只要是和設計工作有關的人或事或物可能都要接觸,和客戶的需求訪談也是,如果有業務或專案經理較不懂的技術需求,通常會帶著一位軟體工程師去直接和客戶面對面,這時軟體工程師就必須要有臨場的需求判斷與解釋能力,所以軟體工程師要對一些技術概觀的部份要有基本的認識,而在評估的部份則是需要經驗,這也是為什麼軟體工程師能擔的責任會比程式設計師多一些的理由。

這個階段可能要待上至少三年的時間,看公司所在的產業而定。

資深軟體工程師則又比軟體工程師強,因為經驗的累積比軟體工程師多 (累積經驗至少七年以上),臨場決策的品質也會比軟體工程師要好,若公司同時擁有軟體工程師和資深軟體工程師,那麼資深的軟體工程師通常會是主導設計方向的角色,也同時會是公司軟體部門的技術教練或指導員。

4. 系統分析師 (System Analyst)

系統分析師的業務和程式設計師差異較大,因為系統分析師要做的是分析客戶的需求,並設計出系統的規劃藍本,再交由系統設計師 (多由軟體工程師兼任) 設計細部,最後交給程式設計師寫碼,所以系統分析師對一個系統的成敗是居於重要角色的,簡單的說,系統分析師必須要比軟體工程師更強,若公司沒有系統分析師但有資深軟體工程師時,會由資深軟體工程師去負責系統分析的工作。一些比較大的公司系統分析師則未必是由技術路線出身的工程師做,筆者也常聽到一些朋友在抱怨系統分析師畫出來的系統設計圖根本無法實作或是要花很多時間才能做完,也有聽到有些公司的系統分析師根本沒有寫過程式就可以當 ... 等等,筆者還是認為能做系統分析師的人一定要經過 PG 的歷練,否則就有很高的機率發生系統分析師設計的東西無法實作之類的問題。

系統分析師主要的學習重點,就是設計系統這件事,以及要能開出系統規格書或是需求規格書等文件,UML 與一些流程表示的圖樣繪製工具是必備的,而對軟體設計的週期也要有充份了解,並且要和專案經理或專案的利益關係者有充份的交流互動,以及要和上層說明系統分析的概念等等,因此表達能力也是重點,像是簡報能力以及文字表現能力都是必修的課程。

系統分析師如果不想走技術路線,可以在待個三年以後往管理職前進,也就是專案經理。

5. 軟體架構師 (Software Architect)

顧名思義,軟體架構師要做的就是對系統架構的規劃和設計,因為一個軟體 (尤其是商用系統) 的複雜度其實很高,軟體架構師必須要能夠由不同的面向來思考並進行設計,且考量的不能僅止於軟體開發,就連硬體與網路等基礎建設面都要顧到,所以軟體架構師要有夠寬廣的資訊專業知識以及經驗,才能夠勝任這個工作,所以一位軟體架構師通常都要有十年以上的工作經驗,且同時歷練過 PG, SD, SE, SA 等職務,才能擁有足夠的知識與經驗來做這部份的工作,當然它的等級和薪酬也是相當高的。

6. 專案經理 (Project Manager)

專案經理算是軟體開發領域管理職部份最高的,基本上當專案經理的人要對自己負責的專案有充份且透徹的了解,要能調配資源,能控制時程,能控制範圍,能控制進度以及品質等等,所以最近很多公司都要求專案經理需要具備 PMP 的資格,也就是要求專案經理要有充足的專案管理基本知識。
專案經理的歷練則是不定時期的,它也是再往上走的重要路徑之一,所有和管理有關的都會沾上邊,所以在這個階段可以學到的管理面知識很多,但它也是負責專案成敗的重要角色,所以壓力通常都不低。

7. 技術總監 (Technology Director)

這應該算是技術類的最高職位了,綜覽整個公司的技術發展方向以及規劃,以及前瞻性技術的先導評估等,通常也是技術部門的主管,對外則是負責公司的技術代表或門面,對內則是管理與制訂公司的技術發展方向與策略等,對公司的技術影響力與競爭力有直接的關聯。

以上就是筆者對整個軟體開發的產業不同職位的一些簡單介紹,希望能給一些對軟體開發領域的發展路線不那麼清楚的人一些幫助。