網頁

2013年3月27日 星期三

執行程式時的一些選項

寫完一段 Sub 之後,想執行,就把滑鼠游標移至該 Sub 內的任何一個位置,然後用滑鼠左鍵點一下,讓滑鼠游標(一般而言,是那個 I 字型的游標,而不是箭頭那個游標)停在該 Sub 區塊之內,然後按下 F5。

因為一個 Module 之內,可以有不止一個 Sub,所以按下 F5 時,會執行到哪一個 Sub,是看當時游標停在哪個 Sub 之內。

此外,如果你的程式會要執行一會兒,想一邊看著執行結果,可以把 VBA 環境那個視窗大小,縮放成螢幕的一半,並讓 Excel 操作環境也縮放成螢幕的一半(這兩者間的視窗大小比例,當然可以自訂)。

還有一個也是執行的按鈕,是 F8,與 F5 不同的是,F8 是一步一步執行,亦即一行一行程式碼執行,執行一行(ㄏㄤˊ)就停一下,此時 VBA 環境一般會以黃色橫條標示出目前執行到哪一行。這種方式非常貼心,可以一窺程式執行的細部過程,我非常建議初學者常用這個功能。F8 對程式碼的除錯(debug,找出錯誤)也很有幫助,即使是老手、高手,寫程式也難免出錯,可能是打錯字、可能是想錯...,F8 讓你一步一步看著執行結果,因此容易找到是錯在哪裡。當然,有些程式上的錯誤,不需要按下 F8,也會讓程式執行(暫時)停下來,例如指令打錯、或有 if 卻沒相對應的 end if、有 for 卻沒相對應的 next...等。

而不論是按下 F8 手動暫停程式,或因為程式出錯被 VBA 強制暫停,都可以到 Ctrl+G 這個即時運算視窗,輸入某個變數,查看當時的內容。

2013年3月22日 星期五

生命中的叉路

俗語說,人生不如意之事十之八九,人算不如天算,計畫趕不上變化,變化趕不上一通電話。然而,我們事先計畫得愈多,總是可以掌握愈多變化,做很多事情,並非無條件的一成不變,而是要依照當時的需求,選擇性、動態的決定該怎麼做。

程式設計反映真實世界,自然也有這種基本的機制,就是 "如果事情變得怎樣...,那我們就怎樣應對..." 的機制,指令(或說語法)是 if:

如果我們為了某些原因,想要在遇到 5 的時候,跳過不印,之前這個例子,可以加一道動態的條件關卡:

Sub cell_2()
    For i = 1 To 9
        If i <> 5 Then
            Cells(i, 1).Value = 1
        End If
    Next
End Sub

<> 是 "不等於" 的意思,如果 i 不等於 5,就印,否則會跳過。在 if...end if 區塊內的程式碼,想要執行,必須先通過 i <> 5 這道檢驗。

當然,if...end if 區塊內的程式碼,可以不只一行:

Sub cell_3()
    For i = 1 To 9
        If i <> 5 Then
            Cells(i, 1).Value = 1
            Cells(i, 2).Value = 2
        End If
    Next
End Sub

2013年3月21日 星期四

設定背景資訊,然後開始動作

在 "回到未來" 這部電影中,馬提要從過去回到未來、或從未來回到過去時,都要先設定時光車的時速,然後才開始動作。在現實生活中,我們做許多事情的動作模式也是如此,而即使你不會寫 Excel 程式,在 Excel 的操作環境中使用公式時,也可能會先設定某 cell 的值為 100,另一個 cell 的值為 200,然後讓第三個 cell 的公式等於第一加第二個 cell 的總和。

寫程式大抵也是如此,先設定某些變數的值,然後做動作,動作可能是呼叫另一個 Sub/Function、或直接在設定完後接著做。

來個操作儲存格的練習:

Sub cell_1()
    Cells(1, 1).Value = 1
    Cells(2, 1).Value = 1
    Cells(3, 1).Value = 1
    Cells(4, 1).Value = 1
    Cells(5, 1).Value = 1
    Cells(6, 1).Value = 1
    Cells(7, 1).Value = 1
    Cells(8, 1).Value = 1
    Cells(9, 1).Value = 1
