2013年5月16日 星期四

我想學寫程式,怎麼辦?

最近,偶爾會遇見一些朋友說他們想要學寫程式。尤其在知道我會寫程式之後,都會很希望我能告訴他們,該怎麼開始。

我想先分享我自己學習程式的心路歷程,然後再逐一說明,要如何起步學習寫程式,希望能為入門者提供一些指引。

心路歷程

我學習程式的歷程,主要是透過自學的方式。當時因為抱著「總有一天,我要自己做出一個遊戲」的理想,而開始買書、在網路上查資料,經過好多年不斷的摸索、鍛鍊,憑著一股興趣與熱情,經常不眠不休的「玩」程式,才終於慢慢磨出,把心中的理想遊戲付諸實現的能力。

但因為不是科班出身,也沒有去上過任何正式的課程,所以有一段時間,我一直不知道,我的程度到底行不行?直到後來有機會,靠著這個能力,在一間小公司當過APP的工程師,我才終於肯定自己有一定的實力。

我一直相信,當一個人對一件事情具有興趣與熱情的時候,就像是裝上了強大的火箭推進器,能夠以驚人的耐力、專注力,把一件事情學到最好。因為在這樣的狀況下,即使是他人覺得枯燥乏味或困難的東西,你都會感到興致盎然,或充滿鬥志的去挑戰。至少,我就是這麼走到今天的。

寫程式需要熱情

寫程式,正是一項非常需要興趣與熱情的東西,對於擁有興趣與熱情的人來說,程式甚至比樂高玩具還要好玩,但對於沒有的人來說,則很可能會感到複雜、枯燥。

而一個人是否能夠對程式擁有興趣與熱情,除了個人性向與意願之外,最重要的,就是「老師」!如果這個老師,對程式充滿興趣與熱情,並且能夠感染你,讓你也能享受程式的有趣之處,那麼你就找對人了。如果這個老師上課的方式,讓你感到無聊、想睡覺,或者你覺得他雖然有熱情,但只是在自High,那麼──

趕快逃!在他摧毀你對程式的興趣之前,快逃!

如果找不到一個適當的老師,那麼寧可自己在網路上爬文,去書店買書自學。

問問自己

在踏出學寫程式的第一步之前,我希望你能夠先問問自己:

我為什麼要學寫程式?

問這個問題,是為了搞清楚兩件事:

1.自己的熱情來自何處
如果沒有任何基本的熱情或興趣,只是為了某些利益或不得已,那我勸你還是別勉強,那可能會很痛苦。如果熱情一開始還很小,不要緊,但你必須小心呵護他,選擇能夠幫助這個熱情壯大的路走。以「是否能增強熱情與興趣」作為挑選老師、課程、書籍與學習方向的準則。

2.自己想要學到什麼
因為程式的世界其實很大,程式語言的種類,也非常的多,每一種語言都有其特性、長短處與適合使用的場合與領域。做網頁、做遊戲與做APP,所需要學習的程式語言很可能是不一樣的(雖然有些會同時適用於不同領域)。如果只是想要體驗寫程式的感覺,沒有特別想往哪個方向發展,那麼則可以考慮一些適合學習與入門的程式語言。所以在開始之前,最好先明白自己的動機,這樣才比較容易知道自己該走哪一條路。

如何開始?

如何學習寫程式,其實沒有一個標準答案。你可以找人教你,可以去上課學,可以買書自己看,也可以上網找教學文章看。

但不管你用哪一種方式學習,學習的內容,應該不出下面三項:

1.學會使用寫程式所需要的工具軟體。
通常不同的程式語言會搭配不同的工具軟體。雖然有些軟體可以共用,但基本上,你所使用的軟體與你所使用的程式語言直接相關。你必須學會如何操作這些軟體,並利用它們來寫你的程式。

2.學會使用一種(甚至多種)程式語言。
既然要學寫程式,那當然要會程式語言。但是不需要每種都會(因為那也不太可能),初學時只需要針對自己的目標與需求選擇一種(或必要的幾種)就好。

