作者StubbornLin (Victor)
看板i-enterprise
標題Re: [請益] 網路創業大部分的網站規劃都是用PHP嗎?
時間Fri Jan 15 12:31:16 2010
※ 引述《gpmm (銀色)》之銘言:
: ※ 引述《StubbornLin (Victor)》之銘言:
: 如果你提及的語言的可讀性是指 Readability,
: 但你所舉出所拿來使用的例子卻是這種,
: 那我真的只能說你已經完全處於邏輯失控的狀態了。
你才邏輯失控,你說你有修過程式語言
真的嗎? 我不喜歡這樣懷疑別人
但你質疑的點都讓人覺得你根本就不懂
我是那教授,我鐵定當掉你
: 一個語言本身可讀性的高低,可以用多靠近人類語言的結構來定義。
: 而可讀性的高與低,對這個語言造成的影響或優劣是什麼?
對,某種程度上來說是這樣
我手邊沒有程式語言的書
大概是因為太少用到被我寄回老家了
所以我找一些網路上的資料
請看這個投影片
http://0rz.tw/0Oh4w
的第10頁和第9頁
Overall simplicity (全部簡明易懂)
A manageable (易辨的) set of features and constructs
Few feature multiplicity (多樣性) (means of doing the same operation)
Minimal operator overloading
Orthogonality (正交性)
A relatively (相對) small set of primitive constructs can be combined in a
relatively small number of ways to build the control and data structures of
the language
Every possible combination is legal
Control statements (控制陳述)
The presence (存在) of well-known control structures (e.g., while statement)
Data types and structures (資料型態與結構)
The presence of adequate facilities for defining data structures
Syntax considerations (語法考慮)
Identifier forms (識別符形式)
Flexible composition (彈性寫作)
Special words
Methods of forming (形成) compound statements
Form and meaning
Self-descriptive constructs, meaningful keywords
和這個
http://0rz.tw/9pebr
Evaluation Criteria: Readability
How is it for one to read and understand programs
written in the PL?
Arguably the most important criterion!
Factors effecting readability include:
–Overall simplicity
Too many features is bad as is a multiplicity of features
–Orthogonality
Makes the language easy to learn and read
Meaning is context independent
在這裡指的Few feature multiplicity,這個不用說,違反Perl本身的精神:
"There's more than one way to do it"
你也看見Perl加了這麼多功能在語法,自然違反overall simplicity的原則
再來看
Self-descriptive constructs, meaningful keywords
自我描述的概念,有意議的關鍵字
請問那些符號哪裡有自我描述的概念? 哪裡有有意議的關鍵字?
這些不是我瞎扯出來的好嗎?
你不認同可以,你要質疑也可以
但你有做功課嗎? 你有先查資料嗎?
再舉一個例子,你知道COBOL嗎?
http://en.wikipedia.org/wiki/Cobol
http://0rz.tw/d7g0y
COBOL因為是商用語言,所以設計上某種程度也希望非程式人員也能讀
所以他寫出來是像英文的句子
: 是進入這個語言的門檻。
: 是程式人員在學習這個語言的學習曲線。
: 是這個語言本身的容易普及或存活的程度。
: 舉一個例子,
: 如果某種語言,它的所有判斷式要放在一個地方,
: 但是判斷式的描述區塊卻統統集中在另一個地方(想想還真可怕),
: 如果這樣能讓語言執行速度比 C 還跳躍 3 萬倍,
: 那請問你這樣的語言依舊是比較糟糕的嗎?
: 對我來說不是,因為它是「犧牲了自己的可讀性」,來「提昇了執行效率」。
你的認知也有點問題
現代的編譯技術越來越先進
要犧牲可讀性去換效能也換不到什麼
既然如此,為何要換?
有興趣你可以去看看LLVM等Just in time compiler的技術
http://llvm.org/
http://code.google.com/p/unladen-swallow/
Python有個計劃就是打算讓Python效能提升十倍
利用JIT compiler的技術
也就是他在執行前才把程式轉為binrary code
或進行最佳化等等
: 所以在檢討可讀性時,請將他背後的成因一起考慮進去。
: 當你硬是將你「正確的認知」套用在了「錯誤的邏輯」上,
你的認知一開始就錯誤了
重修完程式語言再來跟我戰
: 提出了語言的可讀性,卻舉出了聚焦在學習門檻的例子,
: 還認為別人指出這個部份是在嘲笑你,這實在令人啼笑皆非。
你自己說讀到一半笑出來
不然這是指什麼意思?
: 你如果告訴一個只會說台語的親切大媽,英文很易讀易懂,
: 她也會覺得你是在胡說什麼,那根本是無意義的鬼畫符。
英文是computer science的母語
我想沒有人會反對我這點吧?
大部份主流的函式庫、程式、論文、文件
全都是用英文寫的,不用英文難到要用阿拉伯文嗎?
說真的,在資訊界不懂英文,你就只能得到二手資訊
等別人翻譯好,你可以在天瓏書局買到中文書時
那東西差不多也過時了,新的東西又出來了
用英文本來就是理所當然的事
給你看一個有趣的例子
周蟒 :
http://code.google.com/p/zhpy/
他是台灣的高手gasolin寫出來的中文版Python
主要是用於教學用的,裡面的語法都是用中文寫的
對於懂中文的人可讀性或許會比較好一點
: 當然,如果你評判程式語言的優劣是依靠它的學習門檻來決定時,
: 你的確可以說,對同樣不懂程式的人來說,
: 可讀性是一個語言很重要的優劣指標。
: 另外,能否請你解釋一下你的觀點,
: 你把可寫性界定在「熟悉這些符號的人」,
你完全搞錯方向了,因為Perl加太多功能再語法,而且是用符號表示
自然學習要熟悉的負擔就比較大
Evaluation Criteria: Writability:
"Few constructs, a small number of primitives, a small set of rules for
combining them"
再一次,請重修程式語言
: 卻又把可讀性定義在「對這些語言陌生不懂的人」。
: 如此搖擺不定的評論基準點,
: 是怎麼讓你打出這篇「如何評估比較程式語言」的?
我在我文章一開始就有說過了,我修過的程式語言的知識
加上我自己的經驗
: : 這也是張飛打岳飛
: : 組合鍵只是加速你達成那樣的功能
...
: : 6. break 是跳離迴圈
: : 7. Python的code block是由縮排來決定的
: : 我想很清楚的是,perl你不懂語法,就是不懂
: : python版的可以猜,換成其它語言也一樣
: : 因為沒有一個語言像perl做這麼多功能在語法上的...
: 老實說,這像什麼?
: 這像是因為 Perl 的學習門檻高,語言本身可直接閱讀性低,
: 造成你學習上的不順暢,所以讓你特地寫文章來大肆批評它一番。
: 更直接點,這像是一個明明在寫 Python 的程式人員,
: 忽然被老闆丟了一個 Perl 的 code 要求維護,
: 因為沒辦法用像平常一樣順暢閱讀,所以砲轟 Perl 是個劣質語言。
我只能說很抱歉,你沒有仔細看我寫的文章就要跟我戰
我很久以前就在寫Perl,當時我的網頁都是用Perl-CGI
只是很久沒寫了倒是真的
但是同樣學習語言,這就是語言天生的差異
可以比較,沒什麼好說的
你硬要延申成什麼語言優劣
你是劣質語言、我是優等語言這種奇怪的說法我也沒辦法
再說,好吧,學習上的不順暢
請你去看程式語言的書好嗎?
Evaluation Criteria: Readability
"Makes the language easy to learn and read"
再一次,我快抓狂了
等你修完程式語言再來跟我戰
還有,我從來沒有說過Perl是個劣質語言!
莫名奇妙,我只從各種特性探討語言的優缺點
什麼時候我說過Perl是劣質語言?
你去翻我的文章,我哪裡說過Perl是劣質語言?
又來了,說真的,每次討論到語言就會有人莫名奇妙的激動= =
然後加一堆我沒說過的說法,指著我說我嫌某個語言爛
: Perl 會有如此豐富多變的語言標記是有他的歷史和原因的,
: 我沒有那麼清楚,但是請問你清楚嗎?
沒有那麼清楚也能拿來說嘴,原因很簡單:
http://en.wikipedia.org/wiki/There's_more_than_one_way_to_do_it
這就是Perl的哲學,這就是為什麼Perl是那個樣子
: 今天你如果說因為 Perl 語言本身的可讀性不佳,不接近一般語言,
: 讓你看 code 看的很杜爛,我想大家都能接受,
: 但你非要用你無法直覺閱讀 Perl 語言本身這件事,
: 來評論這個程式語言的優劣,那我真不知道是為什麼如此高估自己。
我累了...
不想再重覆,Perl難讀不是我自己說而已
我寫那個proxy.py,就是在上網路程式設計時老師的作業之一
原本是用Perl寫的,我特地寫一個類似的Python版給我同學比較
他們都說Python比較好讀
再者,我沒有高估自己,我只是就我學到的在寫文章而已
你為什麼不照照鏡子,你連什麼資料都沒查
也不回去翻一下程式語言的課本
就可以打這一篇從一開始就錯到底的文章來跟我戰
到底是誰高估自己?
--
Now.in 網路廣播平台
http://now.in
哇咧咧 創意投票系統
http://walele.com
易記學 程式設計教學
http://ez2learn.com/
VICTOR's 個人Blog
http://blog.ez2learn.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.68.181
1F:→ TonyQ:你反駁跟說台語的人講英文易懂那段完全搞錯回文方向吧XD 01/15 13:09
2F:→ TonyQ:他不是在跟你說要不要用英文啦(暈) 01/15 13:09
3F:→ TonyQ:另外,你說「可讀性是程式語言很重要的一個優劣的參考指標」 01/15 13:12
4F:→ iDestiny:小吃攤可以推出來了吧 改行賣雞排說不定賺更多 01/15 13:12
5F:→ TonyQ:又說perl的可讀性較python差,引申出你認為 perl劣於python 01/15 13:13
6F:→ TonyQ:還不算太牽強吧 XD 01/15 13:13
7F:→ TonyQ:不過你的確只有用相對的基準(相對於python)而沒有用絕對 01/15 13:13
8F:→ TonyQ:「perl是個劣質語言」就是了。 01/15 13:14
9F:推 reflynet:單純講可讀性的話,我可以推 psuedo language 嗎? (...) 01/15 13:18
10F:推 superpai:那我可以推SQL嗎 01/15 13:22
11F:→ StubbornLin:@TonyQ: 那你可以代我解釋他到底那些是想表達什麼? 01/15 13:25
12F:→ StubbornLin:他不是想說可讀性和貼不貼近英語沒關係 01/15 13:25
13F:→ StubbornLin:是看讀的人的背景知識,我的認知是這樣 01/15 13:26
14F:→ StubbornLin:所以你覺得他想表達什麼? 01/15 13:26
15F:→ StubbornLin:而我認為英文能力本來就是寫程式必備的 01/15 13:26
16F:→ StubbornLin:讀的人本來就必備英文能力,這沒什麼好說的 01/15 13:26
17F:→ StubbornLin:而優劣有前提的,今天這個語言是給誰寫? 寫些什麼? 01/15 13:27
18F:→ StubbornLin:團隊會這語言的多少人? 學習成本多少? 01/15 13:27
19F:→ StubbornLin:而且我指的優劣是各項目上的優劣 01/15 13:29
20F:→ StubbornLin:要自行解釋成整個語言就是劣質語言 我也不知道該說啥 01/15 13:30
21F:→ gpmm:你還是在跳…請你先定義你所謂「優劣」的目的是什麼好了 01/15 13:31
22F:→ gpmm:如果是依循 PL 良善程式語言準則,那自然你說的全對 01/15 13:31
23F:→ gpmm:但是請問業界在使用,是在看哪個語言有多良善嗎? 01/15 13:32
24F:→ gpmm:請好好想想你討論的目的跟出發點 01/15 13:32
25F:→ StubbornLin:我文章標題都寫很清楚了 你只是單純來戰都都沒讀嗎? 01/15 13:32
26F:→ StubbornLin:"如何評估比較程式語言" 01/15 13:32
27F:→ StubbornLin:業界在使用,評估條件寫那些只是最核心的部份 01/15 13:33
28F:→ StubbornLin:我說過了,我之後會再寫一篇更廣範的評估條件 01/15 13:33
29F:→ StubbornLin:從可用資源、學習成本、維護成本、人才的可得性等等 01/15 13:34
30F:→ StubbornLin:各方面討論,但老實說有點不太想寫了 01/15 13:34
31F:→ StubbornLin:一堆人連文章都沒看清楚就急著要跟我戰 01/15 13:34
32F:→ StubbornLin:請問你是怎樣決定用某種工具? 你真的有評估過嗎? 01/15 13:35
33F:→ StubbornLin:沒有比較,你要如何決定使用何種工具? 01/15 13:35
34F:→ gpmm:如果這樣,請你標題改成「從語言標準來評估比較程式語言」 01/15 13:35
35F:→ StubbornLin:而比較,又是要比些什麼? 01/15 13:35
36F:→ StubbornLin:我認為我標題寫夠清楚了,你一來程式語言課在混 01/15 13:36
37F:→ StubbornLin:二來文章沒讀清楚就一開始就想戰而戰 01/15 13:36
38F:→ StubbornLin:再來也不查資料,就只靠一張嘴要戰 01/15 13:37
39F:→ StubbornLin:你要我說什麼好呢? 01/15 13:37
40F:→ StubbornLin:就算我標題沒寫,內文也有寫 01/15 13:37
41F:→ gpmm:我要你把標題改成「從語言標準來評估比較程式語言」 01/15 13:37
42F:→ StubbornLin:"大家都知道車子我們可以比較它的馬力、耗油、安全評 01/15 13:37
43F:→ gpmm:因為你只侷限著這個範圍在著墨 01/15 13:37
44F:→ StubbornLin:等,但是大多數人不知道程式語言該比較些什麼,而我 01/15 13:38
45F:→ StubbornLin:今天所要說的,就是程式語言該拿什麼來比較" 01/15 13:38
46F:→ gpmm:很好,如果你把前提先闡明了,「我比較的標準是語言規範」 01/15 13:38
47F:→ StubbornLin:我才懶得理你... 憑什麼要改? = = 莫名奇妙 01/15 13:38
48F:→ gpmm:老早就沒有人會說什麼 01/15 13:38
49F:→ StubbornLin:嘿... 我整篇文章都是在討論語言規範 01/15 13:39
50F:→ StubbornLin:我難道還要特地注明: 這是在討論語言規範 01/15 13:39
51F:→ StubbornLin:為什麼要脫褲子放屁? 文章整篇哪裡不是在講語言的本質 01/15 13:39
52F:→ StubbornLin:算了,第二篇文章我懶得寫了 01/15 13:41
53F:→ gpmm:因為你沒有闡明基準。凡評論都有其基準在,如果你只依循 01/15 13:41
54F:→ gpmm:語言規範,你就必須闡明他,不然你就無可避免要從各角度來檢 01/15 13:42
55F:→ StubbornLin:到時又一堆人不讀文章不找資料,一看見"比較語言" 01/15 13:42
56F:→ gpmm:討,而你並沒有這樣做 01/15 13:42
57F:→ StubbornLin:就高潮了,急著來跟我戰.. 我還得浪費時間解釋 01/15 13:42
58F:→ StubbornLin:我就算沒有這樣做又如何? 我都說了,那是之後要寫的 01/15 13:43
59F:→ StubbornLin:你今天就可讀性那些部份跟我胡扯都是亂講 01/15 13:43
60F:→ StubbornLin:被戰倒你才再那邊跳針要戰其它的部份? 01/15 13:44
61F:→ StubbornLin:要麻你就一開始戰其它的部份,訓練成本、可用資源等 01/15 13:44
62F:→ StubbornLin:你一開始就挑我文章那些寫的部份來質疑我 01/15 13:44
63F:→ StubbornLin:現在又要跳針到其它地方去,我懶得理你了= = 01/15 13:45
64F:→ StubbornLin:你慢慢回吧 01/15 13:45
65F:→ gpmm:「我就算沒有這樣做又如何?」真是經典的台詞啊… 01/15 13:46
66F:→ gpmm:我談論可讀性跟你談論可讀性的基準不同,你以語言規範檢討 01/15 13:47
67F:→ StubbornLin:好,可讀性的基準就如我文章裡寫的,那你的是什麼? 01/15 13:48
68F:→ StubbornLin:你說你修過程式語言,但是你的想法又完全跟所學不一樣 01/15 13:48
69F:→ StubbornLin:你是打算發一篇論文 "探討程式語言的可讀性" 01/15 13:48
70F:→ StubbornLin:來跟我們說明程式語言的可讀性要如何比較嗎? 01/15 13:48
71F:→ StubbornLin:我洗耳恭聽 01/15 13:48
72F:→ gpmm:不不,你是老大,你的對,小的退場 01/15 13:50
73F:→ StubbornLin:我最後只想說,當你指著別人說你高估自己 有四根指頭 01/15 13:57
74F:→ StubbornLin:指著你自己,我所寫的都是我所見所聞,我的心得 01/15 13:57
75F:→ StubbornLin:我的經驗,要質疑我說的不對,只要理性都很歡迎 01/15 13:58
76F:→ StubbornLin:像這樣不引用資料,一股腦的只是為戰而戰... 01/15 13:58
77F:→ StubbornLin:我只能說是浪費大家時間而已 = = 01/15 13:59
※ 編輯: StubbornLin 來自: 111.252.68.181 (01/15 14:04)
78F:推 bobju:這系列戰文誰說得有理暫且不管.倒是StubbornLin提供不少資訊 01/15 14:11
79F:→ bobju:還蠻有用的. 01/15 14:12
忘了說Perl還有個問題很嚴重
它違反這條
Orthogonality
Meaning is context independent
我舉個例子,像是它以$/來改變<>的行為,就是context dependent
為什麼呢? <>到底會怎樣讀得看$/到底被改成什麼
一來讀起來會需要看上面到底有誰動了$/
事情還不只是這樣簡單
例如張三寫了這樣的程式
sub getFirstColumn {
// 改變<>以逗號來當資料讀取的分界
$/ = ",";
// 讀取一欄資料並回傳 (Perl放最後一行是回傳值)
$firstColumn = <$FILE>;
}
好像沒什麼問題對吧?
李四接手這個程式,然後這樣寫
$column = &getFirstColumn();
$allRemain = <$FILE>;
他原本預期$/是空的,所以<$FILE>會讀整個檔案的內容
但是不幸的是$/在getFirstColumn中被改掉了...
李四對於跑出來的結果會覺得莫名奇妙
為什麼會是這種鬼打牆的結果?
他得浪費寶貴的開發時間去檢查到底問題出在哪?
如果他有些經驗,他知道這是之前有人改了$/
他得翻一堆別人寫的程式才能知道他在哪裡改了那個值
這就是上下文相關的問題所在
因為有太多語言相關的問題會影響到開發的效率
也是為什麼我這麼重視語言的本質和特性
花那麼多心力和時間在比較和評估上
像Perl就很不適合團隊開發,因為上面提到的特性
使它容易寫出很"髒"的程式
用改全域變數來改變程式的行為
使得別人要寫會容易產生非預料中的結果
※ 編輯: StubbornLin 來自: 111.252.68.181 (01/15 14:25)