End Sub

跟之前的 MsgBox 例子幾乎一樣(甚至更簡單),只是變成操作 cells 罷了。

也一樣沒有效率,所以用迴圈來化約它、精簡它、抽象化它:

Sub cell_1()
    For i = 1 To 9
        Cells(i, 1).Value = 1
    Next
End Sub

2013年3月19日 星期二

操作儲存格

Excel 是儲存格的大集合體,在 Excel 環境寫程式,只要可以操縱/操作儲存格,讓儲存格乖乖聽你的設定,事情就完成了一大半。

到 VBA 的即時運算視窗環境,輸入:

cells(1,1).value = 199

切換到 Excel 操作環境(非程式環境),儲存格 A1 的內容,變成 199 了。上述指令翻譯成中文,就是:

第一列第一欄這個儲存格的內容等於 199。分別解釋如下:

cells ==> 儲存格。
(1,1) ==> 第一列第一欄。
cells(1,1) ==> 第一列第一欄這個儲存格。
. ==> 的。
value ==> 內容。內容是儲存格這個大顆粒變數蘊含的單純變數之一。還有其它單純變數,之後會再提到。

現在,試著輸入像是:

cells(2,3).value = 200
cells(4,12).value = "Hello"
cells(8,2).value = #2013/1/23#

然後切回操作環境,看看執行結果。目前還是不脫幾個基本觀念: 資料類型、變數、大顆粒變數、單純變數、迴圈。

你就是一個大顆粒變數

是的,你就是一個變數,一個大顆粒變數。你的寵物也是,你的桌子也是、你吃的食物也是...。

每個大顆粒變數裡,都蘊含著(通常)不止一個的單純變數,你的身高是單純的數字變數、生日是單純的日期變數、姓名是單純的文字變數。

同理,Excel 的每一個儲存格(cell),也是一個大顆粒變數,儲存格的內容、顏色、框線、有無註解、大小...等,就是每一個儲存格蘊含的單純變數。

Excel 的每個工作表(sheet or worksheet)也是大顆粒變數,每個工作表蘊含約 256*65535(視版本而定)個儲存格,所以,一個大顆粒變數,不止可以蘊含很多的單純變數,也可以蘊含很多個大顆粒變數

又例如你居住的房子,是大顆粒變數,其內蘊含多個房間,每個房間蘊含多件傢俱,每件傢俱又蘊含著多個文具或衣服...,你可以依照自己的需求,繼續一層一層蘊含下去。

程式設計反映真實世界,先把觀念弄清楚,基本的程式設計,並非難事。

2013年3月13日 星期三

變數的顆粒

自然界的東西有大有小,物理學上的粒子有大有小,程式語言裡的變數,也是有大有小。

像是一般的數字、文字、日期等變數,稱為純量變數,先不管這個專有名詞,這種一般的小顆粒變數,就是單純的變數,你可以將之想成單細胞生物。

單純變數很單純,就內含一個值,或內容,它是資訊的基本單位。例如,如果 a 是一個數字變數,它可能是 1、可能是 100、可能是 -22...等。如果 b 是一個文字變數,它可能是 "abc"、"defxyz"、"台灣"、"地球只有一顆"...等,日期同理可推。

你的體重,是一個單純的數字變數;你今晚可能會去的餐廳,是一個單純的文字變數;你中樂透的那一天(如果有的話),是一個單純的日期變數。你的生日則是一個日期常數,因為已經不會變動了(除非戶口報錯)。

你自己這個變數(今天的你跟昨天的你不會完全一樣,不只外貌、體重、想法...),是由許多基本資訊組合起來的,就是一個不單純的大顆粒變數,也叫做一個東西

變數與常數混合

人類說話時,數字、文字、日期,可以混合在一個句子中,程式設計反映真實世界,這點能力當然也是有的。

數字變數,可以跟文字常數混合一起用:

Sub msgbox_var_text()
    For i = 1 To 9
        MsgBox "a" & i
    Next
