將程式設計工作做為一生的志業,似乎是眾多喜歡程式設計的朋友們共通的願望。不過,也有一些人將程式設計工作定位成是適合年輕小伙子的工作,他們將程式設計工作視為苦工,大多時候工作時間長、待遇也有限。

程式設計工作就像是在吃「青春飯」,等到年紀稍長,若是不能晉升至管理性質的職務,在體力上跟不上年輕小伙子,對於新的語言、工具、技術,甚至還有新的設計觀念,也沒有新世代的程式設計者吸收的快、運用的靈活,那麼在程式設計工作上,很有可能就沒有辦法和年輕設計者匹敵。

有道是,江山代有才人出,一代新人換舊人。過去自己可能也算是一名好手,但是隨著時間的逝去,有一天,當你看著團隊中新進的小伙子,雙手熟練、快速地在鍵盤上飛舞,他熟悉最新的整合開發環境,不論整合開發環境裡有多少熱鍵,他都運用得好像指尖自己就能熟記這些組合一樣。他們口中討論的,盡是最新的開發觀念還有設計方法。即使自己滿懷著一生都要寫程式的想法,也難免會懷疑自己,是否跟不上年輕一輩的程式設計者。

該繼續寫程式還是轉至管理職?
對於那些喜愛程式設計,想要將程式設計做為一生志業的程式設計者來說,除了必須考慮到工作收入之外,想到了體力可能隨著年月而消退,對新事物的吸收能力可能也漸漸不如以往,或許,就會將這樣的想法束之高閣,然後想辦法轉換至管理性質的工作上。

對於一名優秀的程式設計者來說,轉換至管理性質的工作,並不見得就是所謂的向上提升或向下沉淪。有些人或許會覺得轉換至管理性質的工作,頭銜轉換了,就是一種向上的提升。也有些人或許會認為,一名優秀的工程師應該持續在工程領域貢獻,棄絕了程式設計、轉換跑道去做管理工作,無疑是一種沉淪。

事實上,在我的想法裡,一名優秀的程式設計者無論是轉換至管理性質的工作,或是繼續留在程式設計的實戰領域貢獻,都是同等的重要。

一名能夠同時兼具管理能力,以及擁有豐富實際開發經驗的技術管理者,事實上是相當難得的。軟體開發是一種團體的活動,需要有人居中協調指揮,才能發揮團體的總合戰力。一方面懂得管理,可以讓每個人都適得其所貢獻最多價值,也可以妥善安排資源來達成目標.另一方面,懂得技術,使得他可以站在技術的制高點上綜觀全局,做出更好的技術決策。

程式開發老手所擁有的優勢

有些時候我們會看到一些開發團隊的管理者,或許有管理領域的背景,但是因為不熟悉技術,在面臨開發過程中需要基於技術資訊做一些決策時,就很難提供團隊其他成員一個更好的指引。當然,也有一些開發團隊的管理者是技術背景出身,但不見得對管理工作有更好的心得及能力的展現,所以,即使相當熟悉技術的細節,自己的能力也很好,但沒能讓團隊中的每個成員,用更好的方式來合作。

有時候,這一類的管理者都會親力親為,甚至自己一肩扛起最重要的開發工作,這往往使得他見樹不見林,只專注在自己的開發工作,忽略了其他成員。這說明了同時兼具管理能力和技術能力的開發團隊管理者,有多麼的重要,事實上,也是十分的難得。

臺灣優秀的程式設計者,似乎大多都選擇了轉換到管理工作的跑道上,無論事實上他們適合或不適合,好像在業界的風氣,就必須做這樣的決定。可惜的是,很多不擅長或是不適合做管理工作的優秀程式設計者,也被推上了來,反而沒辦法真正發揮他們的長才。

不過,對於那些想持續深耕程式設計領域的程式設計者來說,職場的現實會先構成第一道考驗。在臺灣,職場的現實條件是將程式設計者工作視為最低階的開發工具,無論你的能力、資歷或是經驗,差別可能不會太大──最起碼在收入報酬之上。這是使得許多優秀的程式設計者,最後還是選擇轉換跑道的原因之一。

