小屋創作

日誌2016-07-29 06:15

如何自學程式設計 從入門到進階

作者:No子

自從大學畢業後常常有人問起該如何學習寫程式。有些人是職場需求,有些是興趣使然,而且這些人總是來自各行各業,不論是以前是社會組或者自然組的人都有。我來分享一下個人的心法,以及學習過程給大家參考,這篇適合給還沒寫過任何程式,卻對這個領域有興趣的人,或者是已經學會一些基礎,但是卻卡關了,不知該如何往下一步前進的人的一個指引。
本文的內容可能很主觀,但就是我個人的學習經驗,你可以只當做參考。

這篇文章不會教你學會任何程式,而是告訴你該怎麼學,該學哪一些東西,學習的順序為何,而要學習這些東西該看那些書,或者有哪些資源可用。可能有些人覺得程式就是把那些語法弄熟即可,但是事實並非如此,很多學科十分的重要,這就是所謂的門檻,每跨過一階就是晉升到另一個境界。

老實說程式設計這東西,要有熱情很快,消磨的也快,原因是什麼?因為他與大部分人想象的有所落差,老實說我自己也是有這種想法,像是為什麼學了老半天我的程式都沒有界面,總是在黑盒子中執行?或者是人家都說學了一個語言,另一門就學超快,為什麼我都無感,覺得其他語言好可怕?之類的,每個人都有自己的理由,讓我們來一一突破吧。

有任何問題也歡迎問我,假如我會的話會盡量回答的,要我教學的話假如時間夠多或許可行吧...


大綱
  1. 該從什麼語言開始學起
  2. 路線規劃
  3. 出發

1. 該從什麼語言開始學起
程式語言幾百種,到底該學什麼語言比較好,老實說沒有一個正確的解答。
每種語言都有其特色,要看開發者是什麼訴求,例如你要跑圖表用Matlab寫只要3行,用C寫卻寫的要死要活,根本就是自找麻煩,但是我們卻不能否認C與電腦底層的互動優良,其他語言要做到就很困難了。
這裡我提供幾個準則給大家參考。
  • 路線1: 從基礎練起
    這是需要花最長的時間的一條路線,也是這篇文章從第二章開始主要探討的一條路線,適合給有興趣深入研究的人,並且想要面面俱到甚至讓程式變成你的主要的生財工具的人。基本上,走到後來,語言選擇已經不是問題了,兩三天就學會一門語言了。
  • 路線2: 根據所需來選擇
    對於一些領域的人來說,他們沒有力氣與精神來慢慢磨練程式底子,此時選擇對那個領域有優化的語言能夠事半功倍,如魚得水。
    例如: 統計上使用R,工程上使用Matlab,設計上選擇Javascript之類的。
  • 路線3: 想靠程式來解決生活的一些小問題就好
    假如你不想花太多時間在研究上,也沒有特別需求,單純想玩玩看程式,或者希望程式幫你完成一些重複性的工作來讓生活變得更美好,那我覺得Python是一門十分不錯的語言,輕鬆易上手,加上很多好用到炸開的package,規律的語法也讓你很好模仿以及讀懂他人的程式。另一個語言則是Ruby,和python一樣的易用性,但是語法自由,寫起來除了爽還是爽。要我比喻的話Python就是中規中矩的戰士,Ruby就是施放華麗魔法的魔法師。 (可以直接跳到下面去看關於如何學習這兩門語言)

2. 路線規劃
基本上以前一章節的路線1為基礎,當中涵蓋了路線2與3的語言。
大圖鏈接
下一章節開始會講解每一個部分該如何學習,以及該了解那些知識才是最重要的。


