前言
最近在國外的討論區發現有許多人會問那個程式語言適合新手。我相信國內也有一些朋友會詢問這個問題。很多人會說 Python,也有一些人說 Java 或其他的語言。雖然這是一個老問題,但筆者也提出一些個人的意見,供大家參考。
第一個語言其實沒那麼重要
說實在的,程式語言的選擇,其實沒有想像中那麼重要。在學習程式設計的過程中,學習語法所占的時間不會很久。實際上,學習函式庫、框架的時間反而比較久。
對於初學者來說,花在第一個語言的時間會比較久,這是因為一開始沒有相關的經驗,除了學習程式語言的語法外,還要一邊學習程式設計的概念、如何使用開發工具等。
但對於有經驗的程式設計者來說,語法本身不是占最多時間的。而且 VSCode 等編輯器可支援多種語言,不用再重學。反而是這個語言相關的生態圈,包括函式庫、框架等,需要花更多的時間去熟悉。所以,筆者也不建議頻繁地更換語言,這樣只是在基本的議題上打轉。
撰寫程式的目的
撰寫程式的目的,是將待解決的問題轉化為可在電腦上執行的程式,換言之,語言是將想法轉化為電腦程式的媒介。並不是選擇了程式語言,再處理問題,反過來,應該是先了解問題,再選擇語言。
例如,某個程式設計者 A 君學過 Python,現在 A 君想投入手機軟體開發的領域,A 君是否該使用 Kivy?其實 Kivy 並不是手機軟體開發的原生工具,以目前主流的手機平台來說,Android 使用 Java 或 Kotlin,iOS 使用 Swift 或 Objective-C。而 Kivy 是跨平台框架,可以通吃兩大平台,但不代表 Kivy 比原生工具好,反而有可能會受到 Kivy 的限制,筆者也在先前的文章討論過跨平台框架的議題。
學習程式設計的重點
除了學習程式語言外,更重要的應該是學習抽象的思維。在學習程式設計一段時間後,應該要試著學習一些更進階的議題,像是資料結構、演算法、物件導向分析與設計等。
透過學習資料結構和演算法,不僅可以學習如何撰寫正確的程式,更重要的,可以學習撰寫有效率的程式。當程式設計者撰寫程式時,可以用「那個函式庫的實作更有效率、更穩定,較適合這個專案」的方式來思考,而不再盲目地依潮流選擇語言、函式庫或框架。
學習物件導向分析與設計,是為了在撰寫中大型程式時,以較好的方式組織程式碼,儘可能避免寫出難以修改和維護的程式專案。
如何選擇程式語言?
程式語言的選擇,常常是諸多考量的結果,我們不會只用一種程式語言來處理所有的問題,而會依據不同的使用情境選擇不同的語言。
像是一些自己使用來處理小型任務的程式,這些程式的效率不是最重要的,易寫易用才是考量點,通常會使用 Perl 或 Python 來處理,而不會使用 C 或 C++。像 Lua 不是主流的程式語言,但由於 Lua 易於內嵌,在很多遊戲引擎都會看到 Lua 的踪跡。我們在開發 Android 軟體時,通常會使用 Java 或是 Kotlin,但我們用 Gradle 做為專案管理的工具,因為 Groovy 比 Java 好寫,但效率不若 Java。
適合新手的程式語言
對於真正的初學者,總是要選擇一個語言做為練習程式設計的工具。這時候,筆者推薦 Python 或 Ruby。但筆者不僅僅是因為這兩種語言很流行,而有一些考量點:
- 語法簡單易讀
- 不受限於特定範式,像物件導向
- 不需處理低階的細節,像記憶體管理
- 可在各種主流平台使用
這幾年 Python 比 Ruby 紅,這是因為 Python 在資料科學 (data science) 相關的套件比較豐富。但除去資料科學,其實兩者的應用領域很大一部分是重疊的。
透過本文,讀者應該對程式語言的選擇有一些概念,而不會在這個議題上面打轉。希望各位讀者都可以早日脫離新手期,真正享受程式設計帶來的苦與樂。