軟體工程的實際體驗 3

以前總以為軟體工程就是寫程式,也許是用不一樣的程式語言,也許是在不一樣的平台上開發,但總而言之就是把軟體寫出來,然後拿去賣錢。而看了幾本編程技巧的書之後,就不斷的想要把那些東西拿來在自己的程式裡面套用,也許是 design pattern,也許是 refactoring,自以為把這些東西都用上之後,再加上各種最先進的技術,便大功告成,一路順風了。

可是在從小公司的2~3人開發團隊,換到中型公司的50+人團隊之後,我突然發現我似乎完全不了解什麼叫軟體工程。也許部分的原因來自於我們公司正處於轉型的時期,很多東西都正處於失序的狀態,可是我卻隱隱感到寫程式賣錢這件事和我想像中似乎有極大的差距,所有這一年多來遭遇到的各種衝擊都讓我不禁在想,究竟軟體工程是什麼?我真的了解其中的精髓嗎?這究竟是公司的個案還是我的觀念有偏差 (我想我可能對種種細微的規範和程序不耐煩)?而這些問號的背後其實都指向最後的這個問題:我喜歡軟體工程嗎?或甚至是我適合軟體工程這個行業嗎?

( 我記得大四畢業的時候,一個蠻要好的同學居然很認真的問我,「你是不是也不喜歡CS (computer science 資訊科學)你是不是也人云亦云填了最紅的科系,然後在這裡熬過四年?」他說他知道自己不是打從心裡要念 CS ,所以雖然短期內還是會靠這個吃飯,但是他不會靠這個過一輩子。研究所碩士畢業之後他去了國防役,後來在廣達工作。工作期間他寫詩、寫小說,還得了聯合文學小說新人獎。18 到28 歲這十年的青春他都給了 CS ,雖然22歲的時候他就已經知道這不是他想走的路 (儘管他應該能走的很順遂),但不知道是身不由己或是缺乏勇氣,他還是在這裡繼續待了將近十年。也許這是我們這一輩的寫照吧?我們有很多的同學在這個產業發光發熱,但似乎也有不少的人在別的領域找到他們的熱情。)

扯遠了,我想我現在還是有寫程式的熱情,(還是我其實沒其他的事好幹了?)否則我也不用寫這些文章了。我現在的困惑是在於,在軟體工程這個大帽子底下,我們究竟要如何應用新的編程技巧來增進軟體的效能和原始碼的可讀性?舉一個簡單的例子,系統裡有個函式裡面有2500+ 行,64個 switch case,我們到底有沒有必要對它進行重構以增加可讀性及除錯性?一方的說法是「沒錯就不要改」,另一方的說法則是「現在不改以後問題會更大」。以前我絕對是贊成後者的,而且馬上就動手(我是 cowboy programmer),但現在我的立場開始有點動搖。關鍵的原因在於我實在沒有辦法保證重構之後的函式百分之百沒有問題。(其實我們也不知道究竟原來的函式有沒有錯,因為沒有人檢查過全部的 case,而且那個函式是 error handling,本來就比較難處理。所以所謂的沒有問題,其實是沒人反應有問題。) 當然你會說 Refactoring 前本來就要準備大量的測試,是沒錯,但問題是整個系統環環相扣,根本沒辦法做 unit test (單元測試),再加上系統裡面有大量的客製化程式,是針對客戶的系統進行的微調或 work around ,這些都必須在客戶的系統上才能進行測試 (有些甚至要上百台系統才能測),這些技術上的問題導致驗證新的函式是一件非常困難的事情,而且這還是高層願意花人力和時間去修改一個「沒有問題」的函式的前提之下。

我現在感覺寫程式其實和 risk management (風險管理)有很大的關係,如果程式的錯誤會造成巨大的災難 (像飛機的導航系統),那也許除非萬不得已否則絕不輕言修改,反過來如果錯誤所造成的影響不是太嚴重,也許就不用把關的這麼嚴格。不過很多時候程式員因為不了解實際的影響幅度,所以無法感受事情的嚴重性,進而質疑管理層的判斷與決定,這時也許只能靠溝通來減少程序員的不滿。而從這裡也可以看出,一開始系統的設計對之後的影響有多重要,如果系統本身是「牽一髮而動全身」,那一旦上線之後,要進行修正的機率大概微乎其微了。

附帶一提,鄒欣的 blog 對我有很大的幫助,他讓我了解到所謂的「軟體工程」大概是什麼樣的一種概念,強烈建議 CS 的學生要去看看。(可惜我大學的時候沒人告訴我這些東西,是那時還沒發展起來,還是我們的教授不屑這種實務經驗,就不得而知了。)

圖片來源

相關文章:

廣告

About Weicheng Chu

創業中,微碧愛普科技 (www.weibyapp.com) 已婚, 有一對雙胞胎兒子, 現居住在美國加州、台灣台中
本篇發表於 軟體工程, 心情記事 並標籤為 , , , , 。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s