Mỗi người nên có một "Tech Stack" cho riêng mình

Đối với lập trình viên, người yêu có thể không có nhưng Tech Stack thì phải có một em

TECH STACK LÀ GÌ?

Trước tiên với những bạn chưa nắm rõ khái niệm Tech Stack là gì thì Tech Stack giống như là ba lô hành trang chứa đầy các công nghệ phù hợp để sàn lọc trước khi bước vào xây dựng nên một phần mềm (thường là ứng dụng di động hoặc web). Mỗi công nghệ trong ba lô hành trang đó đóng một vai trò riêng trong quá trình phát triển ứng dụng. Đó có thể liên quan đến các công nghệ về thiết kế UI/UX, ngôn ngữ lập trình, CI/CD, các phần mềm và công cụ được sử dụng bởi đội ngũ phát triển.

Tốc độ tăng trưởng và phát triển của các công nghệ mới được ra mắt thi trường qua mỗi năm tăng chóng mắt trong thời đại 4.0 dựa theo định luật Moore. Vậy nên cứ mỗi thời kì sẽ có những Tech Stack làm mưa làm gió và chiếm thị phần lớn trong cộng đồng phát triển phần mềm. Tuy nhiên không bao giờ có một Tech Stack tối ưu nhất, bá đạo nhất. Với mỗi sự cộng hưởng từ các công nghệ khác nhau sẽ đem lại một kết quả khác nhau tùy thuộc vào đặc tính của vấn đề mà Tech Stack đó đối mặt.

Lẽ đó mà Tech Stack thường sẽ được lựa chọn trước trong giai đoạn sơ khai của quá trình phát triển trước khi bắt đầu vào phát triển các ứng dụng đó. Cũng có thể hiểu Tech Stack giống như là một giải pháp cho các vấn đề về công nghệ và đôi khi còn được gọi là Solution Stack


CÁC YẾU TỐ ĐỂ XÂY DỰNG MỘT TECH STACK

Tech Stack cần được chọn ra và các công nghệ có thể cộng hưởng với nhau để tạo ra một giá trị chung cho doanh nghiệp, tổ chức. Đối với mảng phát triển ứng dụng web thì chúng ta có một mô hình chung như thế này

