學習程式的開始

[筆記]學習一個新程式語言的過程(上)

前言:

安安,最近在學習Python,同時,一些朋友也在學習Javascript或是其他語言,在跟他們聊天的過程中,好像在學習語言上有很多的不適應,尤其是對沒有碰過語言的超級小白來說。

這讓我有個靈感,究竟程式要怎麼學才好呢?很多人都說程式應該要做中學,但是如果只是照著教學打打code,實在很沒有成就感,而且教學當下點出的重點觀念,也很容易忘記。甚至有個朋友告訴我,他覺得應該要把一個語言完全學過一遍,才能開始自己的實作,可是…語言也是會更新的阿,那究竟什麼時候才能開始踏上打碼的征途呢?有碼才能確切感受幻想的無限美好阿~

所以這篇文章寫寫我自己的心得,也希望可以給小白建立一些信心以及學習地圖方向,不見得一定要照著網路上的教學或是說明書上的步驟,可以找到一些屬於自己的節奏。

本文面對對象:沒有接觸過程式語言的人、剛開始學習程式語言的人
閱讀時間:10分鐘

Coding

我的學習路徑

我非常同意語言應該要做中學,但做中學之前總應該要有一些基礎認識,那需要認識到什麼程度才算基礎認識呢?

我理解為能夠了解語言的以下部分,就可以開始練習各種專案:

  • 五個要素(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.

我們是 Be Good Tool
團隊由幾位工程師、設計師與PM組成
專注開發各種免費網站工具和推廣優質的APP
歡迎到我們的線上工具列表看看喔!