toberich 板


LINE

※ 引述《gpmm (銀色)》之銘言: : ※ 引述《StubbornLin (Victor)》之銘言: : : 我有寫一篇文章在說明如何比較程式語言 : : http://blog.ez2learn.com/2010/01/08/how-to-compare-languages/ : : 不過這裡面只提到最核心的部份,還有很多像是可用資源、社群、商業資源 : : 等等更廣範的問題,有空我會再另外寫一篇文章來介紹 : 老實說,因為小弟對 Perl / Python 只略知皮毛, : 所以沒辦法對您的文章通篇回應, : 但是看到您的這篇「如何比較程式語言」,實在是忍不住笑了。 : 當我們在談程式語言的可讀性時,大多數指的並不是「語言」本身有多容易閱讀, : 而是指程式人員的撰寫風格和程式邏輯。 你有沒有修過程式語言(Programming Language)? 你有仔細讀我的文章嗎? 我說過有 你說的大多數,是指什麼情況? 你所說的是風格,風格的差別就只限於單一語言的比較 像這樣 if(a==b) { printf("a equals b\n"); } if(a==b) { printf("a equals b\n"); } 你自己都說你認為的可讀性(Readability)是風格(programming style)了 那你硬要來跟我說的可讀性搭在一起 不是張飛打岳飛嗎? 我的文章的可讀性是指跨語言的比較 語言的天性有些就使得他們難讀 我隨手找篇文章你可以讀讀看 "What Makes a Good Programming Language?" http://0rz.tw/U0NKe 裡面提到Objective-C的可讀性 語言本身就有可讀性的差別 如果你有修過Programming Language這門課就會知道 裡面有一些章節是在討論語言的可讀性 你硬要拿錯誤的認知來嘲笑我的文章是你的自由 : 如果當我們將可讀性誤植在「語言」本身時, : 會產生一個極其荒謬的情況 - : 也就是語言的可讀性,變成了你對於這個語言的熟稔程度的指標。 : 如果依照這個邏輯,當我們在使用 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做這麼多功能在語法上的... -- Now.in 網路廣播平台 http://now.in 哇咧咧 創意投票系統 http://walele.com 易記學 程式設計教學 http://ez2learn.com/ VICTOR's 個人Blog http://blog.ez2learn.com/ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.72.249
1F:→ TonyQ:我修過程式語言,但我覺得這些並不你所說得客觀,而是隨著 01/14 20:53
2F:→ TonyQ:不同的人的撰寫背景而主觀的認知。可讀性建立在你對這個語言 01/14 20:53
3F:→ TonyQ:的瞭解,甚至是一些背景知識的瞭解。當你先入為主在心中內置 01/14 20:54
4F:→ TonyQ:一個語言之後,其他的語言跟可寫性可能就是個屁了吧xd 01/14 20:54
5F:→ gpmm:同 T 大所言,PL 是程設基礎之一,小弟也修過,言盡於此吧 01/14 20:56
你即然有修過,又要拿programming sytle和readibility混在一起 我也沒什麼好說的
6F:推 superpai:有空戰語言 不如學怎麼把html寫好一點.. 這可沒得選了 01/14 20:57
7F:→ StubbornLin:那如果同樣都不瞭解呢? 我說的是那樣的假設 01/14 20:59
8F:→ StubbornLin:當然我沒有實際研究的數據,所以你們覺得我不客觀 01/14 20:59
9F:→ StubbornLin:如果同時找一些只寫過C/C++ VB的人去讀perl和python呢 01/14 21:00
10F:→ StubbornLin:我相信語言的天性 $$ $% 那種無從猜起和聯響的語法 01/14 21:00
11F:→ StubbornLin:會讓人難以理解 甚至要一直查手冊才有辦法瞭解 01/14 21:01
12F:→ StubbornLin:同樣一個disableBuffering的功能 01/14 21:01
13F:→ StubbornLin:一個是就算不懂python讀這幾個字就可以理解意思的 01/14 21:01
14F:→ StubbornLin:一個是非得查手冊才知道$| = 1是做什麼用的 01/14 21:02
15F:→ StubbornLin:你們要說這是主觀對語言的瞭解嗎? 01/14 21:02
16F:→ StubbornLin:大家都懂英文,但是不是大家都懂$| 01/14 21:02
17F:→ StubbornLin:差別就在這裡 01/14 21:02
18F:推 superpai:通通都沒有jquery閱讀性好 01/14 21:03
※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 21:03)
19F:→ gpmm:我只想說,混在一起的人是您不是我 01/14 21:05
20F:→ gpmm:在您看來都是外面的人搞錯了,那也無妨,就這樣罷 01/14 21:05
21F:→ TonyQ:好一個可讀性很差,我懂了,你網頁中perl的範例的確可讀性 01/14 21:15
22F:→ TonyQ:很差,有 while (&lt;$CHILD&gt;) 這種東西的code可讀性 01/14 21:15
23F:→ TonyQ:或者是 my $first = &lt;$CHILD&gt;; 01/14 21:16
24F:→ TonyQ:還有&amp;open_connection($URL, $remote_host, $remote_por 01/14 21:16
25F:→ TonyQ:這個範例的果然是適合拿來做可讀性很差的範例。(搔頭) 01/14 21:17
26F:→ TonyQ:難怪你會問有沒有仔細讀過你文章,我仔細看了兩次才看到。 01/14 21:18
27F:→ StubbornLin:那是wordpress把<> escape掉的結果 01/14 21:22
28F:→ StubbornLin:如果你只剩這種方式來證明你的說法 那就這樣吧 01/14 21:23
29F:推 TonyQ:我很嚴肅的說一句話,你要提引用資料,而且還要質疑別人有沒 01/14 21:25
30F:→ TonyQ:有仔細閱讀你的引用資料,那你就該對你的引用資料負責。 01/14 21:26
31F:→ TonyQ:至於提說法的是你,要證明的也是你,我只是質疑罷了。 01/14 21:27
32F:→ StubbornLin:好,那除了wordpress <>被escape掉的部份 01/14 21:29
33F:→ StubbornLin:你能不能除此之外的說法來質疑我? 01/14 21:30
34F:→ StubbornLin:當然你可以甚至拿我打錯的任何一個字來質疑我 01/14 21:30
35F:→ TonyQ:我前三行就講啦,你的背景和主觀認知讓你比較偏好於python 01/14 21:30
36F:→ StubbornLin:但是又如何? 那問題本身根本就沒被討論到 01/14 21:30
37F:→ TonyQ:like 的程式語言,但是對某些不這麼認知的人就不見得如此。 01/14 21:30
38F:→ TonyQ:我是認為你既然要討論程式碼的可讀性,錯誤的程式碼當然會影 01/14 21:31
39F:推 superpai:變數沒有用$我就不會閱讀了(扭) 01/14 21:31
40F:→ StubbornLin:我承認我偏好python,但是$|= 1; 和用函式庫呼叫 01/14 21:31
41F:→ TonyQ:響判斷,不過這倒是小事,你只要修正就好。 01/14 21:31
42F:→ StubbornLin:兩個的可讀性有主觀到這個地部嗎? 01/14 21:32
43F:→ StubbornLin:而且我也都說了,如果同樣不懂perl python的人來看 01/14 21:35
44F:→ TonyQ:問題是,python 現在就沒有這個函式,而perl 可以定義這函式 01/14 21:35
45F:→ StubbornLin:這樣不客觀嗎? 都同樣不懂perl和python 他懂C好了 01/14 21:35
46F:→ StubbornLin:問題是Perl那種寫法被大量使用,你在每個perl程式 01/14 21:36
47F:→ StubbornLin:幾乎都可以看見那種寫法,我承認我舉的那個例子不好 01/14 21:36
48F:→ StubbornLin:但是事實就是大量的perl程式都用那種寫法 01/14 21:36
49F:→ StubbornLin:而且無可避免,而python是別無選擇,因為瑣碎的功能 01/14 21:37
50F:→ TonyQ:所以我說這跟背景的主觀認識有差啊,像我剛剛看python code 01/14 21:37
51F:→ StubbornLin:都寫在函式庫裡,你只能引用拿出來使用 01/14 21:37
52F:→ StubbornLin:這樣一來就有"名稱",函數名稱 library"名稱" 01/14 21:37
53F:→ StubbornLin:有名稱就可以猜,但是Perl是符號,無法猜測是什麼 01/14 21:37
54F:→ TonyQ:最不習慣的是 if/for 後的 : 而且沒有明確結尾的記號 01/14 21:37
55F:→ TonyQ:這就會影響到對我而言可讀性的認知,這種事情是根據你的背 01/14 21:38
56F:→ StubbornLin:讀資料有語法 <> 執行指令有語法 `` 正規匹配有語法 01/14 21:38
57F:→ StubbornLin:perl的問題就在於建立太多功能在語法上 01/14 21:39
58F:→ TonyQ:景來看的,每個語言本就會有他dirty的地方,但是都也有自我 01/14 21:39
59F:→ StubbornLin:還有更多冷門的語法,我寫了好一陣子perl都還一直遇到 01/14 21:39
60F:→ TonyQ:修復的空間。 01/14 21:39
61F:→ StubbornLin:Python的code block是靠縮排來決定的 01/14 21:39
62F:→ StubbornLin:當然在沒有這種背景知識下可能會覺得難讀 01/14 21:40
63F:→ TonyQ:對我來講我覺得這真是糟糕. XD 01/14 21:40
64F:→ StubbornLin:就很多方面確實是很主觀的 01/14 21:40
65F:→ StubbornLin:但是,大量依賴$$ $% $^那種寫法,和用函式庫來取代 01/14 21:40
66F:→ StubbornLin:舉個例子 $$是process的id 01/14 21:41
67F:→ StubbornLin:在python你要取得process的id就得這麼寫 01/14 21:41
68F:推 superpai:沒有{},變數沒有$的語言閱讀性=0 01/14 21:41
69F:→ TonyQ:說到沒有$ , python 裡面怎麼區分內建元素、關鍵字跟變數?.? 01/14 21:43
70F:→ TonyQ:只能倚賴code hightlight 了嗎 01/14 21:43
71F:→ StubbornLin:import os; print os.getpid() 01/14 21:43
72F:→ StubbornLin:對,是的 但關鍵字不多 01/14 21:44
73F:→ StubbornLin:我舉的這個例子,因為perl把pid做成符號 01/14 21:44
74F:→ StubbornLin:自然就較難懂,而python只能呼叫os.getpid() 01/14 21:44
75F:→ StubbornLin:就比較容易懂,我想這個很客觀吧? 找寫C的人來看 01/14 21:45
76F:→ TonyQ:剛剛觀察到 import 的部份了,這樣就比較沒有內建元件的問題 01/14 21:45
77F:→ StubbornLin:找寫C++、Java的人看,perl的符號都得查手冊 01/14 21:45
78F:→ TonyQ:不過這種不需要對變數明確宣告的語言雖然有彈性,卻容易造成 01/14 21:45
79F:→ StubbornLin:python是純物件導向的語言,所以他大多功能都是 01/14 21:46
80F:→ TonyQ:變數撰寫上的混淆的說。 01/14 21:46
81F:→ StubbornLin:以函式庫或是函式來完成的,讓語言核心的東西較少 01/14 21:46
82F:→ TonyQ:叫我寫pyton也要查手冊才知道keyword啊 XD 01/14 21:46
83F:→ StubbornLin:python使用未定義的變數會丟例外 01/14 21:46
84F:→ StubbornLin:我知道得查,但程度上就有差別阿 01/14 21:47
85F:→ TonyQ:怕是怕重複定義而不是使用未定義變數吧 01/14 21:47
86F:→ StubbornLin:我讀perl查手冊的頻率可能是幾行就一次 01/14 21:47
87F:→ TonyQ:這可是以前寫asp的惡夢 XD 01/14 21:47
88F:→ StubbornLin:但python就很順,同樣都是我學過的語言 01/14 21:48
89F:→ StubbornLin:perl語法太雜、負擔太大= = 讀起來很痛苦 01/14 21:48
90F:→ StubbornLin:常見的語法還好,偶爾跑出一兩個冷門的語法 01/14 21:48
91F:→ StubbornLin:更慘的是你在google打 perl <> `` ~=之類的是找不到的 01/14 21:49
92F:→ StubbornLin:除非你知道他是在perl裡的那一個語法的項目中... 01/14 21:49
93F:→ StubbornLin:否則就頭大了= = 01/14 21:49
94F:→ StubbornLin:對我來說,perl最糟的地方就是他做太多功能在語法中 01/14 21:49
95F:推 TonyQ:話說插個話 client, address = s.accept() 這賦值式意義?.? 01/14 21:50
96F:→ StubbornLin:把sequence拆開來 分別指派給左邊的項目 01/14 21:51
97F:→ StubbornLin:perl我記得也有類似的寫法 01/14 21:51
98F:→ StubbornLin:像是a, b, c = (1, 2, 3) 那a b c就會分別是1 2 3 01/14 21:51
99F:→ TonyQ:什麼什麼什麼 XD accpet 照經驗應該是會接到一個client 01/14 21:51
100F:→ TonyQ:哦 看懂了 XD 你沒解釋我還真不知道這啥鬼 01/14 21:52
101F:→ TonyQ:其實我看過得code裡面最讓我覺得功能複雜的是ruby (汗 01/14 21:52
102F:→ StubbornLin:嗯 這類做成語法的東西沒看過就很難懂或猜 01/14 21:53
103F:→ StubbornLin:perl就是因為建太多語法 不懂就真的無從猜起= =" 01/14 21:54
104F:→ StubbornLin:accept會回傳一個socket和address 01/14 21:54
105F:→ StubbornLin:在函式庫裡是這樣定義的 01/14 21:54
106F:→ StubbornLin:話說wordpress的<pre>裡要怎樣打該死的<和> = =" 01/14 21:54
107F:→ StubbornLin:它一直escape我的角括號= = 氣死我 01/14 21:55
108F:→ StubbornLin:找到解法了 <pre>裡加一個<code>包起來 01/14 21:59
109F:→ TonyQ:XD 01/14 22:01
110F:→ StubbornLin:ok 更新好了,角括號沒有被escape掉了 01/14 22:07
※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 22:44)
111F:→ StubbornLin:補充一個例子 01/14 22:46
※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 22:47) ※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 22:52) ※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 22:56)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP