Cách lựa chọn Tech Stack phù hợp với nhà phát triển web

Programming Tech Knowledge

Có rất nhiều technology stack có thể áp dụng trong việc phát triển web, tuy nhiên không dễ để hiểu được có những stack nào và nên sử dụng chúng vào lúc nào, đặc biệt là đối với những nhà phát triển mới. Dưới đây là chia sẻ của nhóm The Educative Team – nhóm phát triển nội dung của nền tảng học phát triển phần mềm qua thực hành Grokking – về các tech stack phổ biến và cách lựa chọn tech stack phù hợp nhất với từng nhà phát triển.

Những thông tin trong bài đăng này sẽ giúp bạn tìm hiểu các tech stack phổ biến nhất trong việc phát triển web, phân tích ưu nhược điểm của chúng và từ đó mách bạn các mẹo lựa chọn tech stack phù hợp với dự án của mình, cho dù đó là dự án phát triển ứng dụng web, ứng dụng di động hay phát triển phần mềm nói chung. 

Tech stack là gì?

Đầu tiên, tech stack là gì?

Tech stack (tạm dịch: ngăn xếp công nghệ) là tập hợp các ngôn ngữ lập trình, cơ sở dữ liệu (database) và framework được sử dụng để phát triển một ứng dụng web hay website.

Thông thường, tech stack là sự kết hợp giữa các công nghệ của front-end và back-end, bao gồm: 

  • Framework: Các thư viện mã nguồn do các nhà phát triển khác viết, có thể giúp bạn xây dựng một ứng dụng web mà không cần làm tất cả mọi thứ từ đầu.
  • Web server / HTTP server: HTTP (Hypertext Transfer Protocol) server xử lý các yêu cầu (request) như gửi hoặc nhận email, tải các tập tin, v.v.
  • Database: Cơ sở dữ liệu lưu trữ và cấu trúc dữ liệu. Có thể truy vấn, thay đổi, cập nhật và quản lý dữ liệu theo nhiều cách.
  • Programming language: Nhà phát triển sử dụng ngôn ngữ lập trình để truyền đạt các chỉ dẫn theo cách máy tính có thể hiểu.
  • Operating system: Hệ điều hành là phần mềm quản lý các phần cứng, phần mềm và các ứng dụng hay tài nguyên khác của một máy tính.

Nhiều tech stack khác nhau tồn tại để đáp ứng mọi nhu cầu phát triển, và lựa chọn phù hợp nhất phụ thuộc vào các yêu cầu đối với dự án của bạn. Ví dụ, nếu bạn cần một website có hiệu suất cao hay một ứng dụng web có thể xử lý lưu lượng truy cập (traffic) và dữ liệu lớn, bạn sẽ cần một tech stack có back-end mạnh mẽ.

Tương tự, nếu bạn cần xây dựng một website có thể hoạt động nhanh chóng với số lượng tính năng và tài nguyên không nhiều (ví dụ như landing page), bạn sẽ cần một tech stack nhẹ và dễ set up.

Những tech stack phổ biến trong lĩnh vực phát triển web

Có rất nhiều tech stack khác nhau được sử dụng trong phát triển web, nhưng trong bài đăng này, chúng ta sẽ tìm hiểu:

  • LAMP stack: Linux, Apache, MySQL, PHP/Perl/Python
  • WAMP stack: Windows, Apache, MySQL, PHP/Perl/Python
  • MAMP stack: macOS, Apache, MySQL, PHP/Perl/Python
  • MEAN stack: MongoDB, Express.js, AngularJS, Node.js
  • MERN stack: MongoDB, Express.js, ReactJS, Node.js
  • MEVN stack: MongoDB, Express.js, Vue.js, Node.js
  • Django: Django, Python

Những yếu tố cần cân nhắc khi lựa chọn tech stack

  • Xác định nhu cầu: Sản phẩm của bạn sẽ làm gì, và bạn cần những gì để thực hiện tầm nhìn (vision) của mình?
  • Nghiên cứu thị trường: Điều tra các đối thủ tiềm năng, tìm kiếm cơ hội ở những nhu cầu chưa được đáp ứng và phân tích khách hàng mục tiêu.
  • Xác định tính khả thi của sản phẩm: Tạo một bản mẫu (prototype, hay còn gọi là Minimum Viable Product – MVP) và thử nghiệm nó trên thị trường mục tiêu để cân nhắc độ hữu dụng của sản phẩm.
  • Nghĩ về việc mở rộng quy mô: Khi sản phẩm của bạn phát triển, bạn sẽ làm thế nào để đón nhận nhiều người dùng hơn mà không làm giảm chất lượng hay mất quyền kiểm soát? Những tech stack khác mang đến giải pháp nào cho việc mở rộng quy mô?
  • Cân nhắc bảo mật: Bạn sẽ bảo vệ ứng dụng web và dữ liệu người dùng như thế nào?
  • So sánh chi phí: Một số tech stack sẽ đòi hỏi chi phí hosting hoặc các tài nguyên đắt đỏ hơn so với những lựa chọn khác. Hãy lựa chọn stack phù hợp nhất với điều kiện tài chính của sản phẩm.

