許多未曾接觸過程式語言的人,想要踏入 Web 網站開發都會遇上一個困擾,就是程式語言實在太多了。前端有 HTML、CSS與Javascript。後端則有 PHP, Ruby, Python, Node.js 各種不同的選擇。
到底一個新手該怎麼開始呢?我們嘗試用這篇文章來給初學者一個簡介,比較能了解網站開發的輪廓。
前端與後端
網頁開發通常分成前端工程與後端工程,各自有不同的語言和眉角,但又必須在網站之中交互作用才能夠提供給訪客流暢的體驗。
前端工程
前端泛指所有訪客能夠直接交流互動的介面,舉凡網站設計、切版、功能特效、下拉選單、橫幅、確認按鈕與表單等等,皆屬於前端的範圍。一名前端工程師通常需要具備稍微基礎的美感(但不是必備,如果能與設計師流暢配合的話),才能夠將視覺設計師想傳達的概念與UI設計師設計的操作流程完美的呈現。當然,許多資深的前端工程師可能自己本身也是優秀的設計師。
前端工程師關注的是用戶體驗,而他們最大的痛苦在於跨瀏覽器相容問題。由於目前的網頁標準並非完美在所有瀏覽器中實現,有時相同的程式碼在 Chrome 與 Firefox 中顯示出來會不一樣,因此一個合格的前端工程師需要能夠掌握各種不同瀏覽器的特性與hack技巧,才能打造跨平台的泛用網站。另外,前端領域是個求新求變的世界,作為前端工程師最好要能逼迫自己時時刻刻了解最新的程式框架、技術以及每年流行的設計風格,以免跟不上前端領域可怕的進步速度。
代表語言:HTML, CSS, Javascript
常用工具與技術: jQuery, mootools, AngularJS, ReactJS, Gulp 等
後端工程師
後端則牽涉到伺服器上的運算,例如網站的基底程式語言、資料庫管理與規劃或者伺服器架設與架構規劃,多屬後端工程的範圍。由於後端牽涉的知識與應用層面甚廣,通常不會有單一工程師能夠一人掌握所有面相,而是由一個團隊在一定的架構與規範下完成後端應用,我們稱此架構與規範為「框架(framework)」。當然,資深的後端工程師也是有能力掌握整個後端知識,而小型應用也可能一個人就能應付後端需求。
後端工程關注的是程式應用的邏輯、效能與穩定性,需要對程式語言基本功有更高的掌握力,資料庫規劃、HTTP 連線基本原理等也都必須有所涉略,才能寫的出健壯的應用。相較於前端的快速發展,後端更要求長期穩定性,因為這些程式的應用邏輯可能是一間公司的命脈,轉換架構的風險通常都很高。
一般來說,網站的後端會由三劍客組合而成,分別是伺服器軟體+程式語言+資料庫,以下是這三者之中常見的項目:
代表語言: PHP, Ruby, Python, ASP .NET, JAVA, Node.js
常用伺服器軟體: Apache, NginX, Node.js, LightHttpd
常用資料庫: MySQL, MariaDB, PostgreSQL, MSSQL, Oracle, Sqlite
如何選擇語言與技術
看到這邊,應該已經眼花撩亂了,Web 開發的世界非常多采多姿,但相對的要學習的東西也特別多,且互相性質都有些許類似,這造成了新手在選擇語言上毫無頭緒。
接下來我們會建議初學者一先簡單的學習方向,先由基礎知識開始磨練,之後再推薦適合的程式語言。而程式語言的部份,由於互有優劣,我們盡可能的介紹每種語言與技術的特色,由觀看者自行決定喜歡的方向去學習。
HTML & CSS
初學 Web 開發,HTML與CSS絕對是最基本的,無論是前端語言還是後端語言,最終都是借由操作這兩個語法,來控制瀏覽器顯示畫面。
Javascript
接下來,在認真決定邁向前端還是後端之前,學習 Javascript 都是有幫助的,它是目前前端唯一的程式語言,無論如何都會需要用上它。當然你可以先學完後端語言再來學 Javascript,因為它的語法相較之下較為簡單,有程式語言基礎的人能夠更容易掌握,沒有程式基礎的人也能夠當做第一個語言來入門。
另外,如果你選擇的後端語言是 Node.js,則兩者幾乎是一樣的東西,你可以一道程式碼前後端皆通用。
前端工程的選擇
雖然前端只有 Javascript 一個語言可以用,但其所衍生出來的框架與技術則是琳琅滿目。我們比較推薦前端初學者先從 jQuery 這個 DOM 操作框架開始學起,可以輕鬆接軌世界半數以上的前端函式庫,也不怕找不到工作。(雖然很多人根本就只學 jQuery 而從來沒有認真學過 Javascript,但也還是可以正常的開發網站)
後端程式語言特色
接下來,我們簡述幾個主流程式語言的特色,希望你可以從中挑一個自己有興趣的,認真花個幾年熟悉它,都會有不錯的成就。
PHP
PHP 是極少數單純為了網站開發而設計出來的程式語言,不過它的可用範圍也不再只限於網站,事實上,PHP 可以用來開發命令列或者 GUI 程式等。
PHP 最大的特色就是簡單易學,其動態語言特性讓初學者不用煩惱變數的型別,可以專注在學習邏輯的操作。而從 JAVA 借鑑過來的錯誤處理與各種語言特性也讓 PHP 適合用來編寫大型健壯的網頁應用程式。另一方面,PHP 非常的快,其效能在動態語言中算是非常高的,尤其即將到來的 PHP7 將擁有前一版近一倍的效能提昇。
PHP 的使用族群非常多,大量的職缺不怕找不到工作。不過也因為使用人口龐大,相對素質低落的三角貓也不少,拉下了工程師的整體素質。且框架種類較多較繁雜,初學者也不容易了解每種框架的特性來選擇合適的學習方向。
知名使用者: Facebook, Yahoo
框架: Symfony, Zend, Laravel, Yii, Phalcon, CodeIgnitor, Slim, Joomla
Ruby
Ruby 是日本人松本行弘發明的語言,與 PHP 一樣是動態語言,主要著重在提供簡潔一致的語言介面,讓開發過程非常直觀且人性化。而 Ruby 在網站開發上通常會搭配 Rails 框架一起使用(全名 Ruby on Rails),是最早帶起 Web MVC 風潮的框架。Rails 提供了許多強大功能,如 ActiveRecord、程式碼鷹架產生器、資料庫遷移等等,都成為目前各大主流框架的標配。Rails 在國外也有非常龐大的生態圈,各種疑難雜症都有解答或相關程式套件可以協助解決。
Ruby 的效能相較其他語言是較差的,也因此影響了 Rails 框架的效能。不過隨著語言本身的持續更新,目前效能並非讓人無法接受,且在框架中可以藉由快取來增進執行速度,在機器運算能力大幅提昇的現在影響已經不是這麼巨大。另外,Rails 對新手來說學習曲線是較高的。
知名使用者: Twitter, GitHub
Python
Python的設計哲學是「優雅」、「明確」、「簡單」。其哲學是「用一種方法,最好是只有一種方法來做一件事」。在使用Python語言開發時,如果面臨多種選擇,Python風格一般會拒絕花俏的語法,而選擇明確沒有或者很少有歧義的語法。也因此影響在其語言設計中,能用文字代表的操作就盡量不用符號,例如很多語言會用 &&
代表 AND
,但 Python 就會直接用 and
。
同樣的 Python 也不是為了Web而設計的語言,它可以用在許多種特別的場合例如科學運算等(其實各大語言皆可),若用在網站開發,則通常搭配 Django 框架來使用。Django 是非常完整的框架,還自帶後台介面,在各方面評比中並不輸給Ruby on Rails。另外,若您是學習視覺技術,如 3D 動畫、建模等相關領域,則幾乎都是被 Python 佔領的,例如 MAYA 與 Blender 等軟體都是用 Python 作為腳本語言開發工具。
由於 Google 的許多核心功能採用 Python,替這個語言在世界打出巨大的知名度。雖然其職缺數與使用企業不若前兩者那麼多,不過其廣泛的使用情境讓學這門語言的人不會受到產業或工作類型的限制。
知名使用者: Google, Dropbox
Node.js
相較於上面的其他語言,Node.js 是一個比較奇特的存在。它本身就是 Javascript,但是因為採用了 Chrome 的 V8 engine 的關係,使得 Javascript 可以跑在伺服器中成為後端語言。 Node.js 的特色就是極快的執行速度,它具有無阻塞(non-blocking)和事件驅動(event-driven)等的特色,適合用在高併發的服務上,例如萬人即時聊天系統等等。且同是 Javascript 的關係,前後端程式碼也較容易整合。另外,Node.js 本身也是伺服器,不必依賴於 Apache 或 NginX 上面。
Node.js 的缺點是它的 Async 異步架構容易讓新手混淆,不知如何控制程式流程。另外,Node.js 也不適合用在需要高密集 CPU 運算的場合,所以一般來說很少將 Node.js 拿來製作動態網站或商務系統等,大多用來製作聊天功能或手機 app 的底層應用,或者一個網站中對併發需求特別高的功能抽出來給 Node.js 做。
知名使用者: LinkedIn、Groupon
其他
能夠用來編寫網站的語言還包含 ASP.net, JAVA, GO 語言等等,不過這些語言也不是程式初學者容易掌握的,因此本篇文章也就只介紹了幾個較為主流的語言。另外,無論如何你都要把 git (版本控制軟體)學好。
希望這些資訊能夠幫助到想要踏入Web開發卻毫無頭緒的人