Re: [請益] 網路創業大部分的網站規劃都是用PHP嗎?

看板toberich (創業)作者 (Victor)時間16年前 (2010/01/14 20:49), 編輯推噓6(60105)
留言111則, 4人參與, 最新討論串12/23 (看更多)
※ 引述《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

01/14 20:53, , 1F
我修過程式語言,但我覺得這些並不你所說得客觀,而是隨著
01/14 20:53, 1F

01/14 20:53, , 2F
不同的人的撰寫背景而主觀的認知。可讀性建立在你對這個語言
01/14 20:53, 2F

01/14 20:54, , 3F
的瞭解,甚至是一些背景知識的瞭解。當你先入為主在心中內置
01/14 20:54, 3F

01/14 20:54, , 4F
一個語言之後,其他的語言跟可寫性可能就是個屁了吧xd
01/14 20:54, 4F

01/14 20:56, , 5F
同 T 大所言,PL 是程設基礎之一,小弟也修過,言盡於此吧
01/14 20:56, 5F
你即然有修過,又要拿programming sytle和readibility混在一起 我也沒什麼好說的

01/14 20:57, , 6F
有空戰語言 不如學怎麼把html寫好一點.. 這可沒得選了
01/14 20:57, 6F

01/14 20:59, , 7F
那如果同樣都不瞭解呢? 我說的是那樣的假設
01/14 20:59, 7F

01/14 20:59, , 8F
當然我沒有實際研究的數據,所以你們覺得我不客觀
01/14 20:59, 8F

01/14 21:00, , 9F
如果同時找一些只寫過C/C++ VB的人去讀perl和python呢
01/14 21:00, 9F

01/14 21:00, , 10F
我相信語言的天性 $$ $% 那種無從猜起和聯響的語法
01/14 21:00, 10F

01/14 21:01, , 11F
會讓人難以理解 甚至要一直查手冊才有辦法瞭解
01/14 21:01, 11F

01/14 21:01, , 12F
同樣一個disableBuffering的功能
01/14 21:01, 12F

01/14 21:01, , 13F
一個是就算不懂python讀這幾個字就可以理解意思的
01/14 21:01, 13F

01/14 21:02, , 14F
一個是非得查手冊才知道$| = 1是做什麼用的
01/14 21:02, 14F

01/14 21:02, , 15F
你們要說這是主觀對語言的瞭解嗎?
01/14 21:02, 15F

01/14 21:02, , 16F
大家都懂英文,但是不是大家都懂$|
01/14 21:02, 16F

01/14 21:02, , 17F
差別就在這裡
01/14 21:02, 17F

01/14 21:03, , 18F
通通都沒有jquery閱讀性好
01/14 21:03, 18F
※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 21:03)

01/14 21:05, , 19F
我只想說,混在一起的人是您不是我
01/14 21:05, 19F

01/14 21:05, , 20F
在您看來都是外面的人搞錯了,那也無妨,就這樣罷
01/14 21:05, 20F

01/14 21:15, , 21F
好一個可讀性很差,我懂了,你網頁中perl的範例的確可讀性
01/14 21:15, 21F

01/14 21:15, , 22F
很差,有 while (&lt;$CHILD&gt;) 這種東西的code可讀性
01/14 21:15, 22F

01/14 21:16, , 23F
或者是 my $first = &lt;$CHILD&gt;;
01/14 21:16, 23F

