[TOC]
亮亮(@ccwang002)| Mar, 2015 | CC 3.0 BY license
如果內容有誤,你可以用任何管道發訊息轟炸我,或用底下的 gist comment 留言。
每個檔案都會是一個主題,主題底下會列出一些資源。資源的最後會有一個學習目標,方便讓你評估自己學到什麼程度。學習目標會給一個明確的任務,我盡量讓它能跟(宅宅的)日常生活結合。通常只要完成前一、二個目標就行了,這也不是功課所以不一定要給我看。如果你不介意給我看,我會分享我主觀的建議,但大部份的任務是沒有絕對的正確答案。只要能解決問題都是好方法。
這些資源不用全看,任務不用全做,大家自己斟酌要花多少時間在不同的主題上。
挑你喜歡的東西盡量鑽,沒有 fu 的就隨便看看會了就好
我會盡量按照難易度排列,中英文的資源都放。
以下的內容,目標讓大家了解當今軟體開發流程及基本技能。但軟體開發需要一些背景知識,才能與開發者正常交流。這些背景知識包括:
- 一個很多人用的工具長什麼樣
- 如何把自己的程式與別人分享
- 多人共同開發
- 其他人都怎麼樣寫程式
這些內容在學校課程的訓練中會比較少,尤其是電機背景的話在寫程式又更為隨性,但這對一個長期的軟體專案是必需的。希望大家能在這個專題中養成這些習慣。
這些課題需要熟練到什麼程度,見人見智,深入下去每一個都夠花幾個月的時間鑽研,但以一個實驗室專題、或要完成的軟體專案來說都不實際。所以個人覺得,最低標準就是在遇到該課題不懂的地方時,「能知道怎麼下關鍵字查」且「查完的結果能看得懂」。
簡單地說沒空。認真地說,大家的學習速度跟底子都不一樣,同步學只是浪費各位的時間。
我大概沒有辦法一個一個項目帶大家練習,底下的很多連結只是提供一個學習的窗口,真正要學下去,都是要花一定時間的。所以也不要抱著「只要讀完這些文章就會了○○○」這樣的想法。
白話的來說,這些背景知識就像遊戲的技能樹,基礎技能要先點好才能點進階技能。要把基礎技能點滿了再練等也可能,但不必要,也不是大家都喜歡練功的方式。
一開始可能碰到小問題就要查,或者要連續查很多個網頁被導向四、五次才能稍微解答自己的疑問。這個現象是非常正常的,如果大家能撐過初期這段比較挫折的時期,日後要自學軟體基本上就沒問題了。
要很快地學好程式,我推薦練習把程式應用在生活中。例如用文字命令列來下載檔案;把自己筆電變成 linux 桌面系統,練習自己編譯軟體、解決各式安裝的狀況。讓自己的電腦成為一個自己能接受的軟體開發環境,並經常的使用它,就能降低對寫程式的陌生與不知所措感。
上面的方法可能稍難一些,負擔比較小的可以開始做「思考練習」。思考練習包含去想生活中的大小事該怎麼寫程式來控制。例如我該怎麼設計一個電梯系統?臉書怎麼呈現大家的動態?只要大概想一想就好了,想不出來也不會怎樣,也不用特別查資料。過一段時間對程式的 sense 也會提昇。
如果需要更硬派的學習方式,不妨把自己電腦安裝的軟體的源始碼都拿出來看一下,加入幾個自己平常用的軟體的專案來修改它,讓它更少問題更多功能(一般叫 contribute)。也可以把實驗室有用到的工具的源始碼拿出來看一下,例如 sratoolkit、cutadapt,看看自己能不能讀懂別人的程式碼。
TL;DR 建議大家想辦法裝個 Linux(或用 Mac)。如果不想取代掉自己的 Windows 環境話,可以安裝 VirtualBox 裝個虛擬的 Linux,或者在 Amazon 等 VPS 架一台虛擬主機。
Windows 因為對圖形介面(GUI)設計的很好,也不容易讓使用者用命令列模式(terminal, console)。雖然 Windows 上有像 command prompt、Powershell 之類的環境,但都很難用它來操控整個系統。而且它打從骨子就跟 Linux 不一樣,所以相關的指令不好在網上的教學文章中找到,而多數 Windows 的開發者也不喜歡用 terminal。
另一方面,大家對 Visual Studio 的印象都是要收錢的�註1,這是 Windows 上最完整最好用的開發環境,不想付費的情況下可能就會覺得「寫程式充滿障礙」,更何況 VS 也是圖形化的編輯器,也會不了解背後運作的方式。市面的開源軟體多半在 *nix 上開發,對 Windows 支援度差也加深這個障礙(「想要自己裝但都一堆限制又很容易失敗」)
註1:Visual Studio 自 2013 後有 Community 版本,免費但內容與 Professional 版本大致無異,所以未來要有 C/C++ 32/64bit Compiler 會更容易。但多數的開源軟體還沒跟進,所以很多還在用舊的 VS 版本(就要付費),這個現象還會持續一陣。學校都有買。
不用 terminal 的壞處是很難想像自己系統中的軟體為什麼能運作。感覺要寫個有 GUI 的程式都要很厲害,跟自己學過的寫程式都不一樣。但實質上是沒有太多區別的,只是要完成一個能安裝在系統中的視窗軟體,需要的步驟多很多,一般簡單的專案都不會到那個階段。
Mac OSX 使用者也有這樣的現象,但因為 OSX 在底層用的是跟 FreeBSD 很相似,而 FreeBSD 跟 Linux 相似,所以它的 terminal 環境是很完整的。現在軟體開發者很多人用 OSX,因此網路上 Linux、OSX 資源都很多,兩者的經驗常能自然地移植。
如何要在 OSX 上開發程式,可以參考附錄 0 的筆記,但內容很主觀,不是每個人都會像我這樣用。
寫一寫內容也變得蠻多的,所以把它切成了幾篇文章,請按照數字順序閱讀: