[如何學習寫程式] #4 - 不要對任何程式語言或平台有偏見

如果你常上討論區的話,一定多多少少看到像 [Java vs. .NET] 或是 [學 C# 還是 Java] 這種討論串,這種議題多半都會落到針鋒相對,因為程式語言和平台這件事,在某種程度來說很像是信仰之爭,尤其像是這種本質就是針峰相對的不同語言,最後總是會變成謾罵或意氣之爭,但如果初學者也沾染到這股偏見的味道的話,對往後的學習成長可能會有相當負面的影響。

如果你常上討論區的話,一定多多少少看到像 [Java vs. .NET] 或是 [學 C# 還是 Java] 這種討論串,這種議題多半都會落到針鋒相對,因為程式語言和平台這件事,在某種程度來說很像是信仰之爭,尤其像是這種本質就是針峰相對的不同語言,最後總是會變成謾罵或意氣之爭,但如果初學者也沾染到這股偏見的味道的話,對往後的學習成長可能會有相當負面的影響。

其實市面上會出現這麼多種程式語言和開發平台,除了是科技大廠間的競爭外,也有一部份是為了要解決特定問題才發展出來的,像最早期 Web 應用程式剛起步時,Java 和 ASP 都還不知道在哪裡的時候,Web 應用程式可用的語言只有 C/C++,透過 Web Server 所開放的 Server API 來開發 (即 CGI application),後來 Perl 出現了,雖然減輕了一點使用 C/C++ 的學習曲線,但仍然不足以快速發展 Web 應用程式,為什麼 ASP 在微軟平台上會如此成功,其主要原因之一就是推出時間較早,而且是由微軟官方所開發的,在當時微軟只有 ISAPI 可以開發 Web 應用程式的情況下,為發展 Web 應用程式舖平了道路。PHP 也是為了要減輕 Perl 應用開發所需的工作,PHP 後來也成為全球知名的開發語言,ASP 也進化到 ASP.NET,也是微軟平台上最成熟的 Web 開發平台。

當然,Java 也是,它最早期是想為瀏覽器注入動態能力,而且可以在所有機器上執行應用程式所設計的,它在早期只被用來開發瀏覽器上的 Java Applet 應用程式,但 Java 程式語言本身附帶了一個 Application Framework,也就是我們所說的平台 (platform),在 Java 1.3 (即 Java 2) 開始,它被廣泛應用在伺服器級的開發,如 Enterprise JavaBean,JSP (Java Server Pages) 以及 Java Servlet 等,讓 Java 在伺服器的發展上變得更強,這一系列的平台被稱為 J2EE (Java 2 Enterprise Edition),原本桌上型的 Application Framework 則被稱為 J2SE (Java 2 Standard Edition),後來 Java 往手機上發展,成為另一個平台-J2ME (Java 2 Mobile Edition)。

既然大家都為了解決特定的問題而發展這麼多的程式語言和平台,那麼只要讓程式語言用對地方和發揮它應有的能力就好了,何必一定要選邊站呢?學程式如果都要落到門戶之見的話,那老實說學起來一點意思也沒有。舉個最好的例子,現在非常火熱的社交平台 Facebook,為什麼他們要自己發展 FBML, FBJS, FQL 而不是大家慣用的 HTML, JS, 和 SQL 呢?又為何 Salesforce 的 Force.com 只允許使用 Apex 作為開發的語言呢?

不論是 Java, PHP 或微軟的 .NET,都各有自己的特色,自己的長處,以及無法隱暪的缺點,正視自己的缺點並加以改進是好事,但真的不應該只將眼光放在單一的程式語言或平台上,這很容易造成偏見,一旦產生了偏見,想要改掉就很困難了。世界是很寬廣的,實在沒有必要畫地自限,甚至為了這種很小的事情去跟人家爭的面紅耳赤的。初學者 (尤其是剛入門的) 一定要對任何的程式語言或平台採取開放的態度,同時透過大量閱讀和學習來充實基礎知識,因為不論是哪種程式語言,其基本知識 (資料結構和演算法) 是不變的,多去學習和研究這些,會比去和人家吵哪種平台比較好這件事要來得正面有意義多了。

參考資料:

  • 許多網路上關於這個題材的討論串 (負面的比正面多)。
  • 維基百科各程式語言的條目。