何謂設計(design)?

我身邊的朋友還有本文的讀者,我相信很多都是從事軟體的開發工作,有時我們甚至會自稱為程式設計人員或軟體設計人員。

而在這個工作領域中,我們時常會接觸到「設計」這個詞彙,其中最常使用的,大概是系統設計這個詞彙吧。在軟體開發的生命週期中,系統設計(system design)的這個活動,時常是在系統分析(system analysis)這個活動之後。當做完系統分析之後,確定了系統的規格之後,緊接下來登場的便是系統的設計。

當然,除了軟體領域之外,還有很多其他的領域也會使用設計這個詞彙,舉凡室內設計、髮型設計、工業設計、……等等。這麼多的領域都會使用到「設計」這個詞彙,那麼究竟何謂設計呢?

在維基百科上,針對「設計」這個條目的說明是:「設計意指有目標和計劃的創作行為、大部份為商業性質、少部份為藝術性質。」
而在教育部的國語辭典的解說中,設計可做二解(1)謀畫算計,如三國演義˙第十一回:止有鄄城、東阿、范縣三處,被荀彧、程昱設計死守得全,其餘俱破。(2)預先規畫,製訂圖樣,如「室內設計」。

這些解釋都或多或少詮釋了從不同面向上來看設計的意涵。不過我自己還有另一個看法:「設計是為達目的而採取的手段。」

設計的目標與方式
每個設計,都是為了滿足一個或多個目的而設置的。例如,紅酒都是用軟木塞塞住瓶口。為了取出軟木塞,有各種不同的開瓶器被設計出來,但它們都具備相同的目的──盡量省力的將軟木塞取出。

例如,蝴蝶型的開瓶器,具備一個螺旋的鑽子,可以旋轉使其漸漸進入軟木塞時,此時兩邊的把手會漸漸升起,當把手到達頂點時,只需將它們扳下,即可輕易的將軟木塞取出。但還有另一種單桿手旋式的開瓶器,一樣將螺旋鑽子旋轉進入軟木塞,接著再利用側邊的桿壓在瓶口,一壓即可將軟木塞拉出。

上述這兩種不同的設計,有共通的目的,卻有不同的做法,這是因為在設計的同時,基於不同因素的考量,而做出的不同設計。

是的,同樣的目的,換了不同的設計者(因此,有不同的天賦、不同的能力、不同的文化背景、不同的品味),搭配不同的時空背景、應用情境、加上基於不同的考量,就會產生不同的設計。當然,目的本身被達成的有效性也有可能不同。

有時候,當我們看到某些巧妙的機制,我們時常會讚嘆的說「這真是一個好的設計。」例如,我所擁有的第一支手機,也是Motorola的第一具掀蓋式手機StartTac(掌中星鑽),它同時也是全世界第一具掀蓋式手機。它具備一個我很喜歡的設計,就是掀蓋接聽,而合起來時,就自動掛斷。記得沒錯,這還是Motorola的專利。

為什麼覺得這個設計很好呢?因為掀蓋的動作,很像是室內電話把話筒拿起來的動作,這遠比拿出手機,還得按個鈕才能接聽電話,來得直覺又方便多了。當初一定有個聰明的傢伙,他想到了接聽行動電話能不能更直覺這個問題,因而才衍生出掀蓋接聽這個設計,來解決這個問題。

軟體開發領域怎麼看待設計?
同樣的,軟體的設計,也是為了達到開發上的目的而做的。那我們怎麼知道開發的目的?

這是從之前的系統分析階段所得來,這也就是為什麼在開發週期裡,系統設計幾乎都發生在系統分析之後。因為,系統分析後的產物,最重要的就是要界定出所開發系統的目的。系統分析階段結束之後會找出需求、確定需求及規格,此時決定了究竟要做些什麼(what)。我們可以說此時決定了開發的目的。

而為達開發的目的,你可以採取很多做法。你會依據許多條件、因素來決定究竟採用什麼做法。綜合所有必須要考慮進來的因素,決定、設計出可以達成目的的方法、機制。

這就是設計的活動,所以說,設計就是達成目的的手段(how)。

考量與決定
不同的設計,雖然同樣都可以達成相同的目的,但是在設計時會面對各種不同的考量,這些考量就會影響到最後所做出來的設計。有時候,這些被考量進來的因素本身或許也隱含在目的裡。

在軟體設計的活動中,我們會有那些考量?記憶體佔用量、執行效率、彈性、可擴充性、實作技術難度、實作所需時間、可維護性、可重用性、可讀性、因應變動的能力、……。

每個設計者在設計的活動當中,都面臨一連串的決策等著去做。即使設計的最終目的都相同,但是,對於不同考量的偏好,設計者個人的設計能力,設計團隊的特性及文化,都會一一影響到對每個考量的決定。

在設計時所面臨的諸般考量,可以說是我們在進行設計時的限制條件,這些條件深深影響我們所做的設計,所有可用的設計都必須在達成目的的前提下滿足這些限制條件。

有趣的是,在現實的生活中,許多限制條件之間彼此是相衝突的。

例如,設計的效率和實作技術難度、或彈性之間常常是相衝突的,而設計的時間複雜度有時候也和空間複雜度之間是相衝突的。

這意謂著,如果你的設計想要執行地快,那它可能就沒辦法有什麼彈性;如果你的程式想要有很好的彈性,那它可能就執行的不是很快。相同的,如果你的設計想要節省時間,有時候你就沒辦法也同時節省空間。效率和彈性、時間和空間,它們都有可能是我們在做設計時的限制條件,而且它們本質上相衝突。

當魚與熊掌難以得兼,設計者會如何做決定,往往就影響了設計最後的面貌。

要在一堆可能相互牽絆、相互限制的條件下達成目的,看起來好像是一件辛苦的工作,這卻是設計工作真正迷人的所在。真正的優秀設計者,能夠洞察出那個在眾多限制條件下最完美的平衡,然後做出那個能滿足眾多限制條件、卻又最大化整體利益的精巧設計。

在限制下發揮創意
我們可以說,設計就是一門取捨的學問。

好的設計者應該具備洞察全局的能力,他必須很明白所面臨的各種限制條件究竟為何?而自己所處的情境下,對於各種限制條件的偏好又為何?他必須在各項因素間進行取捨時,下最好的判斷。

在設計時,他會問,「在我們的應用中,究竟需要多少效率?需要多少彈性?犧牲效率換取彈性值不值得?犧牲效率換取彈性應不應該?」

也許還有更基本或更進階的問題,無論如何,重要的是,身為一個設計的人,你的責任不單只是達成最原始的目的,你得知道你必須考量到的許多因素,更得知道這些因素的重要性是隨著不同的context而有所不同,進而因為這些不同而做出不同的設計,在彼此相互影響的諸般限制條件下,得到最佳化的解。

把設計講成是手段,或許太過匠氣了。但其實不然。手段的呈現是可以讓人覺得十分精巧又充滿美感的。令人讚嘆的設計,通常是優雅而美的。

專欄作者

熱門新聞

Advertisement