※ 引述《iman00b (I'm a n00b)》之銘言:
: 其實我很認同你原來那篇文章的大部份看法,
: 如您所說程式語言只是工具,不應該過度學習程式語言。
: 但不才我認為,就算我們對任何技術都能靈活運用以一貫之,
: 那也不代表我們有任何輕視技術跟基礎能力養成的本錢。
: 而且你這樣會誤導一些根基不穩的初學者,
: 讓他們以為原來程式語言的能力養成是如此簡單。
: 而你卻沒告訴他們這是所謂台上十分鐘,台下十年功的道理。
: 畢卡索任意揮毫能收天價,難道隨便一個阿貓阿狗也能嗎?
第一個語言就是機械語言或組合語言的人,
我以為看語言的角度與從高階語言學起的人是剛好反過來的,
一個從機器的角度看待語言,一個從人類的角度看待語言。
一堆高階語言寫的程式在編譯後,還不都是生出機械碼或中間碼的東西?
從不同的角度看待事情,有的事情會變很簡單,有的看起來就很難。
前幾年有看一些機器學習人類語言的paper,
說不同人類語言之間,有些語意表達的方式出現頻率有跨語言的共通pattern,
機器可以先挖出那些共通pattern,再來推導整句話其他字詞的意義;
當然少不了要有許多的前後文可以參考推敲的。
這樣做的程式不需要依賴預先輸入的人類語言知識,靠的只是頻率統計。
現在也許那個方法離實用還有很長一段路要走,
但是人腦差不多也用一樣的方式在處理與學習語言。
在我(以及其他許多習慣快速自學的人)來說,我們已經有前面的自學經驗,
也多半有前面的知識(少則數年,多則數十年),只要還沒老到會忘東忘西,
那請參考前面機器學習的例子,很多時候是整個程式語言的文件都還沒看到,
光是看程式原始碼,就已經知道那在賣啥膏藥。
你問我有沒學過,我會說我沒學過。你問我有沒看過那程式,我會說我沒看過。
可是你要我照著改出一個可以動的東西來,我會說我會。
你要我抓它的bug,我會說沒問題。
當然我會很希望有些工具書、工具文件類的東西,在我對一些地方有疑義的時候,
可以幫我解除疑義,順便告訴我哪些地方是該注意的。
從機器的角度來看,沒有什麼程式是真的難的,有差別的只是規模與層次的深度。
我也只是照著機器可能怎麼執行一段code的方式去思考而已。
有的人很質疑三分鐘可以摸會什麼東西,這要看那三分鐘是拿來幹什麼...
直接看source code,瞄一眼,沿著脈絡走一下,有時候收穫比翻一堆文件要多。
我覺得這就像是要機器從一整篇文章裡,不依賴預先輸入的語法知識看懂它一樣。
我覺得這樣做很好玩,但是很多人會直接說那是做不到的事情。
拿我沒看過的東西來問我會不會,我會說我不知道,看了再說。
可是等我看過了,我又不好意思跟那些在上面下了很多苦工還參不透的人說,
我已經會了,這邊該怎樣做,那邊該怎樣做,哪邊哪邊有怎樣的bug...
會跟不會中間的境界線愈來愈模糊,
你們也知道機器永遠不會跟你說它不懂一段專門餵給它跑的code的。
一個framework如果從最上層到最下層只有不到15層,
對於可以毫無障礙的從最上層trace到最下層的人來說,
也沒有什麼要看了一大堆文件才知道它哪邊在幹嘛的問題。
看到哪邊就學到哪邊,誰規定一定要看過文件才會用?
何況現代的程式很多都有良好的命名規則,
看到物件類別名稱與物件方法名稱,寫寫code後trace進去試試看,
不也就是那樣子而已?
沒有人規定沒學過的東西就不能抄來用啊,
也沒有人規定不能把它反組譯、反編譯剝開來看。
(也許法律上有限制,但是反正沒抓到就不被罰,你看到了就是你的知識了...)
如果把一個framework當成黑箱子看,
用很久的人會比初看就已經把它從裡到外都已經剝開來看過的人強?
我是不覺得啦......程式也只是程式。
看code快的人也不會在乎爬那幾萬行、幾十萬行code,看它到底是怎麼做的。
沒看過別人爬code爬那麼快的人會以為那是做不到的,但是這就是境界上的差異了。
當然這樣做還是有盲點,常常會只知其然,不知其所以然。
知道程式是那樣運作,不知道它為什麼要那樣運作。
我想這才是把那個東西摸很熟的人的強項,
除非他所謂的熟也只是不知其所以然的照著用。
: 水桶如果滿了,就再也裝不下水了,共勉之。
講到水桶,不如說是容器。
把知識比擬成水,把人比做容器的話,
有的容器入口窄,一次只能倒一點水進去;
有的容器入口寬,可以一次倒很多水進去。
窄口的容器不見得就淺薄,寬口的容器裡頭也不見得就寬廣深厚。
人比人會氣死人,大家走的路都不一樣,但是說起來都是同修啊。
心態當然是有要緊,有沒資質也差很多,不過個人認為興趣是最要緊的。
覺得不好玩的話,就不會去學了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 216.143.48.99