在科技快速發展的現代,每個人都滿口大數據、人工智慧,儘管他們根本不知道自己在說什麼。而大學的資工系也變得越來越熱門,導致每個科系都有人想轉進去,學習程式也逐漸成為許多人考慮的事情。
而我在升大學的暑假開始自學python和C++,並在進到電機系以後一邊上計概學C++,一邊學習全端JavaScript,目前已經自學一年了。
在這篇文章,我會分享如何從零基礎開始學程式,給讀者開始的方向、避免你走冤枉路。
寫程式到底是什麼?
電腦透過解讀機器碼(0和1)接收指令,並執行動作。但是人類不擅長讀寫機器碼,所以發明了程式語言,用更容易理解的語法和文字表達指令。而不同的程式語言有不同的語法和常用的領域。
所謂寫程式,就是用程式語言寫出明確的指示,對電腦下指令。
例如:要求電腦顯示Hello World(以python為例),我們就會寫:
print("Hello World")
學習程式語言就像是學人類的語言一樣,你會需要背單字(但很少)、語法,最後將他們組合起來,表達自己的意思給電腦。
此外,程式語言間的差別主要在於語法,實際能表達的東西都差不多,就像是中英文都有「你、我、他」一樣,只是長得不同而已。所以,不用擔心學新的程式語言需要從頭來過,你只需要熟悉它的語法就好。
準備
動機
在開始之前,你要先弄懂自己的動機,才能知道自己該學什麼。
而學程式常見的幾個動機分別是:
動機會決定自己要學習的領域、程式語言,以及自己的目標,而目標可以是完成某個作品,或是看完某個教學。
程式語言
程式語言有非常多種。舉例而言,比較熱門的幾種分別有:Python, Java, C++, JavaScript等,每種都有自己擅長的領域。
常用的領域大致如下:
- Python:機器學習、數據分析
- C++:作業系統、程式語言
- Java:Android應用程式
- Swift:iOS應用程式
- JavaScript:網頁
- C#:遊戲開發
當然,還有很多程式語言我沒有講到,而且上述的列表僅供參考,做某件事不一定要用特定的語言,這只是我根據自己的認識整理的清單,所以歡迎讀者留言指正、補充。
我認為大致可以這樣根據動機決定要學什麼:
- 如果是要準備大學電機、資工系課程:可以先學C++(大多會教C++)
- 找工作可以看職缺上的要求,再自己決定
- 如果只是為了興趣就找自己喜歡的
- 如果要做東西放在履歷上,可以嘗試網頁開發或應用程式
開發環境
在知道了自己要學什麼以後,就該準備寫程式的工具,也就是IDE。
IDE是讓寫程式更有效率的工具,就像是寫報告用的Word、算財務的Excel一樣。主要的功能有凸顯關鍵字、方便測試程式等。
其中,比較常見的IDE有Visual Studio Code, Visual Studio, Vim等,可以根據學習的程式語言與需求選擇適合的IDE。
所以,在尋找程式語言的教學前,可以先找看看安裝IDE的教學,加快寫程式的速度。
教學資源
自學意味著沒有老師的幫助,只能依靠教學資源,而常見的教學資源有:
我認為上述的資源都能有很好的效果,只不過挑選書本的時候要注意:
某些書並不適合當作入門教學
我曾經想透過讀《C++ Primer》加強C++,只不過我發現書中提到的東西對我來說不是太難懂就是用不到。後來我只讀了一半就放棄了。
仔細思考後,我得出一個結論:
某些書是寫給想深入研究的人看的,不是給想學程式的新手。
所以,如果要透過書本開始學習程式的話,我建議不要挑「經典」、「磚頭書」來讀,而是要選擇簡單的書,最好是寫給國中生、高中生程度的書。
至於要怎麼找到教學,答案很簡單:Google搜尋就找得到了。免費的教學到處都是,你只需要用對的關鍵字,就能找到你想要的教學。
推薦教學
我主要看過的兩個教學:
- Learn C++
這個網站很詳細的介紹C++語言的語法、背後的運作原理,並比較版本之間的差異。內容非常豐富,可能會有點難讀,但是會有很多收穫。
- The Odin Project
由一群網頁工程師架設的網頁教學網站,有各種程度的教學,從最基本的HTML、CSS到後端的Node JS都有,適合各種程度的人學習網頁開發。
行動
安排進度
最理想的狀況是,每天花一些時間看教學、寫程式,而不是集中在周末然後連續學幾個小時。如果很久才寫一次,就很可能會忘記自己以前學過的東西。
此外,自己規畫學習的進度也很重要,最好訂下截止期限,避免自己在簡單的事情上拖太久。
從做中學
如果只是看過教學,而沒有實際打程式,是不會記得東西的。
舉例來說:在C++要輸出Hello World
#include <iostream>
int main(){
std::cout<<"Hello World"<<'\n';
return 0;
}
如果讀者只是看過去,而沒有實際把這串字打出來過,那可能幾分鐘後就忘記了。所以親自把程式打出來很重要。
此外,在不知道該怎麼做的時候尋找答案,也是很有效的學習方法,自己提問題、Google搜尋找到的答案,會讓自己更有印象。
所以,如何提問也是學程式很重要的一個能力,所以我接下來會介紹如何提問。
提問題
假設你遇到了一個問題,像是:
num=1
if num=='1':
print('equal')
else:
print('not equal')
結果輸出了not equal,然後你不知道為什麼一不等於一。
這時候,你就會需要提問題,但是在
問其他人之前,永遠要先Google搜尋,這是因為你遇到的問題,很可能
其他人已經遇過了。尤其是很容易找到答案的問題,更應該先自己搜尋,以免浪費其他人時間。
如果你已經搜尋過了,卻還是找不到答案,那就可以向他人求助。問問題最好的格式如下:
我想做{目標},然後我試了{自己的方法}(附上程式碼)
結果{輸出和想的不一樣}(附上結果)
我查到了{相關資訊},但是沒有效果
請問我該怎麼做
提供所有有用的資訊可以幫助別人更快的解決你的問題。
面對挫折
我學程式最挫折的時刻是C++寫不出Hello World的時候(原因是我把單引號和雙引號搞混,這件事現在看起來非常可笑),那時候我確實很懷疑自己。
不過我後來發現失敗其實沒那麼可怕,因為程式會一直有bug,遇到挫折是常態,一次就成功才是例外。
所以在遇到bug時,不需要太過擔心,也不用懷疑自己的能力,只要試著解決問題就好。每次遇到問題時,都是進步的機會。
建議
下列是我自己的和其他人的一些建議:
寫程式,不用在意還有什麼沒學,而是要在意把需要的東西學起來就好。
不必有什麼知識焦慮症,覺得這個沒學、那個沒學。
— 機械系的同學
一開始的一些用語解釋可以講得更簡單明瞭一點會比較好理解,
不然一開始我看那些什麼printf、 include、 int main ()什麼的完全不明所以,
用更具體的方式去譬喻、表達應該會對新手友善一點。
— 土木系的同學
- 我並不推薦去外面花錢上程式課,如果只是要學基本語法,我相信網路上都有足夠的資源。不過如果你比較偏好有人教學或是要學習比較困難的領域,我覺得還是可以考慮。
- 我覺得並不是每個人都需要學程式,因為有些人的生活就是用不到,不過我覺得這件事還是值得嘗試。
如果有任何建議或是想分享自己學習的經歷,都歡迎在文章下方留言。