這篇是因為同事果睿師兄發心要開辦內部的 Ruby 語言夏令營,要教導同仁利用 Ruby 處理日常工作遇到的問題,所以寫了一些自己所學一些程式的感想。
*** ***
-
CPAN 上排名第一名,同時也是 Perl 6 的開發者的唐鳳(Autrijus / Audrey)說:「Ruby 就是『沒有到處打廣告的 Perl 6 』」。
-
松本行弘在接受歐萊禮(O'Reilly)訪問時,提到「Ruby 借用了很多 Perl 的東西……,Python 遠比 Perl 要少……」、「我認為 Ruby 這個名字作為 Perl 之後的一門語言的名字真是再恰當不過了。」
- Perl之父拉里·沃爾(Larry Wall)說:「很多方面上我還是很喜歡 Ruby 的,這是因為那些部分是從 Perl 借過去的。:-)」、「我還喜歡 Ruby 的 C<*> 一元星號運算子,所以我把它加到 Perl 6 裡面。」
我在寫程式的過程中,學習 Perl 是一個新的里程,過去寫程式到執行,是比較麻煩的,要開啟專用的程式,寫完之後要編譯成副檔名為 exe 的執行檔,然後再執行看看。有問題再重複一次,大一點的程式,編譯要好幾分鐘。
這種程式語言可以簡單稱為編譯式語言,後來學了 Perl,這種可稱為直譯式,就是隨便用個純文字編輯器,寫個幾行,就可以執行了,真的很方便。
關於程式,舉幾個例子,用 C++ 印出一行 Hello,它的寫法是:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello" << endl;
return 0;
}
用 Java 寫的程式如下,我覺得很煩瑣,所以我不喜歡 Java。
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello");
}
}
如果是用 Perl 寫,就是一行
print("Hello");
用 Ruby 則是
puts "Hello"
更簡單了吧。
在學習的過程中,的確有感覺 Ruby 參考不少 Perl 的東西,所以學起來就輕鬆多了。
Perl 真的很好用,是我用的最順手的語言,大部份的情況,可以直接寫程式,不用查資料,除非遇到比較不常用的功能。
其它程式我就要不斷偷看小抄,才能寫出來。一些大型的開發工具,則會適時提供提示,甚至有 AI 會幫你寫出後面的內容,有時真是厲害到嚇到我了。
Perl 雖然好用,但就是缺了一個重要的功能,那就是「物件導向」,雖然勉強說它有這功能,但真的很勉強,而且很難用。若要寫大一點的程式,有「物件導向」就方便很多。
在 2018 年,我聽到一個消息,一個叫做 Julia 的語言誕生,它已經花了十年了,終於有了 1.0 正式版。
這是它在維基百科的介紹詞:
他們想要的是一個開源的軟體,它要像 C 語言一般快速而又擁有如同 Ruby 的動態性;要具有 Lisp 般真正的同像性而又有 Matlab 般熟悉的數學記號;要像 Python 般通用、像 R 般在統計分析上得心應手、像 Perl 般自然地處理字串、像 Matlab 般具有強大的線性代數運算能力、像 shell 般膠水語言的能力,易於學習而又不讓真正的駭客感到無聊;還有,它應該是互動式的,同時又是編譯型的。
它幾乎包山包海了,有 C、Perl、Ruby、Python 的優點,那還有什麼好說的。
我一看到就好想學,也真的立刻下載回來,花了幾天學習。
電腦語言真的不難,大概一個星期就大致差不多了,不像學英語,我學 30 多年還說不出幾句,而且還不標準。
學了幾天,發現一件事,Julia 竟然也沒有「物件導向」,資料上是說有可以做出來,但就是比較麻煩,沒那麼好用,Perl 也是說有,但就是不好用。
所以,我最後就放棄 Julia 了。
對了,中間我還學過一點點 Python,就是要拿著 Python 的說明文件,就可以寫出基本功能的程式。
因為果睿師兄有用 Python 寫過幾支 CBETA 重要的程式,所以我也必須學習,才能做後續的維護修改。
Python 是有不錯的物件導向功能,不過 Python 的格式要求太嚴格,我實在不喜歡。
別的程式就像一般在寫 email,我要怎麼寫都行,格式蠻自由的,只要基本上看的懂就好。
Python 就有一些要求,有點像要求你寫的文章標題要空四格,每一段落開頭要空二格,段與段之間只能空一行,標點不可放在行首....等等。
就類似這種令人覺得麻煩的規則,所以我也不喜歡 Python。
我學的 Perl 是 Perl 5,這是早期的語言,所以沒有很好的物件導向支持。
在 2000 年後,有了 Perl 6 的計劃,我就是一直在等待它。
2005 年,唐鳳開始著手 Perl 6 的設計。對,就是我們的 IT 大臣,他以前叫唐宗漢,在 Perl 界應該算是台灣第一人。
在很久以前我就知道這個人,是個天才型的人物,我也在 BBS 跟他討論過一些問題,當時就滿心期盼等待 Perl 6 的出現,但每年等啊等,就是一直等不到。
到了 2016 年,突然在網路上看到唐鳳成為台灣最年輕的政務委員,當時我有在臉書上轉貼這個新聞,除了恭禧他,順便也忍不住在臉書抱怨:我的 Perl 6 呢?
結果唐鳳跑到我臉書回應說:2015-12-25 就已經有正式版了。
當時還真的把我嚇一大跳,還好我沒有說太多抱怨的話。
這中間有一個「梗」,因為太多人在敲碗等 Perl 6,所以每次有人問何時會出來?就有人回答,聖誕節那天就會有正式版了。
就這樣一年又一年,終於在 2015 年的聖誕節出來了。
Perl 6 真的等了好幾年,不過看了一下正式版,似乎功能還不夠齊全,而且好像也無法完全支援舊的 Perl 5 的程式。
一些新的語法我看了也不太習慣,有人說 Perl 6 等太久了,沒有成功,也有人說 Perl 6 和 Perl 5 已經是不同的語言了。
我看了看,心中有不少疑惑,所以也沒有安裝及試用,感覺等了多年的東西有點失望啊。
一直到前陣子,需要用到産生 EPUB 的程式,這也是果睿師兄寫的,我覺得不能一直麻煩他幫忙,所以就跟他要了程式,想說自己來處理好了。
果睿師兄是用 Ruby 寫的,因此我也花了幾天,學了一下 Ruby,習慣之後,真心覺得好用,不少地方比 Perl 簡潔,用起來也順,又有物件導向功能,而且有不少現代語言的優點,感覺真的很好。
原本還在煩惱,從此要維護工作中三種語言的程式,Perl、Python、Ruby。
結果果睿師兄很好心,他自願把過去用 Python 寫的幾支大程式,全部幫忙改成 Ruby 版,我從此就幾乎不用處理 Python 了。
果睿師兄真是佛心來著。 _/\_
果睿師兄說 Ruby 可能慢一點,我是沒什麼感覺。反而是有一支 BM 轉 P5a 的程式,原本是 Python 寫的,在處理大檔時,我曾經等過數十分鐘,等到以為電腦當了,後來確定沒當機,努力等下去,終於有了結果。
改用果睿師兄寫的 Ruby 版去執行,不誇張,五秒內完成。
後來也查到 Python 版也有不少改善的空間,但要動點手腳,花點工夫,不像 Ruby 那樣直覺。
既然唐鳳都說「Ruby 就是『沒有到處打廣告的 Perl 6』」。
Perl 之父拉里·沃爾(Larry Wall)也說:「很多方面上我還是很喜歡 Ruby 的,這是因為那些部分是從 Perl 借過去的。:-)」
再加上自己的經驗,學 Ruby 真的不錯,相信只要學一些基礎的功能,在電腦操作上,許多瑣事都可以快速解決,就算只學過幾行,會幾個簡單的功能,都是值得的。
祝同仁們學新語言順利 !
- 瀏覽次數:906
發表新回應