2024年12月15日 星期日

知難行易

知難行易


曾慶潭 Ching-Tang Tseng
ilikeforth@gmail.com
Hamilton, New Zealand
16 December 2024


這是    國父孫中山先生的學說,我們小的時候使用過的教科書中,有過這麼一課,課文的標題就是:『知難行易』。

說實在話,當時讀到這一課時,我並不能深入了解知難行易的真正意義。因為課文的內容,舉的例子很簡單,是描述    國父旅居海外時,有一天找了水匠來家裡修理水龍頭,只見水匠拿個工具扳手扭一扭,就把水龍頭的問題解決了。課文用這樣的例子說明:要想知道水龍頭問題的道理並不容易,不是常人輕易就能辦到的事情。可是 國父親眼目睹水匠只用工具扭了一扭就解決了問題,意思是實際的修理工作,做起來就非常容易。

我移民海外也將近三十年了,知道紐西蘭的水匠是一種辛苦、骯髒的高收入職業,他們就算在某家公司或行號上班,整車的工具也都是自備的。請水匠登門修理東西,通常都得付出高昂的代價,從出車開始計時、計費,工時按每半小時算作一個計費單元來算,耗用的工料最多只佔總費用的三分之一,修理工錢大約也要三分之一。換句話說,他們能賺得的利潤,就是剩下的三分之一。還有,紐西蘭的水匠與電匠是分開的,不像台灣的水電工,水與電的修理工作都可以同時做。

我在這裡度過了將近三十年的居家生活,但從未找過水匠來家裡修過東西,發揚了紐西蘭人凡事喜歡 DIY(Do It Yourself) 的精神,家庭用水設施與裝置上的任何問題我都自行解決。家裡水龍頭漏水、滴水、關不死是經常發生的事情,不尋求水匠來修理,那就得自己親自動手解決問題。因此可以體會知難行易課文的意義。

我住在紐西蘭北島中央一個不濱海的 Hamilton 市區內,本市民生供水所需要的經費,只從收取的年度房屋稅中分配來使用。居民用水不必另行計費的狀況下,家裡的水龍頭漏水、滴水時,大家就都不太當它是一回事,通常都不急著要找水匠來及時修理。我自己有工具,又熟悉各種水系統的運行原理,能自行解決問題。

知難行易所舉之例,是一般住家內最簡單的水龍頭修理工作,可是    國父就是不懂、不知道如何解決,表示常人大多數也不太理解這方面的問題。我在單純的修理這種水龍頭問題時,體會出一些必須經常身體力行才會注意得到的要點,如果在修理水龍頭時不注意這些事情,只是隨便轉緊所有的螺絲,有可能修過的水龍頭都照樣還會繼續漏水或滴水。

網上有許多影片教您如何修理漏水的水龍頭,但我沒見過有人能將安裝水龍頭時的工作要點強調得出來的影片,討論知難行易的道理,講一講水龍頭,就是有意義的事情。

讓我們先從水龍頭的內部結構開始談起。我所借用的圖示,取材自一個收費網頁,因為可以免費下載 15 張例圖,這是我下載的第一張圖,所以沒有計費,我們使用它時,仍應該表示感謝。網頁是:

https://www.dreamstime.com/stock-illustration-cross-section-brass-faucet-isolated-white-background-d-illustration-image84036492

我取得圖示後,自行添加了必要配件的中文名稱,圖示如下:


水龍頭轉桿的向上運動,會將壓緊在閥座上的桿底墊片向上提昇,讓自來水流過閥座噴出水龍頭的噴口。轉桿向下運動到底,則將桿底墊片壓緊在閥座上,水龍頭便停止供水。

假設水龍頭所有的配件都沒有壞,安裝這樣的水龍頭時,操作步驟有個要領,照著步驟做,才能裝得成能夠理想工作的水龍頭。這個要領就是安裝時,首要重視轉桿所處的位置,轉桿應該是轉到下死點的位置,但是絕對不可以在下死點處轉得太死,理想的位置應該是輕鬆轉到下死點後再往回轉回半圈,讓轉桿成為鬆而不緊的狀態。這個預處理效果,是為了避免在安裝固定螺絲時,整體會因轉桿同時被壓死在閥座上而妨礙了讓固定螺絲繼續緊定於必須絕對封死的位置。這個回轉半圈的動作,在水龍頭正常使用時,也是桿底墊片彈性工作間隙密閉時所需要的壓緊空間。

上述要領,也就是修理水龍頭更換小配件後,重新安裝時必須注意的要領。固定螺絲要轉得越緊越好,才能避免漏水,為了轉緊,工具可能滑脫,會傷了水龍頭拋光後的漂亮表面,老手都會另外安排不易滑脫的套筒,例如套上紙管或布來保護,但這都不是要點,只影響美觀,或避免手受傷害。其他的小螺絲,例如:在最下方緊定桿底墊片的小螺絲,在最上方緊定轉柄的小螺絲,或者是為了美觀而在最外面另外加裝的匣蓋盒子螺絲,只要裝緊了便可,都不強調必須轉得很緊,以防下次修理或年久銹蝕之後難以拆卸。

