# [Programming] 快速入門一門新的程式語言 ###### tags: `Programming` :::info 這邊指的「新的」是指對學的人而言,並不是在業界或是某個人創造出的新語言。 ::: :::warning :warning: 這篇文是我的經驗談,也視為我對我所提出的方法的驗證,目前正在實驗中... ::: 身為工程師的我們很難只會一種程式語言打天下,剛出社會工作的我,除了學習「對於我來說」新的技術概念,也會需要配合團隊學習一門新的程式語言。最近在工作上我就需要學習一門近年來挺熱門的語言 - **Golang** (2020.08) 我接觸到的第一門語言是學校教的C,再來聽說遊戲業界大廠都是使用C++,所以我開始學C++,之後為了學習Unity引擎,學習了C#,之後又想與所謂「主流」和「新潮」搭上邊,稍微看了一下Javascript與Rust。 以上所述,我並不是只接觸過一門程式語言了,雖然任何一種我都寫不出任何一個可以看甚至可以用的專案:sweat:,但是在這東摸西摸的過程中,找到了一種學習新語言的模式。 ## 拆解並分類 我會盡可能的把它拆成四大區塊 - 基本上大家都有的 1. 變數宣告、IO 2. 基本型態、轉型 3. 算數運算 & 邏輯運算 4. 流程控制 (`if...else...`, `for`, `while`) 5. 函數宣告與調用 6. 自訂新型別 (`struct`) - 常用集合 1. 固定陣列 2. 動態陣列、鏈結串列(Linked List) 3. 映射(`map`)、雜湊表 4. 字串 - 語言特性與- ***「解決了XX語言的問題」*** - 物件導向、函數式、程序式 - Lamda表現式 - 泛型 - 例外處理 - GC ## 基本上大家都有的 第一到第三就不說了,經典的`Hello, world!`、比大小、猜數字,這些陪伴我們的小範例再次因為學習新的語言而見到它們。 第四點除了基本函式的宣告、定義、調用,我還會特地關注對於函式的參數是`pass by value`還是`pass by reference`,原因來自我初學的語言`C`與`C++`,這點非常之重要。 第五點的自訂新型別不是只OOP的封裝,只是單純的把資料集中起來處理,不然在函式裡,一個一個丟進去,會崩潰! ## 常用集合 現今許多語言在他們的內建函式庫有許多常用的資列結構,或是直接原生在語言裡面了,例如映射在`Golang`就是原生的,但回顧一下我最常用的結構不外乎就上面那幾個。 固定陣列、與雜湊表不用說,至於第二點我把動態陣列、鏈結串列(Linked List)放在一起是因為大部分在使用這兩種集合時,我們對於它們的用法,大多是一樣的,就是把同類型的物品經過我們篩選後,然後丟進或從箱子拿出來,至於箱子是甚麼工法做的,我們通常都不理他,但往往就是這個「工法」是需要在意的,這關係到優化也關係到對於計算機組織結構的理解程度,是要用動態陣列還是鏈結串列是門學問。 字串更不用說,我們很常做的一項工作,就是對「字」做各式各樣的組合排列以及比較,所以這是必須的。 :::info 字串是我還在研究的部分 :skull:,由於我是從`C`開始的,所以視其為「字元的動態陣列」,但在其他語言內,貌似沒這麼簡單,而且例如在`C++17`中,又有所謂的`string_view`,所以我認為大部分語言所提供的字串,底下的資料結構沒這麼簡單。 ::: ## 語言特性 上面我有標號碼的項目同時也使我認為的學習順序,但在語言特性這一塊就沒有了,因為不是所有語言都有這些功能或是特性。 一門語言可能囊括了許多特性,例如`C++`,但上面那幾個是我常用,也是一般專案就夠用的了。 關於物件導向、函數式、程序式,雖說是特性,也的確像有像是`Java`跟`C#`語言設計上綁死物件導向的,我一直覺得這些應該說是對於整體程式架構的思考模式,他驅使我們用哪一種方向出發,就會對於整體中的「資料」與「演算」進行甚麼處理。 ### 「解決了XX語言的問題」 語言特性通常是當你問一個前輩:「這是一門甚麼樣的語言」的時候,很大的機率他會回答用該語言的特性來回答你,同時也會聽到「這個XX語言的OO特性解決了B語言的痛處」,例如垃圾回收解決了需要釋放記憶體時,釋放到已經是「空」的區塊,就某方面來講,他確實就是廣告詞,也正是**我們可能要去學該語言的原因**。 ## 小專題 除了寫一些小範例,建議還要寫一個小小的專題,不管是TCP聊天室或貪吃蛇都可以,這樣除了熟悉新語言的語法與概念外,更重要的的可以知道使用該語言的社群生態,像是怎麼Debug,怎麼管理package,怎麼做測試等等... 這邊推薦一步[youtube影片](https://www.youtube.com/watch?v=jOFco1xuIeo)供大家參考可以做甚麼小專題試試身手。 ## 學習一門新的語言很難嗎? 在這裡寫下結尾,學習一門新的語言很難嗎?如果是完全初學沒有學過任何一種程式語言,難,很難。如果已經有經驗了呢?我想可以很快就上手了,除非有你先前沒碰過的語言特性。 我非常喜歡遊戲,尤其是黑暗靈魂系列,有些人可能知道,該系列是已困難出名的,所以勸退了許多玩家。以前我在reddit的時候看到一個問題:「黑暗靈魂歷代那一款最困難」,而最普遍的回答是,「你所接觸過的第一款系列作最難。」,我認為這句話同時也可以對應在這篇主題上。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up