【譯】前端 VS 後端

我曾經認爲--若是我瞭解JavaScript,那寫後端會很容易。我之因此認爲簡單,是由於Node是JavaScript。我不必去學一門新語言。前端

然而,我錯了。git

可是,後端是很難去學的。我花了很長的時間去學習它。(固然,我如今仍然嘗試去掌握它)。github

我意識到在學習後端中我有些問題,由於我曾認爲前端和後端是同樣的 -- 它們都是代碼而已。數據庫

這是個很大的錯誤。後端

前端和後端徹底是不一樣的野獸。我能正確地學習後端以前,我必須尊重他們的差別。服務器

若是讓我來解析前端和後端之間的差別(在執行方面),我會說:frontend

  • 前端是有關視覺
  • 後端是有關通訊

前端是有關視覺

當咱們構建前端事物,咱們很大程度上關注了用戶對咱們構建的東西是怎麼看的。咱們花費了大量的時間自問了下面這些問題(每一個問題都帶來數不盡的工做):學習

  1. 它看起來好不?
  2. 它有意義不?
  3. 它對用戶友好不?
  4. 它容易理解不?
  5. 它夠快不?

咱們都關心。網站

有時候,咱們爲了提升用戶的視覺體驗(帶來愉悅感),咱們添加了諸以下面的事物:code

  1. 視頻/圖片/動圖Gifs
  2. 動效
  3. 顏色主題

伴隨着每一個附加功能,咱們還必須考慮它們可能帶來的影響:

  1. 視頻/圖片/動圖Gifs太大了?
  2. 若是有人沒法忍受咱們的動效怎麼辦?
  3. 用戶喜歡明亮的主題仍是暗黑主題?

咱們考慮不少東西 -- 從用戶的視圖層面。這就是爲何我說前端是有關視覺的。

咱們爲用戶着想。而後咱們爲他們構建產品。

不幸的是,一些開發者自欺欺人地認爲用戶 === 他們本身。他們爲本身創建網站而不是他們的用戶。

後端是有關通訊

讓我具體一點。當我說到後端,我指的是前端和數據庫之間的層。它也是前端和你須要通訊的任何API之間的層(若是它經過你本身的服務器)。

咱們簡化事情讓一些人明白,我在講你將在哪裏建立一個Express應用程序。

server

當你作後端工做時(前端->後端),你會發現咱們再也不建立接口了。你不用填寫表單;你不用點擊按鈕。那是由於它們不須要。

後端不是關於視覺。沒人肉眼看到發生了什麼。它只是要運行...

可是,運行意味着什麼?

後端容許前端和數據庫之間的通訊(或任何外部的API)。回到之前,想象下一個電話接線員。若是你打電話給一我的,這些接線員必須手動的鏈接你和你要打給的那我的。(若是他們接線錯誤,你就打給了錯的人)。

bell-telephone-operator

當你構建一個後端時,你就像電話接線員。你把東西鏈接起來就能夠了。

當咱們構建後端時,咱們會問以下的問題:

  1. 咱們須要從前端那裏獲得什麼信息?
  2. 咱們應該傳什麼信息到數據庫/API?
  3. 在數據庫/API上的操做是否正確保存?
  4. 數據庫/API返回什麼信息呢?
  5. 咱們應該返回什麼信息給前端?
  6. 咱們是在渲染網頁嗎?若是是,咱們應該呈現哪一個網頁?
  7. 當信息錯誤或錯失時,咱們應該怎麼作?

咱們還要考慮速度和可靠性。(想象一下,若是你發送了一些東西,可是沒有收到任何回覆的話會發生什麼...)。可是,這是更加高級的話題了。

不一樣的心理模型

這是我在學習後端的早期觀察到的一種常見模式:

  1. 我會假設事情向着特定的方式運行
  2. 我會在Google上搜索,如何經過我想到的具體方式來實現東西
  3. Google結果也許是空)
  4. 我會破解它並構建本身的基礎設施
  5. 學習後,我才發現本身的方式很糟糕

我幾乎老是錯的,由於在學習後端的時候,不自覺地依靠了個人前端經驗。我必須學習從新思考問題的方法。

這是我最大的收穫:

不要覺得你對本身學的東西瞭如指掌。你幾乎老是錯的。慢下來,讓你有時間和空間去學習。在學習的過程當中始終驗證,以便你記住並從新鏈接你的大腦。

參考和後話

相關文章
相關標籤/搜索