前言:
安安,最近在學習Python,同時,一些朋友也在學習Javascript或是其他語言,在跟他們聊天的過程中,好像在學習語言上有很多的不適應,尤其是對沒有碰過語言的超級小白來說。
這讓我有個靈感,究竟程式要怎麼學才好呢?很多人都說程式應該要做中學,但是如果只是照著教學打打code,實在很沒有成就感,而且教學當下點出的重點觀念,也很容易忘記。甚至有個朋友告訴我,他覺得應該要把一個語言完全學過一遍,才能開始自己的實作,可是…語言也是會更新的阿,那究竟什麼時候才能開始踏上打碼的征途呢?有碼才能確切感受幻想的無限美好阿~
所以這篇文章寫寫我自己的心得,也希望可以給小白建立一些信心以及學習地圖方向,不見得一定要照著網路上的教學或是說明書上的步驟,可以找到一些屬於自己的節奏。
本文面對對象:沒有接觸過程式語言的人、剛開始學習程式語言的人
閱讀時間:10分鐘
我的學習路徑
我非常同意語言應該要做中學,但做中學之前總應該要有一些基礎認識,那需要認識到什麼程度才算基礎認識呢?
我理解為能夠了解語言的以下部分,就可以開始練習各種專案:
- 五個要素(Von Neumann architecture)
- 程式的簡單特性
- 函數與模組
- 註解
不懂沒關係,繼續往下看,我會慢慢解釋。
了解一個語言的基礎認識之後,開始練習各種的小應用,並搭配網路上強大的社群討論或前人經驗來增加對語言的熟悉,到後來會遇上一個階段,你會發現你需要對語言有更多深刻了解,這時候才比較建議去找工具書或是教學,從頭對該語言有個新的認識。這時你已經與語言有足夠的關係,在讀工具書或是線上學習時,會比較有信心,同時對於工具書的內容也能有更深刻的理解,也會比較有強的記憶力。
五個要素
不管什麼類型的語言,語言都是為了操作電腦,因此無論機器語言,到高階語言或是最近很紅的AI自然語言,都遵從著一個設計,也是電腦於系統的定義,那就是Von Neumann architecture。
更多關於范紐曼型架構 – 維基百科,自由的百科全書 (wikipedia.org)
簡單介紹這個架構,由五個要素構成:
- 輸入單元
- 輸出單元
- 控制單元
- 操作單元
- 記憶單元
以常用的計算機來解釋,我想應該大部分的人都有用過計算機吧。
輸入單元就是計算機上的按鍵,輸出單元就是計算機螢幕。
控制單元是計算機的機制,比如:按按鍵,按了1顯示1,不會顯示其他數字。
操作單元是加減乘除。
記憶單元就是你輸入的數字計算機會幫你記著的功能。
(如果你對電腦很有概念,大概會覺得這些論點有點牽強,但這是面對小白,don’t mind)
所以是不是可以認為,只要掌握了這五點,就能實作一個計算機?這樣想好像語言沒那麼難了吧?接著就來看這五個要素在語言裡都有哪些東西。
為了讓讀者明白,會使用一些psuedo code作為示範,什麼是psuedo code?
psuedo code稱為偽代碼,是正式寫程式之前作為邏輯確認的一種方式,並不是真的程式語言。
輸出單元
當你開始學習新的語言,大機率會教你寫”第一個程式”,也就是印出hello, world! 在你的終端機上。
這就是語言的輸出單元。
什麼是終端機?終端機是執行程式語言擋案過程,顯示訊息內容的地方。可以明白為讓使用者能夠進行互動的地方。
output("hello, world!")
記憶單元
第一個程式之後,大概又會有一半的教學會教你賦值,這就是語言的記憶單元。
賦值是什麼?賦值是讓變數能與資料產生連結的過程。有點像數學的 x=1,之後當我們使用到 x ,會自然的將 x 當作1來使用。
var a=1
---或
var a //開闢空間,空間命名為a
a=1 // 空間a有資料為1
賦值的方式依語言有異,有些語言分為動態變數賦值與靜態變數賦值。
動態變數賦值:當設定為 x=1 之後,x 仍然可以接受改變。
靜態變數賦值:當設定為 x=1 之後,x 無法再改變。
輸入單元
要讓使用者可以輸入,輸入完之後要讓電腦記住,所以輸入單元通常會與賦值一起。
var a=input("請輸入第一個數字")
輸入的過程可以有很多種形式,想為將資料從外部傳給程式執行的過程。
操作單元
簡單說就是運算呢!以計算機的例子,加減乘除就是一種操作單元。
```
var a=1, b=2
c=a+b
```
語言的運算也有很多類型:
- 算術運算(+-* /)
- 邏輯運算(and, or, not)
- 比較運算(>, <, 等於, 不等於)
這三種是語言中必有也是最常用的三種運算,掌握這三種運算,幾乎掌握了使用運算的九成。
控制單元
我們舉的計算機的例子,就是在說明要進行對按鍵的判斷。
所以控制單元就是在判斷,而語言的判斷就是if的用法。
if通常會搭配else的用法,就是當判斷為其他按鍵的時候
var a // 假設計算機只有1跟2的按鍵
if(1的按鍵) {
a=1
}else{
a=2
}
條件的判斷,還有分二元判斷以及多重判斷,二元判斷就是如上的只有對與錯的判斷,而多重判斷用在狀態或是分類進行判斷,常見的使用是if… elseif… else…或是switch(match)… case…。
除了if,還有迴圈也會進行判斷,迴圈就是語言提供的重複機制,讓工程師不用為了1+1+1+1…而不斷去寫程式。
而為了讓重複能有停止的時候,就需要一個判斷條件。
用for做簡單的例子:
for( 2 > 1 ){
output("錯")
}
程式會判斷2>1為true,因此會不斷執行{ }的內容,使用者會看到不斷產生的”錯”
五要素的總結
來總結一下這個部分:
- 輸出單元:語言如何將結果呈現給使用者
- 記憶單元:語言怎麼進行賦值
- 輸入單元:語言如何讓使用者輸入
- 操作單元:語言的運算式與運算子
- 控制單元:語言的if、for、while用法
最後再用加法計算機來結束,因為電腦本身就會判斷按鍵,所以判斷改成確認數字,也為了讓新手更好看懂,計算機的加法只做與自己相加:
var x
for(2>1){ //控制單元,不斷執行直到結束
x=input("請輸入數字") //輸入單元、記憶單元
if(x是數字){ //控制單元
output(總和:x+x) //輸出單元
結束
}// 如果不是數字,就不會執行if包起來的程式
}
所以當你掌握了五要素(Von Neumann architecture),距離可以開始動手做,就已經來到50%的距離了。
結語
可能你會好奇,欸…不是這樣就能有個小小的應用了嗎?為什麼不能直接開始做,好想做愛寫程式的好工程師欸~
這是因為每個語言多少還是有些需要額外注意的地方,這樣寫程式時候才會比較順利,當完全專心在某個事情上時,也是很不願意被打擾的吧,寫程式也是一樣,很不喜歡被各種錯誤提示打擾。
繼續前往 學習一個新的程式語言的過程(下)
This article was written by 好想射射>///<. Any similarities to other works are purely coincidental.