心法[1]

  • 2162
  • 0
  • 2012-09-30

摘要:老狗吠程式 - 心法[1]

某日,因緣際會,得以認識兩位軟體設計大師: 余老師、吳老師. 多次交談,受益匪淺.
遂將對話整理,以便日後參考.
 

老狗: 大師,我該如何學習程式設計?!

余: 這是個很難回答的問題.

你可曾經觀察過身旁的的事物嗎?! 你可曾經仔細聆聽過四周的聲響嗎?!
通常,你可以看到許多不同的東西:動物、植物、電腦、汽車... ;
你也可以聽到蟲鳴鳥叫、音樂或噪音.

老狗: 是的.

余: 如果你仔細的觀察過身邊的事物,你就會發現所有的事物可以分為兩類:『天然的』與『人為的』.
自然的事物,我們『發現』它;人為的事物,我們『發明』它.
當我們研究它們時: 前者就叫『自然科學』,而後者就是『應用科學』及『社會科學』

老狗: 您的意思是說,程式設計是屬於應用科學?

余: 是的.

自然科學有一些特性:
  精確、具有絕對性
  從觀察自然事物而得出
  不依賴人的主觀判斷力
  通常違反人的直覺

而應用科學也有一些特性:
  不精確、具有相對性
  從對人類的活動中觀察出來
  依賴人的主觀判斷力
  通常符合人的直覺

因為程式設計是應用科學,所以它不精確、具有相對性. 你在設計程式時『沒有絕對的對錯』,『只有好壞』、『有意義或沒有意義』.
你可以在日常生活的活動中觀察,以得到解決方法: 前人研究資料結構時,從看到堆東西想到 Stack,看到排隊想到 Queue.
由於每個人的觀察角度都不一樣,得出的結果也不一樣,所以就存在相同問題、不同解決方案的多樣性.

老狗: 對不起,我不知道您說這個的意思是?!

余: 我想表達的是: 程式設計是門應用科學,所以它所有的東西都是人創出來的! 所以說: 沒有學,就算想破頭,你也是不會!

老狗: 大師,我該如何學習程式設計?!

余: 你知道天上星星有幾顆嗎?!

老狗: 這... 應該數也數不完吧?

余: 不對,它有確定數目的.

老狗: 我要怎麼知道呢?!

余: 你想知道,你就要懂得『設計者之心』

老狗: 什麼是『設計者之心』?!

余: 就拿軟體設計來說: 電腦硬體是誰設計的?! 作業系統為什麼要如此運行?! 程式語言語法為什麼要這樣規定?! 誰知道?! 他們的原創設計者知道.
如果你知道原創者為什麼如此設計,你的疑問大概就可以解決大半.

老狗: 那我要怎樣去認識這些原創者?!

余: 原則上,你是遇不到,他們通常都是隱而未現.
但是你可以透過一些文獻、書本去接近他們 及 他們的作品. 所以你要多讀書.
這些人,他們都有一些隱藏的秘密. 這些秘密不是每個人都可以瞭解.
他們從前人的知識及智慧累積,加上個人的天賦與人生哲學,使他們有機會創造出不凡的東西.

其實, 你也可以去請教曾經接觸過這些原創者思想的人, 他們或許是你身旁的老師, 也或許是你周遭的前輩、朋友.
他們在學習和實踐中, 已經早一步從某個重新建構的角度, 去領略原創者的心血結晶.

有機會我再告你一些事...
 

老狗: 我大概有點瞭解了. 只是,大師,天上星星到底有幾顆?!

余: 我去問神.