3. 出發
首先最重要最重要的一句話請銘記在心。
程式語言不是K完書就會了解了,找到合適的練習內容,並且親自寫過一次才是真的學會。
這也是自學難的地方,因為沒有人督促就不會有動力去完成,書中總有練習一定要自己解決他才可以,不然即使拿到一本天書也於事無補。定個時間表和朋友一起學,如此一來有競爭與討論會學的超級快。
讓我們開始來講解每一個能力所要了解的內容吧。

  1. 基礎英語能力 - 逃不了的宿命
    這個能力很現實,寫程式就是必須使用英文寫,語法是英文就算了,當你有問題時,到網路查資料,解答80%以上也都是英文,各種文件也都是以英文撰寫居多。英文能力不需要真的頂呱呱,至少要能做不逃避英文網站,真的不懂就丟到google翻譯,我想這應該大家都會。這個項目能力不是重點,心態的調整更為重要。
    ◎ Stack Overflow 是最常使用到的一個程式問答網站。
  2. 編輯器 - 工欲善其事必先利其器
    編輯器是個很有趣的議題。這裡我的選擇很簡單也很主觀,各種花俏的編輯器都先擺一邊,自動補全,模板什麼的,等到程式底子到一定的程度時再來想這些偷懶的步騶,一開始一步一腳印每個字都自己打,慢慢體會程式的道理是最好的。
    這邊我私心推薦使用vim來當做編輯器,可能會有人覺得他是上個世代的產物,但是他仍是目前程式設計師最愛的編輯器,可以參考這個
    Vim與其說是一種編輯器,他更是一種習慣,養成後你會戒不掉,其他編輯器也都會支援Vim的編輯模式,在Linux的純文字界面也可以來去自如。
    假如真的不習慣就用sublime text或者atom來代替吧。
    分享一下我的新手推薦的配置,把它貼在使用者目錄的_vimrc(*nix 是.vimrc)就會生效了。
    這邊提供幾個學習Vim的好文章與書籍:
    1. 鳥哥的Linux 私房菜  第九章 (中文)
    2. Vim快速圖解
    3. A bite of vim (英文,超級棒的教學。我在此獲益良多)
    4. 笨方法學Vimscript (進階設定的部分,可以先不看)
  3. C - 凡是起頭難
    終於進到了大家關心的部分,也就是程式語言的第一個挑戰C,為什麼我會選擇C當做是最早該學習的語言呢?因為C可以磨練底子,大部分的功能必須要自己實現,知道什麼時候該用迴圈,什麼時候該令函式,還有宣告變數該用什麼類型,是這個時期最重要的,也就是寫程式的sense該從這培養。
    C有一個大門檻也是他的特色,也就是指標Pointer,跨過去第一階段基本上就算完成了。
    假如你是像我說的使用純文字編輯器(vim或sublime text)來寫code,那就必須自行下載編譯器,可以去下載mingw x64,這也是另一個很棒的練習,如何使用指令來編譯程式,以後有助於擴建龐大的專案時自己寫Makefile。
    這裡提供大家幾個學習C非常好的書籍:
    1. The C Programming Language (英文,最棒的教科書之一,我是從這開始寫程式的)
    2. The C Programming Language  中文版 (翻譯本)
    3. C語言教學手冊 (朋友們有些買這本)
  4. 資料結構 - 跳脫以管窺天的程式
    資料結構是一門相較起來比較學科的項目,當你的C語法使用的相當順手時,千萬別以為這樣就夠了,因為懂得語法只是會造句,寫得出好文章才是更重要的,資料結構就是這麼一門學問,學完後會覺得自己的視野寬闊許多,甚至生活上也可以得到印證。他教你如何把一堆資料進行儲存與取用,搜尋與排序,寫程式的格局自然就變大了,是超級無敵重要的學問,難度也不高。
    學習資源:
    1. Fundamentals of Data Structures in C (英文,詳細的告訴你程式碼該如何實現,以及適量的習題)
    2. Fundamentals of Data Structures in C 中文版
    3. Data Structure Visualizations (資料結構的實現圖解,可以拿來驗證答案,超實用)
    其他網路上應該也很多學習資源
  5. C++/Java
    從這開始是更進階的一個部分了,也是第二門我所推薦的程式語言,選擇這兩個語言是因為我們即將進入一個新的階段了,【物件導向】,你可以選擇其中一門來學習即可,我個人當初選擇的是C++,Java也沒啥機會去了解,所以不是很熟。
    題外話,可別再認為C和C++差別是printf和cout的差別了!
    此時很多人會想說,我就會C就好,其他什麼的我不想學,但是差臨門一腳了,等學完C++後,因為概念被打通了,學其他程式語言就會覺得輕飄飄的,幾乎3天可以速成一門語言,基本上學完這裡之後的東西就是看個人興趣了,程式語言已經變成工具而不是學問了。
    物件導向是未來的一個很重要的趨勢,讓你的程式易於被他人維護與再使用,編輯器也能對他做最佳化的補全,當然還有很多其他好處。
    這階段當然不只有物件導向要了解,以下幾個課題也是這階段的任務!
    1. 物件導向Class 與 Object的觀念
    2. C++的異常處理 (exception)
    3. debugger的使用 (會讓你抓bug變超快的工具)
    4. 嘗試寫Makefile
  6. Git - 時光機
    當你程式寫到一定程度,規模大到一定程度後,有時候改壞了,想要恢復以前的版本,就可以使用git來幫你完成,git另一方面也可以方便多人協作,適合大家一起完成一個大專案,git的應用很廣,推薦幾個資源給大家學習。
    1. 連猴子都能懂的git入門教學 (入門就靠他了)
    2. 30 天精通Git 版本控管 (詳細教學)
    3. 官方的推薦書籍 (超佛心,有中文)
  7. 資料庫系統
    資料庫算是一門有趣的學科,以前你可能學習到要保存當前程式資料會自創一個自己懂得檔案格式,然後自己再來讀檔與想辦法處理,但是這是非常原始的方式,資料庫系統提供一個便民的語法讓開發者能夠儲存大量資料,查找也有最佳化,想要的話排序都可以直接做好,最重要的,每種程式語言幾乎都有實作各個資料庫的函式庫,使用起來比起自己處理文字檔方便太多了。
    資料庫系統另一個重點是該如何設計關係表格,怎麼設計能夠讓重複的資料降到最少,查找的邏輯也是這門學問的重點之一。
    參考書籍推薦:
    1. 資料庫管理系統 (中文翻譯本)

