2007年12月7日

軟體工程師就要去軟體產品公司或網站工作!- Joel on Software系列

這系列文章是Joel回到他的母校 - 耶魯大學演講時的紀錄。其中有他從以色列到美國的經歷,在耶魯上課的經驗等等。

原文有三篇:

本麵特別拿其中二個重點與大家分享:

軟體工程師就要去軟體產品公司或網站工作

Joel之前在其它文章就曾經提過這個觀點,但他這次以自己的慘痛經驗作為範例,更具有說服力。Joel自己待過Microsoft開發軟體、二家ISP寫內部程式,之後就自己開軟體公司了。在ISP開發公司內部軟體的經驗讓他體會到,軟體工程師應該要在軟體產品公司工作(包含經營對外、有外部客戶的網站)。主要原因如下:

  1. 做企業內部軟體,你沒有選擇好開發軟體方式與工具的權力:做內部軟體時,一般公司會限制你能使用的工具,即使你覺的最好是開發一個網站才是對的解決方案,對不起,請乖乖拉Visual Studio表單,做單機版的軟體,這樣才符合公司規定。你沒機會使用Ruby on Rails,AJAX。而在軟體公司,你永遠有機會使用最新技術,應用最新的流程,畢竟軟體公司一定要跟上技術的腳步。
  2. 做企業內部軟體,你也沒機會持續改善你的軟體:做內部軟體時,一般公司會告訴你:「東西堪用就好了,不要花太多時間,還有成千上萬表單在等你拉喔!」忘了你在學校學的資料結構、演算法吧!只給趕快拉出醜醜的表單,交差了事!在軟體公司,你要花時間好好微調每個細節,拋光打亮你的軟體,不然誰要買「堪用」的軟體?
  3. 最重要的,在軟體公司,你直接在幫公司賺錢,這也代表公司在乎你,你可以得到最好的褔利(當然是跟同公司的比啦!)、最好的辨公室與最佳的遷升機會。你可能寫程式寫到變成台積電總經理嗎?但你可以寫程式而做到軟體公司的執行長!!

學校沒教你怎麼開發軟體

引用Joel原文:

The main thing you don’t learn with a CS degree is how to develop software, although you will probably build up certain muscles in your brain that may help you later if you decide that developing software is what you want to do.

拿到資訊相關的學位,你通常沒有學到如何開發軟體。但是你決定走這一行,你己經打好一個基礎(如果你有認真上課的話啦…)

這個題目本麵感觸很深。當本麵還在學校的時侯,就曾經有一個疑問:當學了程式語言、資料結構、演算法、資料庫等等這些課程之後,我們就可以出去開發軟體了嗎?雖然當時老師都一副有自信的樣子,但總覺的怪怪的,少了些什麼。

之後接觸到軟體工程,感覺看到了一線生機,以為那就是答案。但軟體工程有一個大問題:相關理論為了涵括所有軟體開發的情況,所提出的流程都非常複雜,結果是大多數的專案都不適用。在現實世界,專案並不需要大部頭的流程,這也是為何後來Agile相關的流程會如此風行的原因。

畢業之後出去工作,有幸加入一家開發軟體產品的公司。部門主管剛剛從美國AT&T回來,帶回來許多軟體開發觀念與工具:Requirement、Work Break Down Structure、Design Document、Functional Test、System Test、Version Control Tool、Defect Tracking Tool、Project Management。當時本麵終於恍然大悟,原來當初少的就是這些呀!最終產品命運雖然不佳,但學到的技能與觀念卻一輩子都會記得(在這特別感謝我的前經理PK,謝謝!)。

舉一個例子,學校剛剛畢業的你,就像初出茅蘆的土水師傅一樣,蓋蓋水溝、抹抹牆的技巧應該有了。但你可以去蓋大樓了嗎?許多問題有待你解決:房子主人的需求是什麼?設計圖在哪?怎麼安排各種工人的開始工作時程?蓋大樓的各類工具你熟嗎?學校不會教你這些(至少本麵的學校沒教啦…)。畢竟學校除了教學之外,還有研究的重要任務,這些實務就留給業界了…不過本麵還是想像學校有一些課程,例如專題,能夠應用這些的軟體開發的實務,讓學生在學校時,就能提早接觸。

希望這些說明對還在學校的同學有幫助!!

最後本麵決定學習朱學恆大大的精神,從今天起每篇文章最後都附上阿宅最愛的美、女、圖!本麵的收藏終於有機會出頭天了,嗚嗚…。由於台灣、日本的美女大都被貼爛了,本麵決定另闢利基市場,推出韓國賽車女郎系列 - 這大家很少看到吧!盡情觀賞吧!

uhm3.jpg