[程式設計] 全端工程師學習地圖(手機端、後端(一))

前言

在上一篇,我寫了一篇全端工程師的前端 Roadmap,裡面帶過了很多前端工程師在學習路上可能會需要的工具,以及建議的學習順序。因為上一篇就有提到學習心態的部分了,這邊我就跳過,有興趣的可以回上一篇觀看。

這篇我要再往後端的部分寫下去。先說不是我故意要富樫,只是這一個月真的太忙了,每個週末都有比這個更急的事要做。先跟讀者說一聲抱歉。

JS 手機端開發(手機端、進階)

React Native Development Services Company | Mobile App Development Services  | Codeplus Infotech
React Native

啊不是說要寫後端,怎麼寫了個手機端 XD。沒有啦,就之前忘掉了,先補在這裡。反正我寫這系列的目標是要給全端工程師,不單單只是某一端 XD

目前市面上的兩大手機作業系統,分別是 Android 和 Ios。如果要達到比較複雜的原生功能,例如像藍芽、遊戲,公司一般就會請 Android 和 Ios 的工程師。然而,在大多數情況,App 只是做為一個使用者介面和 server 溝通。在這個情況,使用 JavaScript Hybrid 的 platform,在初期可以減少很大一部分的開發時間。

目前市面上有 React NativeFlutter 競爭。React Native 是由 Facebook 出品,語法大致上和 React 差不多。而 Flutter 則是 Google 在 2017 release,支持的語言為 Dart 。儘管 Flutter 最近後起之勢蠻盛的,但我個人直接推 React Native,因為發展比較久,可以找到比較多的資源。但我的意思也不是 Flutter 完全不能學,有興趣的讀者也可以兩個都碰。

其它連結

後端程式語言(後端)

後端 server 不像 browser 一樣,有個統一的語言。根據不同的需求,不同語言有各自的優勢。我這邊就隨便列舉幾個比較紅的語言。NodeJs, GoLang, PHP, Java, Ruby, Python, Rust, C (咦?)

在眾多的語言之中,該選擇哪個呢?我個人覺得都沒有差。儘管在不同需求導向的程式,有相對較優秀的選擇,但大多數時候,僅僅需要的只是一個可以對 Database 做 CRUD 的 server,又或者你是一個前端工程師,不太需要懂這麼多細微的差異。

每個語言,通常會在該圈子有一個較為主流的選擇,稱之為框架 (Framework)。例如

真的要挑的話,Laravel, Rails, Django, ExpressJs 是比較多新公司的選擇,但和其它框架比起來也沒有差很多。

做為一個初學者,該做的是把選定框架的風格學好。接著了解這個框架或語言的優點和缺點。確定能了解大部分之後,再往下一個框架邁進。

了解框架的好處,就是站在前人肩膀上,不要重複造輪子。如果真的覺得造輪子很好玩或有挑戰的話,也可以手刻一個 C 的 server,畢竟上述語言的底層也大多是 C LOL。

順帶一提,GoLang 或 Rust 可能是我下一個會想鑽研的語言,這兩個語言真的很新很酷啊。

其它連結

網路基本概念(後端)

網路的基本概念,這個聽起來好像很壟統。沒錯,這邊要學的東西會比較雜一些。

首先,你需要了解 7 層的 OSI Model,本科是電腦科學的,應該要能輕鬆掌握這個。這個 OSI Model 涵蓋了網路世界的運作原理。例如封包是怎麼被送到對的 IP?HTTPS 的 SSL 是怎麼運作的,在哪一層發生作用?

接著,你可能需要學習怎麼設 DNS Record。A Record 是什麼?CNAME Record 是什麼? subdomain 和 subdirectory 的差別在哪裡?TXT Record 的用途是什麼?

最後,可能還需要了解一下 HTTP 和 HTTPS 的差異,然後熟悉一下如何申請一個 SSL certificate。

其它連結

Linux 指令 (後端常用,前端偶爾)

做為一個後端工程師,Linux 指令是必備的。譬如要 parse log,你可能會需要了解 sed, awk, grep。或者要把某個佔很多資源的 process 砍掉,你需要使用 kill 或 pkill。再來,你可能會需要寫個簡單的 bash script,來跑一些簡單的 work。又或者你需要監控 CPU 和 memory 的使用量,來決定要不要開新的機器。以上這些都會使用到 Linux 指令。

我個人比較常用的指令有:

  • grep, sed: 截取字串
  • lsof: 檢查某個 port 上的 server
  • curl, wget: 下載檔案、檢查 server 是否運作正常
  • head, tail: 看 log
  • find: 搜檔案
  • ssh: 登入到機器中
  • kill: 砍 process

除了這些指令之外,最好也要了解怎麼設立一些基本的 linux 服務。例如 ssh key 怎麼管理、Linux 檔案權限、人員的權限、nginx 和 apache 怎麼設。

其它連結

Database (後端)

Pros and Cons of using PostgreSQL for Application Development - Aalpha
PostgreSQL

Database 是一個服務的運作基礎。又分為 Relational Database 和 NoSQL Database。 Relational Database 指的是 SQL 家族,然後有一個個資料表,然後用 key 強制關連起來的,常見的有 PostgreSQL, MySQL, MariaDB, MSSQL, Oracle。我個人直接推 PostgreSQL,PostgresSQL 相較 MSSQL 和 Oracle 較開源,有相對多的資料可以學習。和 MySQL 相比,讀的效能也比較好。不過,在大多數時候,這 5 個 DB 用起來都差不多,語法也大同小異,所以學習其它也是 OK 的選擇。

NoSQL 的部分,最紅的就是 MongoDB,前幾年還掛牌上市了。除此之外,也有其它特殊用途的 Database,像是 Graph Database neo4j, 高性能分散式 database Cassandra, 搜尋專用的 ElasticSearch。相對於 relational database﹐這些 database 多用來處理特定用途,或者為了滿足分散式的需求而應用。

要了解 Relational Database 和 NoSQL 的差別,一定要了解 Relational DB 的 ACID 和分散式系統的 CAP ,才不會拿 NoSQL 來處理 transactional 的需求,或者拿 Relational Database 來處理 log 或大數據。

其它連結

ORM (後端)

大多數的框架,多半會配有一個 ORM,做為把後端邏輯和 Database 隔開的一個介面。原本要拿取 DB 資料,需要直接寫 SQL 語法,但有了 ORM 後,就寫 ORM 就好了。Wikipedia 的例子很清楚,把讀取資料做一個抽象化,如果之後要更換下層的 Database,就可以直接更換,而不需要對程式碼也做更改。

寫後端程式碼時,大部分時間都是寫簡單的 CRUD 操作,這時候 ORM 的優勢會很明顯,程式碼好讀,也比較好維護。但做為一個好的後端工程師,也不能完全仰賴 ORM,在效能低落,或者需要很複雜的 aggregation function 時,直接寫 SQL 是更好的選擇。

其它連結

結語

我覺得學習程式的路上,如果有人可以給出一個概括,那麼對於建構自身的技能樹會有很大的幫助。本文旨在提供一個前端工程師或軟體工程師的 101 課,希望能帶讀者快速了解,自己還需要補足哪些知識和技能。

此外,要注意的一點是,沒有一個人能真正成為前後端都超強的全端工程師,找到自己有興趣的方向去學深,會對職涯更有幫助!

這次先寫到這裡,後端還有一部分,大家敬請期待!快幫我分享!LOL

關於我:

我是沒一村,專長和興趣是程式、主動投資、科技商業模式。可以參考我的書單和比較熱門的文章:

分享:

Leave a Reply