看板 toberich 關於我們 聯絡資訊
※ 引述《StubbornLin (Victor)》之銘言: : 你自己都說你認為的可讀性(Readability)是風格(programming style)了 : 那你硬要來跟我說的可讀性搭在一起 : 不是張飛打岳飛嗎? : 我的文章的可讀性是指跨語言的比較 : 語言的天性有些就使得他們難讀 : 我隨手找篇文章你可以讀讀看 : "What Makes a Good Programming Language?" : http://0rz.tw/U0NKe : 裡面提到Objective-C的可讀性 : 語言本身就有可讀性的差別 : 如果你有修過Programming Language這門課就會知道 : 裡面有一些章節是在討論語言的可讀性 : 你硬要拿錯誤的認知來嘲笑我的文章是你的自由 如果你提及的語言的可讀性是指 Readability, 但你所舉出所拿來使用的例子卻是這種, 那我真的只能說你已經完全處於邏輯失控的狀態了。 一個語言本身可讀性的高低,可以用多靠近人類語言的結構來定義。 而可讀性的高與低,對這個語言造成的影響或優劣是什麼? 是進入這個語言的門檻。 是程式人員在學習這個語言的學習曲線。 是這個語言本身的容易普及或存活的程度。 舉一個例子, 如果某種語言,它的所有判斷式要放在一個地方, 但是判斷式的描述區塊卻統統集中在另一個地方(想想還真可怕), 如果這樣能讓語言執行速度比 C 還跳躍 3 萬倍, 那請問你這樣的語言依舊是比較糟糕的嗎? 對我來說不是,因為它是「犧牲了自己的可讀性」,來「提昇了執行效率」。 所以在檢討可讀性時,請將他背後的成因一起考慮進去。 當你硬是將你「正確的認知」套用在了「錯誤的邏輯」上, 提出了語言的可讀性,卻舉出了聚焦在學習門檻的例子, 還認為別人指出這個部份是在嘲笑你,這實在令人啼笑皆非。 你如果告訴一個只會說台語的親切大媽,英文很易讀易懂, 她也會覺得你是在胡說什麼,那根本是無意義的鬼畫符。 當然,如果你評判程式語言的優劣是依靠它的學習門檻來決定時, 你的確可以說,對同樣不懂程式的人來說, 可讀性是一個語言很重要的優劣指標。 另外,能否請你解釋一下你的觀點, 你把可寫性界定在「熟悉這些符號的人」, 卻又把可讀性定義在「對這些語言陌生不懂的人」。 如此搖擺不定的評論基準點, 是怎麼讓你打出這篇「如何評估比較程式語言」的? : : 如果當我們將可讀性誤植在「語言」本身時, : : 會產生一個極其荒謬的情況 - : : 也就是語言的可讀性,變成了你對於這個語言的熟稔程度的指標。 : : 如果依照這個邏輯,當我們在使用 windows 時, : : 用滑鼠點選切換視窗的人,也會覺得這是比起鍵盤按 Alt-Tab 更好的技巧, : : 只因為這個「組合鍵」的操作,你無法在鍵盤上直接看到。 : 這也是張飛打岳飛 : 組合鍵只是加速你達成那樣的功能 : 但是和可讀性完全搭不上關系 : 你大不了不用組合鍵,用滑鼠慢慢點 : 可是寫程式就不一樣了 : 你老闆要你維護的perl程式丟給你 : 程式碼一行一行地寫在裡面 : 請問你可以大不了不讀算了嗎? : $| = 1; : 你可以在沒有看文件的情況下回答我這行的用意嗎? : 如果當初寫的人沒加註解 : 沒有文件,那你只能查文件 : 好,那你可能會說這是看語言熟不熟來評斷可讀性 : 那我們設同樣的條件,兩個一樣不熟的人來看同樣的一份程式呢? : disableBuffering(); : 一個不熟你要查文件 : 一個不熟你光看名字就能猜到 : 你要不要跟我說這兩個差別在哪? : 當然,你會說,Perl也可以這樣用函數來寫 : 問題是Perl本身提供那些$$ $% $^ $&就會有人去用它們 : 再說有些情況非用這些不可 : 通常都是大量被使用,別人在程式裡用到這些,你沒有選擇 : 你只能去讀他們....,而且要讀懂 : 這就是我所說的問題所在 : ###### 補充例子 ##### : 那個disableBuffering()的例子實在很糟 : 我另外找個例子 : Perl版: : while (<$CHILD>) { : print $_; : last if ($_ =~ /^[\s\x00]*$/); : } : 用Python的話 : import re : for line in child.readlines(): : print line : if re.match(line, '^[\s\x00]*$'): : break : Perl版你要知道的知識有: : 1. <> 是讀一筆資料 : 2. $/ 會影響<>讀的東西是由什麼東西來分開的,預設是斷行 : 3. last 是break的意思,也就是跳離迴圈 : 4. last if 是當後面條件成立時跳離迴圈 : 5. $_ 是<>每次讀進來的資料所放的變數 : 6. =~ 是匹配用的語法 : 7. // 是用來表述regualr expression的語法 : Python版你要知道的知識有: : 1. import 是引入函式庫 : 2. re 是regular express的函式庫 : 3. for value in sequence: 是foreach的意思,一次從seq中取一個value : 4. file.readlines() 是以行為單位回傳一個list : 5. re.match 是匹配regular expression的功能 : 6. break 是跳離迴圈 : 7. Python的code block是由縮排來決定的 : 我想很清楚的是,perl你不懂語法,就是不懂 : python版的可以猜,換成其它語言也一樣 : 因為沒有一個語言像perl做這麼多功能在語法上的... 老實說,這像什麼? 這像是因為 Perl 的學習門檻高,語言本身可直接閱讀性低, 造成你學習上的不順暢,所以讓你特地寫文章來大肆批評它一番。 更直接點,這像是一個明明在寫 Python 的程式人員, 忽然被老闆丟了一個 Perl 的 code 要求維護, 因為沒辦法用像平常一樣順暢閱讀,所以砲轟 Perl 是個劣質語言。 Perl 會有如此豐富多變的語言標記是有他的歷史和原因的, 我沒有那麼清楚,但是請問你清楚嗎? 今天你如果說因為 Perl 語言本身的可讀性不佳,不接近一般語言, 讓你看 code 看的很杜爛,我想大家都能接受, 但你非要用你無法直覺閱讀 Perl 語言本身這件事, 來評論這個程式語言的優劣,那我真不知道是為什麼如此高估自己。 滑鼠 / 鍵盤組合鍵這個例子的意義就在於,你完全搞錯方向了。 這也是張飛打岳飛 組合鍵只是加速你達成那樣的功能 但是和可讀性完全搭不上關系 你大不了不用組合鍵,用滑鼠慢慢點 可是寫程式就不一樣了 就像組合鍵可以加速操作一樣, 熟悉 Perl 的人可以透過各種語言標記符號來達成更精簡快速的操作, 當你看不懂的時候,你必須要去查手冊, 就像當你不知道 windows 有 alt + tab 快速鍵的時候, 你也需要去找 windows 的快速鍵表。 -- 明明說好不回的,到底為什麼又跑出來(猛撞牆 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.80.28.216
TonyQ:嘴巴說不要...XDDDDDDD 01/15 11:32
superpai:變數沒$的語言都很難讀啊啊~~(戰 01/15 12:08
rshadow:如果以貼近人類語言來說,VB就會比C++優越了= = 01/15 13:14