自此為止所要學的基本上就都涵蓋住了,下面的內容就看開發者自己的興趣,我個人推薦幾個有趣的部分。
  • GUI設計
    寫了那麼多程式,幾乎都是主控臺程式,超不爽的啊,什麼時候可以寫出photoshop這種屌程式?
    老實說GUI並非程式設計的重點,但是你的程式有GUI給使用者一定更加user friendly,也更像一個包裝好的產品。
    這邊推薦寫寫看C#,會讓你想寫GUI的衝動爆發再爆發,語法與C++很像,學習幾乎沒有難度,加上Visual Studio的輔助,寫起來如虎添翼,真的蠻爽的。
  • Python
    這門語言規規矩矩的,漂亮的排版,好用的函式庫,好用的資料結構,導致我真的對他愛不釋手,package多到不行,麻煩的功能都已經有人做好了,我們只要專注寫我們有興趣的事上即可,加上他真的很簡單,沒有語言基礎也可以輕鬆入門,難怪各個領域都需要會python的人才。
    線上的學習資源:
    1. Codecademy (英文,互動式學習,邊學邊寫)
    2. Exercism
  • Ruby
    美麗的魔女,百變的語言,想怎麼寫就怎麼寫,package也很多,喜歡他的自由度,難度比python高一點,但還是不影響其易用性。
    1. Codecademy (英文,互動式學習,邊學邊寫)
    2. Exercism
  • Web設計
    網頁設計真的重要嗎? 我的藝術細胞不好是不是跟web設計無緣了呢?其實不盡然,因為網頁分為前端和後端,前端關注在網頁看起來漂不漂亮,特效是否炫狍,網站的功能還是得靠後端來完成,功能的部分就與藝術細胞沒有關係了,程式的邏輯才是關鍵。
    那為什麼需要寫網頁?因為網頁可以說是對你前面所學的一個包裝,你可以把她看成是GUI設計的一種,他能做到的事情超多,重要的是他可以無視掉使用者安裝的難度,因為現在應該很難找到沒有安裝瀏覽器的電腦吧!還可以從這學一下資訊安全方面的知識,以後就可以謝謝小外掛,繞過一些網頁的陷阱了。
    前端學習部分(HTML/CSS/Javascript):
    1. Codecademy (英文,互動式學習,邊學邊寫)
    2. W3School (英文,內容很豐富,可當做字典來用)
    3. W3School中文版 (內容比較少,但基礎概念也都有)
    4. 自強學堂 (中國那邊的學習網站,課程蠻多的)
    後端其實什麼語言都可以但目前主流可以學學PHP/Ruby on rails/Node JS/Go/Python

    持續更新中......

110

20

LINE 分享

相關創作

【自製遊戲】分享自己作的網頁小遊戲

台灣92年~111年的遠洋漁業漁獲量 視覺化圖

[量子位]沒有顯卡的年代,這群程式員用4行代碼優化遊戲

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】