菜雞程式指南EP2. 新手的程式語言選擇困難症

2022/08/21閱讀時間約 10 分鐘
好,在看完前兩篇程式 勸退 心法文章後,如果沒有澆熄你學程式的熱情,那麼恭喜你,你已經踏出程式之旅的第一步了(ノ>ω<)ノ。
不過在這之前,身為程式初學者,你要面臨的第一個關卡,絕對是
我該學習哪種程式語言???
不過你也不擔心,現在網路資源這麼普及,相信這種萬年新手題,一定會有相關回答可以參考的。
於是打開估狗、輸入「程式語言 入門新手」之類的關鍵字、按下搜尋。蹦!各種資訊映入你的視線,像是炸彈一樣攻擊你的認知。
「[ 2022 ] 新手最該學的程式語言」
「轉職者注意!最順利求職的語言選擇」
「近十年來最夯的程式語言,不學後悔」
等等像是老高影片般的介紹標題,內容又穿插著各種你看不懂術語,什麼宣告、完整函示庫、動態語言、靜態語言,每種分析原因你看的似懂非懂,卻又看起來怪有道理的:
有人推薦學 C 或 C++,可以對電腦底層邏輯有比較堅實的理解;
有人推薦學 Java ,除了使用率高,也可以對 OOP 有扎實的應用認識;
有人推薦學 JavaScript,前後端都可以實作,弱型別也省去新手在型別宣告上的麻煩;
有人推薦學 Python,說人工智慧與機器學習是大趨勢,學了以後趕上科技潮流......
看了各家之言,還是搞不清楚到底學哪個語言才是對的,再加上自己本身的選擇困難症,更是讓你惴惴不安,深怕如果在起點就學錯語言,會不會在這條路上一步錯、步步錯,忙了半天鎩羽而歸(◞‸◟)......

如果你在看了各種推薦文、介紹文,對於要從哪個語言開始入手人毫無頭緒的話,接下來我就以我的經驗與認識,分享一下我對於這個問題的看法(不是絕對解答),提供給選擇困難症的你做個參考~

情境1. 已有明確的學習方向/目的

如果你已經確定好「我學程式就是要XXX...」的話,那其實沒什麼好猶豫的,根據你要學的目標尋找相對應的程式語言即可。
如果你想學習網頁前端設計,那就學 JavaScript;
如果你想學手機 App 開發,那就學 Swift (iOS) 或是 Kotlin(Android);
如果你想學遊戲開發,那就學 C++/C#;
如果你想學資料分析、機器學習,那就學 Python ......

不過我相信大部分的初學者,在剛開始學習時只是抱著「我要學程式!」這種一股腦的衝勁,根本搞不清楚這個領域的發展方向有哪些,更遑論根據方向選擇語言了。
如果你也屬於這一類人(包括當年ㄉ我),倒也不用覺得難過或沒有方向;事實上,我認為這樣倒可以讓初學者用一種更彈性、更基礎的心態,來認識程式語言的本質。

情境2. 我只是想學程式看看

根據我涉略數種程式語言、深入思考分析後,我會推薦給所有程式初心者們,不分領域、不論年度,最適合入門的程式語言是......
都可以,看你喜歡哪個語言、覺得哪個語言的語法看起來最順眼,就去學吧(゚3゚)~♪。
ㄟ先別氣到關掉網頁Σ(;゚д゚),這個看似沒有邏輯、不負責任的回答,其實是想帶出一個程式語言的核心概念:
如果你是完全初學程式,那你的學習重點不是某個語言的語法規則、某個語言的應用方式,而是更本質的「程式思維」
有看過 EP0 的同學,應該都對這個詞不陌生。我所謂的程式思維 programming,指的是「分析問題、解構問題、最後透過程式碼來解決問題」的能力。
每一種程式語言,其實都是應用類似的程式邏輯,達到自動化的效果,差別只在於應用的領域或是使用的媒介不同而已。因此,不論未來想發展的方向是甚麼,培養程式思維都是必經、也必須的學習課題。
話是這麼說,你可能還是很好奇,所謂的程式思維,究竟是個什麼東西、又該怎麼培養呢?

程式思維:三大工具的靈活運用

這邊簡單的說明一下我個人對程式思維觀念的剖析,分別是三個核心概念:資料型態、情境判斷與重複處理。無論你是學習什麼語言,都會驚訝地發現程式語言只是這三個概念實踐的媒介,差異只在於語法規則而已。

資料型態

相信不用我多說,電腦的記憶力無與倫比,我們可以善用電腦儲存龐大又多種的資料。
實際上,電腦又可以透過不同的資料型態,來幫助我們有效率的處理不同的問題需求,比如說基礎的資料型態,包含字串(string)、整數(integer)、小數(floating number)、布林(boolean)、陣列(array),高階的資料型態則有物件(object)、字典(dictionary)、串列(linked-list)、堆疊(stack)、佇列(queue)、樹(tree)等等。
Python 的資料類型
初學者在這裡要學習的是認識各個資料型態的特色,以及資料型態的靈活運用,如根據情境要求的挑選適合的資料型態、資料型態的函式操作、以及不同型態間的轉換處理等等。
深度理解資料型態後,你才能用最符合邏輯的儲存方式,操作、運行程式碼。

情境判斷

所謂的程式碼,就是一套工程師預先寫好的命令,讓電腦忠誠的執行指令、完成任務。
為了面對千變萬化的要求與情境,電腦自然要有一套判斷的標準,根據不同的狀況回復相對應的結果。
拿射擊遊戲來比喻,射中頭部的話扣500滴血,射中軀幹的話扣350滴血,射中四肢的話扣100滴血,射中襠部的話......直接歸零_(:3 」∠ )_。
if - else 情境判斷流程圖
利用 if - else 判斷式,思考所有可能的數值情境、並設計出相對應的處理方式,就像是參透多重宇宙的奇異博士,不論是什麼結果都能正確應對!

