分類的哲學


從小我老爹就這樣要求我:『東西歸定位,什麼東西應該放在什麼地方,要養成習慣。』

小時候東西要是用完沒有拿回去原本的位置,就會被罵。像是吃水果拿水果刀,用完就要拿去固定的架子放;用完的指甲剪、膠帶、筆、看完的書、房間的棉被、衣服、日用品等等,老爹都會念。後來也漸漸養成習慣,東西都會習慣性的『想辦法』讓它能夠歸位。這個『想辦法』的習慣,在開始玩電腦之後,發揮得更淋漓了。因為『想辦法』讓我習慣去用各種角度組織、分析事物的用途、屬性、使用頻率、實用性 …

分類是組織能力的訓練

用電腦來說,其實把檔案『歸類』的過程,就是一種思考、組織、分析的過程,思考這個檔案的屬性、用途、變動性、好不好找、備份便利性,它包含了各式各樣面相。而我的東西很多,像是文件、我自己寫的程式原始碼、一些程式 Libraries、搜集的圖檔、音樂資料、私人資料、小工具 … 等。數十年下來,我已經有自己習慣的目錄結構以及使用方式。就和 Unix-base 的目錄結構一樣,十幾年來都沒變過。不管是在工作,或者是家裡自己用的電腦,甚至是 Gmail 的目錄、工作的 Mail 目錄,我都會習慣性地整理。

剛開始玩電腦時,就對目錄結構很有興趣。後來在 Dos 底下找到一個工具叫 CView,可以很快速的整理目錄,而且也可以快速 Preview 檔案內容、增加說明、編輯等。不過我還沒看過有人像我這樣整理過資料。

Mac OS X 內建 Hotspot 可以幫使用者快速找到資料,但是雖然方便,但是帶來的就是使用者東西到處亂丟。科技是給人們方便沒錯,但也間接讓人們沒有了思考,堆疊更多的惰性。

Tag

很多工具提供 Tag 的分類方式,像是 Blogger、logdown、Gmail、Mac OS X 10.9 以後也內建 File Tag。Tag 不像目錄結構,是單一繼承樹狀結構,而是網狀結構。好處是可以讓物件有多重分類的效果,同時不用拘泥固定的形式。

在 Blog 剛開始流行的時候,很多網站都有支援 Cloud Tag,最近這幾年行銷性質網站、論壇,很多也都具備 Tag 功能,用以搜尋、整理文章,不過這些 Tag 久了都有一個問題:用的人不知道 Tag 設計的概念,加上如果沒有人重新去整理 Tag,所以最後 Tag 往往只是一個趕流行的裝飾品,使用者很難從其中再找到、或者再組織出更有意義的東西出來。

Tag 雖然彈性、帶來的是便利,但是不經分析、組織,最後就是,等於沒有分類,隨著時間的遞增,混亂程度也指數上升。

程式的分類

程式的世界裡,有很多分類的概念、過程、機制、架構,在套用這些的過程中,Developer 必須要對於將要被分類的『內涵』有相當程度的認識。

舉例來說,Java 用來處理『時間』的類別:Date/Calendar。初學程式設計大部份都寫過萬年曆,簡單的先定義範圍,也就是西元年的起訖點(通常是 1970 ~ 2030),然後計算出日曆,其中要自己計算閏年之類的東西,但其實 JDK 已經提供了相關的類別可以使用。我的學習路徑是從 PHP 到 Java,PHP 寫過很多各式各樣的萬年歷、行事曆功能,學 Java 時就想找現成的來用,結果就找到了這個:GregorianCalendar

Gregorian“ 是形容詞,名詞是 “Gregory“,字面上意思字典說是:『羅馬教皇格里高里的』。所以 GregorianCalender 就是『羅馬教皇格里高里的日曆』????還是不知道是做啥的 XDDD

格雷戈里曆法 按照 Wiki 的說法就是西曆、公曆:詳細介紹 see 英文中文

我開始學 Java 的時候還沒有 Google、Wiki,那時候常用的是 openfind。所以 GregorianCalendar 對當時的我來說,很痛苦。。。。。

Java 的 Calendar 是抽象類別,GregorianCalendar 是實作類別。要分析組織『日曆』這個概念,要知道基本的西曆概念,像是十二個月份、一週七天、月份天數。GregorianCalendar 把範圍擴大很多,包還一些在 Wiki 提到的特例。

