---
# System prepended metadata

title: 到底該不該學程式設計
tags: [程式]

---

# 到底該不該學程式設計

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

#### TL;DR

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

至於要怎麼開始，去上[CS50](https://cs50.harvard.edu/x/2022/)。

## 正文

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


### 什麼是程式設計

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

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

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

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

不然就會變成

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

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

### 為什麼要學程式設計

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

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

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

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

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

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

#### 1. 分析問題

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

#### 2. 思考如何解決問題

這時候有了問題，我們就可以來想解決流程，我們首先要讓名單變得容易統整，然後再對名單進行處理，於是我們導出這樣的步驟：
1. 把名單彙整到excel表格裡面
2. 用函數對表格進行比對
3. 輸出結果到特定的格子裡面

#### 3. 動手解決問題

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

...

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

### 如何入門程式設計

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

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

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

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

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

同時有知識跟工具的課程，我這邊只推薦一門，哈佛大學的[CS50](https://cs50.harvard.edu/x/2022/)。

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

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

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

當然，有些課程像是[Programming for Everybody](https://www.coursera.org/learn/python?irclickid=0pyW%3AeVMdxyIWEIVyvxxWRUGUkDRPuTo9XQkQ00&irgwc=1&utm_medium=partners&utm_source=impact&utm_campaign=259799&utm_content=b2c#syllabus)，裡面也有講到電腦，卻花了更多篇幅在python上面，如果覺得不想學那麼多"其他東西"的話也可以去聽聽看，但我自己是認為在學習上，先把自己的視野拓展開來是最最重要的事情。

## 結語

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

有興趣交流的歡迎留言唷~ [medium連結在這裡](https://medium.com/@peter-tw/%E5%88%B0%E5%BA%95%E8%A9%B2%E4%B8%8D%E8%A9%B2%E5%AD%B8%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88-734d7aac6ae)

###### tags: `程式`