編程 · 資訊科技

編程雜談


行走江湖,多學幾門「外語」總是好的。但近年因工作繁重,就再沒有太多時間學「外語」。對上一次是 Lisp,當時還在當研究助理,因工作需要而自學。

我的「母語」是 Basic,當年在一台 80386 上自行摸索,從 QBASIC 一直玩到 Visual Basic。後來上了大學,才選修 C/C++、Matlab 和 Mathematica 的課。之後就憑著這些為基礎,再自學了一大堆其它相似的語言。不過由於我不是 IT 佬而是物理佬,做的是科學運算,所以最熟悉和用得最多的,還是正式上課學的那三種,尤其是 C/C++。

Java 雖然很「美」,但因為太慢和太笨重,所以平時玩玩則可,實作時還是避之則吉,直至近年因為教書的關係才多寫 Java。Java 在很多地方比 C/C++ 先進,但我覺得 Java 程式碼過於冗長,程式本身效能也不佳。強制的 OO 架構雖然是個優勢,但這個龐然巨物用於科學運算則缺乏靈活性,反而 C/C++ 容許我選擇甚麼時候用 OO,也可以用一些比較 low-level (如 pointer、bitwise operation)的技巧來提升程式效能,是我比較喜歡的。

但我最喜歡的應該是 Perl。它有一點像 C,但加入 awk 和 sed 等元素,比 C 更靈活易用,最適合用來做一些 quick and dirty 的數據分析。而 Lisp 和 Prolog 也是我覺得比較有趣的,可惜只玩了兩個月,未能深入理解其精粹。

我當研究生和研究助理的時候,每天都在電腦上編程和做實驗。通常是寫了一些 C/C++ 程式,然後要調校不同的實驗參數。調校好之後就放到一個 Linux server 上去跑(稱為 “submit job"),所產生的數據則自動存到文字檔中。這些程式運行需時,快則數小時,慢則一個月,所以程式效能至關重要,而產生的數據有時以 GB 計。這些數據不能逐個放入 Excel 一類試算表軟件中分析,一來試算表可能會鯁死,二來每次用人手處理也費時失事。所以我寫了一系列的 Perl 程式,用來抽取各項數據作計算和分析,必要時還可以用 gnuplot 來自動畫圖,甚至產生一份 HTML 格式的報告,再發一條電郵訊息,例如通知我自己回去看結果。這些全部都是配合 Linux 上的工具來進行,從 submit job 到出報告都可以自動化。所以一旦寫好了那堆程式,我只要執行一行命令,電腦就會替我工作,我就可以去玩別的東西,隔一段時間再回來看結果就行,非常好玩。

但是程式語言是會隨時間而演化的。每一種程式語言都有它的問題,所以每隔一段時間就會有一班高手出來,針對現存各程式語言的弱點,不斷發展出新的語言,Ruby 就是一例。我聽聞 Ruby 的好處已經有一段日子,但直到最近解決了一些時間管理上面的難題,才令我放工之後有時間和精力讀讀這方面的書。

Image of The Ruby Programming Language Image of Rails for Java Developers Image of Practical Ruby Projects

初讀 Ruby 發現它並不像我熟悉的 C/C++/Java 一系,反而處處是 Matlab 和 Perl 的影子。這也不錯,因為 Matlab 和 Perl 的程式碼很簡潔,寫起來也方便。如果可以同時達到 C/C++ 級數的效能,那就非常理想。但是,效能也不是我唯一關心的事,因為在學習新語言時,還可以體會到設計者的智慧,看到語言背後的 elegance。這種「純美」的欣賞,令得學習本身就是一種享受。

暫時就寫到這裡,歡迎交流。

4 thoughts on “編程雜談

  1. 中三那件學basic, 我覺得它是世上最難明白的語言呢! 自此之後對computer programing 都敬而遠之.

    在日常生活中, 有很多情況需要電腦輔助, 我希望有生之年, 會學懂一二.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

你正使用 WordPress.com 帳號留言。 登出 / 變更 )

Twitter picture

你正使用 Twitter 帳號留言。 登出 / 變更 )

Facebook照片

你正使用 Facebook 帳號留言。 登出 / 變更 )

Google+ photo

你正使用 Google+ 帳號留言。 登出 / 變更 )

連結到 %s