英文的Programming一詞,中文翻譯為程式設計,而對於Programmer,也就順勢翻譯為程式設計師,然而如果拿掉「程式」兩個字,只看「設計師」這名稱,一般人會聯想到什麼?穿著時尚服裝、有著帥氣美麗的外表、拿著筆認真思考創作的形象,我想,絕對很少人會與程式設計師聯想在一起。

設計何以重要?

英文職稱上與程式設計活動相關的,大概就是所謂的系統設計師(System Designer,SD),不過,一般人對這工作還是很難與設計師形象結合在一起;要說到與程式相關,且形象上比較接近的工作,大概是近幾年開始受到重視的UI設計師,然而,談到UI設計師要不要會寫程式這類話題的話,多半就能吵上一架,顯現出「設計師」與「程式設計師」從事的,實際上就是不同的活動。

我會開始去琢磨「設計」這兩個字的意義,其實是因為把玩程式3D建模的近一年來,對於每個作品在著手設計時,都會問自己一個問題:這個作品的「梗」在哪?

程式3D建模只要留下參數,一個作品就可以衍生出無數個作品,若只是要在作品數量上灌水,是件輕而易舉之事,只是這麼做毫無意義,既然是程式建模,自然得發揮程式設計的優勢,有時是隨機迷宮、有時是隱藏於其中的數學,偶而來自女兒的手工創作,而更多時候是會問:這模型建出來很漂亮,它裡頭的「設計」是什麼?

這就牽涉到一個問題:「一個設計要具備什麼元素,才算是個設計?」

就如同我在某一次記錄OpenSCAD的文件〈文字與圓球〉寫到:「你得去觀察,然後思考,尋求規則,接著逐一解決,不單是數學需要這個過程,也不單是程式需要這個過程,你玩弄任何的東西都需要這個過程,這麼一來,你的設計才會被賦予深度,才會有靈魂!」

實際上,我也不是第一個對「設計的設計」是什麼發出疑問的人,軟體界經典作品《人月神話》的作者Federick Brooks,甚至為此寫了本《設計的設計:一位電腦科學家的設計歷險》。他在序中,就談到:「不論心理上或實務上,設計的過程並不被充分瞭解」,並談到他的研究動機之一是「各個領域中,在最佳實務與平均實務之間,以及平均實務與半調子之間,存有巨大差距」。

由於存在著巨大差距,Federick Brooks想要探討的是,設計的過程是否有一些規則可循。

因為,他認為:「許多設計成本都是耗在重做的部份,亦即錯誤修正」、「平庸的設計可證明既浪費地球資源、破壞環境,以影響國際競爭力」。

而這讓我想起曾經看過的一句話:「糟糕的程式設計師,一年可以創造兩到三個工作」。

程式設計領域外的「設計」

實際上,如果想要瞭解程式設計中的設計,可以暫時跳開程式設計,先看看這個領域之外的設計是什麼。

身為軟體界的大師,《設計的設計》一開始雖然是從軟體工程師的觀點來看設計,然而後續就跨足到其他領域,最後來到海濱別墅、廂房擴建 、廚房改造等設計的探討、也回顧了自己經手過的System/360、OS/360之設計,甚至連《電腦架構:概念與演進》的書籍設計也列入討論。

除此之外,在網路上搜尋「什麼是設計」,可能得到許多的解答,其中有些共同點,例如,〈什麼是設計〉中,談到了:「設計師就是解決問題的人(Problem Solver)」,而〈跟四歲小孩解釋「什麼是設計」〉中,談到:「設計是為了讓任何東西變得容易使用,或是容易理解」,這指出了設計與藝術的不同:設計可以是一種藝術,藝術卻不一定是設計。

在尋找什麼是設計時,出現了設計思考(Design Thinking)這個有趣的名詞。

這是由美國一間顧問公司IDEO執行長Tim Brown在2011提出的一個思考模式,將設計師解決問題的經驗與邏輯,具體化為一個通用的流程,而這似乎就是Federick Brooks在2010出版的書籍中,想要探討的:尋求設計過程中一些可循的規則。

在網路上搜尋設計思考,會有許多的資料可以參考,有個簡短的影片〈什麼是設計思考?〉是個不錯的開始,其中談到了設計思考過程的幾個關鍵:向使用者學習、尋找模式、定義設計原則、把點子做出來、反覆測試原型。並且透過這個過程,以便找到思考與實作的平衡點。

程式的設計思維

不同的文件對於設計思考,列出的關鍵點不同,然而,身為程式設計師,一定覺得設計思考上列出的要點,與軟體設計上顯然有著極大的相似性。不過,程式設計界偏好使用「設計思維」這個名詞,那麼,程式設計時的設計思維是什麼?

在人人學程式、從小學程式的風潮下,有許多人談到了,學習程式設計,並不是要每個人都成為程式設計師,而是要從程式設計中學習運算思維(Computational Thinking),如維基百科上寫的,運算思維是運用電腦科學的基礎概念,進行問題求解、系統設計,以及人類行為理解的一種思考方式,是透過問題的拆解、模式識別、抽象化,而後建立演算法的過程。

因此,程式設計師從事的設計之一,在程式面上最直接的,無疑的就是演算法設計,那麼還有哪些程式設計活動被冠以設計之名?

我直接聯想到的就是設計模式,針對軟體設計中反覆出現的各種問題,提出的解決方案,其目的之一與Federick Brooks相同,列出一些可循的規則,避免重複的設計成本。

然而,設計模式是針對物件在結構、創建、行為等角度切入時,可以有什麼樣的設計;實際上,設計上可以從各個面向來切入,看一個東西有無融入設計;另一方面,程式設計基本上是人類從事的活動,除了解決程式設計師直接面對的問題之外,還得解決程式設計師與程式設計師之間的問題,或者彼此間交錯綜衡而衍生出來的問題。

也因為程式設計活動中會有著各種的問題,不斷重複地在發生,因而產生了許多程式的設計思維探討,想要簡短地知道有哪些面向的話,iThome往年都有請專家推薦程式設計思維類必看好書,這些書籍提供的,實際上就是設計領域在討論的設計思考過程。

讓程式融入「設計」

給你一隻筆,你就可以畫畫,因此繪畫很簡單,對嗎?

給你三個月(或者八週更短之類的),你就會寫程式,因此程式設計很簡單,對嗎?只是你的程式中,真的有設計的成分在裡頭嗎?

就如同Federick Brooks談到的:設計很重要,教導設計也很重要。反過來說,如果想要真正進入程式設計,必須切記的是,設計很重要,學習設計也很重要。

程式設計界有所謂的內功心法,也就是能不限於特定語言、技術、平臺,面對類似問題時也能通用的解決方案,仔細想想,這些也就是程式的設計思維。如果問糟糕的程式設計師與優秀程式設計師之差別,一個簡單的答案或許是:後者可能終其一生,都在為了在程式中融入設計,而不斷地學習各種的設計思維。

那麼,你只想寫程式嗎?或者你想從事程式「設計」?那麼,想盡辦法,讓你的程式中融入設計吧!下次面對你的程式時,也可以好好地審視看看,裏頭真的融入設計的成分了嗎?

專欄作者

熱門新聞

Advertisement