到底該不該學程式設計

短短五分鐘讓你了解程式設計到底該不該學

Posted by Peter on September 5, 2022

到底該不該學程式設計

在最近,這個問題一直在我身邊被提起,就簡單花一點時間,聊聊我自己對學習程式設計的想法與看法。

TL;DR

該,程式設計能夠培養解決問題的思維,並在這之上學習到現代電腦的技術與用電腦解決問題的方法。

至於要怎麼開始,去上CS50

正文

本文分成三個部分,程式設計是什麼,為什麼要學,要怎麼學,簡單明瞭地讓你知道為什麼我覺得要學程式設計。

什麼是程式設計

程式設計對我來說,就是用程式語言解決問題

這個定義對很多人來說可能很廣泛,我相信大部分人對程式的理解就是:

寫程式看起來好酷,我要學python
C++聽起來好厲害,我要學

上面其實只有講到工具的學習,但事實並不是只有這樣,學習語言(工具)只是其中一個部分,我更著重、更在意的部分其實在後面的解決問題

不然就會變成

我python寫得呱呱叫,學是很好玩,但要拿來幹嘛?
C++好難,不學了

所以說其實除了程式以外,解決問題的思維也是程式設計的一環。但請注意一個重點,當我們學程式學得越深,我們能接觸的問題也就越深,所以把工具學好也是很重要,不過千萬不要倒果為因了。

為什麼要學程式設計

像上面說的那樣,程式設計是一種解決問題的過程跟手段,所以為什麼要學程式設計,我的答案已經可以呼之欲出:培養分析問題與解決問題的能力

那你可能會問,好啊,既然目的是分析問題跟解決問題,那我去看書就好,我幹嘛花那麼多時間學python,還要摸電腦,那麼累。

其實也沒錯,如果單單只想訓練問題分析能力的話,看書其實就好了,我覺得程式設計很值得學的地方在於,程式的目的其實就在解決問題。像上面講的一樣,我們為了解決問題,自然而然就要去分析他,也要去磨練自己工具的使用。

另外一點我覺得程式設計不錯的地方是,可以自己動手。在很多時候書上的東西都是生活、或是工作上的問題,自己要動手去解決很難。但電腦裡面有很多很多問題,我們可以從解決這些問題的過程中,慢慢培養自己的問題思維能力。

舉例來說,我每天都要負責分析客戶訂單,看有哪些新客戶出現,以往都是用眼睛一個一個對,看排序上面有多了哪些不認識的名單,但是失誤率好高,怎麼辦?

這時候我們可以把問題拆成好幾個步驟去進行:

1. 分析問題

首先,我們從敘述裡面得知,我們有新客戶跟舊客戶,現在要找出新客戶的名字,於是問題就知道是:如何分析名單,並標記出不重複(新加入)的名字。

2. 思考如何解決問題

這時候有了問題,我們就可以來想解決流程,我們首先要讓名單變得容易統整,然後再對名單進行處理,於是我們導出這樣的步驟:

  1. 把名單彙整到excel表格裡面
  2. 用函數對表格進行比對
  3. 輸出結果到特定的格子裡面

3. 動手解決問題

有了流程,我們做事情就會變得很清楚,如果還是不清楚裡面怎麼做的話,我們這時候也會知道我們要怎麼查才會得到結果。像是我們如果骨子裡不知道函數要用EXACT/IF…,我們用關鍵字去查,也會得到一樣的結果。

而學習程式設計,必然會經歷這樣的問題解決歷程。學習程式設計並不是說我們今天一定要學python、一定要學C,而是在用程式解決問題的過程中,掌握如何分析問題、解決問題的方法。我們上面用的範例用的工具也只是excel。

如何入門程式設計

講到這邊好像就有點離題了,不過秉著良心還是講一下要怎麼學,不然口口聲聲地說學這個不錯,卻不給一條路,是有點過意不去了。

程式的路百百條,有寫網頁的、有寫深度學習的、有寫windows app的,各式各樣。對於程式設計,我自己比較推薦的是傳統的路線:在了解電腦運作的同時,接觸各個領域的內容。這邊路很多條,沒有一定的路,只有最適合自己的路。

現在比較流行的是用很快的速度學一門語言,然後丟幾個題目給你練習。我覺得這樣的方法前面雖然很快,也很有成就感,能夠快速地掌握很多以前不知道的知識,也能夠有些產出。我覺得這樣的學習是有點可惜的,當我們一頭栽進去工具之後,就會發現電腦上其實很多東西是互相關聯的,當我們還要繼續深耕的話,回頭去學別的東西的時候還是一片迷茫,很多都要從頭開始。

當然,這樣的方法也是旨在用程式解決問題,目的都是一樣的,只是我有我自己偏好的學習模式。

我的想法是,既然我們要用電腦解決問題,我們就要知道電腦的世界有什麼東西、知道電腦跟程式到底是什麼,也要讓自己能夠一直向後發展、學習。在這學習的過程中會接觸到一些工具的使用,但主要還是拓展自己的眼界跟知識。

同時有知識跟工具的課程,我這邊只推薦一門,哈佛大學的CS50

CS50從Scratch開始(對,就是我們小學的時候電腦課那個狗人),讓你知道一些程式的元素,像是電腦的指令是一個步驟接著一個的、又像是迴圈可以讓動作重複進行…等等。接著會碰到一些比較”電腦”的東西,例如演算法、記憶體等等是如何運作的,也會提到像是python, html之類的實用東西。

聽起來生澀,上起來非常好玩,裡面的作業也非常好玩

學了這門課程,你就會知道自己少的是什麼,未來想要往哪邊走,也對程式能有一個很好的入門。假如說之後想學更多python,那就去找python的課來上,想學ios APP,那就去找ios來上,重點還是在於讓自己知道問題要怎麼被解決,對於這點,這門課會是很好很好的基礎。

當然,有些課程像是Programming for Everybody,裡面也有講到電腦,卻花了更多篇幅在python上面,如果覺得不想學那麼多”其他東西”的話也可以去聽聽看,但我自己是認為在學習上,先把自己的視野拓展開來是最最重要的事情。

結語

程式設計學了不虧,掌握到電腦的工具之外,也可以培養解決問題的思維能力,推推!

有興趣交流的歡迎留言唷~