LAMP

LAMP là một tech stack kinh điển hỗ trợ nhiều website có lượng truy cập cao như Facebook, Wikipedia và Tumblr.

LAMP stack bao gồm: 

  • Linux (OS)
  • Apache (server)
  • MySQL (database)
  • PHP/Perl/Python (programming language)

Linux: Linux đặt nền móng cho LAMP stack. Đây là một nền tảng mã nguồn mở nổi tiếng với các nhà phát triển nhờ khả năng tùy chỉnh tự do và dễ dàng, trao cho nhà phát triển nhiều quyền kiểm soát hoạt động hơn so với nền tảng mã nguồn đóng Windows. Linux còn sở hữu một cộng đồng nhà phát triển lớn và nhiều tài liệu hỗ trợ.

Apache: Apache là một server HTTP đa nền tảng (cross-platform) và có mã nguồn mở, có thể xử lý một lượng lớn lưu lượng và dữ liệu. Apache là một server hoạt động nhanh, có tính bảo mật cao và đáng tin cậy, được sử dụng từ năm 1996. Bên cạnh đó, Apache được module hóa và nhà phát triển có thể tùy chỉnh để tối ưu hóa hiệu suất của server tùy vào nhu cầu sử dụng.

MySQL: MySQL là một hệ quản trị cơ sở dữ liệu quan hệ (Relational Database Management System – RDBMS), lưu trữ dữ liệu trong các bảng và tổ chức dữ liệu theo các dòng, cột trong bảng.  MySQL là một hệ thống mã nguồn mở và dễ sử dụng, có khả năng mở rộng và có thể xử lý một lượng lớn dữ liệu, nhưng hiệu suất và hiệu quả của nó có thể bị sụt giảm khi làm việc với cơ sở dữ liệu vô cùng lớn.

PHP/Perl/Python: PHP là ngôn ngữ lập trình phổ biến nhất trong LAMP stack, tương thích với hầu hết các máy chủ. PHP tương đối dễ học và sở hữu một lượng lớn các thư viện và framework. Perl và Python đôi khi được sử dụng thay cho PHP.

  • Perl: Ngôn ngữ mạnh mẽ, cao cấp và hướng đối tượng, có những quy tắc cú pháp phức tạp khiến nó trở nên càng khó khăn hơn đối với người mới bắt đầu.
  • Python: Ngôn ngữ đa chức năng, có khả năng mở rộng cao và phổ biến trong cộng đồng nhà phát triển nhờ đặc điểm dễ đọc, dễ học và dễ sử dụng. Python cũng là một ngôn ngữ được sử dụng phổ biến trong khoa học và tính toán số.

Ưu điểm

  • Không độc quyền và là mã nguồn mở
  • Có lịch sử lâu đời
  • Có tính linh hoạt cao vì có thể thay đổi các thành phần của stack khi cần
  • Dễ dàng sử dụng và set up, đặc biệt là đối với người mới bắt đầu
  • MySQL và PHP được hỗ trợ rộng rãi trên nhiều web host
  • Tiết kiệm chi phí

Nhược điểm

  • Khả năng mở rộng quy mô hạn chế, do đó không phù hợp với các ứng dụng lớn
  • MySQL tương đối dễ học nhưng không phải lựa chọn tốt nhất cho những ứng dụng cần hiệu suất cao
  • Các server dùng chung (shared servers) có thể gây ra vấn đề về hiệu suất

WAMP & MAMP

WAMP và MAMP là những biến thể của LAMP, được thiết kế để sử dụng lần lượt trên các hệ điều hành Microsoft Windows và macOS.

MEAN

MEAN stack là một framework web JavaScript được sử dụng để tạo ra các website như YouTube, Netflix và PayPal. MEAN là một tech stack tuyệt vời cho những ai đã quen thuộc với JavaScript hay muốn tăng tốc quá trình phát triển.

MEAN stack bao gồm:

  • MongoDB (database)
  • Express.js (framework web cho Node.js)
  • Angular.js (framework)
  • Node.js (server)

MongoDB: MongoDB là một cơ sở dữ liệu mã nguồn mở, lưu trữ các tài liệu JSON (JSON document) do framework front-end (trường hợp này là Angular.js) tạo ra sau khi chúng được Express.js xử lý. MongoDB có thể lưu trữ một lượng dữ liệu khổng lồ, tạo điều kiện trao đổi dữ liệu nhanh chóng giữa máy khách và máy chủ (client-side and server), đồng thời tương thích với đám mây. 

Express.js: Express là một framework web back-end nhẹ, chạy trên server Node.js. Express.js hoạt động xuất sắc trong việc định tuyến (routing) URL và xử lý yêu cầu HTTP. Express.js nhận tài liệu JSON từ framework web và xử lý chúng để MongoDB có thể lưu trữ chúng.

Angular.js: Angular là một framework front-end nhanh chóng, mã nguồn mở và đầy đủ. Angular.js gắn kết chặt chẽ (nhưng không nghiêm ngặt) với kiến trúc Model-View-Controller (MVC).

Node.js: Node.js là một môi trường Javascript runtime (runtime environment), bất đồng bộ và hướng sự kiện. Là một server bất đồng bộ, Node.js rất hiệu quả về mặt bộ nhớ. Node.js có mã nguồn mở và có thể hoạt động trên nhiều hệ điều hành, bao gồm Windows, Linux, macOS, v.v.

Ưu điểm

  • Thời gian phát triển nhanh 
  • Sử dụng một ngôn ngữ lập trình duy nhất (JavaScript)
  • Mã nguồn mở và miễn phí
  • Có thư viện module lớn (dễ dàng thêm tính năng mới)
  • Theo kiến trúc MVC
  • Tương thích với đám mây
  • Có thể triển khai (deploy) ứng dụng web trực tiếp lên server

Nhược điểm

  • Khó có thể thành thạo JavaScript hoàn toàn
  • Cần NativeScript để hỗ trợ ứng dụng di động
  • Không có test suite

MERN & MEVN

MERN và MEVN đều tương tự MEAN, nhưng sử dụng React và Vue.js.

MERN

MERN stack tương tự với MEAN và MEVN, nhưng sử dụng thư viện React của Javascript làm framework front-end thay vì Angular.js hay Vue.js. MERN được các công ty như Dropbox, Facebook và Airbnb sử dụng. MERN mang đến nhiều lợi ích tương tự MEAN, nhưng React có đường cong lĩnh hội (learning curve) ít dốc hơn so với Angular.js.

MERN stack bao gồm: 

  • MongoDB (database)
  • Express.js (framework web cho Node.js)
  • React (“framework” front-end)
  • Node.js (server)

MongoDB: MongoDB là một cơ sở dữ liệu mã nguồn mở, lưu trữ các tài liệu JSON (JSON document) do framework front-end (trường hợp này là React) tạo ra sau khi chúng được Express.js xử lý. MongoDB có thể lưu trữ một lượng dữ liệu khổng lồ, tạo điều kiện trao đổi dữ liệu nhanh chóng giữa máy khách và máy chủ (client-side and server), đồng thời tương thích với đám mây. 

Express.js: Express là một framework web back-end nhẹ, chạy trên server Node.js. Express.js hoạt động xuất sắc trong việc định tuyến (routing) URL và xử lý yêu cầu HTTP. Express.js nhận tài liệu JSON từ framework web và xử lý chúng để MongoDB có thể lưu trữ chúng.

React: React là một thư viện JavaScript mã nguồn mở, đóng vai trò framework front-end trong MERN stack. React cung cấp một DOM ảo (virtual DOM) giúp việc thay đổi các phần tử HTML (HTML element) trên trang web trở nên dễ dàng hơn, nhưng chậm hơn một chút so với MEAN vì MEAN sử dụng DOM gốc (native DOM). React cũng sử dụng một thư viện dựa trên component (component-based library) giúp nhà phát triển dễ dàng tái sử dụng mã nguồn trong các phần khác nhau của ứng dụng. Thêm nữa, React cũng rất dễ học nếu bạn đã biết về JavaScript. 

Node.js: Node.js là một môi trường Javascript runtime (runtime environment), bất đồng bộ và hướng sự kiện. Là một server bất đồng bộ, Node.js rất hiệu quả về mặt bộ nhớ. Node.js có mã nguồn mở và có thể hoạt động trên nhiều hệ điều hành, bao gồm Windows, Linux, macOS, v.v.

MEVN

MEVN sử dụng Vue.js làm framework front-end, thay vì Angular.js hay React. Vue.js là một framework JavaScript hỗ trợ xây dựng giao diện người dùng, là một trong những framework được sử dụng nhiều nhất. MEVN stack áp được sử dụng để xây dựng các ứng dụng như Alibaba, Behance và GitLab. MEVN cũng tương thích với Meteor và Docker.

