Học và cả thiện kiến thức lập trình từ các dự án cá nhân (Pet Project)

12142

Cách tốt nhất để học bất cứ thứ gì liên quan đến lập trình, đó là chúng ta dự định làm ra cái gì linh tinh để rồi trong quá trình làm ra sản phẩm đó chúng ta nhận ra những thứ chúng ta còn mơ h và ln cn, sau đó thì chỉ việc tìm hiểu tập trung những thứ này thôi. Đó cũng là một cách học những thứ mới mẻ, hoặc tìm hiểu những công nghệ xu hướng, mà người ta hay gọi là đú trend đấy

Bài này mình sẽ note lại những thứ trong quá trình làm ra một dự án pet project, và mình nghĩ nó sẽ hoàn toàn bổ ích cho những bạn muốn có cái nhìn toàn cảnh về việc làm nên một sản phẩm linh tinh từ đầu đến cuối để thỏa mãn dục vọng bản thân của một lập trình viên :D.

Trong quá trình hoàn thành dự án linh tinh này, mình sẽ hold lại và tìm hiểu cũng như giải thích những kiến thức mà bản thân mình còn chưa thật hiểu rõ. Theo shark tank thì khách hàng tiềm năng của bài là các thanh niên mới chập chững vào nghề hoặc là làm vài năm mà vẫn mông lung như một trò đùa (như mềnh :D).

Đầu tiên, nghĩ ra requirement cho pet project

Chắc chắn cái việc viết ra một dự án thú cưng thì đầu tiền nó phải thỏa mãn cái nhu cu ca chính người viết ra cái đã. Ở đây là mình, hoặc các bạn đọc ở đây, không cần quan tâm trên thị trường đã có sản phẩm nào tồn tại để cạnh tranh hay chưa vì chúng ta thường chỉ có kinh phí là 1 buổi sáng hoặc 1 ly cafe không thôi à, nên tập trung vào làm ngay và luôn là tốt nhắt.

Quay lại vấn đề requirement, chắc hẳn các bạn cũng biết cảm giác khi đau bụng (nhất là buổi sáng, sau khi vào công ty) là một khoảng thời gian riêng tư vô cung quý giá, mà trong đó chúng ta có thể làm mọi thứ mà không có cảm giác tội lỗi, mà 3G hay 4G trong toilet thì các bạn biết rồi đấy, các cụ hay bảo là “nhanh như rùa bò” ấy. Vào toilet mà không có gì xem hay đọc là một khoảng thời gian rất phí phạm của cuộc đời này, ở nhà còn có dầu gội dầu xả thế lọ thể chai để xem xuất xứ, thành phần này nọ chứ ở công ty, toilet của chung thì làm gì có gì mà coi, mà có thì coi 1 lần chứ đâu có coi quài được.

Từ những lý do ở trên của bản thân, mình quyết định sẽ lập trình 1 website đọc tin tức tối ưu hóa băng thông, hạn chế đến mức thấp nhất băng thông gửi từ server gửi xuống. Khoảng ~2kb cho trang chủ, và ~4kb cho list tin tức, còn nội dung thì tùy từ tin gốc nhưng ở khoảng ~10kb là đẹp. Vậy là đủ cho những nơi 3g thấp hoặc khi điện thoại bị hết băng thông rộng.

Xong phần requirement, bước kế tiếp là đến phần lựa chọn stack công nghệ.

Lựa chọn stack công nghệ

