為什麼 Nim 無法造成流行

Nim 是一個新興的編譯語言,其核心理念相當地簡單:Nim 程式碼會轉為等效 C 程式碼,再由 C 編譯器實際編譯軟體。在理想上,這個方向的確是可行的,因為 C 語言問世超過四十年,C 編譯器的優化技術已經相當成熟,與其從頭開始撰寫一套新的編譯器,還不如直接站在巨人的肩膀上。不過,Nim 專案從 2008 年問世,到目前 (2018 年二月) 已經十年了,這個專案並沒有流行起來。筆者雖然不是編譯器的專家,姑且讓筆者事後諸葛一下。 某種程度上來說,Nim 不流行其實是非戰之罪。對於目標市場相近的產品,背後的團隊還是會造成微妙的影響。和 Nim 目標市場相近的語言有 Go (golang) 和 Rust,Go 來自 Google,Rust 來自 Mozilla,而 Nim 的團隊是誰呢...
「點我閱讀更多」

為什麼要 (或不要) 學習 C 語言

在大專院校的資訊科系中,C 語言是必學的,這有一些教學上的考量,不純然以實用觀點出發;不過,現在自學程式的風氣較以往興盛,對於這些人來說,C 語言是否還要學呢?筆者一開始自學程式設計時,也傻傻地買了 C 語言的書來看,但是 C 語言要學到能做出足夠實用的應用程式來,其實並不是那麼容易,經過一段時間後,筆者才慢慢了解 C 語言在電腦界的位置。C 語言的知識仍然有其必要,但是否要深入學習,則要看當下的情境而定。 對於初學者來說,雖然大專院校都以 C 語言做為學習工具,但這不代表我們就要用 C 語言做為第一個語言。對於初學者來說,學習程式設計的重心應該在於學習高階的概念,並不是成天在跟指標 (pointer) 奮戰,或是用一些低階的手法處理字串。國外的一些 MOOC 開始用 Python ...
「點我閱讀更多」

教程、範例、指引、原始碼:由淺至深的學習之路

許多初學程式設計的讀者,會不知道怎麼選擇合適的教材,平白耗費了許多時間卻抓不到方向。基本上,程式設計的教學資料可分為四個層次:教程 (tutorial)、範例 (example)、指引 (reference)、原始碼 (code);在理想的情形下,假設我們有充足的學習資源,透過這四種層次的學習,就可以逐漸掌握某個語言、函式庫或框架。 教程是最淺白的學習資料,大部分的技術書籍和線上課程都是某種教程。理想的教程會按部就班,從概念、建置環境、Hello World 然後開始教基本語法,一次不會加入太多概念,讓讀者可以慢慢吸收。有些教程會附上一些習題,讓讀者複習先前所學的概念,理想上的習題不會超越目前所學的概念,因初學者可能會無法辨識是自己的能力面還是教程的先導知識不足。對於較缺乏經驗的學習...
「點我閱讀更多」

為什麼要 (或不要) 用 Python 實作資料結構和演算法

筆者最近在國內某程式討論區上看到一則有關資料結構的問題,原樓主是某個資訊科系的學生,因為對資料結構的實作不熟而苦惱。原先該網友使用 C 語言,而有些網友建議原 po 改用 Python,這時候引起正反兩方的一番論戰,筆者在這裡就不重覆論述其過程。其實重點並不在於要不要用 Python,而是為什麼要 (或不要) 用 Python。 首先,程式語言並不是像江湖武術般,非黑即白、有我沒你,另投他門就是罪該萬死。在某個時機點,A 語言可能會是最佳解 (sweet spot),但在另一個時間點,同樣的語言卻顯得殺雞用牛刀。TensorFlow 表面上是 Python 套件庫,但內部是由 C++ 撰寫,再透過 C 提供 Python (和其他高階語言) 的接口。同樣地,LibXML2 本身以 C...
「點我閱讀更多」

軟體獲利的模式

學了幾年的程式設計,努力脫離新手村,也寫了幾個大大小小的專案,總是希望自己的努力有所回報。然而,對軟體人來說,會寫程式只算是跨過了基本門檻,但困難的是如何將自己的努力轉為獲利。本文介紹幾種常見的商業模式供有志於此的同好參考。 這些分類摘自某本英文書籍,因筆者很喜歡這些有軟工意味的標題,故採用之: Software Development as a Service Software as a Product Software as a Service Software Supporting as a Service 第一種模式就是俗稱的接案,這種模式是最容易上手的。總是會有套裝軟體無法滿足的情境,像是公司形象網站、企業內部軟體等,這種模式適時地填補套裝軟體無法滿...
「點我閱讀更多」