最近讀到游舒帆的一篇文章〈這幾句話,輕鬆惹火程式設計師〉,裡頭列出幾句程式設計師經常會聽到的「台詞」,即使不見得真能惹火程式設計師,不過程式設計師聽到了,恐怕心裡都不是太高興。

然而,在諸多這樣的台詞中,其中提到了一句「你這是技術人員思維」,讓我開始聯想到了一些事情。

「技術人員思維」這樣的詞語,在我的軟體開發工作生活中,其實也不時可以聽到,使用到的情況也很多,像是「不要用技術人員的思維來想這件事情」,或是「要跳脫技術人員思維」。在這樣的話語中,「技術人員思維」似乎是一種帶有負面意涵的用詞。

出自於非技術人員口中的「技術人員思維」究竟所指為何?

為什麼會成為一種負面的刻板印象?對技術人員來說,這樣的印象是否公允?或其實也有值得反思之處?

軟體設計時,容易產生將程式做得功能強大的迷思
在眾多對「技術人員思維」的指控中,有一個很常遇上的情境,就是在討論使用者對軟體的操作介面上,也就是軟體面對真實使用者的那一層--軟體究竟要如何讓使用者,使用到它所提供的功能。

在這個議題上,人們對於「技術人員思維」的想像是,技術人員傾向把功能做得強大、複雜,因為這樣,才可以展現技術人員的技術高超。但是,強大的功能時常伴隨著複雜的操作介面,而複雜的操作介面讓使用者不易於使用。

當然,我們都明白大多產品的設計,都應該是簡單、直覺、易懂、易操作,但是,這樣的基本的原則,說來簡單,實行上卻相當的不易。

愈是明白軟體可以設計成擁有更強大功能的人,愈是難抵擋賦予軟體更強大、更豐富功能的誘惑。

沒有人希望軟體功能不強大,但是,強大的功能,的確也容易引入複雜性。

當然,不乏透過簡潔易懂的介面,讓使用者取用到強大功能的例子,但我想這的確需要很巧妙的設計和安排。因為,要有一個單純的門面,卻將豐富、複雜的功能隱藏於其後,實際上,並不是一件容易的事情。

於是,對強大、複雜功能追求的渴望,常常就構成了使用者使用上的障礙,不論是操作不直覺、操作程序繁瑣、不順手,或是功能本身就是軟體本身的累贅。

最近看到一個例子,在一個清單顯示的功能裡,清單中的每個項目共有多個欄位,設計者希望可以依據特定欄位做清單項目的排序。問題來了,就功能的強力或豐富度來說,既然可以針對特定的欄位來排序,那麼,自然而然能夠針對每個欄位都做排序。

沒有錯,功能上可以針對每個欄位都做排序,但是,對使用者來說,並不是每個欄位的排序都有真正有用的意義。

也就是說,使用者在檢視清單時,不會使用對欄位排序的方式來檢視清單。如果這時加上了這個功能,它就成了一個累贅的功能,有可能浪費更多的系統資源(背後可能是你的Cassandra得多做一份index!),但對使用者來說卻毫無意義。

你當然可以支援某個名稱欄位用倉頡碼來排序的功能,但是這有意義嗎?

對於強大功能的渴望,不是只有技術人員才有,但常常是技術人員或技術出身的人,顯得比較嚴重,因為,技術背景讓他們格外明白,功能可以如何擴展得更強。

難以抵抗新技術層出不窮的誘惑

除了迷戀功能的強大之外,對新技術的追逐,也是許多人認為技術人員常見的特質。

新的技術、新的設計概念、新的程式庫、新的應用程式框架、甚至是新的程式語言、……等等,對許多技術人員就跟新的3C產品具備一樣的吸引力。於是,不少人會想在每個新的專案中,嘗試使用他們所能用到的各種新技術。渴望了解或運用新技術,當然是每個技術人不斷精益求精,讓技術能力始終能走在前端的原動力。

但是,任何的新技術或概念,都具備不確定性。相較於運用一段時間的技術而言,終究是較為不穩定或不成熟,應用在需要穩定性、風險夠低的開發專案,就不甚恰當。有些開發專案適合練功,但並不是每個專案的性質都是如此。若只是盲目地想在每個專案,或在不適合的專案中來嘗試,就會帶來一些負面的效應。

相信很多人都有類似的感覺,看著自己過去做的設計、寫下的程式碼,總是可以輕易指出一堆缺點。這並不是過去的自己太糟,而是現在的自己進步了。優秀的程式設計者總是在進步,隨著經驗的增長、視野的開拓、新觀念的習得、……等等,回過頭去再檢視自己過去的設計產物,印證自己的成長,對比之下,自然能找到諸多不足處。這種現象是好事,不過有些程式設計者眼裡無法容忍自己過去所遺留下來的缺陷,千方百計的想要予以除去。這種想法的出發點是對的,但是落實在實務中,這種改進需要有計畫的循序漸進,就一如「重構」中所建議的方式一樣。

可是,有些人會抱持著較為激進的態度,總是希望一次根除。所以,有些時候你會看到,有些程式設計者總是在建構他們系統的基礎設施,但是等他們完成一個版本的基礎設施之後,眼界更高了,不能接受已完成產物的缺陷,於是又打掉重練,常常就這麼重複著。基礎設施愈做愈好,但始終沒有建出實際上要做的系統。

事實上,除舊布新,以及完成真正工作,在這二者之間,必須取得一個平衡,不能總是在翻新基礎,也不能只追求完成系統,而不顧疊床架屋的情況繼續發展。

回歸現實,同時考量技術以外的因素
不論是對強大功能的追求、新技術的迷戀、或是尋求不斷的成長及完美的工作產物,都是很好的特質,也是來自於對身為技術人員的榮譽感。但是,放到產品本身或產品開發的現實面上,都必須拿捏其中的平衡點。

在功能上,你必須考慮到使用者是否能夠輕易的取用、不致於太複雜因而構成障礙,甚至不會成為無用或雞肋般的功能,最終只是造成資源的浪費。

你也必須考慮到開發的時程、成本,而不是只想滿足自己,將新技術當做玩具般的應用在不適合的專案裡,或是一心追求完美,而不顧系統完成或軟體上市也有預定的期限。

我想,並不是每個技術人員都會有以上所提到的特質,但是,這的確是許多人心目中對於技術人員特質的看法,因此,也才會有「你這是技術人員思維」的指控方式。

回首過往,我們過去可能都曾經有過類似的思維,但我們也都很有可能已經超越了這些想法。我們不再覺得「萬般皆下品,唯有技術高」。

相反的,我們知道完成真正能用的軟體,改善、甚至改變人類的生活,才是技術最後的目的。「技術人員思維」不見得適用在每個技術人員身上,甚至,有時也只是大眾對於非技術人員的一種刻板印象或偏見。因此,我們期許每個技術人員,不被技術本位的思維所束縛,而能看得更高、看得更遠。

專欄作者

熱門新聞

Advertisement