End Sub

結果會從 a1 (在螢幕上)印到 a9。

當然也可以日期跟數字一起用:

Sub msgbox_var_num_date()
    For i = 1 To 9
        MsgBox #1/23/2012# + i
    Next
End Sub

結果會從 2012/1/24 印到 2012/2/1。

通通一起來吧:

Sub msgbox_var_num_date_text()
    For i = 1 To 9
        MsgBox "日期: " & #1/23/2012# + i
    Next
End Sub

2013年3月11日 星期一

常數與變數

常數,constant,其實不應該翻譯成常,因為 constant 不一定是數字。常數的意義,是不會變動的數值、事物、因素(至少是假設不會變動)...等。例如物理學上的真空光速、普朗克常數、萬有引力常數、玻爾茲曼常數及阿伏伽德羅常數...等等。

同理,變數就是會變動的東西,真實世界中,會變的事物似乎比較多: 每天到達辦公室的時間、早晚的氣溫、東西的價格、老師今天會教些什麼、媽媽今晚煮什麼菜、爸爸這周末會帶全家到哪裡去玩...等,抽象一點的,甚至自己今天與明天的長相、自己這一刻與下一刻的想法...等,數之不盡。

程式設計反映真實世界,所以大部分我們寫的程式裡,都會有或多或少的變數,常數則比較少見。

在程式語言中,常數與變數都是資料,自然也適用資料型態的概念,所以,粗分而言,變數有數字、文字、日期。

用 MsgBox 練習迴圈

假設想寫個程式,用 MsgBox 印出從 1~9。依照目前學到的指令,是這樣寫:

Sub msgbox_1_9()
    MsgBox 1
    MsgBox 2
    MsgBox 3
    MsgBox 4
    MsgBox 5
    MsgBox 6
    MsgBox 7
    MsgBox 8
    MsgBox 9
End Sub

那改一下,從 1 印到 99...。要寫 99 行哩,很沒效率吧! 投入的工,比獲得的結果還少;投入的工如此辛苦(雖然可以用複製貼上),得到的結果如此微不足道。還不如不寫。

手動複製,不如自動複製,如果能讓小叮噹(哆啦A夢)拿出一種 "程式重複器",可以重複上述看起來就很重複的行為,不就可以節省力氣嗎? 有的,這個重複器,就是迴圈(loop):

Sub msgbox_1_9_using_loop()
    For i = 1 To 9
<這裡按下 2 次 Tab>MsgBox i
    Next
End Sub

For 是規定寫法,i 就是你想重複的次數,Next 也是規定寫法,代表下一個 i,對於 1 來說,下一個 i 就是 2,以此類推。

這個 i,就是變數之後馬上會提到

用 Tab 讓程式易讀

Sub test_1()
<這裡按下 Tab> (再寫你的程式碼)
<這裡按下 Tab> (再寫你的程式碼)
<這裡按下 Tab> (再寫你的程式碼)
End Sub

程式不只是給電腦執行的,也是給人閱讀的。畢竟,程式難免會修改。不改的程式不常見,因為不改往往等於沒創新。沒創新的程式雖然可能還是有用,卻可能沒多少人想用。

2013年3月7日 星期四

因為沒效率,所以才要用迴圈

初學程式設計(其實不論初學什麼,都應如此),了解基本觀念之後,讓我們直接進入程式設計的初學核心觀念: 迴圈(loop)。

即使只學了 msgbox 這麼個簡單的指令,也可以專注在迴圈。

這些年來,我教過的程式設計初學者,包含小朋友在內,如果能成功的持續自己學習程式設計,一定都是把迴圈練習到可以寫出有用的程式。迴圈對程式初學者而言,如同換氣對游泳一樣。如果沒有學會迴圈,即使用最寬鬆的標準來看,都不算學會程式設計,是的,基本的程式設計都不算學會。

可以這麼說,迴圈是程式存在的意義,如果你的程式沒有迴圈,在 Excel VBA 裡,很可能表示它是用錄製巨集錄出來的,這種程式對需求變動的抵抗力非常弱、而且幾乎不能處理大量資料。

