Steven's profile大城小愛的幸福PhotosBlog Tools Help

Blog


    5/6/2008

    從 莊子.說劍談軟體人的境界

     

    引述

    從 莊子.說劍談軟體人的境界

    ***

    《 莊 子 ﹒ 雜 篇 ﹒ 說 劍 第 三 十 》

    昔 趙 文 王 喜 劍 , 劍 士 夾 門 而 客 三 千 餘 人 , 日 夜 相 擊 於前 , 死 傷 者 歲 百 餘 人 。 好 之 不 厭 。 如 是 三 年 , 國 衰 。 諸 侯 謀 之 。

    太 子 悝 患 之 , 募 左 右 曰 : 「 孰 能 說 王 之 意 止 劍 士 者 ,賜 之 千 金 。 」 左 右 曰 : 「 莊 子 當 能 。 」

    太 子 乃 使 人 以 千 金 奉 莊 子 。 莊 子 弗 受 , 與 使 者 俱 , 往見 太 子 , 曰 : 「 太 子 何 以 教 周 , 賜 周 千 金 ? 」

    太 子 曰 : 「 聞 夫 子 明 聖 , 謹 奉 千 金 以 幣 從 者 。 夫 子 弗受 , 悝 尚 何 敢 言 。 」

    莊 子 曰 : 「 聞 太 子 所 欲 用 周 者 , 欲 絕 王 之 喜 好 也 。 使臣 上 說 大 王 而 逆 王 意 , 下 不 當 太 子 , 則 身 刑 而 死 , 周 尚 安 所 事 金 乎 ? 使 臣 上 說 大 王 , 下 當 太子 , 趙 國 何 求 而 不 得 也 ! 」

    太 子 曰 ︰ 「 然 。 吾 王 所 見 , 唯 劍 士 也 。 」

    莊 子 曰 : 「 諾 。 周 善 為 劍 。 」

    太 子 曰 : 「 然 吾 王 所 見 劍 士 , 皆 蓬 頭 突 鬢 垂 冠 , 曼 胡之 纓 , 短 後 之 衣 , 瞋 目 而 語 難 , 王 乃 說 之 。 今 夫 子 必 儒 服 而 見 王 , 事 必 大 逆 。 」

    莊 子 曰 : 「 請 治 劍 服 。 」 治 劍 服 三 日 , 乃 見 太 子 。 太子 乃 與 見 王 。 王 脫 白 刃 待 之 。 莊 子 入 殿 門 不 趨 , 見 王 不 拜 。 王 曰 : 「 子 欲 何 以 教 寡 人 , 使 太子 先 焉 。 」 曰 : 「 臣 聞 大 王 喜 劍 , 故 以 劍 見 王 。 」

    王 曰 : 「 子 之 劍 何 能 禁 制 ? 」

    曰 : 「 臣 之 劍 十 步 一 人 , 千 里 不 留 行 。 」

    王 大 悅 之 , 曰 : 「 天 下 無 敵 矣 。 」

    莊 子 曰 : 「 夫 為 劍 者 , 示 之 以 虛 , 開 之 以 利 , 後 之 以發 , 先 之 以 至 。 願 得 試 之 。 」

    王 曰 : 「 夫 子 休 就 舍 , 待 命 設 戲 請 夫 子 。 」

    王 乃 校 劍 士 七 日 , 死 傷 者 六 十 餘 人 , 得 五 六 人 , 使 奉劍 於 殿 下 , 乃 召 莊 子 。 王 曰 : 「 今 日 試 使 士 敦 劍 。 」

    莊 子 曰 : 「 望 之 久 矣 ! 」

    王 曰 : 「 夫 子 所 御 杖 , 長 短 何 如 ? 」

    曰 : 「 臣 之 所 奉 皆 可 。 然 臣 有 三 劍 , 唯 王 所 用 。 請 先言 而 後 試 。 」

    王 曰 : 「 願 聞 三 劍 。 」

    曰 : 「 有 天 子 劍 , 有 諸 侯 劍 , 有 庶 人 劍 。 」

    王 曰 : 「 天 子 之 劍 何 如 ? 」

    曰 : 「 天 子 之 劍 , 以 燕 谿 石 城 為 鋒 , 齊 岱 為 鍔 , 晉 衛為 脊 , 周 宋 為 鐔 , 韓 魏 為 夾 , 包 以 四 夷 , 裹 以 四 時 , 繞 以 渤 海 , 帶 以 恒 山 , 制 以 五 行 , 論 以刑 德 , 開 以 陰 陽 , 持 以 春 夏 , 行 以 秋 冬 。 此 劍 , 直 之 無 前 , 舉 之 無 上 , 案 之 無 下 , 運 之 無 旁。 上 決 浮 雲 , 下 絕 地 紀 。 此 劍 一 用 , 匡 諸 侯 , 天 下 服 矣 。 此 天 子 之 劍 也 。 」

    文 王 芒 然 自 失 , 曰 : 「 諸 侯 之 劍 何 如 ? 」

    曰 : 「 諸 侯 之 劍 , 以 知 勇 士 為 鋒 , 以 清 廉 士 為 鍔 , 以賢 良 士 為 脊 , 以 忠 聖 士 為 鐔 , 以 豪 桀 士 為 夾 。 此 劍 , 直 之 亦 無 前 , 舉 之 亦 無 上 , 案 之 亦 無 下, 運 之 亦 無 旁 。 上 法 圓 天 以 順 三 光 ﹔ 下 法 方 地 以 順 四 時 ﹔ 中 和 民 意 以 安 四 鄉 。 此 劍 一 用 , 如雷 霆 之 震 也 , 四 封 之 內 , 無 不 賓 服 而 聽 從 君 命 者 矣 。 此 諸 侯 之 劍 也 。 」

    王 曰 : 「 庶 人 之 劍 何 如 ? 」

    曰 : 「 庶 人 之 劍 , 蓬 頭 突 鬢 垂 冠 , 曼 胡 之 纓 , 短 後 之衣 , 瞋 目 而 語 難 , 相 擊 於 前 , 上 斬 頸 領 , 下 決 肝 肺 。 此 庶 人 之 劍 , 無 異 於 斗 雞 , 一 旦 命 已 絕矣 , 無 所 用 於 國 事 。 今 大 王 有 天 子 之 位 而 好 庶 人 之 劍 , 臣 竊 為 大 王 薄 之 。 」

    王 乃 牽 而 上 殿 , 宰 人 上 食 , 王 三 環 之 。 莊 子 曰 : 「 大王 安 坐 定 氣 , 劍 事 已 畢 奏 矣 ! 」

    於 是 文 王 不 出 宮 三 月 , 劍 士 皆 服 斃 其 處 也 。

    ***

    別誤會, 引這一篇並不是用來提昇軟體人的中文素養, 純粹只是想到有個軟體工程師在MSN上和我聊到了做軟體的有沒有所謂境界問題 ? 我說有, 就把這篇莊子雜篇說劍寄給了他, 告訴他這就是我的答案。

    而他的回信也如同古文一般簡潔有力 ,

    "看不懂 !!"

    呃.....所以我寫了這一篇文, 稍稍的對他解釋一下, 有不同意見的朋友, 就純然當作是看篇雜文吧...

    在我的觀點裡來看, 軟體工程也是有所謂的"道", 如武有武道, 劍有劍道一般, 人做的事, 總有"心""技"兩個層面。

    因此, 先不必去追究文裡的微言大義, 我認為軟體工程師(SE)的境界就像是'說劍'裡劍客的三種境界一般有"庶人之劍", "諸候之劍"和"天子之劍"。這三個境界, 不但在技上面要有相應的成長, 在心的鍛鍊上, 也要有些覺悟才行。

    讓我從'庶人之劍'談起。

    庶人之劍

    無論是興趣也好, 或是為生活所逼也好, 當我們開始了編程的職業生涯時, 那我們就進入了所謂的"庶人之劍"的領域。

    在這個階段裡的軟體工程師, 每天都是勤於練劍, 終日所關心的, 都是要如何的完成需求目標, 並且完美的把它用程式語言展現出來。

    我們給別人的印象, 也常是日夜相反, 穿著"樸素", 平時反應呆滯, 談起技術來卻是口沫橫飛, 濤濤不絕。兩個人要是在某個技術觀點上有了衝突, 那更是手舞足蹈, 口出"惡言", 毋必要讓對方明白, 我才是瞭解最深入的, 此時的我們, 每日放在腦袋裡的就是"OO", JAVA, C++, API... (這些名語與時俱進, 不同世代有不同的當代顯學)。

    反正, 程式就是我們手中的劍, 數位世界就是我們的戰場。

    劍客是"十步殺一人, 千里不留行", 咱們是"十分砍一支, 千支不留蟲"(十分鐘搞定一支程式, 數千支程式裡沒有半個BUG)。如此境界是很多SE夢寐以求的高手呀 !!

    當然, 由於新的技術日新月異, 我們懂的很快就變成了歷史, 不是用家愈來愈少, 就是根本沒有市場, 昔日的xBASE, Clipper 今日何在 ? 還在使用FORTRAN, COBOL的更是如熊貓般稀少, 今日的JAVA, .NET, PHP, ...五年十年後仍能飯否 ?

    所以在此之境的SE, 每天之所以唸茲在茲的技術提昇, 瘋狂學習, 其實也有其不得不然的原因。

    只是很多SE沒有發現, 這一切的辛苦努力, 其實都只是在"技"這個層面打轉, 強煞也只是一個人。但一個人, 是寫不出WORD的, 不能領悟這個觀念, 軟體人就只能在這個境界裡打轉, 終其一生, 也只能成為一個'怪客', 或是獨行俠。

    心不能突破這個"點", 那技的提昇並不能為SE帶來更多的成長, 但若突破了, 明白了程式不是一個人可以寫好的, 要在軟體工程上有好的作品, 我必需要參與一個團體, 或者, 我要領導一個團體, 那麼 SE 就開始進入了"諸候之劍"的領域了。

    諸候之劍

    所謂的諸候之劍領域, 著重的是SE心中是否有他人的存在, 存在多少人, 就是在諸候之劍裡多高的境界。

    講起來好像很多SE都做得到, 但請看此文的SE們捫心自問幾個問題, 就能證明你是不是真的進入了這領域, 還是自以為是,

    "我寫程式, 有自動加註解的習慣嗎 ?"

    "我寫程式, 會力求格式統一, 變數有規則好懂嗎 ?"

    "我寫程式, 會為了讓系統以後容易修改強化, 而願意多花一些心力, 使用比較困難的架構嗎 ?"

    假如這幾個問題, 做為SE的你的回答都是 YES, 那麼, 恭喜你進入了這個領域。

    在諸候之境, 就是要不斷的保持著系統觀, 很清楚的明白你所撰寫的程式, 在團隊裡的角色, 在未來可能要面對的問題, 並且能考慮現在的TEAM, 未來的TEAM, 在時間和空間裡, DO MY BEST。

    而這, 僅僅只是第一階。

    接下來, 和系統有關的各種技術人員, 包含了軟體美工, 主機設備, 網路通訊, ....等等各種軟體團隊以外的, 整個專案(PROJECT)以內的合作人員, 你也要充分的關心, 並且在程式裡作出你的貢獻。

    比如, 為了方便軟體美工的工作, 你會使用樣版(Template)技巧來把程式和畫面切割開來, 你留下良好的文件讓美工明白, 他們可以如何的獨立作業, 而不需要事事仰賴你的配合。

    同樣, 為了讓DBA更好的調整你的系統效能, 你把SQL敍述切出去, 獨立成一個匯入檔或是引入檔, 在每一個SQL敍述後, 加上足夠的註解讓DBA明白這個敍述所想要做的事, 讓他能自己調整這些存取指令, 而不用先弄懂整支程式。

    想必有些SE已經明白為什麼我要說諸候之境要比庶人之境更高了吧。依上面的要求來寫程式, 雖然技術不見得比較難, 但在心力上的花費, 是要大很多的, 也比較複雜。講白了, SE花了自己的心血, 去成就別人的輕鬆, 通常是累的半死, 別人還總以為本就該如此, 甚至是成其功, 但別人可不知你的存在。所以, 修技之餘, 當然也就修心了, 否則, 是很難甘願如此做的。

    凡此種種, 都是諸候之境的第二階要修鍊的, 要懂的更廣, 更徹底(其它技術領域你不必精, 但卻不能不知道), 同時還要有兼顧其它技術人員, 以自己的心力換取整個技術團隊的效能。

    再接下來的第三階, 就是要去多多關心系統應用的專業領域了。

    系統是一種工作的工具, 它本身的價值必需在使用的領域裡才能彰顯。一個好的系統, 並不是它有多少高深的技巧, 也不在於它有多麼炫麗的外觀, 而在於它是不是真的有幫系統的擁有者(Owner)達成了他的目的。其產出, 是否大於擁有者的投入 ?

    在這樣的要求下, SE在為某個領域裡發展系統時, 一定要去多多考慮專業領域裡的需求的。

    是否進入了這個層次, 也有幾個問題可以自問,

    "我是不是總要使用者告訴我他的'需求'是什麼, 而我自己卻一點建議也提不出來 ?"

    "我對使用者是不是只能言聽計從, 始終只聽到他們抱怨我什麼都不懂 ?"

    假如上面的答案都是否定的, 那麼, 你已在諸候之境的最高階了。

    在系統發展時, 最常聽到SE的抱怨就是使用者都沒有說要這個, 等程式都寫好了, 他們才要加這加那的, 叫我們怎麼改啊...

    我要說的是, 境界到了, 你自然就會在承接這工作時, 在投入前, 先去好好的瞭解你要寫的系統是要用在怎樣的環境裡。

    以我過去參與醫療系統(HIS)開發時為例, 急診流程和一般門診流程是不一樣的, 而那裡不一樣, 醫療人員看的角度和SE是不同的。而且, 醫療人員並不明白我們可以提供怎樣的工具讓他們能更為有效的照護病患。

    比如, 急診和門診一樣都有掛號流程, 差別只在於急診比較宽鬆, 只要有人掛就成了, 沒名字也行, 然後急診病人要依病情分級, 一到四級, 由檢傷分類人員判定, 並且輸入到系統裡。

    到此為止, 都是雙方可以接受的需求。但醫療人員沒有說, 如果病人進來太久, 你最好提醒我一下, 因為我會太忙, 有時病人會被掠在一邊, 然後就.....

    這不算是規定(有些醫院已將這設為規定了), 但在急診室待過的人都知道, 而我是在和急診室護理長閒聊時才知道因為這樣子掛掉的病人, 每個月總有二三個(這個客戶規模很大, 急診人數很多, 急診室裡天天都有一批人掛掉)。

    她們不知道我們可以在系統裡加上鬧鈴, 而且可以在螢幕上變換顏色閃爍或是跳出視窗, 甚至可以驅動病床上的灯閃起, 或半夜時自動CALL護士來看。不是她們不想要這功能, 而是自以為這很難, 所以就沒有提了。但做SE的你我呢 ? 心裡應該明白這裡面的困難度吧, 並沒有想像中的困難, 不是嗎 ? 但如果我們不明白他們的日常工作及問題, 又怎麼能適度的提出一些建議, 或者調整規格, 以避免掉他們日後必然會提出的修改要求 ?

    所以, 在這個層次裡的SE, 心中不但要有團隊, 更要有客戶, 也要花上心血時間去瞭解客戶的日常工作及問題, 這無關技術, 而是系統擁有者的流程, 以及軟體應用者的專業領域問題。

    天子之劍

    專案做久了, 遲早有一天, 做為寫程式的你, 就會發現, 你寫的每一行程式都和這世界息息相關, 你所參與的專案, 當它運行後, 就自然而然的在某個地方對這個世界的生產力產生了貢獻。

    你會開始關心社會, 關心週遭的人, 因為你想明白, 是怎樣的世界讓在讓你的心血在運行者。或者, 在你寫下一支程式, 或是帶領下一個專案時, 要如何去做, 才有可能產生更大的效益和意義 ?

    我沒有辦法像前面兩個境界一樣, 用幾個簡單的問題來判斷你是不是在這個層次, 因為現在的我也只是有那麼一點感覺而已, 也許, 我說些東西, 可以讓大家有點感觸。

    當我在思索著要做怎樣的醫療系統時, 伴隨著我的思路的, 是這個系統可以幫助醫療人員可以少失去幾個可以不用失去的生命。系統不再是一個系統, 它是我和其它人的聯繫點。我的善意是灌注在我的構想之中的, 我多想一些有益的功能, 或我改善了裡面的一些架構, 那麼, 總會有一些我不知名的人, 也不知在何時會獲得了幫助。

    而這樣的感受和想法, 即使在我規劃著經銷商管理系統時, 也一樣的伴隨著我。由於我的規劃, 可以讓一些客戶在被服務時, 可以少受點氣, 快一點結帳, 並且獲得良好的心情, 那麼, 我所能做的, 也不再單只是在管理一個專案, 或是一個系統而已。

    這些系統就很像是你自己產生出來的無形絲線, 只要系統存活了一天, 它就一次又一次的幫你去和整個社會國家和人類連結在了一起。那麼, 有這樣的感覺後, 在做系統時, 即使是一個人在深夜裡規劃著案子, 你也不會寂寞。而所讀進去的每一個知識, 都會成為和別人連繫的因子。

    天子之境, 我也只能勉強的說, 那是一種你藉由系統和世界連了起來那種感覺, 這會使你在做系統時, 會考量的更多, 甚至會在有意無意間做起了一系列的專案, 每一個專案都有不同的擁有者, 但其實都在你的構想中, 直到有一天, 這些系統在你的巧妙串聯下發揮了互動的關連。

    結語

    我常和很多人說, 程式師是半個藝術家。在我周圍程式寫的好的人, 常會有些癖好, 非常的人文, 比如畫畫或是音樂, 或是其它。像我就挺喜歡養魚和一些玄之又玄的東西。

    寫了這麼多, 也許會有人問, 那我要如何提昇 ?

    坦白說, 我也不知道, 那是一種悟, 常常去思考自己為什麼要寫程式, 除了那一行又一行的指令外, 還有什麼 ? 然後多去想想生命、生活和工作, 而這些, 又和程式, 系統和軟體有什麼關連。想多了, 有些答案自然也就出來了。

    寫程式, 也是一種修道。

    (這篇文章並不是新的作品, 而是我把以前BLOG的作品移到這裡, 工作忙, 沒有時間去自己維護一個BLOG系統了, 我打算慢慢把那邊的文章都移過來)

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://steven-angela.spaces.live.com/blog/cns!23E161BA48B93F07!1263.trak
    Weblogs that reference this entry
    • None