Saturday, March 7, 2009

用嘴巴寫程式

Jan 15, 2009
用嘴巴寫程式from 獨孤木 by qing

「用嘴巴寫程式」是程式員圈子裡時常被提起的一個詞語。人們提到這個詞語時,有時帶著一些貶意。當人們說某人「不過只是用嘴巴寫程式」,多半暗指這個人只會出一張嘴,盡講一些空泛、摸不著邊際的虛話,實際撰寫程式碼的工作,卻是無論如何也不願動手去做,好似光動動嘴巴,程式碼就能夠生出來一樣。而這樣的人,通常就是位居管理階層的人。而「用嘴巴寫程式」,在大多數時候,就成了程式員諷刺管理者的一種用語了。



的確「用嘴巴寫程式」似乎是許多帶領程式員進行開發的管理者的一種共通的現象。也是程式員對管理者時常發出的怨言之一。對程式員們來說,他們的主管只知道出一張嘴,交待他們要完成某某功能,或是修正某某問題,甚至還押上很緊的期限,完全一付不食人間煙火的樣子,好像以為只需要下令,程式員就能沒日沒夜的加班,在期限內把程式完成。動嘴下命令容易,但底下的程式員搞不好得花上許多的時間才能達成。這階級待遇差別是如此的明顯,使得有些程式員心中最大的願望,莫過於早日「晉昇」到「用嘴巴寫程式」的角色,這麼一來,工作就輕鬆多了,只需要動動嘴巴交辦事情,底下的苦命工程師自然得乖乖的把程式寫好。面對不合理的制度,不是打敗它就是加入它。不滿的程式員們選擇加入「用嘴巴寫程式」的行列之中。



這便是許多人心目中對「用嘴巴寫程式」的看法,但卻是一個相當負面的看法。我則對「用嘴巴寫程式」有另一種不同的正面觀點。



我認為「用嘴巴寫程式」不是許多人想像中那樣輕鬆的工作,事實上,要做好這樣的工作,需要的條件資格更為嚴苛。許多程式員未曾感受到有一位「很會用嘴巴寫程式」的主管帶領是一件美好的事,也有許多程式員主管完全沒有發揮「用嘴巴寫程式」這個角色應有的價值。



之前曾經提過,做為一名技術型的管理者,有一個關鍵的心理障礙,便是不知道如何將工作分派出去,以致於時常把太多的開發工作攬在自己身上。所以,想要勝任他的工作以稱職的演出應有的角色,他必須讓自己不要涉入專案的具體開發工作過深。



但是,做為技術型的管理者,其實還有另一個關鍵的障礙就是讓自己跟專案的具體開發工作完全脫勾了。這一類的管理者,完全只以WBS以及專案時程表為核心,他只關心每一項工作交給了誰去做,何時應完成,或者已經延遲了多久,預計還要再延遲多久。而這樣的管理者,就是前段文中所提到的那一類「用嘴巴寫程式」的管理者,他們只負責分配工作、設定時程,時間到了,再來審查程式員是否已經如期的完成,倘若沒有完成,看是要調派其他的人力協助、或者多施加點壓力還是採取其他的途徑,以便讓工作盡早完成。在這樣的工作模式下,管理者和程式員好像分屬在兩個不同的世界,除了專案的進度審查會議外,二者好像沒有太多的關連。



這樣的模式,卻也沒有把握到「用嘴巴寫程式」的精神所在。根本原因在於只用嘴巴下指令,卻沒有用嘴巴提供程式員必要的協助。



在許多時候,程式員之所以需要花費許多時間來完成他的工作或者甚至無法完成,是因為他對他的工作缺乏方向感。程式員或許不知道他的工作應當用什麼具體的技術完成、不知道要完成他的工作,應該依序的採取那些步驟來完成。程式員或許會遭遇到一個對他來說根本完全無法理解的問題,即使耗費大量的時間仍舊無法解決,使得進度始終原地踏地。這都是因為缺乏一個知道如何「用嘴巴寫程式」的管理者,來為他們指引方向。