你寫程式的目的是什麼? 除了心靈快樂之外,不就是想實實在在的提升效率嗎? 如果今天你寫了一個程式,僅能處理一兩筆資料,那直接手動在 Excel 裡做就好了,又何必花時間學寫程式?

函數的內在與長相

函數是一種功能,功能是去做一件事,多數狀況下(不是全部狀況),做一件事要有基本資訊才能做,例如,如果我說,我想吃大餐,基本資訊可能有到哪裡吃、吃些什麼、哪天去吃、跟誰共餐、預算上限...等。這些參與了我吃大餐這件事的基本資訊,在程式語言裡,稱為參數(parameter),一個函數,可以沒有任何參數,也可以不只一個。

請注意這個翻譯,參數,在表達上的有限性,參不一定是數字,如上例,到哪裡吃是文字,吃些什麼是文字,哪天去吃是日期、跟誰共餐是文字、預算上限則是數字。

做一件事,沒有任何參數的狀況雖不多見,但也不是全然沒有。例如我說我很累,現在就想小睡一下,我可以不說在哪裡睡、要睡多久,我就是想立即小睡一下,因為我很累,所以立刻就睡著了,這件事就也做完了,不須任何參數也可以做完。

當我們自己寫 Sub 時,就是在自己定義函數(當然,函數較嚴謹的定義並非如此,但可以先忽略)、自己打造一些該語言沒有的功能。一個程式語言,會先提供它認為多數程式設計師都用得到的基礎建設、基本零件,但卻不可能假設自己知道,世界上所有程式設計師會想設計些什麼程式,因此,到目前為止,沒有一個語言,會先提供好一個叫做 "憤怒鳥" 的暢銷手機遊戲程式,你必須自己寫。

還記得左右括弧嗎? 與 Sub 相同,函數的長相就是這樣:

Function <自己取的函數名稱>(參數 1, 參數 2, 參數 3...)
    (你要寫的程式碼在這裡)
    <自己取的函數名稱> = <某個結果>
End Function

當然,也可以沒有參數(只是不多見),就如同我們之前寫的程式那樣。

與 Sub 的結構一模一樣,只是名稱變成了 Function。

當你使用 Excel VBA 的內建函數時,也是一樣的長相:

left("公分", 1) ==> left 就是函數名稱,"公分" 與 1 就是參數。函數與 Sub 最大的不同點,在於函數有個 "傳回值",例如上述這個 left("公分", 1),傳回值就是 "公"。

函數 = 功能 = 程式

先說,這種論述也許並不嚴謹,但沒關係,大致上是對的,至少對初學者而言是如此。初學者,要專注在幾個重要的基本觀念上,然後,快快樂樂的、持續的學習程式設計。

之前有講到一個什麼什麼的概念,例如取文字的某一碼取日期的所在的年等,這個,就是一種功能,在程式語言裡,稱為函數或函式(function),其實你看括弧裡的英文就很清楚,函數就是一種功能,也是該程式語言的開發者/團隊,先寫好的內建程式,讓使用這個語言的人,可以使用該功能,好比基礎建設、或基本零件一般,不必自己重新再設計一次。因為如果連這些基礎建設都要自己寫,那學習程式語言就會變成一件令人生畏且無趣之事了。

2013年3月6日 星期三

不同資料類型,可以用 & 加以連接

先說這是 Excel VBA 的特異功能,別的程式語言不見得有。

在 Excel VBA,你可以這樣寫:

Sub test_2()
    MsgBox "我 " & 180 & " 公分,生日是 " & #12/31/1980#
End Sub

用 & 符號,直接連接不同資料類型的資料,非常直觀。

為什麼在 Sub 裡不能 print?

不為什麼,就是規定,入 VBA 環境隨俗。

print 指令只適用在 "即時運算" 視窗,那種寫一行程式的地方。如果要在程式中,把東西印到 "即時運算" 視窗,可以用 debug.print。

Alt+F11 進入 VBA 環境後,按下 Ctrl+G,讓 "即時運算" 視窗出現。