事實上,擁有豐富經驗、持續專注在技術領域的程式設計者,也是團隊中相當重要的資產。

我們再回到本文一開始所說的,當你身為一名有點資深、也累積了不少經驗,但是,當你看到身邊的小伙子寫起程式來的衝勁,難免會懷疑自己是否能夠跟上他們快速的步調。何況,他們不僅寫起程式來飛快,他們還有具新鮮到不行的肝啊!這樣的話,資深的程式設計者還有什麼優勢呢?

單就寫程式的速度來說,我曾經思考過程式設計者老手和新手的差別。或許新一代的設計者的確更熟悉新的工具,看著他們靈活操控新世代的開發工具,更快速地產生程式碼,有時難免感嘆自己在開發速度上已經跟不上他們。

不過,「快」可以有很多不同的定義,更快速的產生程式碼,當然是一種「快」。但是,光只是把程式碼產生出來,並不代表開發結束。除了能達成規格中所制定的功能之外,我們需要的是有足夠品質的程式碼。甚至,在開發的過程中,我們很有可能會對既有的程式碼做修改,或是以它為基礎,持續擴充或改良,以便達成不同階段的目的。

以品質決勝負

有些時候,我們有可能只是更快將第一個版本的程式碼產生出來,它們卻有可能沒法子通過一定的品質標準。接著,我們會需要花費更多的時間,才能修正其中的品質問題。這麼一來,整體的速度可能並沒有比較快。即使我們很快的產生程式碼,品質也很不錯,沒有嚴重的瑕疵,但是,這些程式碼無法因應之後的修改、擴充,致使後續的修改動作,花費較長的時間。

由此可見,要量度程式撰寫的「快」,單看一開始產生程式碼的速度是不夠的,在日後的許多環節上,都有可能影響到最後得到成品的時間。設計程式得快,不是單看表面上的快,真正的快,有時候是來自於準。

當你程式寫得準時,品質會夠好,不用花上一長段時間反覆修正品質問題;當你程式寫得準時,你只需要使用一小段程式碼,或許就能抵的上別人所寫下的一長段程式碼。同樣的,當你程式寫得準,你所寫下的程式,像是能夠預測接下來會面臨什麼樣的變化,即使必須因應需求而改變,也不需要修改或小幅修改就能達成目的,整體所花費的時間就少很多。這就是因為「準」所隨之而來的「快」。

這讓我想到,在金庸的《笑傲江湖》這部小說裡,在《傳劍》一回中,作者描述到了風清揚傳劍於令狐?的橋段。面對擅用快刀的田伯光,風清揚是這麼說的:「田伯光那廝的快刀是快得很了,你卻要比他更快。以你這等少年,和他比快,原也可以,只是或輸或贏,並無必勝把握。至於我這等糟老頭子,卻也要比他快,唯一的法子便是比他先出招。你料到他要出甚麼招,卻搶在他頭裡。敵人手還沒提起,你長劍已指向他的要害,他再快也沒你快。」

這一段風清揚的解說,似乎道出如何更快的道理,也說出了有經驗的程式設計者的優勢。基於過去豐富的經驗,你會知道如何避掉那些容易掉入的陷阱,進而更不容易產生臭蟲;你也會更容易知道程式實際運作時會遭遇到的種種異常情境,在撰寫時便考量在內;當然,你可以知道如何寫出更具通用性的程式碼,讓一小段程式碼就能滿足各種多樣化的需求;你也更能預測接下來需求變化的方向,使得設計時便予以考量在內。

當然,經驗老道的程式設計者一樣可以熟悉新式開發工具,讓自己產生程式碼的速度和新世代的高手一樣快。但是,新世代的高手不見得在經驗上可以追上經驗老道的程式設計者,這使得經驗老道的程式設計者有機會透過寫得更準,因而寫得更快。

 

專欄作者

熱門新聞

Advertisement