技術雜談:程式設計師的工具箱

PUBLISHED ON JUL 16, 2017

    程式設計師會用到那些工具呢?筆者就自己的經驗,分享一些程式設計師可能會用到的工具,供有需要的學習者一些可參考的方向。

    • 系統程式語言 (system language):這些工具給我們足夠低階的操作,像是記憶體管理等。傳統上,這個領域是由 C 主宰,有許多人會使用 C++。一些比較新興的替代方案包括 D 或 Rust 等。
    • 應用程式語言 (application language):這些工具在效能在易用性上達到一個平衡點。大部分的人會從 Java 或 C# 中擇一,有一些人仍然會使用 C++。Go 則是另一個近年來熱門的新興方案。
    • 腳本語言 (scripting language):這些工具易學易用,雖然速度沒有前兩者來得快,但一般使用情境下也足夠了。一些典型的實例包括 Python、Ruby 和 Perl。
    • 終端機工具 (command-line utilities):這些工具不是程式語言,但有著類似的特質,通常會有複雜的參數或內建的小型語言 (即領域專用語言)。大部份類 Unix 系統的指令都屬於這類。
    • 開發工具 (development tools):包括編輯器 (editor)、IDE 等,版本控制軟體也算是這類。一些流行的編輯器包括 Atom 或 Visual Studio Code 等,而最知名的版本控制軟體則是 Git。

    有些程式設計者幾乎不會接觸到系統程式語言,但至少要對 C 有一些些概念。因為許多高階語言都提供 C 的介面,做為橋接外部元件的方式。例如,我們用 C++ 或 Rust 撰寫元件,將其轉為 C 函式庫,再橋接 Python 或 Ruby 等高階語言。至於 C++ 則較為複雜,需要時再學即可,在許多情境下,可以用 Java 或 C# 代替。

    Java 和 C# 像是兄弟一般,學了其中一個另外一個很快就會上手。我們不需要跳入商業公司的鬥爭中,依使用情境選擇即可。通常 C# 的語言設計較佳,因為學習了一些 Java 的經驗;但 Java 有較多的社群資源,跨平台性也較佳。原先 C# 僅能在 Windows 上執行,近年來微軟改變其策略,現在也可以在其他平台上執行 C# 程式,但尚未移植全部的功能,使用者需自行評估可用性。

    對於一些簡單的日常任務,我們不會搬出 Java 或 C# 這種重兵器,而會使用腳本語言。網路爬蟲就是一個例子,這類任務的程式時常需要改變,有時候只需爬完一次取得資料即可,這時候,使用腳本語言會較節省時間。另外一個例子是資料分析,我們需要很多步驟,像是資料處理、建立模型等,這個過程要來來回回好幾次,使用腳本語言會較為靈活。

    在類 Unix 系統的終端機環境中,有許多方便的小型工具,可以增加我們的工作效率;這些小型工具有複雜的參數,甚至內建小型語言。初學者會以為這些小型工具很複雜,但我們不需要學習全部工具所有的功能,視需求逐步學習即可。即使筆者使用十數年的 GNU/Linux 和 Mac,仍然還有許多不熟悉的工具。

    工具是學不完的,每隔一陣子,就會出現一些新的工具。我們不需要害怕新技術,也不需要盲目地追逐這些技術。在學習某個新工具前,了解這個工具的主要目標,這個工具解決了什麼問題,仔細地評估是否需要這些工具。