再教另一個指令,msgbox(在 VBA 中,內建指令不分大小寫,VBA 會自動幫你轉成有大寫有小寫的美麗易讀字樣):

Sub test_1()
    Debug.Print 180
    MsgBox 180
End Sub

按下 F5 執行,自己看結果。

開始寫多行程式

有了基本觀念,也知道如何寫一行程式,可以開始寫多行程式,一樣,進入 Excel 之後,按下 Alt+F11,進入 VBA 環境,接著按下 Alt+I、M,畫面應該類似這樣:


新增了一個 Module1 的模組,先別管名詞,模組就是程式。

程式要有個名字,以及包含的(可能不只一行的)程式碼。VBA 規定的寫法是:

Sub 程式名字
    (你要寫的程式碼在這裡)
End Sub

當你輸入自己取的程式名字之後,VBA 會自動在它後面加入左右括弧,左右括弧之後會提到,現在不知道也沒關係。

VBA 也會自動在下一行加入 End Sub。自己取的程式名字,有些基本規定,初學者不知道這些規定沒關係,反正若你取的名字不符合規定,VBA 會以紅色提醒你,程式自然也不能執行。

把之前學會的 print 打進去:

Sub test_1()
    print 180
End Sub

按下 F5 執行。程式出錯! 沒關係,關閉那個錯誤視窗之後,按下 Alt+R、R,重新回到寫程式的地方,當作什麼事都沒發生就好了,電腦不會冒煙,更不會因此爆炸。這就是寫程式的好處,不必擔心把電腦 "弄壞掉"。

2013年3月5日 星期二

計算日期

日期可以計算,這不難理解,某日期 + 1,就是該日期的明天,某日期 - 1,就是該日期的昨天。多加一點,就是數天之後。

除此之外,日期也有某些運算,例如,取一個日期的年、月、日、是星期幾...等。

總之,這些基礎建設,不只 VBA,幾乎任何值得一學的程式語言裡,都有。不必擔心,也不用背誦這些指令,只要知道一定有,到時查說明文件就好了。

計算文字?

文字也能計算? 當然不能像數字那樣四則運算,文字的常用計算,可以是:
  1. 串起來,像是數字的加法。
  2. 取想要的部分,例如取身分證字號第一碼。
  3. 去掉不想要的空白。
  4. 以某文字取代掉另一文字。
  5. ...
而就如同數字的四則運算,文字的 "計算",也可以用加左右括弧的方式,將上述常用計算組合在一起。

上述計算的具體寫法:
  1. 串起來: 輸入 print "180" + "公分",出現 180公分。在 Excel VBA,也可以用 print "180" & "公分"。& 代表 and 的意思。
  2. 取想要的部分: print left("公分", 1),出現 。取左邊算來第一碼,左右括弧出現了。不妨把它想成文字的四則運算吧! 但文字可不只四則運算,可能有好多則運算。
  3. 去掉不想要的空白: print trim("   前有空白後有空白   "),出現 前有空白後有空白。如果你輸入 print "   前有空白後有空白   ",前面後面都會出現空白,雖然後面的空白不容易看得到(有方法,但此處先不提,因為目前還不重要)。
  4. 以某文字取代掉另一文字: 輸入 print replace("公分", "分", "尺"),出現  公尺。把 "分" 取代成 "尺"。
  5. ...
文字的組合運算,可輸入 print replace(left("公分", 1), "公", "私"),出現 。過程是這樣的:
  1. 最裡面的 left 先計算,結果是
  2. 然後計算 replace,把公取代成

計算數字

電腦可以在螢幕上,印出像是 180 這種數字,而電腦既然號稱計算機,英文名字是 computer,而不是 electronic brain,就代表它是能做計算的。

小學數學總難不倒你吧! 來幾道四則運算:

輸入 print 180+20,出現 200。
輸入 print 180-20,出現 160。
輸入 print 180/20,出現 9。
輸入 print 180*20,出現 3600。乘法用星號,不是 x 字母。

想做先乘除後加減,當然也 OK:

輸入 print 180+20*2,出現 220,不是 400。
如果想讓它出現 400,可以輸入 print (180+20)*2。把 180+20 用左右括弧包起來,這樣就會先計算 180+20=200,之後才乘以 2,答案就是 400 了。

別小看一行程式

完成了第一個程式,只是個一行程式,這,有用嗎?

別小看這一行程式,它夠簡單,也能讓螢幕上有東西出來,雖然還不到讓螢幕有東西動來動去很酷炫,但至少有東西出來。比起其它語言,要在螢幕上印出這麼一行東西,這已經簡單許多,到目前為止,我們只花了很少力氣,不是嗎? 我可沒讓你先看一大堆安裝步驟(Excel 完整安裝的話,應該是光碟放進去、按幾個下一步就搞定了)、應用程式框架、MVC 架構、物件導向、網頁程式設計...等等可能把你嚇跑、或讓你睡著的東西。

那些東西當然也很有用,但身為程式初學者的你,一時之間可以先跳過。當然如果你要設計網頁程式,Excel VBA 不是個好選擇,而我這裡也不會寫。我主要寫如何利用程式處理大量資料,讓你提升工作效率

而 Excel VBA 這個 "即時運算" 視窗,是學習程式設計的好幫手,它可以讓我們先專注於一件事: 指令可以讓螢幕上有些什麼效果,立即、馬上。

印完數字,還記得另外兩個資料類型嗎? 文字、日期。也來印一下,在 "即時運算" 視窗內,輸入:

print "公分"

結果印出公分。請注意,印出的結果,前後並沒有雙引號。加上雙引號的動作,是在印出之前、是我們要指示電腦做的事,而印出的結果,是給人類看的,不需要雙引號。畢竟你跟人類對話時,是不會說: 我身高 180 雙引號 公分 雙引號 吧?

同理,印出日期:

print #1980/12/31#

結果會是 1980/12/31,前後沒有井字號。

學習 Excel VBA 的第一步

有了基本觀念,也完整安裝好了 Excel,就可以開始寫程式了。

程式長得什麼樣子呢? 程式會有一個名字,內含一堆指令。要學會寫一堆指令之前,先試著寫一行指令,然後再學著把一行一行的指令,組織成一堆指令,然後給個名字,就完成一個程式了。

在 Excel 的環境下寫程式,有時也稱之為寫巨集(macro),先不要管這個 macro,總之就是在寫程式。

我衷心建議你,學習 Excel VBA,不要從錄製巨集開始,在你懂得什麼是程式設計之前,錄製出來的程式碼,我保證你看不懂,很容易破壞學習興趣。

錄製巨集,可以在你稍微懂了一點 Excel VBA 之後,輔助你學習 Excel VBA 的指令,降低學習負擔。更重要的是,多數有用的程式,都是錄製不出來的。如果有用的程式,都可以用錄得錄出來,那目前環境下的程式設計師,恐怕價值都會大為降低。

進入 Excel,按下 Alt+F11,如果沒出現類似以下畫面,表示 Excel 安裝不完全,請重新安裝。


然後按下 Ctrl+G,畫面變成類似這樣,出現一個 "即時運算" 視窗,這個視窗,就是讓你學習一行指令用的:


運用之前提到的基本觀念,我們來讓螢幕上出現一些東西,請在 "即時運算" 視窗內,輸入 print 180:


結果底下出現了 180,恭喜你,完成第一個程式了。到目前為止,並沒有用到超過國小英文數學程度的知識,如果你覺得這很難,應該是你根本沒興趣,必須認真考慮,到底要不要學下去。如果程式設計不能帶給你好處(心靈上或工作上的好處),不如不學,並不是每個人都要學程式設計。

學習程式語言的第一步

不是指令,而是基本觀念。跟電腦對話,與跟人類對話不同,例如我對你說: 我身高 180 公分,1980/12/31 出生,身為至少受過國小教育的人類,你應該能知道,180 是數字、公分是文字、生日是日期

但電腦不知道,所以我們要先指定,告訴電腦,我們所指示的資料類型是什麼?