The components of a modern tech stack (Nguồn: https://heap.io/topics/what-is-a-tech-stack)

Trong ứng dụng web, một tech stack khi được xây dựng phải đáp ứng đủ các yếu tố về Frontend, Backend, hệ điều hành, cơ sở dữ liệu, các công cụ về DevOps...và còn nhiều yếu tố khác nữa. Và tuy nhiên sẽ không có một Tech Stack cố định dùng chung cho các công ty mà mỗi công ty sẽ có sự thêm bớt khác nhau tùy theo yêu cầu của ứng dụng.

What is a Tech Stack? What tools do popular tech companies use in 2021?
A tech stack is defined as the set of technologies an organization uses to build a web or mobile application. It is a combination of programming languages, frameworks, libraries, patterns, servers, UI/UX solutions, software, and tools used by its developers.

TECHSTACK MỖI THỜI MỖI KHÁC...

Ngày xửa ngày xưa khi mà các phần mềm, sản phẩm Software as a Service (SaaS) chưa bùng nổ như bây giờ thì không có quá nhiều sự lựa chọn để phát triển ứng dụng. Thời bấy giời thì PHP và MySQL là 2 ông hoàng trong lập trình web luôn khi mà hầu hết các web được phát triển sử dụng dùng PHP và MySQL làm backend stack. Vậy nên lúc ấy chúng ta có một techstack được phổ biến rộng rãi và phát triển đến tận nay là LAMP stack (Linux, Apache, MySQL và PHP).

LAMP stack (Linux, Apache, MySQL và PHP)

Tuy nhiên sau một quá trình phát triển và sinh sôi nảy nở của Javascript thì hầu hết các Tech Stack phổ biến nhất trên thị trường tính đến năm 2021 là các Tech Stack chỉ sử dụng Javascript như MERN stack (MongoDB, Express, ReactJS và NodeJS), MEVN stack  (MongoDB, Express, VueJS và NodeJS) và MEAN (MongoDB, Express, AngularJS và NodeJS). Có thể dễ dàng nhìn thấy là các stack này chỉ sử dụng mỗi ngôn ngữ lập trình Javascript, và cũng bởi lẽ đó nên tụi nó cũng rất dễ học và áp dụng để tạo ra một ứng dụng nhanh chóng.

MERN vs MEAN

Ngoài ra còn có các stack khác như Severless Stack (ứng dụng không server), Flutter for web (Sử dụng Flutter để viết ứng dụng web).


TECH STACK MÌNH ĐÃ VÀ ĐANG SỬ DỤNG

Khoảng từ những kì đầu năm nhất khi mà chưa có kiến thức nhiều trong lĩnh vực này thì tech stack mình được giới thiệu khi đó là một tech stack rất chi là phổ thông là LAMP stack nhưng mà chắc phải bỏ luôn chữ L - Linux vì mình chả đụng gì tới nó cả. Khóa học đó là về lập trình một ứng dụng web bán hàng sử dụng PHP và MySQL làm backend, host quaXAMPP (Apache Server) và sau đó là deploy lên Heroku.

Web bán hàng từ (L)AMP stack

Sau này khi biết đến Javascript thì mình bắt đầu tự mày mò học MERN stack và viết được một số ứng dụng bằng stack này. Mãi tới cuối năm 2020 thì mình mới bắt đầu học GraphQL thì sau đó mình chuyển sang dùng MERN + GraphQL. Đối với stack này thì vì gọi API trên server của GraphQL nên các tính năng của Express không còn nhiều việc để làm nữa bởi lẽ Express là dùng để thiết kế REST API cho NodeJS một cách nhanh chóng

Hiện tại thì mình đã chuyển sang dùng 3 Tech Stack chính tùy thuộc vào tính chất của ứng dụng đó là

  • ReactJS + Firebase: Vì Firebase là một Backend as a Service (BaaS) được phát triển bởi google nen hầu như chúng ta không cần bận tâm đến backend nữa. Và khi kết hợp với ReactJS thì có thể cho ra được một ứng dụng Serverless một cách nhanh chóng.
  • JAMstack (Javascript, APIs, Markup): Khái niệm JAMstack trong những năm gần đây chưa quá là phổ biến khi tuổi đời của nó còn rất trẻ (chỉ khoảng 2-3 năm đổ lại). Tuy nhiên qua quá trình sử dụng thì mình tin rằng trong tương lai gần Tech Stack này sẽ được áp dụng rộng rãi. Mình sẽ có một bài riêng để nói về sức mạnh của JAMstack.
  • ReactJS + GraphQL + Typescript + PostgreSQL: Thay vì dùng Javascript thì ở đây mình sử dụng Typescript làm ngôn ngữ gốc. Nhờ đó nên cú pháp và cấu trúc của dự án cũng chặt chẽ hơn. Về phần backend thì PostgreSQL sẽ làm database chính. Nếu mà so sánh với MySQL thì mình nhỉnh hơn về PostgreSQL vì PostgreSQL cung cấp cho developer GUI dễ sử dụng và cli linh hoạt để viết query. Nhìn chung chung thì 2 thằng cũng như nhau thôi vì query của PostgreSQL có cú pháp giống với tiêu chuẩn của MySQL.
PostgreSQL vs. MySQL: A Comprehensive Comparison
If you have the MySQL background and want to see the differences between PostgreSQL and MySQL, this PostgreSQL vs. MySQL page is an excellent start.

KẾT...

Vậy nên mỗi Tech Stack sẽ đem tới ưu điểm và nhược điểm khác nhau. Thậm chí mình còn có một trải nghiệm cực kì tồi tệ khi chọn sai Tech Stack. Chốt lại thì

Hãy chọn Tech Stack kĩ như chọn vợ
Góc Của Chung

Góc Của Chung