MEVN stack bao gồm:

  • MongoDB (database)
  • Express.js (framework web cho Node.js)
  • Vue.js (framework front-end)
  • Node.js (server)

MongoDB: MongoDB là một cơ sở dữ liệu mã nguồn mở, lưu trữ các tài liệu JSON (JSON document) do framework front-end (trường hợp này là Vue.js) tạo ra sau khi chúng được Express.js xử lý. MongoDB có thể lưu trữ một lượng dữ liệu khổng lồ, tạo điều kiện trao đổi dữ liệu nhanh chóng giữa máy khách và máy chủ (client-side and server), đồng thời tương thích với đám mây. 

Express.js: Express là một framework web back-end nhẹ, chạy trên server Node.js. Express.js hoạt động xuất sắc trong việc định tuyến (routing) URL và xử lý yêu cầu HTTP. Express.js nhận tài liệu JSON từ framework web và xử lý chúng để MongoDB có thể lưu trữ chúng.

Vue.js: Vue.js là một framework lũy tiến (progressive framework) dựa trên kiến trúc MVVM. Vue.js giúp việc thêm tính năng (feature) hay hàm (function) mới trở nên đơn giản (chỉ cần thêm package) và có thể được tích hợp vào dự án dần dần, theo từng bước. Nhờ cú pháp trực quan và dễ đọc, Vue.js là một framework được nhiều nhà phát triển trong cộng đồng mã nguồn mở sử dụng.

Node.js: Node.js là một môi trường Javascript runtime (runtime environment), bất đồng bộ và hướng sự kiện. Là một server bất đồng bộ, Node.js rất hiệu quả về mặt bộ nhớ. Node.js có mã nguồn mở và có thể hoạt động trên nhiều hệ điều hành, bao gồm Windows, Linux, macOS, v.v.

Django

Django là một framework web Python cao cấp, thúc đẩy quá trình phát triển nhanh chóng, mã nguồn gọn gàng và được tổ chức tốt. Django phổ biến trong cộng đồng nhà phát triển nhờ kiến trúc linh hoạt và tính dễ sử dụng, tuy nhiên lại khó học. Django tech stack được sử dụng để xây dựng các website như Instagram và Pinterest, mặc dù Pinterest đã chuyển qua sử dụng Flask.

Django stack luôn bao gồm Django và Python, còn server và database có thể thay đổi tùy theo nhu cầu sử dụng.

Ví dụ về một Django stack:

  • Django (framework web)
  • Python (programming language)
  • Apache (server)
  • MySQL (database)

Django: Django là một framework web toàn diện và đa chức năng, với nhiều tính năng khả dụng ngay lập tức. Django ưu tiên việc phát triển nhanh (rapid development) và thiết kế gọn gàng (clean design). Django tương thích với nhiều cơ sở dữ liệu và nhà cung cấp dịch vụ web hosting, đồng thời cung cấp một bảng quản trị (admin panel), khả năng ORM (Object–relational mapping), các mẫu (template), tính năng xác thực (authentication) (thông qua package) và nhiều tính năng khác.

Python: Python là ngôn ngữ đa chức năng, có khả năng mở rộng cao và phổ biến trong cộng đồng nhà phát triển nhờ đặc điểm dễ đọc, dễ học và dễ sử dụng. Python cũng là một ngôn ngữ được sử dụng phổ biến trong khoa học và tính toán số.

Apache: Apache là một server HTTP đa nền tảng (cross-platform) và có mã nguồn mở, có thể xử lý một lượng lớn lưu lượng và dữ liệu. Apache là một server hoạt động nhanh, có tính bảo mật cao và đáng tin cậy, được sử dụng từ năm 1996. Bên cạnh đó, Apache được module hóa và nhà phát triển có thể tùy chỉnh để tối ưu hóa hiệu suất của server tùy vào nhu cầu sử dụng.

MySQL: MySQL là một hệ quản trị cơ sở dữ liệu quan hệ (Relational Database Management System – RDBMS), lưu trữ dữ liệu trong các bảng và tổ chức dữ liệu theo các dòng, cột trong bảng.  MySQL là một hệ thống mã nguồn mở và dễ sử dụng, có khả năng mở rộng và có thể xử lý một lượng lớn dữ liệu, nhưng hiệu suất và hiệu quả của nó có thể bị sụt giảm khi làm việc với cơ sở dữ liệu vô cùng lớn.