對於入門者,我並不太推薦C或C++甚至這類語言,他們相對複雜,而且也需要花比較多的時間,才能產生一點點的娛樂效果,可能比較不容易獲得成就感。我比較推薦的,是 Java或我最愛的 ActionScript 3.0這類語言,它們入門相對容易,而且很快就能夠有視覺上可見的成果,會比較容易有成就感。
(當然有些人可能認為Lua或Python也很適合入門或者想推薦VB,C#等等,這我完全不反對,我的推薦只是出於我個人喜好上的偏袒.....)

3.學會寫程式的思維方式。
通常你必須學習寫程式一段時間之後,才有辦法適應,並漸漸掌握到寫程式的思維方式。一旦你掌握到它,要掌握不同的程式語言就變得容易許多。因為大部分程式語言背後的思維,其實都大同小異,只要學會一種,要學其他的就會容易很多。

挑選程式語言

我想最麻煩的問題,應該就是,到底該挑選哪一種程式語言,哪一種工具軟體來學習?

如果你希望我給你一個直接的答案,我會說:使用Flash 這套軟體來寫 ActionScript 3.0。
至於為什麼,那當然是因為我個人最熟悉也最喜歡使用它。我的需求是寫出有趣的電腦遊戲或APP,而我對於使用他們相當滿意。每個程式設計師,都會有他們熟悉和偏好的語言,如果你詢問他人,可能會得到相當不同的答案。但每個程式設計師,多少都會私心的希望,有更多人加入他喜好的程式語言陣營。

挑選程式語言實在很麻煩,你必須搞清楚你的需求與目標,然後選擇你的程式語言。
如果你要做網站,你可以選擇php、jsp、asp、asp.net、python....等等,而HTML和CSS不算程式語言,但卻是必學的基礎。
如果要做 Android的APP,你可以學JAVA 語言 搭配 eclipse軟體。
如果要做 iOS的APP 則要學 Objective-C 語言。
要做跨平台的APP,則可以考慮使用 ActionScript3.0(簡稱AS3)語言搭配 Flash軟體,或 Lua語言搭配CoronaSDK軟體,或者其他很多別的語言和軟體...
如果要做在電腦上跑的軟體(即桌面應用程式),則可以考慮C/C++、VB,C#、AS3(搭配Flash或Flex)、JAVA(搭配eclipse)等等...

由於電腦領域相當廣大,程式語言被應用在各種領域,而且琳瑯滿目,使得挑選程式語言與工具變成相當麻煩的事情。上面所列出來的語言,也限於我很有限的知識與記憶,我很可能漏掉某些鼎鼎大名的程式語言。

在可以的情況下,我建議你多查查資料或詢問其他人的意見。但如果你真的不想去想那麼多。那就選 ActionScript 3.0 或 JAVA吧。在踏入程式語言的世界之前,你無法明白不同程式語言間的差異與長短處,但等到你學會一個程式語言之後,要分辨這一點就會變得容易,這時要再學習其他的也不遲,所以也無需顧慮太多。

另外,有一些專門給入門者,作為教學用的程式語言,據說很容易幫助入門者掌握程式語言的思維,並得到成就感。我還沒有研究過它們,所以無法給予任何介紹,但有興趣的人可以造訪下面這兩個網站看看: http://www.code.org/ 、http://processing.org/

其他建議

剛踏入程式世界的你,很可能會被一大堆專有名詞或英文縮寫給嚇唬住了。
你可能根本不知道甚麼是XML、CSS、API、SDK、IDE、JSON、HTML,也不曉得,函數、變數、參照、迴圈、編譯器、直譯器等東西是什麼,卻看到很多文章理所當然地使用它們。

抱歉我無法在這裡花時間為你解釋。但我請你不要這麼快被它們嚇跑,不懂正常,但搞懂卻非常必要,問一問人查查網路,花點時間學習,有些不難懂,有些暫時不懂不必急,慢慢累積背景知識總有一天會懂,等你一懂,就會發現其實根本不是什麼恐怖的東西。

請養成用網路查東西的習慣,很多東西網路上都有答案,遇到不懂的請一定要自己先查過,並且自己思考過後,再去問人。

保持學習的熱情最重要,不要做什麼枯燥的練習題目或刻意「練習」寫程式,程式是「玩具」,是要拿來「玩」的。請試著在自己腦袋裡想出有趣的點子,帶著無比的興致,與願意接受挑戰的心,試著把它做出來。或者嘗試修改其他人的範例,帶著實驗精神,看看不同的修改會導致什麼樣不同的結果。你一定會經歷失敗,發現自己寫出的東西無法正常運作,但不服輸的心態,以及一定要把有趣的東西完成的堅持,會讓你的技巧與創意同步快速成長。

延伸閱讀:程式設計要怎麼入門?