同樣的道理也經常被使用於原子爐系統的操作中,大型閥門關死時,當然要關得夠緊。大型閥門被開啟時,就要避免在到達全開位置後,閥門轉盤繼續被強轉到非常緊鎖的狀態,否則下次進行關閉閥門的操作時,會發生轉盤難以轉動的問題。正確的操作方式,是確定轉到全開位置後,轉盤回轉半圈,讓下次要關閉操作轉盤時,容易轉得動。

駕駛汽車打方向盤時也是這樣,要避免把方向盤打死,左轉或右轉確定方向盤轉到底了,方向盤就應該立即回轉半圈來控制轉向系統,否則方向機的油壓系統容易受損,高壓油可能會擠爆油封而開始漏油。

這些轉到極限點立刻回轉半圈的訣竅,能確保被操作之裝置使用起來比較安全的道理,都是其來有自的。

所有的水龍頭,無論它後來的發展出現了任何造型,只要是旋轉式的,其內部結構之基本運作機制,跟上列的圖示都是一樣的。這張展示圖最為精簡、清楚,弄懂了這個知難行易所舉之例的難懂東西,有利於自己動手修理水龍頭。碰到新的產品,也可以舉一反三的方式照樣推理以解決問題。


我們使用現代的任何 Forth 系統,也會遇到許多類似知難行易的情況,舉個簡單例子來說,例如:想把數字印出來的指令『 . 』(唸作 dot ) ,在一般流行性程式語言中常被定名為 print ,其使用方式對任何程式語言來說都是有點複雜的。早期電腦還是低位元的時代,我們一直強調 Forth 的透通性,那個時候,想要追蹤與硬體有關的訊息輸出指令之內容,需要了解的資料並不太多,直讀系統程式的源碼,很快就能明白訊息都是如何被印出來並被顯示在螢幕上的。後來,環境變了,作業系統成為電腦中的重要角色,程式語言都得依它而建,Forth 系統百分之百的透通性就無法再被強調,這也對我們使用 Forth 系統時,形成了『知難』 的障礙。不過,我們還是有辦法將『知難』化解出『行易』的,就像搞懂水龍頭內部的關鍵結構後,當然可以憑經驗培養出修理水龍頭時該有的工作素養,修水龍頭是這樣,順利使用各種 Forth 系統也是這樣。

回頭檢視 20081129 最原始的網文:FORTH-83 標準指令。你可以發現標準指令中只有兩個指令直接執行數字輸出,一個就是 . ,另一個就是 u. 。數字有很多格式,除了整數、無號數,還有雙整數、無號雙整數、大數、浮點數、複數 ..... 等等,浮點數又可再分為帶 10 的幾次方的科學數字表示格式、不帶方次的格式、工程上愛用的一百以內之兩位整數表現格式 ..... 等等等,格式雖然複雜,用起來則必須採用『行易』的觀念,由兩個基本數字印出指令而延伸出來之其他的數字輸出指令,都不再被列為標準指令,因為他們的使用規格都是一致的,不需要另行解釋。

此外,我個人有些系統設計經驗,體會出所有的數字輸出指令,都應該先行備妥其核心結構指令後再用比較好。數字輸出指令係直接將堆疊上的數字輸出,先行準備之相應的核心結構指令則將堆疊上的數字先行轉換到某一記憶體指定區,然後轉為提供記憶體指定區的起始位址(addr),另外也提供待印數字的字長(len),這兩個參數可以讓後續打算設計的數字輸出指令更具有使用上的彈性。尤其是在當數字輸出不僅只是送往螢幕這麼簡單的地方而已時,例如:是一個物件或一個檔案時,後續的設計就容易用它來解決問題。這類核心指令,按照公稱的使用習慣,我們都以其相應的指令外加一組小括號來表示,對應關系列示如下:


 
它們之間的關係則簡單到形同這個樣子:
: . ( n -- ) (.) type space ;

整數 . ( n -- ) (.) ( n -- addr len )
無號數 u. ( u -- ) (u.) ( u -- addr len )
雙整數 d. ( d -- ) (d.) ( d -- addr len )
無號雙整數 ud. ( ud -- ) (ud.) ( ud -- addr len )
浮點數 f. ( f -- ) (f.) ( f -- addr len )
科學表示的浮點數 fe. ( f -- ) (fe.) ( f -- addr len )
複數 z. ( f1 f2 -- ) (z.) ( f1 f2 -- addr len )


根據經驗培養出來的工作素養,深入剖析知難行易的道理,告訴我修理水龍頭時應該有什麼重點要求。
同樣的,設計系統很久之後,深入剖析知難行易的道理,也告訴我在設計各種數字輸出指令時,有什麼重點要求該預先設計。