所以 Java 類別 (Class) 是用來『區別』事物的分類概念。一個 Class 描述一個事物的屬性 (Attributes) 和動作 (Actions) 的集合。Developer 必須能夠清楚歸納出,什麼東西該是屬於這個類別。而透過這樣的描述,其他的類別可以清楚知道這個類別有哪一些屬性和動作。而如何『清楚歸納』,這就要透過分析、組織了。每個人可能分析、組織出不一樣的結果、看法,導致寫出來的程式,在名稱、使用、場景,加上語言特性的差異,最後造就功能、使用流程、外觀的差異。

這個『區別』的動作,除了是分類之外,也勾勒出物件導向的基本概念雛形了。而類別更上一層的大分類,Java 是 Package,其他 Cpp/C# Namespace、Python/Perl Module … etc. 而這個整理的過程,其實就是 重構 (Refactoring) 的概念。

其他跟分類概念有關的技術:Refactoring、RMDB、Design Pattern、Data Structure、Algorithm … etc

音樂的分類 - Style

AllMusicGuide 裏面,大的音樂風格有 21 種,包含常聽到的 Rock/POP、Jazz、Blues、R&B、Folk、Country、Classical、New Age、International、Rap … etc。子項目其實多到已經不知道怎麼去算了,有興趣請參考 AllMusicGuide/Genres。不過,這每一種音樂分類,都有其基本的組成、元素、特色、配器、節奏、文化等,我在『如何聽一首歌』、『什麼是編曲?』都有提到類似的概念。

除了常見的曲風分類,我有幾個特別喜歡的音樂也有分類,像是植松申夫作曲的 Final Fantasy 系列,我個人就分成七大類了。

小說、漫畫、戲劇的分類

西洋小說從環境、人物、情節分析小說。小說和作者的成長背景、專長、有所不同,而會有所不同比例的比重,最後呈現出風格、或者所謂的特色。通俗的分類有:童話、玄幻、武俠、偵探、恐怖、同人、科幻、奇幻、歷史、網遊、耽美。

金庸是武俠小說、朱少麟偏向哲學思考、侯文詠則是教育多、哈利波特則為科幻類、海賊王為冒險、三國演義是歷史、倪匡是科幻 … etc.

圖書館分類

台灣的大學裡有所謂『圖書資訊學系』,主要是圖書館的資訊分類、組織、採購等相關課程。算是一種資訊服務相關的系所。其中『分類』管理是很重要的部分。

生活中的分類

生活中分類到處都是:

  • 性別、宗教、政黨
  • Bookmark
  • 房間隔間
  • 皮夾
  • 美食分類
  • 手機 App
  • 食衣住行
  • 團體, 組織
  • 教育系所分類
  • 音樂歌單
  • 照片分類
  • 界門綱目科數種
  • 元素週期表
  • Encoding

之所以知道分類,是因為你具備了該物件的基本知識,知道它的屬性、用途、事件、歷史 … 等,這些東西可能是你從小就已經慢慢累積的,或者是屬於你的專業學科。但是當面對新的事物、新的名詞、未知的物質,我們都需要透過分析、組織,然後了解其內含、用途、性質,然後才有辦法給予名稱,定義類別。

分析、組織

整篇文章會一直看到我在說『分析』、『組織』這兩個動詞。因為在這個電腦運算能力很強的時代,我們在學習東西的時候,我們不需要背誦很多公式,大部分是要知道公式的前因後果、由來、運用場合,然後去活用、或者延伸他。至於真的計算,其實都可以交給電腦。特別是現在很多東西都可以透過『Google』找到,連生病看醫生都可以 google 。。。。人們要加強的不是背頌,而是分析、組織的能力。

我 2013 年中因為身體不適,得到帶狀皰診(皮蛇),是自己撐了兩個禮拜,然後 google 自己找資料,確定症狀,然後直接跟醫生拿藥。。。。不過這不是很正確的方法,小朋友不可以學,生病還是要聽醫生的話 :p

事物的分析、與組織方法,牽涉到每個人的基礎知識、文化背景、主觀意識、性別、年齡、際遇等,可能會有所差異,這些差異隨著時間的改變,年紀的增長,會有所不同,體悟也會隨之改變。之所以用到『哲學』這個詞,是因為我覺得要持續的『組織』、『分析』,才會有可能有『哲學』性在。學歷上的博士 (Doctor of Philosophy, Ph.D.) 象徵的不僅僅是一個單純的學位,而是一種獨立追求知識思考的能力,也是對於『人生』的信仰、態度、概念有領會的象徵。

延伸閱讀

參考資料


Comments