01/14 21:16, , 24F
還有&amp;open_connection($URL, $remote_host, $remote_por
01/14 21:16, 24F

01/14 21:17, , 25F
這個範例的果然是適合拿來做可讀性很差的範例。(搔頭)
01/14 21:17, 25F

01/14 21:18, , 26F
難怪你會問有沒有仔細讀過你文章,我仔細看了兩次才看到。
01/14 21:18, 26F

01/14 21:22, , 27F
那是wordpress把<> escape掉的結果
01/14 21:22, 27F

01/14 21:23, , 28F
如果你只剩這種方式來證明你的說法 那就這樣吧
01/14 21:23, 28F

01/14 21:25, , 29F
我很嚴肅的說一句話,你要提引用資料,而且還要質疑別人有沒
01/14 21:25, 29F

01/14 21:26, , 30F
有仔細閱讀你的引用資料,那你就該對你的引用資料負責。
01/14 21:26, 30F

01/14 21:27, , 31F
至於提說法的是你,要證明的也是你,我只是質疑罷了。
01/14 21:27, 31F

01/14 21:29, , 32F
好,那除了wordpress <>被escape掉的部份
01/14 21:29, 32F

01/14 21:30, , 33F
你能不能除此之外的說法來質疑我?
01/14 21:30, 33F

01/14 21:30, , 34F
當然你可以甚至拿我打錯的任何一個字來質疑我
01/14 21:30, 34F

01/14 21:30, , 35F
我前三行就講啦,你的背景和主觀認知讓你比較偏好於python
01/14 21:30, 35F

01/14 21:30, , 36F
但是又如何? 那問題本身根本就沒被討論到
01/14 21:30, 36F

01/14 21:30, , 37F
like 的程式語言,但是對某些不這麼認知的人就不見得如此。
01/14 21:30, 37F
還有 36 則推文
01/14 21:44, , 74F
自然就較難懂,而python只能呼叫os.getpid()
01/14 21:44, 74F

01/14 21:45, , 75F
就比較容易懂,我想這個很客觀吧? 找寫C的人來看
01/14 21:45, 75F

01/14 21:45, , 76F
剛剛觀察到 import 的部份了,這樣就比較沒有內建元件的問題
01/14 21:45, 76F

01/14 21:45, , 77F
找寫C++、Java的人看,perl的符號都得查手冊
01/14 21:45, 77F

01/14 21:45, , 78F
不過這種不需要對變數明確宣告的語言雖然有彈性,卻容易造成
01/14 21:45, 78F

01/14 21:46, , 79F
python是純物件導向的語言,所以他大多功能都是
01/14 21:46, 79F

01/14 21:46, , 80F
變數撰寫上的混淆的說。
01/14 21:46, 80F

01/14 21:46, , 81F
以函式庫或是函式來完成的,讓語言核心的東西較少
01/14 21:46, 81F

01/14 21:46, , 82F
叫我寫pyton也要查手冊才知道keyword啊 XD
01/14 21:46, 82F

01/14 21:46, , 83F
python使用未定義的變數會丟例外
01/14 21:46, 83F

01/14 21:47, , 84F
我知道得查,但程度上就有差別阿
01/14 21:47, 84F

01/14 21:47, , 85F
怕是怕重複定義而不是使用未定義變數吧
01/14 21:47, 85F

01/14 21:47, , 86F
我讀perl查手冊的頻率可能是幾行就一次
01/14 21:47, 86F

01/14 21:47, , 87F
這可是以前寫asp的惡夢 XD
01/14 21:47, 87F

01/14 21:48, , 88F
但python就很順,同樣都是我學過的語言
01/14 21:48, 88F

01/14 21:48, , 89F
perl語法太雜、負擔太大= = 讀起來很痛苦
01/14 21:48, 89F

01/14 21:48, , 90F
常見的語法還好,偶爾跑出一兩個冷門的語法
01/14 21:48, 90F

01/14 21:49, , 91F
更慘的是你在google打 perl <> `` ~=之類的是找不到的
01/14 21:49, 91F

01/14 21:49, , 92F
除非你知道他是在perl裡的那一個語法的項目中...
01/14 21:49, 92F

01/14 21:49, , 93F
否則就頭大了= =
01/14 21:49, 93F

01/14 21:49, , 94F
對我來說,perl最糟的地方就是他做太多功能在語法中
01/14 21:49, 94F

01/14 21:50, , 95F
話說插個話 client, address = s.accept() 這賦值式意義?.?
01/14 21:50, 95F

01/14 21:51, , 96F
把sequence拆開來 分別指派給左邊的項目
01/14 21:51, 96F

01/14 21:51, , 97F
perl我記得也有類似的寫法
01/14 21:51, 97F

01/14 21:51, , 98F
像是a, b, c = (1, 2, 3) 那a b c就會分別是1 2 3
01/14 21:51, 98F

01/14 21:51, , 99F
什麼什麼什麼 XD accpet 照經驗應該是會接到一個client
01/14 21:51, 99F

01/14 21:52, , 100F
哦 看懂了 XD 你沒解釋我還真不知道這啥鬼
01/14 21:52, 100F

01/14 21:52, , 101F
其實我看過得code裡面最讓我覺得功能複雜的是ruby (汗
01/14 21:52, 101F

01/14 21:53, , 102F
嗯 這類做成語法的東西沒看過就很難懂或猜
01/14 21:53, 102F

01/14 21:54, , 103F
perl就是因為建太多語法 不懂就真的無從猜起= ="
01/14 21:54, 103F

01/14 21:54, , 104F
accept會回傳一個socket和address
01/14 21:54, 104F

01/14 21:54, , 105F
在函式庫裡是這樣定義的
01/14 21:54, 105F

01/14 21:54, , 106F
話說wordpress的<pre>裡要怎樣打該死的<和> = ="
01/14 21:54, 106F

01/14 21:55, , 107F
它一直escape我的角括號= = 氣死我
01/14 21:55, 107F

01/14 21:59, , 108F
找到解法了 <pre>裡加一個<code>包起來
01/14 21:59, 108F

01/14 22:01, , 109F
XD
01/14 22:01, 109F

01/14 22:07, , 110F
ok 更新好了,角括號沒有被escape掉了
01/14 22:07, 110F
※ 編輯: StubbornLin 來自: 111.252.72.249 (01/14 22:44)

01/14 22:46, , 111F
補充一個例子
01/14 22:46, 111F
※ 編輯: 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)
文章代碼(AID): #1BJnB2yA (toberich)
討論串 (同標題文章)
文章代碼(AID): #1BJnB2yA (toberich)