一個懂得如何「用嘴巴寫程式」的管理者,會知道如何將整個專案內的工作,劃分成為若干個具體可執行並且前後連貫的工作項目。同時,他也會知道如何挑選正確的人選來執行相對應的工作。更重要的是,他會知道被挑選執行某一特定工作的程式員,倘若要完成該工作還缺少些什麼,進而在程式員執行工作的過程中,持續的提供必要的協助。



程式員可能缺乏某些技術背景,管理者最好自己就懂得完成該工作所需的技術,並且在程式員開始執行工作之前,已經完成好必要的教育訓練。假若一個工作需要AJAX技術,你總不能讓一個完全不會AJAX的程式員自行想辦法搞定吧?倘若管理者自己也不熟悉該技術背景,那麼最好也要能建議並提供必要的資源,例如書籍或參考資料,以免讓程式員有如身處茫茫大海中不知所措。但這卻是許多管理者最常發生的情況。



事實上,管理者最好還是自己也懂得該技術,否則這項工作的風險就很高,因為這意謂著當執行這項工作的程式員遇到難解的問題時,管理者不知道如何提供解決問題的方向。事實上,這是技術型管理者的一個重要的價值所在
- 對於技術的熟悉以及長久累積下來的經驗,管理者早就經歷過各式各樣的問題,這使得他可以「用嘴巴寫程式」寫的很好。當程式員遇上某個問題時,或許花上許久的時間,仍不得解題之門而入。但有經驗的管理者,或許一眼便能看穿問題所在,直指問題核心。他或許只需要程式員提供一個錯誤訊息、錯誤代碼、或問題的現象,便可以從過去的經驗中直接建議可能的發生原因。這能省去程式員大量的時間。



是的,指引程式員工作的方向便是「用嘴巴寫程式」最重要的價值。當你在交付一項工作時,應該要讓負責這項工作的程式員,知道完成這項工作的大略步驟。許多程式員拿到一個工作時,往往只知道終點在何處,卻不知道中間需要經過那些地方。身為「用嘴巴寫程式」的管理者,應當為這樣的程式員提供協助、指引他們,讓他們知道這個工作需要循序漸進的完成那些事情。



不論是在正式的專案進度審查會議,或是平日的相處,管理者都應該對程式員的工作保持一定的關心
- 不只是關心完成或沒有完成,更要關心知不知道怎麼做、知不知道接下來要做什麼、有沒有遇上什麼重要的問題,需不需要什麼樣的協助。如果你是管理者,在必要時,你可能需要親自下場為你的程式員寫一段關鍵的程式碼,或者和他一起除錯。你對技術的掌握度以及豐富的經驗,可以為他的工作提供寶貴的助益,同時節省大量的時間。



身為「用嘴巴寫程式」的你,不意謂著就可以和技術脫節。你或許不負責具體程式碼的產出,但卻要為整個程式碼的產生鋪好道路、建好基礎的框架。想要為你的程式員提供方向、指點迷津,你不僅不能脫離技術,而且要更熟悉技術,特別是對於新技術趨勢的掌握,因為你最好就是團隊中主要決定技術架構的人,而且最好也是主要技能的提供者。



許多人都認為一旦加入「用嘴巴寫程式」的行列時,便可以擺脫撰寫程式碼的勞力工作,但如果你本身未曾在程式設計上下過苦功,建立起深厚的基礎,即使能轉移至管理性的職務,多半也不容易將這樣的工作做好。一來,因為你無法提供技術性的方向,所以對團隊能貢獻的價值不高。二來,你不容易成為團隊真正的精神領袖,在管理上難以建立一定的權威。程式員某種程度像是江湖中幫派裡的幫眾,幫主最好武功高強、才德兼備,否則帶領一群臥虎藏龍的弟兄們,恐怕會相當的吃力。

No comments: