GFPV Stack - Technical Stack Tôi Theo Đuổi.
Hôm nay, tôi tình cờ đọc được một câu hỏi thú vị: “Bạn đang dùng stack gì thế?” Có thể bạn đã nghe đến những tên gọi quen thuộc như LAMP, LEMP, MEAN hay thậm chí là JAM stack. Nhưng GFPV Stack là gì? Có thể đây là một khái niệm bạn chưa từng nghe đến. Hôm nay, tôi sẽ chia sẻ về GFPV Stack – con đường tôi đã đi qua, những gì tôi đã học hỏi và trải nghiệm.
KITNEXT
@kitnext
11 phút đọc
23 tháng 11 năm 2024
Hành Trình Lập Trình và Sự Trải Nghiệm Của Tôi
Trong thế giới lập trình, mỗi lập trình viên có một hành trình riêng, với những lựa chọn về công nghệ và kỹ thuật được chọn lọc qua những trải nghiệm và thử thách. Hôm nay, tôi muốn chia sẻ về "GFPV Stack", một bộ công nghệ mà tôi đã lựa chọn và trải nghiệm trong suốt quá trình phát triển phần mềm của mình. Đây không phải là một stack phổ biến như LAMP, MEAN hay JAM, mà là một hành trình riêng biệt của tôi, nơi tôi tập trung vào sự đơn giản, hiệu suất và khả năng linh hoạt.
Những Điều Đã Trải Qua
Trước khi đi sâu vào GFPV Stack, tôi muốn chia sẻ một chút về quá trình học hỏi và thử nghiệm của mình. Tôi bắt đầu sự nghiệp lập trình như một lập trình viên JavaScript với Angular, một framework phổ biến vào thời điểm đó. Tuy nhiên, mọi thứ thay đổi khi tôi học Golang. Đó là lúc tôi bắt đầu nhìn nhận lại cách tiếp cận của mình và nhận ra rằng tôi không còn muốn dựa vào những framework phức tạp của JavaScript nữa.
Năm 2020, tôi quyết định trở về quê và theo đuổi con đường xây dựng nền tảng phần mềm của riêng mình. Khi đó, tôi không có gì ngoài những ý tưởng mơ hồ và một niềm đam mê lớn lao. Tôi bắt đầu viết mã từ con số không, với Golang là ngôn ngữ chính. Ban đầu, kiến thức về Golang của tôi rất hạn chế, nhưng tôi vẫn kiên trì và không ngừng học hỏi. Dù không biết rõ mình đang làm gì, tôi vẫn viết mã mỗi ngày. Sự đơn giản trong cách viết mã của Golang khiến tôi cảm thấy rất thoải mái, và cũng chính nó đã dẫn tôi đến những công nghệ và framework khác mà tôi sẽ chia sẻ dưới đây.
Tại sao là Golang?
Nếu ai đã học Golang, thì chắc hẳn biết rằng mux (Gorilla) là một framework tuyệt vời để bắt đầu. Nhưng tôi, trong những ngày đầu mới học, lại không muốn sử dụng mux mà tự mình viết một framework (vâng, thật là "dại khờ"). Tôi thích sự đơn giản và thuần khiết, và thậm chí tôi đã không để ý đến việc mình đang làm. Cả năm đó, tôi không kiếm được tiền từ những gì mình làm, nhưng đam mê của tôi vẫn cháy bỏng. Là một lập trình viên Golang, tôi luôn bị ám ảnh về hiệu suất và tốc độ. Tôi đã đọc rất nhiều bài viết về Golang, Rust, và Vlang. Cuối cùng, tôi chọn Golang vì sự nhẹ nhàng và mạnh mẽ của nó.
Fiber Framework Golang
Trong thế giới Golang, có rất nhiều framework hiệu suất tốt như Gin, Echo, Beego, hay thậm chí là mux. Tuy nhiên, do ảnh hưởng từ Angular, tôi khá yêu thích NestJS (framework được tạo ra từ sự kết hợp của Angular và Express). Từ đó, tôi quyết định xây dựng một framework riêng của mình dựa trên cảm hứng từ Express, bởi tôi yêu thích sự dễ hiểu và thân thiện của nó. Sau một thời gian tự xây dựng, tôi tình cờ biết đến Fiber (khi đó vẫn còn ở phiên bản 1). Và ngay lập tức, tôi nhận ra rằng đây chính là thứ mình đang tìm kiếm. Khi nhìn thấy các bài benchmark, tôi không thể từ chối Fiber – một framework Go siêu nhẹ và nhanh chóng.
PostgreSQL và sự trỗi dậy của bầy voi!
Kể từ khi bắt đầu học Golang, PostgreSQL đã trở thành người bạn đồng hành không thể thiếu trong mọi dự án của tôi. PostgreSQL là một hệ quản trị cơ sở dữ liệu mạnh mẽ, nổi bật với khả năng mở rộng, tính ổn định và khả năng xử lý các truy vấn phức tạp. Tôi nhận thấy rằng hầu hết các lập trình viên Golang và Python đều lựa chọn PostgreSQL, và tôi cũng không ngoại lệ. Cùng với Golang, PostgreSQL đã giúp tôi xây dựng các ứng dụng hiệu quả và có khả năng phục vụ đa dạng các mục đích.
“Sự trỗi dậy của bầy voi!” – đó là cách tôi mô tả sức mạnh và sự ổn định của PostgreSQL. Cho đến ngày hôm nay, tôi vẫn sử dụng PostgreSQL cho rất nhiều mục đích khác nhau và nó luôn là một công cụ đáng tin cậy.
Vanilla JS: Sự Quay Về Đơn Giản
Có thể đây là điều gây ngạc nhiên với nhiều người – tại sao lại là Vanilla JS? Trước đây, tôi đã dùng Angular, thử React, và thậm chí viết cả một framework JS đơn giản để phục vụ nhu cầu của mình. Nhưng lý do tôi chọn Vanilla JS đơn giản là vì: sự đơn giản, ổn định, SEO tốt và bảo mật. Node_modules là thứ tôi không muốn tải về và cập nhật mỗi lần bắt đầu một dự án mới, bởi vì nó luôn gây lỗi phiên bản và không tối ưu cho SEO. Sau này, JAM stack đã giải quyết vấn đề này ở các framework JS, nhưng mục tiêu của tôi vẫn không thay đổi. Chỉ cần một CDN là đủ, không cần phải tải một thư viện qua npm nữa.
Tôi cũng đã thử nghiệm với Web Components và viết lại mọi thứ theo hướng đó – mỗi component sẽ được xây dựng và tải qua CDN. Có thể sẽ có nhiều công nghệ mới nổi như Qwik JS hay Shadcn, nhưng con đường tôi đi vẫn giữ nguyên. Đôi khi, tôi tự hỏi mình: "Liệu có sợ tụt hậu vì không theo trào lưu không?" Tôi từng suy nghĩ rất nhiều về điều này, nhưng cuối cùng tôi đã tự bào chữa rằng mình đang đi một con đường khác, một con đường mà tôi tin tưởng.
Bảo mật
Một yếu tố mà tôi rất chú trọng là bảo mật. Tại sao tôi lại cho rằng Vanilla JS bảo mật hơn? Đơn giản là vì code tôi viết ra là của tôi. Tôi kiểm soát mọi thứ. Ví dụ, tôi sử dụng Cookie HttpOnly để bảo vệ các thông tin quan trọng. Hơn nữa, tôi có thể kiểm soát việc render từ server, giúp bảo mật API và template. Điều này không dễ để giải thích, nhưng đơn giản là tôi có thể truyền vào các signature từ server khi render cho client, giúp bảo vệ các ứng dụng của mình khỏi những nguy cơ tiềm ẩn. Thêm vào đó, tôi đã viết một thuật toán phân phối domain (DNS system), giúp tôi kiểm soát các website và client một cách chủ động hơn. Điều này liên quan đến việc tôi bảo mật hệ thống từ server – một cách kiểm soát sâu sắc mà tôi không thể chia sẻ chi tiết ở đây.
GFPV Stack là gì?
GFPV Stack không chỉ đơn giản là những công nghệ tôi sử dụng trong các dự án của mình, mà nó là một phần của triết lý phát triển phần mềm mà tôi đã dày công xây dựng qua những năm tháng học hỏi. Mỗi chữ cái trong "GFPV" không chỉ đại diện cho một công nghệ mà còn là giá trị, là cách tôi tiếp cận và giải quyết vấn đề.
- G: Golang – Ngôn ngữ lập trình mạnh mẽ, đơn giản và hiệu quả mà tôi tin tưởng. Golang mang lại cho tôi cảm giác như một công cụ sắc bén, mạnh mẽ nhưng vẫn rất dễ sử dụng. Nó giúp tôi giải quyết các bài toán khó mà không làm tôi cảm thấy bị rối hay choáng ngợp.
- F: Fiber Framework – Lý do tôi chọn Fiber không phải chỉ vì nó là một framework nhẹ và nhanh, mà vì nó là sự tiếp nối hoàn hảo cho Golang. Fiber mang lại sự đơn giản, nhanh chóng và dễ dàng để tôi có thể tối ưu hóa mọi thứ mà không phải lo lắng về sự phức tạp.
- P: PostgreSQL – Khi nói về cơ sở dữ liệu, tôi luôn ưu tiên PostgreSQL. Không chỉ vì nó mạnh mẽ và ổn định, mà còn vì sự linh hoạt trong cách tôi có thể mở rộng và tối ưu hệ thống của mình. PostgreSQL là một người bạn đồng hành đáng tin cậy trong các dự án lớn.
- V: Vanilla JS – Đôi khi, những thứ đơn giản lại là những thứ mang lại hiệu quả cao nhất. Tôi lựa chọn Vanilla JS vì nó cho phép tôi kiểm soát hoàn toàn những gì mình xây dựng, không phụ thuộc vào bất kỳ framework hay thư viện bên ngoài nào.
Nhưng GFPV không chỉ là những công nghệ. Với tôi, nó còn mang một thông điệp sâu sắc:
- G (Go): Tập trung vào sự đơn giản – đôi khi cách tốt nhất để giải quyết vấn đề là giữ mọi thứ thật đơn giản.
- F (Flexibility): Linh hoạt – khả năng thay đổi và thích ứng với mọi tình huống là yếu tố quan trọng giúp tôi phát triển.
- P (Performance): Ưu tiên hiệu suất – hiệu suất không chỉ là tốc độ mà còn là khả năng tối ưu hóa tài nguyên và quy trình làm việc.
- V (Versatility): Đa năng – luôn sẵn sàng ứng biến và triển khai giải pháp trong nhiều tình huống khác nhau.
Biến thể của GFPV Stack
Mặc dù GFPV là bộ công nghệ tôi đã chọn, nhưng tôi hiểu rằng không có công thức nào là duy nhất. Tôi luôn tìm kiếm và thử nghiệm với những công nghệ mới khi cần thiết. Ví dụ, đôi khi tôi có thể thay Golang bằng Python hay Node.js, tùy vào yêu cầu của dự án. Fiber có thể được thay bằng Gin, Echo, hay thậm chí Django (với Python). PostgreSQL, dù rất ổn định, nhưng tôi cũng không ngần ngại thử MySQL hay Redis khi cần một giải pháp khác. Và cuối cùng, mặc dù tôi yêu thích Vanilla JS, nhưng khi dự án yêu cầu, tôi sẽ thử dùng các framework như React, Vue hay QwikJS.
Tôi không cho rằng công cụ quyết định tất cả, mà chính là cách bạn sử dụng công cụ đó để tạo ra giá trị. Những lựa chọn của tôi có thể khác biệt, nhưng chúng luôn hướng đến việc mang lại hiệu quả và sự linh hoạt trong mọi tình huống.
Hành trình học hỏi và sáng tạo
Nhìn lại 4 năm qua, tôi nhận ra một điều quan trọng: "Công cụ chỉ là phương tiện, điều quan trọng là tư duy và sự rèn luyện." Chúng ta có thể chọn bất kỳ công nghệ nào, nhưng điều quan trọng là cách chúng ta sử dụng nó và áp dụng nó vào thực tế.
Dù hành trình của tôi có thể không giống với người khác, nhưng đó là hành trình của tôi – một hành trình không ngừng học hỏi và tìm tòi. Tôi nhớ những ngày đầu khi tôi thử nghiệm với Golang và Fiber, không biết rõ mọi thứ sẽ đi đến đâu. Nhưng rồi, khi tôi dần quen với chúng, tôi nhận ra đó chính là con đường tôi muốn đi.
Gần đây, tôi bắt đầu tìm hiểu thêm về khái niệm "Indie Maker" và "Building in Public". Tôi nhận thấy hành trình phát triển GFPV Stack của mình là một ví dụ điển hình về điều đó. Tôi không chỉ làm việc một mình, mà chia sẻ quá trình và học hỏi từ những phản hồi của cộng đồng. Điều đó không chỉ giúp tôi cải thiện kỹ năng mà còn mang lại những kết quả bất ngờ, khi tôi mở lòng hơn và tiếp thu nhiều ý tưởng mới.
Tại sao GFPV Stack lại quan trọng với tôi?
Với tôi, GFPV Stack không chỉ là bộ công nghệ mà tôi sử dụng, mà còn là cách tôi nhìn nhận việc phát triển phần mềm – đó là sự đơn giản, linh hoạt và hiệu suất cao. Nó phản ánh những gì tôi tin tưởng và áp dụng trong công việc hàng ngày. Mỗi khi tôi nhìn lại những dự án đã hoàn thành, tôi không chỉ thấy một hệ thống được xây dựng từ các công nghệ, mà là một hành trình của sự học hỏi, sáng tạo và cống hiến.
Mặc dù thế giới công nghệ thay đổi từng ngày, tôi vẫn tin vào những gì mình đang làm, và tôi sẽ tiếp tục phát triển GFPV Stack theo cách của riêng mình.
40
lượt xem
Bài Viết Liên Quan
Cuối cùng, tôi vẫn tự hỏi: “Nếu có một dự án lớn, mình sẽ làm gì?”. Tôi chẳng có gì ngoài những nợ nần và niềm đam mê. Nhưng tôi biết, chỉ cần còn đam mê, tôi vẫn sẽ bước tiếp. "Coding and life" - đó là cách mà kẻ dại khờ này tiếp tục.
Khi bản thân tự định hướng cho mình một lối đi. Một con đường và một ánh sáng thì cứ đi theo ánh sáng đó.
Có vẽ dạo gần đây có nhiều câu chuyện về quảng cáo Youtube và sự can thiệp của Server Side Render từ sever của youtube đang dần trở nên phổ biến. Bài viết này sẽ chia sẽ những điều tôi biết vê Server Side Rendering...
Nếu trước đó bạn đã biết câu chuyện về logo của Xiaomi với giá 300.000 đô la, thì hôm nay tôi có một câu chuyện với giá dưới 300.000 đồng.
Thế giới công nghệ phát triển nhanh chóng, và một trong những bước tiến thú vị mà tôi có cơ hội tiếp cận là hệ giao thức phân tán. Cơ hội này mở ra từ những nhu cầu tưởng chừng đơn giản như xây dựng một ứng dụng chat trực tiếp giữa các thiết bị mà không cần máy chủ trung gian. Điều này đưa tôi đến với các giao thức phân tán như WebRTC và các phương pháp truyền dữ liệu ngang hàng (Peer-to-Peer, hay P2P).
Hôm nay, tôi tình cờ đọc được một câu hỏi thú vị: “Bạn đang dùng stack gì thế?” Có thể bạn đã nghe đến những tên gọi quen thuộc như LAMP, LEMP, MEAN hay thậm chí là JAM stack. Nhưng GFPV Stack là gì? Có thể đây là một khái niệm bạn chưa từng nghe đến. Hôm nay, tôi sẽ chia sẻ về GFPV Stack – con đường tôi đã đi qua, những gì tôi đã học hỏi và trải nghiệm.
Node ID và Multi-Node ID:An toàn và bảo mật: Mỗi dữ liệu được mã hóa theo từng node khác nhau, kết hợp với thuật toán mã hóa riêng biệt, tạo ra một cấu trúc dữ liệu chặt chẽ và không giống nhau, đảm bảo tính an toàn và bảo mật cho thông tin.
Chỉ là mình thích cách lập trình web của mình. Có thể tùy chỉnh theo ý thích và không phụ thuộc vào framework.
Khi tôi bắt đầu hành trình lập trình và phát triển phần mềm, tôi chưa bao giờ nghĩ mình sẽ trở thành một Indie Hacker. Đối với tôi, chỉ đơn giản là tôi đang xây dựng những sản phẩm phần mềm mà tôi cảm thấy đam mê và muốn chia sẻ với cộng đồng. Nhưng dần dần, khi tôi nhìn lại con đường mình đã đi, tôi nhận ra rằng tôi đã bước vào thế giới của những Indie Hacker từ lúc nào không hay.
Indie Hacker không chỉ là việc xây dựng phần mềm mà còn là một cuộc phiêu lưu sáng tạo, nơi tôi có thể tự do thể hiện bản thân và thử thách mình. Dù con đường này không dễ dàng, tôi tin rằng với sự kiên trì và niềm đam mê, tôi sẽ tạo ra những sản phẩm giá trị, phục vụ cộng đồng và phát triển sự nghiệp bền vững.