作者gpmm (銀色)
看板i-enterprise
標題Re: [請益] 網路創業大部分的網站規劃都是用PHP嗎?
時間Fri Jan 15 10:50:07 2010
※ 引述《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