英雄程式人在軟體開發團隊中擔負起救世主的角色,這樣的特質,使他試著一肩扛起整個開發專案的重責大任與成敗,即使燃燒自己也毫無怨言。
除了英雄程式人之外,還有一類的程式人,同樣是我們在軟體開發中時常會遭遇到,而且特色相當鮮明,這一類的程式人就是「牛仔程式人(Cowboy Programmer)」。
愛用黑技、不作設計
我們大多數人從西部電影中獲得對「牛仔」的典型印象──獨來獨往、視法律如無物、衝勁十足、速度飛快。軟體開發領域裡的「牛仔程式人」差不多就是這樣。撰寫程式時,他們最重視完成的速度,所以會竭盡所能地抄小路、走捷徑,即使只是一時取巧的方法,只要能縮短完成的時間。心裡放不進其他的考量。
牛仔程式人不會關心這樣的程式,別人是否能夠輕易地讀懂,也不會深謀遠慮,在意日後這樣的程式是否好維護、容易擴充,只要在當下能夠達成目的就成了。
牛仔程式人喜歡獨來獨往、單打獨鬥,不喜與他人打交道,更不喜歡結群成隊,他不容易融入團體開發,喜歡憑自己的力量解決問題。當然,他更不會受開發程序所限制、也不會遵守「別人訂下」的開發規範、命名慣例,他有自己的一套,開發方法自成一格。
這種人熱愛冒險、有衝勁、喜歡嘗試新鮮的事物,一旦設定了目標,便不顧一切地往前直奔,直到解決問題為止。他們某種程度都能稱得上高手,而且對程式設計充滿熱情。
雖然牛仔程式人能解決問題,但所採用的方法,有時候充滿太多的黑技(Hacks),只能取巧一陣子。一旦要在這薄弱不甚堅固的基礎上繼續發展,便會像是在危樓上再加蓋,整個系統便搖搖欲墜。
這些黑技有時艱深難解,不僅他人難以明白,而且日子久了,連原作者自己,可能都回憶不起來。
雖然牛仔程式人解決問題的速度很快,但是因為寫死(Hardcode)太多應用時的條件,使得解決方案不易擴充成為通用性的方案,只能適用於十分狹窄的問題情境。也因為一心追求完成的速度,更使得他們時常不做設計,拿到問題立即埋頭苦幹,直接開始撰寫程式碼。
自由不受拘束是他們的重要信仰
牛仔程式人獨來獨往、喜做化外之民的性格,也使得他們不易被管理。這些人通常有自己的時程表版本,而不受到別人時程規畫的影響。
自由不受拘束,是牛仔程式人重要的信仰價值之一。他當然也不會理會開發方法論、開發程序、程式碼版本控制,因為那樣實在太受拘束了,所以他有自己的一套。此外,牛仔程式人也不喜歡和其他人溝通,因為那樣實在太麻煩、太浪費時間了。
牛仔程式人有自己獨立的價值判斷,他多半能做出你需要的東西,但是作法可能會大大出乎你意料之外。有些人會覺得自己所採用的方法最理想,自己寫下的程式碼是最為優雅、最具自我說明力的。
倘若別人不能讀懂他所寫下的程式碼,代表對方的能力不足,不能理解如此美好的事物,因而不具備和他共事的資格。
具有上述特質的程式人,偶而會在我們的開發生活中出現。說實在的,大多數人在初學程式設計時,多半都具有牛仔程式人的特質,因為未經太多的團體開發經驗及訓練。隨著團體開發的經驗日漸增加,牛仔程式人的特質也就日漸減弱。
但是,仍有一些個人性格突出且鮮明的程式人,並不會因此而改變,他還是他自己,而這也正是牛仔的精神特徵之一。
喜歡單兵作戰,使得牛仔程式人難以管理
很明顯的,牛仔程式人會是團體開發裡的一大難題。對於這種人而言,其實他不需要其他人,他自己也會盡可能地避掉和別人相介接的機會。團體和個人,對他來說並沒有太大的分別,因為他最喜歡的還是單兵作戰,團隊形同絆腳之石。
對團隊來說,牛仔程式人難以管理。你無法預期指派給他一份工作,究竟何時能夠完成、會以什麼方式完成。而牛仔程式人的產出,也都具備它獨有的型式,和團隊所訂定的規範不盡相同,也不易為其他成員所使用、修改,以及擴充,甚至只能暫時解決問題。
現代的軟體開發,幾乎不可避免都以團隊的形式進行。這並不代表非得要團隊才能開發出卓越的軟體,而是代表著一種從手工業邁向工業的型態轉移。牛仔程式人也能開發出好軟體,但他的個人戰力,通常勝不過集結成軍的開發團隊。面對軟體需求的快速變化,只注重眼前,而不預見未來的牛仔式程式設計風格,更讓牛仔們不容易針對變化做出因應。
牛仔程式人應當著重團隊戰力,而非個人成就感
如果程式設計是你的正職工作,不知道你有沒有感受到本文中所提到的種種問題呢?你是否總是一心求快,而用了許多旁門左道的技巧,這些技巧或許可以暫時解決問題,卻不總是長遠之計,以致於在很短的時間內,就失去了作用,引發你的程式必須大幅修改呢?
你的程式碼是否總是個人風格太過強烈,以致於無法為他人輕易閱讀、無法與他人共享、也無法為人所用呢?你是否總是不遵守團隊的規範及開發流程,使得你總是自外於團隊,也讓團隊不知如何運用你的力量呢?那麼你或許就是一名典型的牛仔程式人。
身為程式人的你,應當盡量避免在團隊的開發中,展現太多牛仔的特質。在正職工作以外的開發,或許牛仔式的程式設計風格是一種樂趣,值得享受。但面對正職的工作,應當還是要將重心放在如何提升整體戰力,而不是一味追求個人的成就滿足。
管理者可試著運用牛仔的優點,才能發揮力量
如果你是一個團隊的領導者,而成員中正好有如此的牛仔程式人,相信你會時常為他頭痛,因為牛仔程式人管理起來有著極高的難度。他對於遵守正式的開發流程興趣缺缺,就算表面上願意遵守,通常也是陽奉陰違,甚至在背地裡怨聲載道。
指派給牛仔程式人的工作,究竟何時會完成,難以估計,有時很快、有時很慢,這並非他不認真或努力,只不過他對工作優先順序的定義,往往和你不同。他也無法與別人共事合作,無法產出其他人能重複運用的成果。雖然他們所寫下的程式碼,能解決當下的問題,但一旦遇上需要改變時,更動的幅度通常會很大。重點是,沒有人能輕易讀懂、也沒有人能夠接手維護。
因此身為管理者,應該先試著找出團隊中的牛仔程式人,試著加以誘導,讓他們明白牛仔式程式設計的得與失,並且認可團體的價值,改變他們自行其是的工作模式。
那些無法扭轉心態的牛仔程式人,也並非一文不值,他們仍然有可以發揮的地方,例如獨立處理一些概念驗證(Proof of Concept,POC)性質的專案。這類的專案,需要快速地驗證某個技術上的想法是否可行,產出多半不會留到正式專案中使用。
POC專案十分適合交由牛仔程式人負責,因為他們的實作速度快,程式碼也不需要與他人共用或是與其他專案共享。
做為開發團隊的管理者,總是會遇上不同特質與類型的程式人,每種程式人都有優點及缺點,取其優點而避其缺點,才能發揮每一位程式人的力量。
作者簡介:
王建興
清華大學資訊工程系的博士研究生,研究興趣包括電腦網路、點對點網路、分散式網路管理、以及行動式代理人,專長則是Internet應用系統的開發。曾參與過的開發專案性質十分廣泛而且不同,從ERP、PC Game到P2P網路電話都在他的涉獵範圍之內。
熱門新聞
2025-01-13
2025-01-10
2025-01-13
2025-01-13
2025-01-13
2025-01-14