重複處理

相對於容易疲弱的人腦,電腦高效、準確,而且最重要的是,不會靠么(  ̄ 3 ̄)y▂ξ,忠實的執行你給的任何指令(無論指令多沒有意義,比如從0開始不斷+1幾百萬次)。
如果你在設計程式的過程中,發現需要重複執行某個相同的步驟N次,就可以利用 for / while 迴圈,設計好迴圈內的重複處理的行為與迴圈停止條件,用短短的幾行程式指示電腦該重複多少次,而不是「親力親為」手動把程式碼編寫N次;
同時,如果你發現有一大組程式碼是為了執行某個邏輯關係緊密的步驟,而這個步驟在其他段落也有相同的處理時,便可以將這組程式碼提煉成 函式(function),之後需要的時候,只要用一行指令呼叫該函式,就可以執行這一整串的動作了。
先觀察題目需求、思考執行過程中重複操作的流程、並將其用迴圈/函式的方式處理,這個概念在程式設計裡稱為DRY:Don't Repeat Yourself,讓程式碼精簡、也易於維護。
如果寫程式都還要事必躬親、每個步驟都要親自 code 上去的話,這種「工人智慧」的設計方式絕對是讓你事倍功半、精神崩潰。゚ヽ(゚´Д`)ノ゚。。

資料型態、情境判斷與重複處理,這三個基本核心概念貫穿了所有的程式語言,不論你是C、C++、Java、Python、JavaScript、PHP、GO、還是其他語言,其實都是運用這三個核心概念完成目標。
(當然實際上各別語言都有不同的特色,比如說非同步、執行序、物件導向、傳址傳值等等,但我認為這是進階的學習目標,初學者先以能靈活掌握運用上述基礎概念為主。)
這就有點像外功與內功的差異:外功是「型」的展現,或是拳腳、或是兵器的熟悉程度,而內功則是「質」的培養,體力、肌力、耐力、柔軟度等基礎體能的訓練,提升體格的本質。
重視內功(程式思維)的修練,再配合外功(語法規則)的學習,才有辦法將自身擁有的勁道發揮出來,成為真正的武術大師。

結語:挑選初學語言時你可以考量的因素

最後,讓我用兩個問答,來結束這次「語言選擇難題」的回合。

你為什麼擔心「錯」語言?

初學者在選擇五花八門的初學程式語言時,除去你本身的選擇困難症造成的焦慮,多數人會在這裡猶豫不決、甚至是擔心選錯語言的情緒,歸根結柢是來自於「無法學以致用」的潛意識:
如果現在學的這個語言,不是未來想深耕領域要使用的語言,那這段學習犧牲的時間、付出的學習成本,不就白白浪費、又輸人家一大截了嗎(◞‸◟)?
以我自己的經驗來說,這種疑慮絕對是多餘的。如上所述,你在第一次學習程式的目的,是為了培養「程式思維」,程式語言只是提供一個媒介,讓你去熟悉與思考如何利用這些概念,去解開相對應的問題或需求。
只要你的「內功」深厚,將來不論是要去學任何一種「外功」,其實都只是把新語言的語法規則摸熟而已,基本邏輯不變,學習時間與成本都比你想像中的低。
(而且以後端工程師來說,轉換語言、框架實在是家常便飯,同時還可能要熟悉多種語言以便操作不同的微服務,想靠一個語言打遍天下根本是癡人說夢)

要怎麼培養程式思維?

無他,花時間練習寫題目ξ( ✿>◡❛)。
我自己是在 ccClub 的 judge 題庫裡刷數學題庫,在每個絞盡腦汁、苦思冥想的過程中,漸漸掌握程式思維的概念。因此對於這個問題的回答,沒有什麼出人意料地答案或是捷徑可走,就是不斷地寫題目、去發掘題目裡的規律、設計情境、解出答案、習得訣竅。
這也是我覺得為什麼「學哪種語言」這個議題沒你想像的重要的原因。比起單純教程式語法的教學文或教學影片,有豐富題庫資源的課程才是真正初心者需要的教材。如果你找到有題庫提供練習的教學資源,大可別在意該語言是否是你未來一定會運用到的,學就對了,以掌握「程式思維」為學習目標。
(LeetCode 不算,上面的題目已經是比較進階的資料結構、演算法方面的習題為主,初學者直接拿這個去練習絕對是學的一個咪咪帽帽)

說是不用在意學哪種語言,其實我這裡還是有私心推薦(*´∀`)~♥兩種程式語言給初學者的入門參考:JavaScript 和 Python。
會推這兩個語言,原因倒不是什麼「產業趨勢」、「應用範圍廣」等外部因素,主要是這兩個語言結構跟語法相對比教單純、直覺,初學者可以將注意力集中在熟悉 資料型態、情境判斷、重複處理 的運用與掌握上。
再來給自家社團打個廣告,若選擇以 Python 作為入門語言,ccClub 提供免費註冊的 judge 平台與 YT 教學頻道,提供大量生活化的題庫與教學資源給初學者,只要肯投入時間、資源,努力寫題目,我保證你一定可以領悟所謂的程式思維,從程式小白畢業、成為初級 Coder ,往更進階的程式領域邁進!
(ccClub 還會不定期舉辦 Python 基礎班讀書會,如果想有同伴一起學習 Coding,還有認識爬蟲與專案實作,記得關注 ccClub 粉絲團的最新訊息歐!)
下一集跟大家分析幾種不同的教材資源優缺分析,敬請期待~
為什麼會看到廣告
魚骨書籤
魚骨書籤
留言0
查看全部
發表第一個留言支持創作者!