06.28 人工智能浪潮下的 Web 開發,程序員該如何上手?

人工智能浪潮下的 Web 開發,程序員該如何上手?

經歷了網絡互聯的 Web 1.0 時代、社交的 Web 2.0 時代、基於移動的 Web 3.0 時代,如今的我們正逐步邁向知識分配的 Web 4.0 時代。與此同時,隨著人工智能的興起,聊天機器人和會話式 UI 也開始滲透 Web 領域,所以說,現在的 Web 開發已經和幾年前完全不一樣了。

當面對日新月異的技術、錯綜複雜的網站時,新入行的開發者很容迷失方向。以下這篇指南,展示了後端開發的全景、運維的趨勢,希望給從事 Web 開發的程序員們一個清晰的概念,去其糟粕取其精華。

以前,後端的路線圖只是一些平鋪的技術介紹,而無法給出任何有關趨勢的方向。而在這篇文章中,有詳細的後端學習路線圖,可助前行路上的開發者一臂之力。廢話不多說,現在就開始吧。

人工智能浪潮下的 Web 開發,程序員該如何上手?

接下來,我們將一步步來解釋一下這張圖。

開始之前要說明一點,雖然我們在圖中沒有列出 HTML/CSS 的知識,但建議你至少懂得一點,並會寫一些基本的 HTML/CSS。

▌學一門語言

選擇語言時總是會遇到無數種選擇。我把語言按照類別分開,以便你作出決定。對於剛剛進入後端開發的初學者,我建議選任何一種腳本語言,它們的市場需求都很大,因此你可以迅速進步。如果你有前端知識,Node.js 會很容易,而且工作機會也很多。

如果你已經在從事後端開發,並且會某種腳本語言,我建議你不要再選另一種腳本語言,而是從“函數式”(Functional)或“多重編程”(Multiparadigm)中選擇一種。例如,如果你會 PHP 或 Node.js,那就別再學 Python 或 Ruby,而是嘗試下 Erlang 或 Golang。這樣能開闊你的思維和視野。

▌練習學到的知識

學習知識的最佳途徑就是練習。選好語言並瞭解一些基本概念之後,就應該學以致用,用它多做一些小應用。下面是一些建議:

  • 實現一些常用的 bash 命令,例如實現 ls 的功能;
  • 寫個命令從 reddit 的 /r/programming 上以 JSON 格式獲取並保存文章;
  • 寫個命令以 JSON 格式返回目錄結構,例如 jsonify dir-name,返回一個 JSON 文件,內容是 dir-name 下的目錄結構;
  • 寫個命令讀取上一條的 JSON 文件並創建目錄結構;
  • 想一想每天要做的任務,並嘗試自動化。

▌學習包管理器

理解語言的基礎知識並做了一些簡單的應用後,可以學一下那門語言的包管理器如何使用。包管理器可以幫你在應用中使用第三方庫,還可以把你的庫發佈給其他人使用。

  • 如果你選了 PHP,可以學一學 Composer;
  • 選了 Node.js 可以學習 NPM 或 Yarn;
  • 選了 Python 可以學一學 Pip;
  • 選了 Ruby 可以學一學 RubyGems。

不論你選和種語言,都應該去學學相應的包管理器。

▌標準做法和最佳實踐

每種語言都有標準做法和最佳實踐。學一學你選擇的語言的這些知識。例如, PHP 有 PHP-FIG 和 PSR。Node.js 和其他語言都有許多社區主導的規範。

▌安全性

