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

許多初學程式設計的讀者,會不知道怎麼選擇合適的教材,平白耗費了許多時間卻抓不到方向。基本上,程式設計的教學資料可分為四個層次:教程 (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 第一種模式就是俗稱的接案,這種模式是最容易上手的。總是會有套裝軟體無法滿足的情境,像是公司形象網站、企業內部軟體等,這種模式適時地填補套裝軟體無法滿...
「點我閱讀更多」

低價搶市的迷思

很多新進的創業者 (entrepreneur) 為了要擴大自己的產品市佔率,都會想要將價格拉低。當然,有時候會有一些現實上的考量,像是全世界最好的繪圖軟體是 Photoshop,全世界最有質感的手機是 iPhone,如果我們想要賣的是同質的產品,價格通常不會比這些產品高。對於軟體人來說,販賣的是無形的技術,價格就更暖昧不明了,但是還是要小心不要第一時間就落入價格戰的迷思。 關於市佔 vs. 獲利,一個知名的例子就是 Android vs. iOS,目前全世界約 98% 的市佔由這兩種系統所占,在這兩種之中,Android 系統的市占約為 85%,而 iOS 系統的市占約為 15%,但獲利能力是 iOS 大於 Android。這其中有許多細節可討論,像是 iOS 走在前面,品牌形象,產...
「點我閱讀更多」

5五將棋:具體而微的將棋世界

筆者小時候就很喜歡將棋,覺得將棋的五角形和書法字很優美,但將棋畢竟是日本的文化,在台灣沒什麼相關的中文書籍,筆者也不諳日文,一直沒有機會一窺將棋文化。後來輾轉間發現 5五將棋 (Minishogi) 這種小型的將棋變體,棋盤很小,很快就可以下完一盤。雖然筆者棋力不佳,和手機上的 5五將棋軟體互有勝負,透過這種小型將棋,筆者總算慢慢學會將棋的基本玩法。 對於將棋初學者來說,5五將棋是一個很好的教材,由於 5五將棋的盤面相對簡單,幾手內就可以從開局進入中盤,學習者可以很快學到一些將棋棋子間的組合和攻防。不過,5五將棋和本將棋還是有一些誤差,像是 5五將棋盤面較小,角行和飛車的角色相對削弱;另外,由於棋子數目少,防守的方式也比較簡單。雖然如此,做為一個微型的將體變體,5五將棋仍然是一個很好...
「點我閱讀更多」