半瓶醋的 C++ 教學(第四章):編程環境的選擇
之前在第三章曾經提到,越接近數學的內力不容易隨時間而改變,但作為外功的程式或系統工具則會,那麼,我們該如何儘量讓自己的外功能夠歷久恒新呢?
很直覺的,當然就是選用較不會過時的工具。而工具要能夠在變化萬千的編程界中不被時間所淘汰,固然本身素質要好,另外,我認為最重要的其中一個環節就是,開放。雖然這應該很直覺,不過還是稍加解釋一下好了…
如果今天某工具某 framework 是知名大廠所提倡的,或許在這大廠能夠予以支援的狀況下是還滿不錯用的,但是天有不測風雲啊,再怎麼大的公司總也有收攤的一天…就算沒有收攤好了,也許是公司的政策改變了,要改推另一個工具,那麼這時候無論是開發者的使用順手度,還是市場的接受度(你知道,麻瓜常常都是看哪個廣告多就用哪個,但我們巫師要有巫師的衿持),都難免急轉直下。因為他不開放,沒人搞得懂裡面在幹嘛,所以不會有社群的力量,同理,你也搞不懂,就算你再強想自己硬幹也沒辦法,除非重新寫一個。
甚至不要說收攤或是什麼行銷政策了,光講某M社的 IDE,常常出一個新的版本舊的版本的 code 就不能用了,這種愚蠢的事情我真想不透為什麼有人能夠接受…
當然某M社的東西偶爾也是會有一些他的優點,比方說視覺環境來說不得不承認 Windows 是好看一些的,畢竟有專門的美工人員,可以顧到較多的細節以及精緻度。而 Linux 開發者主要都是工程師,對於美工這塊比較不熟(美感平均來說也比較差啦…),很自然的視覺呈現上就沒那麼理想(不過也見人見智啦,Ubuntu 自從加入了 Beryl 之後很多人認為已經幹掉 Windows 了,有興趣可用 Ubuntu, beryl 這幾個關鍵字上 Youtbe 找幾段影片來看)。然後有些軟體可惜的不能在 Linux 上跑,比方說 Photoshop、Premiere 等等。(若要講美工與程式的 balance,我個人認為 Mac 就是一個很不錯的選擇)
但話又說回來,為什麼很多對 programming 很有 sense 的人,仍舊堅持使用 Linux 呢?因為 Linux 對一個真正的巫師來說有太多適合的點。
- 最大的好處當然就是開放。開放所以有延續性、開放所以有組合性(關於組合性,推薦洪朝貴老師的〈如何學習電腦〉一文),因為開放所以當系統發生錯誤的時候,我們可以從錯誤訊息之中學習,而不是沒頭沒腦的重灌
- 帥氣的 command line。很多人覺得 command line 是應該作古的東西。對麻瓜也許是,但對巫師不成立。因為很多東西只有在 command line 下可以用,而 Windows 內附的 command line 真是醜到爆炸,某種程度也反映他們本身的哲學。Google 的工程師極愛用他們自己寫出來的東西,M社的話我猜這些工程師從不用 command line 的,每天只會呆呆在 IDE 裡面拉拉選單,用麻瓜編輯器寫程式(相比於 Vim)。說了這麼多,到底什麼事情是非在 command line 下作不到?舉個超簡單的例子,比方你有一千個檔案,每個檔案你都希望 rename,在檔名後面加一串「I love Jolin」你該怎麼加?Linux 一串 regexp 就作好了,在 Windows 大概得一個一個改。另外 pipe、shell script 之類的也只有 command line 底下有。又,Linux 的 command line 好用以致於大部分時間都可以不必太倚賴圖形介面(但同時保有圖形介面的美觀),即如民初軍事學家蔣百里先生所言:「生活條件與戰鬥條件相一致者強」!
- 如果你的程度夠,Linux 整個系統的所有細節你都可以碰,可以高度客製化為自己最喜愛的系統。
先講三個就好,免得變成 Linux 佈道大會…回到正題。之前提到了組合性,我們來看看組合性怎樣體現在編程這件事。粗略地區分,編程主要可以分為三個主要流程,edit、compile、debug。所謂的 IDE 就是把這三段需要用到的工具包在一起就是。這麼作固然方便,也損失了一些自由。比方 edit 的部分就不能用自己喜歡的 editor。對一個真正的 programmer 來說,真正專業的 editor 是超級重要的,就算 UltraEdit 也不過只是漂亮一點點的麻瓜編輯器罷了,我強烈建議就算活在 Windows 平台,也應該載個 Vim 來玩玩看,在 Linux 上還有另一套 Emacs 也為許多大師所鍾愛,我個人是喜歡 Vim 多一點就是。
而在 compile 方面 Linux 平台常用的是 GCC,debug 部分則是 GDB。這三者透過 Makefile、shell script 等等連接得相當漂亮。有空也許我會寫寫 Vim 以及 Makefile 的一些使用心得。
最後要提的是,以上的開發環境是跨語言的。好比 Vim 既可以拿來寫 C/C++,也可以拿來寫諸如 Python 之類的 scripting language,要拿來寫 Latex 也完全沒有問題,平常系統設定檔也靠他。Vim 預設支援了絕大部分常見語言的 indent 與 syntax highlighting。這種簡潔優雅的作法已經到了稱得上是有禪意的境界了。那種寫 Java 一套 IDE 寫 C/C++ 一套 IDE 的作法本身就笨重不已,我很懷疑對這種笨重根本毫無自覺的人,他們能夠寫出什麼好的作品。
基於以上所述,之後的介紹將以 Linux 環境下的程式開發為主。如果讀者們暫時對 Linux 不熟也沒有關係,在 Windows 上有很多工具可以模擬 Linux 的環境,例如 Cygwin,或者就用家裡不用的電腦或是多餘的 hard disk 來架個 Linux,推薦 Ubuntu,超傻瓜,比 Windows 還好裝(至少不必打序號),兩三個小時不到常常就可以完成了。或者,你如果正在就讀資訊相關科系,系上通常應該會有工作站。連工作站寫程式也是個不錯的選擇。
OK,講完了環境的選擇,下一章來講語言之間的異同。
Tags: C++, CommandLine, Linux, ProgrammingArt, Ubuntu, Vim



[...] C/C++,一言以敝之,是編程界的重裝甲部隊。他的戰鬥能力強大(效率高),用途廣泛,從高階應用到低階系統幾乎無所不能,但最大的問題在於機動力(開發效率較低)。此階級語言,相類似的還有 Java, C# 等等可供選擇。C# 之前微軟在推的,後來有人 port 到 *nix 平台上,但基本上開源界還是不多人用,之後微軟如果又不推的話…如同我在第四章所講的一般,語言、工具要看得長遠,才能讓自己所投注精力的報酬率得到最大。 [...]
[...] 首先在第四章我們提過了編程環境的選擇,當中我推薦用開源環境來編程,所以在這邊我介紹的是開源流的編程方式,M$ 流的也不難,基本上就是想辦法搞到一片 VC(到底有多少人用正版的?科科),打上 Hello World 再按某個鈕就好了,非常簡單,兩者的差異大致上就像自排車手排車一樣。自排車好開,但要充份享受駕馭極速機器的快感唯有手排,沒有人開藍寶基尼在開自排的吧? [...]