務必要讀一讀有關安全性的最佳實踐。閱讀OWASP(https://www.owasp.org/index.php/Main_Page)的規範,理解各種安全問題,以及如何在所選語言中避免這些問題。

▌練習

現在你已經瞭解了語言的基本知識、標準做法和最佳實踐、安全信息,以及如何使用包管理器。現在可以去創建一個包,並把它發佈給其他人使用了。在這個過程中要時刻遵循你學到的標準和最佳實踐。例如,如果你選了 PHP,你就應當在 Packagist 上發佈。選擇了 Node.js,就應該在 Npm 上發佈等。

完成這一步之後,可以在 Github 上找一些項目,然後試著建一些 pull request。一些建議:

  • 重構代碼,實現你學到的最佳實踐;
  • 尋找 Bug 並試圖解決;
  • 增加新功能。

▌學習測試

測試有好幾種類型。要理解這幾種類型的測試,以及每種測試的目的。不過,可以從給你的應用編寫單元測試和集成測試開始。同時,還要理解各種測試的術語,如 mock、stub 等。

▌實踐

作為練習,可以為你之前的項目寫一些單元測試,特別是給第 6 步做好的那些項目。

還要學習並計算你寫的測試用例的覆蓋率。

▌學習關係型數據庫

學習如何在關係型數據庫中永久保存數據。在選擇要學習的數據庫之前,要先理解各種數據庫術語,如鍵、索引、正規化、元組等。

學習數據庫有好幾種選擇。不過,學完其中一個數據庫後,再學其他的就會很容易。可以學習 MySQL、MariaDB(是 MySQL 的一個分支,與 MySQL 幾乎完全相同)或 PostgreSQL。建議先從 MySQL 開始。

▌練習時間

現在可以把所有學到的知識放到一起了。

用學到的所有知識做一個簡單的應用。選一個點子,比如建立一個簡單的博客應用,並實現以下的功能:

  • 用戶賬號 - 註冊和登錄
  • 註冊用戶可以創建博文
  • 用戶可以查看他創建的所有博文
  • 用戶可以刪除博文
  • 用戶只能看到他自己的博文,看不到其他人的
  • 給應用寫單元測試和集成測試
  • 數據庫查詢要使用索引。分析查詢,確保索引被用到了。

▌學習一個框架

根據項目和語言不同,你可能需要框架,也可能不需要。每種語言都有多個框架供選擇,應當去看看你選擇的語言都有哪些框架,然後選一個關聯最大的。

如果你選的是 PHP,我建議學習 Laravel 或 Symfony,如果需要微型框架的話,可以選擇 Lumen 或 Slim。如果選擇 Node.js,也有多種框架可以選擇,但最流行的就是 Express.js。

▌練習時間

這一步的練習,可以將你之前在第 10 步創建的應用改成用框架實現。同時要保證移植一切功能,包括測試用例。

▌學習一種NoSQL數據庫

首先要理解 NoSQL 是什麼,它們與關係型數據庫有何區別,以及為什麼需要 NoSQL。NoSQL 數據庫也有許多種,做一點研究,比較它們的功能和區別。常見的選擇有 MongoDB、Cassandra、RethinkDB 和 Couchbase。如果必須選擇其一,可以用 MongoDB。

▌緩存

學習如何在應用級別實現緩存。理解如何使用 Redis 或 Memcached,並在第 12 步創建的應用中應用緩存。

▌創建 RESTful API

理解 REST 並學習 RESTful API。一定要讀一讀 Roy Fielding 的論文中有關 REST 的那部分。確保有人說 REST 只能用於 HTTP API 時你能夠反駁。

▌學習不同的認證方式

學習各種認證和授權方式。你應該知道它們的含義,它們之間的區別,以及何時該用哪個。

  • OAuth - 開放認證
  • Basic認證
  • Token認證
  • JWT - JSON Web Tokens
  • OpenID

▌消息傳遞

學習消息傳遞機制,理解為何、何時要使用消息傳遞。也有多種選擇,但主流就是RabbitMQ和Kafka。如果只能選擇其一,可以先學習RabbitMQ。

▌搜索引擎

隨著應用程序變得越來越大,在關係型數據庫或 NoSQL 上的簡單查詢將無法滿足需求,這就必須使用搜索引擎。搜索引擎也有多種選擇,每種都有自己的優缺點。

▌學習使用 Docker

Docker 可以大幅度降低開發的難度,它能複製與生產環境完全相同的環境,能保證操作系統乾淨,還能讓編碼、測試和部署更快捷。讀者可以自己搜索“Docker 有哪些好處”的答案。在這一步,只需要去學習如何使用 Docker。

▌Web 服務器的知識

如果你已學到這裡,那麼在前面的步驟中你一定已經接觸過了服務器。這一步主要是要找出不同 Web 服務器之間的區別,瞭解其限制和不同的配置選項,並理解怎樣編寫應用才能更好地利用這些限制。

▌學習如何使用 WebSocket

儘管這一步不是必須,但掌握 WebSocket 總會有好處。學習如何利用 WebSocket 編寫實時 Web 應用程序,並用它寫個示例應用。可以在前面完成的博客應用中使用 WebSocket 實現實時更新博文列表。

▌學習 GraphQL

學習如何用 GraphQL 編寫 API。理解它與 REST 的區別,理解為何它被稱為 REST 2.0。

▌看看圖數據庫

圖模型能靈活地表示並處理數據之間的關係,而圖數據庫提供了快速、有效的方式來存儲、讀取並查詢圖。學學如何使用 Neo4j 或 OrientDB。

▌繼續探索

一旦開始學習並練習後,你一定會遇到很多我們沒有覆蓋到的東西。保持開放的心態和健康好學的態度,去學習新東西吧。

記住,關鍵就是要多練習。剛開始可能有些不使用,但很快就會習以為常,時間長了還會覺得越來越好。

  • 在此也推薦作者之前寫的一篇前端開發技術全景文章:https://medium.com/tech-tajawal/modern-frontend-developer-in-2018-4c2072fa2b9c
人工智能浪潮下的 Web 開發,程序員該如何上手?

原文:https://medium.com/tech-tajawal/modern-backend-developer-in-2018-6b3f7b5f8b9

作者:Adnan Ahmed,tajawal 的首席工程師,喜歡 Web 開發、新技術,崇尚簡單,開源的忠實粉絲。


分享到:


相關文章: