楔子
我想在現今這個世界上,應該沒有什麼人用「哲學」這個字詞來當作計算機相關技術的主題吧!一般的印象,哲學是深度的思考,是文科學生的事;技術是工學,是數學物理化學。這兩者的距離遙遠,從來就是不搭嘎的兩回事。
用哲學當主題,一般人應該都難以接受吧。看到「哲學」這個字眼,不禁讓人想到那些哲學家的形象,滿頭散亂的灰白頭髮,住在破舊的平房裏。孤獨、脾氣古怪、動不動就亂罵人。不時一人漫無目標地喃喃自語,說著別人都聽不懂的語言,跟瘋子差不了多少。
相對於高科技書籍讀者群所追求的,新穎光鮮亮麗的氣味比起來,書名取成這樣,有點自殺找死,想讓書賣不出去意味。但筆者的個性一向實話實說,有什麼就說什麼,偏好尋求精準的字眼來描述所看到,所想的東西。過度的修飾與偽裝的事情,實在是作不出來,也難以接受。
若將時光推移到30多年前,也就是筆者剛開始接觸到電腦的時候,其實我的看法跟大部份的人都一樣,認為電腦就是高科技,是工學的技術,是理工科學生的領域。可是隨著時間的推移,我與它的接觸時間越來越長,摸索越來越深入,不但是大學念了相關科系,就業也從事了相關產業。
我漸漸地發現,計算機科學其實不是什麼純粹的高科技,或者是什麼純粹的工學。事實上,它所牽涉到的思維範疇,遠遠超過工學與技術的定義。而在這個範疇裡,工學與技術只不過是一個程序末端,最底層的實現手段而已。而在工學與技術被運用於實現之前,更初始發源的重點是
● 你的需求是什麼?
● 如何從需求衍生出解決方案,它的過程是什麼?
● 解決方案的具體作法是什麼?
漸漸地你會發覺,這些才是產品、系統被創造出來的根源、依據。根源沒有了,所謂的工學,所謂的高科技將無用武之地,它們將成為一種無用的東西。一個營利事業單位,若無法創造出對人類生活有意義的產品,則該營利事業單位將無法生存於市場中。
從某種角度來看,電腦就是一個平台,一個存放想法,使之動作實現的平台。想法要如何,動作要如何有意義,對於一個所謂的純軟體公司,一個軟體工程師來說,這就是一個最重大的議題。這個議題若沒有處理好,則緊接而來的技術實現終將毫無價值可言,說穿了,就是花時間耍弄技術,但搞出來的東西卻有可能都是無用的垃圾。
因此,一個軟體工程師的修為,不應該只停留在一個所謂的技術層次,要向上提升,不是只是一個單純的碼工、軟體開發工具的操作者。要當一個全面的創造者,必須從產品的探索構思、架構規劃、到最後的技術實現都能有清楚的概念。也唯有如此,才能是一個能夠帶動創新的火車頭,而不是一個需要別人帶動指揮的小工。
而這些東西,以筆者多年的從業經驗來看,它早已超越了工學的範圍。純粹工學的素養,並無法幫忙你解決這一方面的問題。
根據筆者的經驗,這一類的問題你越是思考,問題的答案就越是退後,越退越深、越退越遠。當您在不斷向前追趕的時候,漸漸地,你會發現到,那些純理工、純技術的東西,已經在你背後,距離你越來越遠了,你已經超越、離開它們了。而這時環顧四周,已經是一個完全不同的景象。
這時在你腦海之中已經不是什麼程式語言、語法、編譯器、程式呼叫相關的問題,取而代之的是需求、系統平台、資源、知識管理之類的議題。如何將這四者之間的關係調配好,然後才會有對應的解決方案、行動方案,進而滿足需求。
這才是你後續處理問題的思想座標。一個完全不同的思想層次。當您進入了這個層次,您才會感覺到問題思考的目標不再退後了,這時候您就會知道,問題的答案應該就在這裡。是的,這就是問題的答案
● 一套行為系統的架構觀念與哲學。
● 一套資源利用與方案創造的思維系統。
● 一套智能與知識的哲學。
這些問題的答案統統都已經超越工學,到達了哲學的層次。原來在計算機科學的領域裡,根源問題的答案,困惑的救贖,就在哲學裡。這也就是本書要談的東西。計算機科學的哲學,就是對於軟體工程師所面臨的種種問題,尋求一個基本觀念上的解決之道。從計算機系統的基礎概念開始,建立一套可以完全破解軟體迷霧的思想體系。
有時候事務難的不在事物本身,關鍵不在於事物本身的形象是什麼,而在於您對它的看法。一套思維的哲學,合乎邏輯的推理。一組解釋的觀點,推論的模型。有觀點才能有想法,有觀點才能有品味,有觀點才能分析。它們才是剖析難解問題的利器,整套完善工作術,讓您輕鬆處理龐雜事物的救贖之道。
※扭轉科技人對哲學的印象
很多人,尤其是理工背景的人員,對於哲學總是停留,在一種天馬行空的印象裡。哲學之中往往不具有精細的數學公式,沒有具體的物質,沒有立竿見影的操作步驟。相對於人生大道理,理工人員比較能接受的,就是柴米油鹽醬醋茶等,看得到、摸得到、能把握的東西。太虛無東西,看不到也摸不到,不切實際,說穿了,就是沒有用。看到哲學之類的東西,反正就是閉上眼睛劃個叉,不
予連繫。
但各位應該也聽過一句話:「哲學為科學之母」。在遠古的歐洲,哲學與科學並沒有明顯的區別,一個傑出哲學家往往也是優秀的科學家,有許多科學家與哲學家是二位一體的,例如蘇格拉底、亞里士多德等。這說明哲學與科學,其實具有同樣的心理性質,兩者之間沒有矛盾,都是基於客觀理性的深層思考因此,理工人員其實不但不需要排斥,哲學方面的思維。相反的,還應該去擁抱它,具有理性的哲理思維,對於工作上面的思考,問題的解決,相信會有相當大的幫助。哲學是不是天馬行空,不切實際,其實問題不在於哲學本身,而在於它與你遭遇的問題有沒有關連。
哲學的認知是衡量事物的觀點,是衡量事物的一把尺,心中具有衡量事物的一把尺,就可以馬上抓到重心,清楚的分析眼前的事物,缺了那一把尺,就無從著手觀察思考發生了什麼事。
自古以來,人們對於存在的事物,都會逐步發展出一套哲學理論來觀察解析該事物。目前存在已久的事物,人類已經具有許多完備的哲學觀念來分解,然而對於計算機科學這件事,似乎還沒有一套完整的哲學體系。
本書所提的哲學都是有關於計算機科學的哲學,不是什麼虛無的人生道理。你應該相信的是,一個從事相關技術的工作者,每天面對最實際的技術問題,在解決問題的過程中,所領悟到的深層道理。它將會是非常的實際的。就算是抽象,就算是高階,但是與實際的狀況間完全沒有斷層、沒有脫節。它們之間的關係將會被交待的很清楚、很完整。這是筆者著作時最重要的要求及期待。之後你會發現,這些經過深層思考、時間淬鍊之後的哲理,對你面對問題時的思考,幫助有多麼的大。
IT科技的初學者往往把重心放在程式語言的學習之上,在這個階段,你會認為程式語言的技能最重要,然而對於已在產業中從事一段時間,可以獨當一面的資深工程師或者是專案經理來說,程式語言早就不是問題,它只是一個起碼的要求,在這個階段的人往往會認為程式語言不重要,領域知識才是重點。
筆者從事軟體工作多年,每天處理的工作雖然偶有某程式結構語言語法不熟,需要參考資料的時候,但大部份的時候,都是在處理領域知識相關的議題,領域知識的確才是工作的重心。
筆者最後的領悟是,知識處理的問題無法用任何一個已知的專門學科來解決,它需要更原始更深層的心靈探索,也就是到達基本的理哲思索,也就是哲學的層次才能解答相關的問題。
當知識處理相關的問題能夠被哲理完善的解答之後,你會認同相對比較起來,領域知識已不是重點,能夠完善清晰解答知識處理的哲理才是重點。一山還比一山高,如果能夠爬到哲學的高度來看問題,則所有領域知識、程式語言的問題其實都是很容易解決的低層次問題,所有的議題都可以看得很快速很清楚,問題都可以很容易的解決,不會再有任何的困惑與煩惱。
※禮失求諸野
離開文明,才能體會得到文明的原始根源,當問題發生時,才有思考的方向,才能得到文明問題的答案。許多的事物,其實其原始的出發點往往都是簡單的,都是後來的人,因為種種進一步的需求,將它進化變化,將它複雜化,讓複雜覆蓋了事物的原始面貌,使得事物的本質變得不容易被看到,或者是看不清楚,因而讓人們失去了對該事物本質的認識,進而失去了對事物思考及解決問題的能力。
同樣的道理,當我們在IT 的領域中感到迷惘,找不出答案的時候,解答反而不在所謂的文明之內,離開高科技,才找得到高科技問題的答案。不管事什麼樣的機器,什麼樣的技術,機器是人創造的,要知道機器的邏輯,一定要先找到人的邏輯,一定先要有人的邏輯,然後才有機器的邏輯,機器自己不會產生邏輯,人的邏輯,才是機器邏輯的根源。
在現代文明社會中,充滿了光鮮亮麗的新事物,吸引了許多喜好追逐時尚新穎的人們,充滿熱情的追尋。但是在這個過程中,有一個常常可以看到的毛病是,人們往往只注意到這些光鮮亮麗的表面事物,而忽略了那些看來平淡不起眼,具有深厚底蘊的原本事物,即傳統智慧。而當你在這些光鮮亮麗的表面事物中遍尋鑽營,卻找不到問題出口的時候,答案卻早就在這些平淡不起眼,最不屑一顧的傳統智慧中。
※誰需要閱讀本書
專業性的技術資料,通常會吸引兩種人來閱讀,一種就是專業人士,包含相關從業人員及專門科系的學生。另外一種就是業外,非從業人員或者非專門科系的學生,但是個人對此有興趣。當然,後者是有可能後來也變成專業人士。
本書對於專業人士,有一些重要觀念可藉此建立釐清,筆者以為這個部分是非常必要的。這些觀念若是沒有釐清,從事系統探索及開發的工作將會是沒有頭緒、相當辛苦無效率的;對於業外人士,則是一個非常好的進階性,整體觀念的貫穿平台,在假以時日若真的需要進入專業的領域,這是一個絕佳的敲門磚,你上手的效率及精確度,一定會比別人高出非常多。
然而專業性的技術資料還有分難啃的以及好啃的,那種難啃的技術資料,可能需要有相關的專業背景的人才啃的動,對於業外人士就可能不是那麼和藹可親了。本書的寫作方針特別是從一般人都能看得到、能理解的觀念開始建立起,從生活化的事物中找觀念的例證,絕對是非常平易近人的,中學以上程度就可以看懂,沒有難啃的問題,業外人士也可輕鬆上手。
隨著電腦資訊產品不斷地滲透到日常生活中的每一個角落,相信有需要閱讀本書的族群將會越來越大,資訊科技相關的知識,將來會成為全民通識教育的一部分,而且內容將不只是走馬看花而已,層次會越來越深入,要求達到觀念的全面貫穿。到時候,本書將不再只是專業人員及興趣人士的需要,而是所有人的需要。
※本書可以為你帶來什麼
在一般的概念中,計算機相關的技術及資訊的數量級都是很龐大的。例如:×86的CPU有超過千萬個邏輯閘、作業系統的核心的源代碼超過數千萬行。如此的規模,幾乎不可能由個人或者少數幾個人來掌握,它一定是由一個或數個團體分工合作,每個人只作一小部分,由小部分的成果逐步堆砌而成的。因此就有了分工的角色,諸如硬體工程師、軟體工程師等的分野。硬體工程師只要管硬體,軟體工程師只要管軟體等。
如此這般地越來越細的分工下去,從業人員的知識範圍其實也就越來越窄小。此一作法的好處是:個人再也不用去操煩太多的東西,專注力可以集中在一個小範圍裡,而這個小範圍就可獲得必較好的工作品質,這是目前普遍的作法。
但是個人對於範圍之外的東西,就開始越來越陌生了,甚至毫無所悉,到最後對於計算機相關知識的認識,只有小小的一部份,沒有整體的貫通了解,也就是對計算機相關的知識,有一大部分,很大的一部分根本就不了解。
於是乎,就像是在一棟大樓裡,只是在某一層樓的一間小房間內工作,只熟悉這個小房間內的一切,小房間之外的大樓部份,就完全是個黑箱,完全沒有概念,不知道裡面有什麼,如何運作,能耐到那,完全不知道。也就是說,對於這棟大樓已經失去了觀察、了解、判斷、想像的能力。
當你對所處的對象失去了,觀察、了解、判斷、想像的能力,則一切的作為可能都會受到跼限,處境是處處充滿了未知及不確定性,不會有真正的安全感。
分不出好壞,無法判斷訊息真假,方案的可行性,更不用說是確切的資源安排、系統設計等,跟創造新事物有關的事。
唯有將對象有關的一切知識貫通了之後,才能解除此一困境。有了辨別與觀察的能力才會有判斷力與品味,有了想像的能力才會有創造的能力。貫通這一切的觀念之後,判斷力與品味就會慢慢長出來,想像力與創造力就會被釋放出來。
然而,對於一個想要打破砂鍋問到底、了解一切的人來說,如果他的對象是資訊科技,那你可能會說,這傢伙的麻煩大了,這麼多的材料怎麼嗑的完,就像是打開了惡魔的封印,一定是弄的滿臉豆花,身陷混亂的叢林中無法自拔,結果若不是放棄,就是發瘋。
「形而上者謂之道,形而下者謂之器,大道無形,故舊形而上,器用之物為有形,是為形而下。」
這邊的哲學是,任何構造複雜,數量龐大的東西,其原始的發源觀念其實都是很簡單的,只要能抓到這個發源觀念的根,就能輕易的掌握這龐大的果,這些根在那,這就是本書要闡述的內容。有了這些根,就可以讓你具有
● 貫穿 IT 軟硬體的解析觀點。
● 建立原本應有的對 IT 軟硬體觀察批判及品味的能力。
● 不再困惑,釋放出想像力以及創造力。
這就是本書要帶給你的東西。
※本書著作的方向
本書著重在基本觀念的闡述,即具通用性、通透性、涵蓋性的定律及概念,而儘量不去涉入特定的領域技術設計的細節中。密密麻麻的電氣線路,或者是叢林般的程式碼,在缺乏基本概念的狀況下,思緒其實非常容易失焦,進而失去整體的大方向。
世面上有各式各樣的系統,有各種不同的設計,不斷的推陳出新,在特定產品終究會被更新取代的情況下,追逐、秉持特定的細節其實是不智的,除非您現在的工作就是正在處理這個特定產品的細節,否則這方面的專門探討終究會成為一種白費力氣的過往,省下這些時間跟精力來追逐更美好的事物吧。
本書並不是一本在探討特定技術細節的書。如果您的目的在此,其實有很多其它更專門、更仔細的參考資料,而你要作的是,從中找到選擇最貼近你的需求的那一份。
如果你只是在發展特定系統的過程中,在某個細節上碰到了問題,那麼就上網去搜尋一下吧。如果不是什麼太邊邊角角的問題,在資訊如此發達的情況下,通常都可以找到立即的解決方案。
本書的目的在教您面對處理這些細節時的整體思維方向及處理方法,而不是在交代特定細節。方向決定了你的行為選擇,有正確的方向才會有正確、效率的行為,有了正確的方向,才會有正確的細節,沒有方向,有可能連前面述敘兩種工作的正確出發點都沒有。
本書最終的目的是要提供一支釣竿,而不是一條魚,在大方向大觀念都清楚的情況下,系統開發設計,基本上已經不會有會不會能不能的問題,只剩下要花多少資源、時間來實現的議題。
※本書的內容編排
本書的內容主要分為A、B、C、D、E五篇:
A篇-「基本觀念」為IT 技術的概論及行為系統的說明。
B篇-「電腦運作體系的解析」介紹電腦系統軟硬體構建的思想觀念。
C篇-「非硬體專業者的程式開發體系」介紹需求導向的程式開發體系。
D篇-「軟體工程」。介紹軟體開發過程中會產生的種種議題。
E篇-「知識工程」。探索智能與知識的原理。