後端語言學習地圖

Jc
5 min readApr 3, 2020

--

Photo by Annie Spratt on Unsplash

先來說說我們想要開發一個應用程式的話,那這個應用程式要用來幹嘛?所以就要討論應用程式的目的,而這邊的應用程式我先將它的範圍歸納在網頁應用程式的範疇內。

網頁相關應用程式的目的:

將資料儲存在某一個地方方便日後的存取,並且做有效率的應用進而產生某種價值。

其中的資料可能來源有:

  • 使用者輸入:帳號、密碼、Email
  • 公開的資料:天氣氣溫、政府網站公開資料
  • 應用程式提供者所整理產生的資料:

有效率的資料應用來自於領域知識的相關處理、資料相關邏輯處理等等,我統一把這些行爲列爲『處理資料』。

例如說:如果你傳訊息給我:『Hello,要不要出來吃飯?』,對於應用程式的角度來說大概會這樣子處理:

  • 使用者A(你)輸入一段資料『Hello,要不要出來吃飯?』
  • 應用程式把這一份資料存在某一個地方
  • 並且也傳送給使用者B(我)

所以從上述角度應用程式層面概括地化分爲:『使用者』、『資料』、『儲存資料』、『處理資料』

所以當在學習一個語言的時候除了某個語言的特有的特性,更多是在學習:

# 定義資料
* 變數 / 表達式
* 資料型別
* 資料結構儲存
# 處理資料
* 接收使用者的輸入
* 流程判斷
* 函數運用
* 迴圈
* 文字操作
# 儲存資料
* 檔案處理
* 資料庫操作

當然,你也可能聽過『物件導向語言』等等的關鍵字,但是沒有『物件導向』就無法寫程式了嗎?

物件導向其實只是一種寫程式的方法論,能讓開發者更有效率、更好維護程式碼或者是寫出更有架構化規模的程式碼,但是一定要就要看你學習的語言是否一定需要物件導向才能寫下去了。

如果這個語言並非物件導向的情況化並不是一定要物件導向才能撰寫程式,例如 PHP 就不是物件導向的程式碼,你可以完全不用管物件導向是什麼也可以寫,只是有用物件導向的寫法的話可以寫出有品質的程式碼,JAVA 就是一個必須要有物件導向知識才能撰寫的程式,也就是為什麼新手一開始學習 JAVA 會很辛苦的原因是因爲,除了上述要學習的內容以外,還需要具備物件導向的知識才能開始撰寫。

所以你需要學習的變成:

# 定義資料
* 變數 / 表達式
* 資料型別
* 資料結構儲存
# 處理資料
* 接收使用者的輸入
* 流程判斷
* 函數運用
* 迴圈
* 文字操作
# 儲存資料
* 檔案處理
* 資料庫操作
# 物件導向

所以當你辛苦了學習了上述的知識,因爲你的應用程式不可能孤零零地活在自己的世界裏當邊緣人,它必須可以對外聯繫溝通,所以這時候你又必須要讓應用程式有跟外面世界溝通的功能,所以恭喜你必須學會的技能又要多一項:『網路連線』。

所以你需要學習的變成:

# 定義資料
* 變數 / 表達式
* 資料型別
* 資料結構儲存
# 處理資料
* 接收使用者的輸入
* 流程判斷
* 函數運用
* 迴圈
* 文字操作
# 儲存資料
* 檔案處理
* 資料庫操作
# 物件導向# 網路連線

在我們日常生活中使用了那麼多應用軟體,你有沒有遇過使用的時候遇到 bug 錯誤的經驗呢?所以如果這個錯誤是可以躺著就知道一定會發生問題的錯誤,那是不是就可以先告訴你的應用程式遇到這個錯誤的時候該怎麼應對,如果你的回答是『對阿』,恭喜你你是一個有責任心的開發者,那也順便恭喜你,你就多得多學一個技能叫做『錯誤處理』的技能囉。

所以你需要學習的變成:

# 定義資料
* 變數 / 表達式
* 資料型別
* 資料結構儲存
# 處理資料
* 接收使用者的輸入
* 流程判斷
* 函數運用
* 迴圈
* 文字操作
# 儲存資料
* 檔案處理
* 資料庫操作
# 物件導向# 網路連線# 錯誤處理

以上只是一個很概略的敘述學習一個後端語言也許需要掌握的知識點,每一個細項其實都還可以有很多的延伸,如果全部列出來我想我自己看了都想放棄了,如果你還有勇氣的話可以繼續往下看下去…

在掌握了上述的知識後,會漸漸地耳聞到『框架』的關鍵字。

what the f**k ?

『框架』說穿了其實就是有一些很常用的功能的大補帖,世界上有一群很好心的人幫你整理好身爲一個網頁應用系統會用到哪些功能,可以讓你『用更少的時間或更少的步驟完成相同的事情』。

舉個生活日常當作例子:

如果你今天心血來潮想要自己來煮飯的時候,也許你需要以下這些步驟:

  1. 騎車到市場
  2. 走進市場一一地買你要烹飪的菜
  3. 從市場騎車回家
  4. 清洗你要煮的菜開始備料
  5. 開始烹煮你備好的料
  6. 終於煮好了,可以開動了。

上述你爲了要自己煮飯要花上六個步驟,但是其實真正想要享受的過程則是 5 與 6。如果今天有個服務可以幫你把菜都買好、洗乾淨、備好料,然後一整包寄到你家,你就可以省去上述痛苦的 1 ~ 4 的步驟了,就可以開始享受開心的烹飪時光。

雖然這個比喻不見得很貼切,但是你可以把這個服務想像它就是一種『框架』,你想要的完成的事情都相同(已經有備好的料),但是你藉着使用這個服務『框架』,你就可以『用更少的時間或更少的步驟』得到一樣的結果。

當然,你使用這個服務的時候需要付出一些東西,上述的服務你需要付出的就是你荷包裡的 cash,那程式語言的框架呢?沒錯,就是你得花額外的時間成本去學習如何使用這個框架,但是這個學習保證讓你很值得,因爲你從此之後就可以省去惱人的步驟 1 ~ 4,讓你的開發更快速也更開心。

所以你需要學習的變成:

# 定義資料
* 變數 / 表達式
* 資料型別
* 資料結構儲存
# 處理資料
* 接收使用者的輸入
* 流程判斷
* 函數運用
* 迴圈
* 文字操作
# 儲存資料
* 檔案處理
* 資料庫操作
# 物件導向# 網路連線# 錯誤處理# 框架運用

OK,我想再繼續加東西上去應該你就想要按 X 關閉這個視窗了,或許是打消想要學習的念頭了,爲了你好還是見好就收。

以上是我從設計師轉職工程師 2 年左右的粗淺看法,有任何的想法或者是我有說錯的地方都歡迎與我交流囉,感謝你的收看,我們下次見啦。

--

--