1 phần trong stack của AirBnB1 phần trong stack của AirBnB

  • Server và client: Do hạn chế băng thông cho client nên tốt nhất là dưới client chúng ta không nên sử dụng bất cứ một thứ gì cả, client chỉ việc lấy html và render ra là xong, tốt nhất là loại bỏ luôn file Javascript.
  • Backend technology: Nhanh gọn lẹ tốc độ, ăn liền nhất có lẽ Nodejs là một sự lựa chọn đúng đắn nhất, khởi tạo nhanh, lập trình nhanh, cũng như có rất nhiều host/ platform hỗ trợ việc deployment gọn lẹ như Heroku chẳn hạn. Còn về framework web với nodejs thì có lẽ expressjs là phổ thông và cũng là một framework tương đối đã trưởng thành.
  • Web server: Nginx, một web server sinh sau đẻ muộn nhưng hiệu năng và độ thân thiện, với mình là khá hoàn thiện ngoài những bản plus thêm tính phí 😀
    - ng dng không bt buc chy trên windows server
    - Windows server khá đắt đỏ so vi linux
    - Server vs GUI rt nng n
    - (Có thể) d dàng b tn công hơn, dù điu đó ph thuc vào system administrator, theo mình thì đa s sa ca linux hiu rõ h điu hành ca mình hơn
    - Cng đồng hp, li thế riêng cho các ng dng phát trin bng Microsoft technology
  • Server provider: Mình sẽ không sử dụng platform như Heroku để host ứng dụng này mà sẽ sử dụng 1 cloud vps, theo mình nó sẽ có nhiều điều để nói hơn. Okay, bất cứ providers nào mà bạn thân thuộc từ AWS (free tier 1 year), GCP (free 300$ năm đầu tiên cho new user), Azure (free 1 tháng đầu 200$ thì phải), DigitalOcean (free 10$ new user), Vultr(free 25$ new user)…
  • Server OS: Chắc chắn là Linux rồi, nếu ứng dụng của bạn không phải chạy bằng .Net Framework và dựa quá nhiều vào Windows API thì ko cần thiết phải cần đến một IIS server đắt đỏ. Nếu ứng dụng của bạn hiện tại đang được lập trình bằng .net core thì chúng ta cũng thoải mái deploy trên môi trường linux nhé.
  • Containerize: Okay, container container everywhere mà, không cần công nghệ containerize thì chúng ta vẫn triển khai từ trước đến nay thôi, nhưng không thể chối bỏ việc Docker hay công nghệ containerize (gọi là công nghệ cũng không thật chính xác lắm, gọi là 1 philosophy thì chính xác hơn) đã giúp chúng ta rất nhiều trong việc lập trình, triển khai, scale up… Nói không ngoa containerize hay Docker đang là con cưng của giới công nghệ hiện tại :D. Mình cũng chỉ mới tiếp cận và sử dụng Docker khoảng vài tháng lại đây, thật sự mà nói nó giúp ích cho mình rất nhiều trong việc triển khai một ứng dụng.
  • Source control và CI/CD: có lẽ chúng ta nghĩ ngay tới github nhưng, pet project thì pet project chứ, nhiều khi nó lại là product triệu đô thì sao nhỉ ahihi, đùa chứ với một pet project thì github là nơi tuyệt vời để chúng ta lưu trữ dự án rồi, nhưng ở đây mình sẽ sử dụng gitlab để lưu trữ.
  • Chuyện domain: domain thì chúng ta cứ GoDaddy và Namecheap và triển thôi, hai nhà cung cấp này có khuyển mãi tầm 1$ cho doamin .com cho người dùng mới trong năm đầu tiền, hoặc các bạn cũng có thể mua những domain giá khoảng 1$ với đuổi như .xyz.online… gì đấy, còn muốn hàng free thì cứ https://www.freenom.com.

Còn gì nữa không nhỉ?? Chắc không còn gì nữa nhỉ, ngoài các implement chi tiết hơn trong các phần tương ứng. Tổng kết lại stack của chúng ta nào:

  • Server side rendering only
  • Nodejs
    • Express
    • Typescript
  • Nginx web server
  • Vultr cloud vps
  • Linux ubuntu 16.04
  • Docker and Swarm
  • Gitlab for Source Control, CI/CD

Tới đây bài cũng khá dài, viết một lần chắc draft miết luôn quá. Nên thôi mình sẽ cố gắng chia bài này ra khoảng 2 đến 3 bài cho ngắn. Bài sau sẽ đi vào chi tiết việc implement và giải thích, tìm hiểu những kiến thức lập trình đi kèm. Hy vọng bài viết bổ ích cho các bạn nào chưa có cái nhìn tổng quan về việc lựa chọn công nghệ, và triển khai một ứng dụng từ con số 0 đến khi lên sản phẩm.

Author: DINH DUONG