如何讓一個產品誕生:S/W RD
S/W RD是Software 工程師(軟體工程師)的意思。在講今天的”軟體工程師”之前,先聊一聊大家心目中的軟體工程師在做的是什麼事?寫APP,大概是一個第一直覺會產生的印象。寫遊戲軟體,這也是一種印象。大概很多在大學時代修習資訊或計算機相關科系的人不少在選系之前都是這樣想的。不過,其實還有不少地方是軟體工程師可以貢獻的,比如半導體產業的控制製程的軟體開發工程師。銀行現在很多要智慧化的界面或者智慧註冊等,也需要軟體工程師。當然這裡的產品開發的軟體工程師,也是一種,而要放進產品的軟體,通常都有其特殊性,有時也會稱做韌體(Firmware)。不過,最近比較少聽人提起了。
而要成為一個軟體工程師的基本條件,會有以下的要求:
一、跟硬體工程師一樣,語言的要求,英文的看跟寫是必需的,因為軟體的規格協定,客戶的規格要求及公司內部的開發文件(Desgin Guide, check list…等等)都會是用英文寫的,你起碼要看的懂,也要能寫mail跟客戶對應,至於聽跟說,就看個人自己的要求,能夠聽跟說的人,未來往上爬升的機會是比較大的。
二、既然是軟體工程師,你最少要會一樣程式語言,當然,會的越多,就會越好找工作。然後,不得不說,以放到產品中的軟體而言,C語言還是目前為止最泛用的一種。當然如果你要負責的部份有產品的使用者界面,你就還要會網頁設計的相關語言,這裡也不得不說,HTML還是蠻常用的啦。
三、寫程式的人,還有一個基本需求,這個很難評斷出來,但是偏偏很重要。那就是邏輯分析能力,因為通常一個功能的開發,你除了要能寫出來之外,還要去思考使用者的使用習慣。如何防呆?如何避免一個迴圈變成死迴圈,這都需要很強的邏輯能力。
而當你進入業界之後,在軟體開發這個工作,很可能你會有一個選擇從事那一方面的開發者的困擾,怎麼說呢?學過計算機概要或者組織的人,大概都會對下面的構成有基本概念:
Application:應用層,這個開發出來的是要給一般使用者使用的應用程式,比如Word,就是一種App。
Protocol:協定層,這個通常會依產品的不同,要開發出對應的Protocol,比如網通產品,你可能要開發出相對應的802.x的protocol,不過,這個部份,最近不少晶片商都會提供第一版的程式碼,你要做的可能只是fine tune.
Kernel:核心層。這個比較複雜,涉及跟硬體系統的溝通。核心層的開發,通常是晶片廠會要做的事情。但是一個比較先進的產品,雖然一般而言,Kernel是由晶片商提供,但也會需要有懂Kernel的軟體工程師,一旦遇到一些涉及系統核心及硬體設計需修改核心對應時,會需要懂Kernel的人來跟晶片廠商協調。
而上述的三種分類,是一種比較概略的分類,更複雜的系統,分類更細,也更複雜,所以你可能在選要做那一方面的程式開發時,要自己想一下,因為有些人喜歡開發應用層,有些人喜歡看protocol,有些人可能喜歡核心層的複雜。當然除了開發軟體之外,你通常還需要有寫軟體的開發說明書的能力,公司對於軟體的開發,除了在寫好的程式碼要記入開發者的名字外,還會要求你寫軟體說明書。再者,若是軟體是要提供給客戶做更新的,還要寫release note,說明新增了那些功能,修正了那些錯誤(bug)。所以,想當然軟體工程師的你,有對這個職業有點了解了嗎?