Home Contact Sitemap

Team Programming Dragon.編程龍

Programming Art、C++、Python、Django、LinuxDev、HCI、Graphics、Web2.0。讓我們成為編程界的朝田龍太郎吧。

Beauty is Our Business

A Birthday Salute to Computer Scientist Edsger W. Dijkstra.

半瓶醋的 C++ 教學(第五章):編程語言的軍團論

編程界裡面有許多爭論不休的話題。語言之爭是最主要之一。就像宗教有各種流派一樣,信或不信有時只是個人價值觀,這種爭論說起來就跟宗教戰爭沒什麼兩樣。

我自己的看法是這樣,就像一個專業的投手需要配球一樣,一個專業的 programmer 也至少需要兩種以上用起來順手的語言。用軍隊來比喻或許更為恰當。一支現代化的軍隊不可能只有步兵,也不可能只有重裝甲部隊。根據戰略戰術需求的不同,在兵種之間取得適當的平衡,才能讓戰力達到最大化。但兵種之間,比方說,戰機到底要裝備蘇系的 SU-27 還是美系的 F-22 就看各人喜好了。只要記得在這個講究制空權的時代,買戰艦的時候別去買到過時的巨大戰列艦大和號就好。

那麼,在編程的世界裡我們怎樣裝備自己的語言比較好呢?既然標題是 C++ 教學,就先來談談 C++ 好了。

C/C++,一言以敝之,是編程界的重裝甲部隊。他的戰鬥能力強大(效率高),用途廣泛,從高階應用到低階系統幾乎無所不能,但最大的問題在於機動力(開發效率較低)。此階級語言,相類似的還有 Java, C# 等等可供選擇。C# 之前微軟在推的,後來有人 port 到 *nix 平台上,但基本上開源界還是不多人用,之後微軟如果又不推的話…如同我在第四章所講的一般,語言、工具要看得長遠,才能讓自己所投注精力的報酬率得到最大。

Java 的話寫過一陣子,的確比 C++ 開發效率高一些。語法也比較純粹,比起 C++ 那種「語言聯邦」式的狀況簡潔許多,跨平台也較容易,不像我現在作研究常常拿到別人用 MFC 包 GUI 的 code 就 port 不過來…但 Java 的最大問題就在效率。說實在我沒有很精確的比較過(把幾支具代表性的程式分別寫成要比較的語言),但 Java 給人的印象就是慢。固然有人宣稱 Java 跑某些 benchmark 是跟 C++ 差不多的,我不知道他們跑了什麼 benchmark,跟我個人的經驗是有很大的出入就是了。Java 慢到我覺得差不多跟 Python 之類的 scripting language 差不多了…也因此儘管 Java 有我個人欣賞的語法純粹、跨平台等優點,只好捨棄不用,若要為了這種程度的開發效率上的提升,而以巨大的執行效率作為代價,不如直接來寫 scripting language 算了。

就像 C++ 是 C 的改進版,最近有個語言 D 也自認是 C++ 的接班人。我幾乎沒有碰這個語言,不過如果他能把 C++ 雜亂的語法修正一些,搞不好在不遠(?)的將來會是個很不錯的選擇。

與 compiled language 相對的便是 scripting language。威力略遜重裝甲部隊(執行效率較低),但部署上極為機動(開發效率較高),可以稱得上是編程界的輕騎兵或是傘兵之類的,當你需要寫一些小程式,字串處理啦、無名抓圖啦或是系統管理之類的,犯不著用 C/C++,那樣太笨重了,這時候用 scripting language 就可以搞定。

而在 scipriting language 當中,人們常提起的是所謂 3P1R: PHP, Perl, Python, Ruby。PHP 是網路編程很常用的語言,早期(好吧,其實也沒那麼早期)動態網站最常用的就是所謂 LAMP 的工具組合:Linux, Apache, MySQL, PHP。包括我現在用的 Wordpress 這個 blog 套件也是 PHP 所寫成。但說實在 PHP 的語法也不是那麼漂亮,所以轉移到另外 2P1R 的人也越來越多。

Perl 的話以「拋棄式語言」著名。字串處理很強,但是過一陣子回來看這程式就廢掉了,因為你看不懂。不太符合我的風格。

剩下 Python, Ruby。說實在話兩個都是很不錯的語言,以哪邊為主我也著實猶豫了一陣子。儘管 Python 也宣稱自己很有禪意,但單就語法來說其實 Ruby 真的是很乾淨很漂亮的,不得不承認。但現時點 Python 的社群、程式庫各方面支援較齊備(連 Google 也是把 Python 當作 official language),因此我選擇了 Python。另外我學 scripting language 很重要的是想用 web framework。這部分我喜歡 Python 的 Django 勝過 Ruby 的 Rails 一些些。

我建議如果時間、能力許可的話至少要熟一種 compiled language,一種 scripting language,如果兩者之間搭配得不錯,那就更好。我自己花比較多精神的是 C++ 與 Python。單獨寫的話都是不錯的語言,用 SWIG 之類摻在一起也很不錯。我自己的理想是 scripting 作 glue code,底層需要效率的再用 C++ 寫成可被 Python 呼叫的 module。

那為什麼我要首先來寫 C++ 的教學呢?因為現在的編程教學大部分都還是以 C++ 作為起頭。但如果將來有一天我當上某資工系的系主任,我倒是比較傾向讓同學大一上先學 Python 之類的 scripting language,把編程的觀念先打好了,下學期再來學 C++,屆時就可以專注在 C++ 深不可測的語言細節之中。

參考資料:
TIOBE 語言排名

Tags: , ,

. 31 Aug 08 | C++


Reader's Comments

  1. Mr. Monday |

    “我自己的理想是 scripting 作 glue code,底層需要效率的再用 C++ 寫成可被 Python 呼叫的 module”

    Exactly what CyberLink did. :)

  2. jutirain |

    我還以為 CyberLink 都是用 C++ 組語在刻。 XD



Leave a Reply