電腦上的資料類型,粗分就上述三種: 數字、文字、日期。指示數字時,可以直接寫 180;指示文字時,要前後加上雙引號(有些語言是單引號,有些單雙皆可),寫 "公分";指示日期時,前後加上井字號,寫 #1980/12/31#,有些語言可能不一樣,但大致上格式就是如此。只要知道,指示不同資料類型時,必須要加上某些符號就好。

不要去背指令,剛開始學程式設計,重點是持續,能夠簡單理解,就先不要去找困難的理解方式,不要輕易破壞學習胃口。

該學哪種程式語言?

都可以。其實多數程式語言的相同性,遠大於相異性。學好某個程式語言,再跳到另一個,基本觀念相通。但相異性雖少,不表示小,也不表示一定很容易。

我推薦 Excel VBA,至少有幾個原因:
  1. 不算貴,單買的話,一套約 4,000 元,可以用很久,Excel 2000 到現在都能用。
  2. 功能多,雖然你用不完。
  3. 個人、家庭、學校、企業,幾乎大家都有。
  4. 它可以把你的動作,錄製成指令,大幅降低記住指令的負擔,這符合簡單原則
  5. 它是微軟的金雞母,微軟有誘因持續維護並強化它。事實上,這可能也是微軟目前唯一的強勢產品。
  6. 比起其它程式語言,它比較簡單上手。在資料處理的功能上,也不遜於其它語言。


程式設計,如何持續學下去?

學習這件事,不能持續的話,就變成一種損失,表示你初期投入的時間成本、買書成本,通通都浪費掉了。當然啦,如果之後對你另一段學習有所啟發,也許不算浪費。

而且可能讓你對程式設計,自此心生畏途,甚至厭惡。所以,持續性總是重要的關鍵。

想想減重、念書、或其它任何需要努力與專注的計畫,如何能讓自己持續一陣,不打瞌睡、不放棄?

簡單,是一種策略。遇到困難,可能放棄,如果一直覺得簡單,比較可能持續。有趣當然是另一種持續策略,也可能是簡單之後產生的副產品。

然而,簡單有趣,都很主觀,所以我儘量試著讓之後的旅程保持簡單,希望如果簡單之後,你會覺得有趣。覺得有趣,你自己就會持續下去。

學程式設計,數學要很好嗎?

不必,當然這也看你想把程式設計學到什麼地步、以及你想寫出什麼樣的程式而定。但一般而言,不必。

反而是說故事的能力、自圓其說的能力,比較重要。程式設計,是一種設計,又是在電腦螢幕上的設計。既然是設計,就是把你自己的想法,用可用的指令,表達出來,好比寫文章、烹飪(設計菜色)、設計海報、設計(規劃)活動、設計書架、設計房間、甚至設計(制定)一個政策。都是一種設計。

當然,數學好到一個地步,對程式設計的學習過程、以及學會之後把程式寫得優雅、跑起來快不快,自然有一定的幫助。但除非你想成為很專業的、且特定領域的程式設計師,不然,多數人的數學程度都差不多,所以不必擔心這點。

程式不必寫得多好,就可以讓你覺得有趣、節省你的時間(提升工作效率)、拯救你的手腕、降低你的眼力負擔、鬆弛你的肩頸。當然,如果意外的讓你對程式設計起了興趣,從初學者變成專業程式設計師,開始為別人寫程式,那上述好處可能變成別種東西。

程式設計是什麼?

是讓電腦依照你的指示,讓螢幕有東西動來動去。

這些指示,多數是用英文。很簡單的英文,大約國小英文程度。常用指令不會超過 100 個、甚至更少,指揮電腦做些簡單的事,不會比指揮狗更難,據說狗可以聽懂人類 200 個指令。

當然也有其它種類的程式設計,可以讓電腦依照你的指示,不只螢幕有東西動來動去,也可以讓螢幕以外的東西動來動去,例如機器人的手臂、戰鬥機飛起來...等等。

我這裡講的,主要是 "讓螢幕有東西動來動去" 這種,而且是在一般的個人電腦上的螢幕上動來動去,用 Windows 的。