看板 Ruby 關於我們 聯絡資訊
※ 引述《ericyu (Eric)》之銘言: : == 程式語言的重要性 == : 因為語言是人類思考的本質。語言會影響說話者的思考。(這裡還提到 : Sapir-Whorf 假說,請見 http://tinyurl.com/krz6nv 在這本書裡: http://en.wikipedia.org/wiki/The_Language_Instinct 作者嘲弄了這個假說裡的一個範例: "Steven Pinker in the Language Instinct ridiculed this example, claiming that this was a failing of human sight rather than language." quoted from http://en.wikipedia.org/wiki/Linguistic_relativity 我的解讀是, Pinker 認為思想是在語言之上,人會因語言而有不同的表達, 但不會因為語言而有不同的想法,那多半來自文化或其他環境因素。 也就是說,其實我們有一個「心智語言」,利用這樣的語言來思考, 再將之翻譯成自然語言。打個比方,應該能夠在心中想像一個立方體, 讓他用各種方式翻轉,但這件事是很難用自然語言表達出來的。 anyway, 程式語言和自然語言也差很多就是了,畢竟自然語言可以任意表達, 而我們寫程式確實是會受限於程式語言,我們沒辦法表達超過語言本身能表達的, 就像在不是 Turing complete 的語言上,自然無法表達 Turing complete, Ruby 如果不呼叫 C, 也沒提供 system call API, 當然也無法做 system call, 而我們自然不會去想用那種方式來解決問題,畢竟本來就是辦不到的事... : 20 年來的名著「人月神話」也提到「程式人員一定時間內能產出的程式碼 : 行數是一定的,不論用什麼語言」。假設這是真的,那麼一天五百行, : 用組合語言,C,或是 Ruby 都是五百行。 我不記得人月神話有提到這句話 XD 不過假設我們現在在使用一個極端語言,例如沒有迴圈,什麼都沒有, 但我們需要讓某個工作重複做五百次, 那我一天的產生,也肯定不只五百行了... XD 寫 Java 我產生程式碼的速度也極快,因為有些時候必然需要大量程式碼, 這點在 C++ 有時候也有類似的狀況。但寫 Ruby, 有時候我會寫得很慢, 同一個程式碼前後花很多時間在調整。而 Haskell 更常常因為需要思考, 而停下來,不太有辦法寫得很快。有時候寫了一整天也只短短幾行, 但是做的事情,可能就是 C++ 幾千行在做的了... 我想這假設應該不太可能為真 XD 這假設要成立,恐怕需要先假設每個語言的表達能力是相同的。 : 演算法相同,但 Ruby 的看起來密度較低。Ruby 不需要明確給定型別, : 不必要的型別指定可以省略,因此可以較簡潔。 這比較可能略嫌粗糙了點... XD static typing 與 dynamic typing 在本質上就不同了, 從這點出發的話,恐怕是需要比較 trade off. 或許可以從這邊看出,Matz 並不太喜歡 static tying. : 演算法教科書使用虛擬程式碼來描述演算法,若要實際使用,就要處理類 : 似指定型別這些非本質的部份,而無法集中在演算法的本質部分。 我不是很同意 static typing 算是非本質的問題, 如果我們假設 programmer 絕對不會犯錯,也絕對知道所有的問題, 那或許因為已經不用解決 typing 的問題,因此可以不視為本質問題。 但很多時候,其實我們是需要 static typing 來驗證問題與答案, 也很可能 static typing 最後告訴你,想解決的問題本身是矛盾的。 我覺得 dynamic typing 的好處大概有兩點: 1. 方便 2. polymorphic 有很大的發揮空間 當然這都是相對 static typing 的。 : (1993) 沒什麼人認為可以在 script 語言裡用物件導向程式,連內建型 : 別都是都以 class library 方式提供的可說是相當稀奇。之後看 Ruby : 的成功,我想這個判斷是成功的。 雖然我不是很熟,不過 Smalltalk 比 Ruby 早誕生很久很久 XD 也聽過別人說,Smalltalk 藉由 Ruby 復活了... 沒弄錯的話,Smalltalk 也比 Ruby 更加 OO 許多。 : 若導入巨集功能,會引起嚴重的副作用,這裡到底是函式呼叫,控制結構, : 還是要代入什麼,得再查文件才能知道。 : 嗯,也許世界上也有不會為此所苦的 Lisp 程式人員,不過我認為這只是 : 少數人。 : 要能在世界上普及的程式語言,我相信必須要有「不為風所搖動的核心」 : 的文法。 噢,原來原因是這個,那我完全能理解 XD 之前看 Lisp 就常常搞不清楚 macro 跟 function 之間的狀態... 如果全部都是 function, 那很多事情就會變得一致了。 : == 都是為了樂趣 == : 程式語言存在目的是為了生產程式,以及盡可能有效率地生產。還有與程 : 式設計的快樂連結在一起。 : 在國外活動等演講後,有許多人跟我交談,其中典型的就是「用了 Ruby : 以後又能快樂地寫程式了,謝謝。」 : 寫程式本來就很快樂,是既刺激又富創造性,讓人興奮的知識活動。我想 : 起中學時用 BASIC 這種貧弱的語言寫程式時也很快樂,不過也有因為工作、 : 期限等而造成不快樂的程式撰寫,這是世間常情。 : 即使如此,Ruby 所提供的生產力若能解開程式人員身上的枷鎖,重新找回 : 程式設計的樂趣的話,那就是我開發 Ruby 的理由。 同感 XDDD 以「樂趣」而言,寫到現在還是 Ruby 最高 ~ -- 生死去来、棚頭傀儡、一線断時、落落磊磊 《花鏡》-世阿弥 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18