# 到底該不該學程式設計 在最近,這個問題一直在我身邊被提起,就簡單花一點時間,聊聊我自己對學習程式設計的想法與看法。 #### 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: `程式`