Ưu điểm

  • Phát triển nhanh
  • Hỗ trợ quốc tế hóa (internalization) và bản địa hóa (localization)
  • Sở hữu một lượng lớn các thư viện third-party 
  • Kiến trúc MVC

Nhược điểm

  • Thiếu các quy ước viết mã (coding convention) thông thường
    (Chú thích: hiện giờ Django đã có tài liệu Coding style chính thức)
  • Cần học các biến được xác định trước (predefined variable), tập tin và quy tắc trước khi triển khai trên Django
  • Khó học

Nên sử dụng stack nào?

Trên đây là một số tech stack phổ biến nhất trong việc phát triển web. Lúc này, bạn có thể sẽ thắc mắc đâu mới là stack phù hợp nhất với mình. Câu trả lời tùy thuộc vào mục tiêu và những kinh nghiệm lập trình hiện có của bạn.

Nếu bạn là một nhà phát triển web mới, MEAN hoặc MERN stack sẽ là những điểm khởi đầu tốt. Chúng tương đối dễ học, đồng thời sử dụng một ngôn ngữ lập trình duy nhất (JavaScript) khiến mọi thứ càng đơn giản hơn.

Nếu bạn đã có nhiều kinh nghiệm hơn và đang mong muốn có được sự linh hoạt cao hơn, LAMP hoặc MEVN stack sẽ là lựa chọn phù hợp với nhu cầu của bạn. Chúng hỗ trợ bạn tự do lựa chọn các công cụ và công nghệ mong muốn.

Nếu bạn muốn sử dụng JavaScript cho cả front-end và back-end của ứng dụng web, bất kỳ JS-based stack nào cũng là một lựa chọn tốt. Đó có thể là MEAN, MERN hoặc MEVN. Nếu bạn muốn sử dụng những ngôn ngữ lập trình khác nhau cho front-end và back-end, hãy xem xét LAMP, WAMP hoặc MAMP.

Cũng nên lưu ý rằng bạn không cần phải tuân thủ nghiêm ngặt bất kỳ stack nào. Bạn có thể kết hợp nhiều công nghệ khác nhau nếu bạn muốn, bởi vì cuối cùng, điều quan trọng nhất vẫn là lựa chọn công cụ và công nghệ hữu ích nhất để đạt được mục tiêu.

Mẹo lựa chọn và thành thạo một tech stack

Khi mới bắt đầu phát triển web, bạn sẽ dễ có tham vọng học thật nhiều công cụ và công nghệ khác nhau, thay vì tìm hiểu sâu về một thứ. Tuy nhiên, bạn sẽ dễ thành thạo các công cụ và công nghệ hơn khi tập trung vào chỉ một stack duy nhất trong một thời gian học. 

Sau đây là một vài mẹo giúp bạn lựa chọn (và thành thạo) một tech stack:

  • Xác định sở thích và mục tiêu nghề nghiệp của bản thân. Từ đó, bạn sẽ chọn được stack liên quan đến nhu cầu của mình nhất.
  • Bắt đầu với kiến thức nền tảng. Bạn không cần phải biết tất cả mọi thứ về một stack thì mới có thể sử dụng nó. Hãy bắt đầu bằng việc nắm rõ các tính năng cơ bản của các công nghệ khác nhau trong stack của bạn.
  • Thực hành và thử nghiệm. Nếu bạn không chắc đâu mới là stack phù hợp với mình, hãy thử một vài stack khác nhau và đánh giá xem stack nào phù hợp nhất.
  • Dành thời gian để thành thạo những công nghệ trong stack bạn chọn. Càng hiểu sâu về các công cụ trong stack, bạn sẽ càng làm việc hiệu quả hơn trên tư cách một nhà phát triển.

Cho dù bạn lựa chọn stack nào, hãy nhớ rằng điều quan trọng nhất là không ngừng học hỏi và mở rộng các kỹ năng của mình. Khi đó, chắc hẳn không lâu sau bạn có được khả năng tạo ra những ứng dụng web tuyệt vời.

Tổng kết & bước tiếp theo

Đừng lầm tưởng rằng bạn sẽ phải gắn bó với một stack trong suốt sự nghiệp của mình. Vẻ đẹp của việc phát triển web nằm ở điểm sẽ luôn có những công nghệ mới để học hỏi và những phương pháp mới để giải quyết các vấn đề. Vậy nên, hãy luôn mở rộng tư duy, thử nghiệm với những stack khác nhau và luôn luôn sẵn sàng để thích ứng khi ngành công nghiệp phát triển.


The original article: How to choose the right tech stack for web development
The translated article above belongs to The Educative Team. Metacoders commits not to use this content for any commercial purpose.