<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Đạt Trương Thành</title>
    <description>The latest articles on Forem by Đạt Trương Thành (@datweb07).</description>
    <link>https://forem.com/datweb07</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2903739%2F7935ae02-fcc4-4922-9d4b-8058266abacd.png</url>
      <title>Forem: Đạt Trương Thành</title>
      <link>https://forem.com/datweb07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/datweb07"/>
    <language>en</language>
    <item>
      <title>Ảo giác từ Vibecoding, Vibecoders</title>
      <dc:creator>Đạt Trương Thành</dc:creator>
      <pubDate>Sun, 10 May 2026 17:09:38 +0000</pubDate>
      <link>https://forem.com/datweb07/ao-anh-vibe-coding-3klj</link>
      <guid>https://forem.com/datweb07/ao-anh-vibe-coding-3klj</guid>
      <description>&lt;p&gt;Nay tôi viết blog này vì nhận ra &lt;strong&gt;bản thân tôi&lt;/strong&gt; và có thể &lt;strong&gt;các SV đang theo khối ngành IT/Software Engineer&lt;/strong&gt; nói chung đang gặp phải. Đó là việc dùng AI trong việc xây dựng mã nguồn!!!&lt;/p&gt;

&lt;h3&gt;
  
  
  Lập trình bằng cảm giác thay vì hiểu biết
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vibecoding là việc tạo ra phần mềm chủ yếu thông qua các prompt bằng ngôn ngữ tự nhiên với AI. Người dùng tập trung vào kết quả hiển thị có vẻ đúng, bỏ qua việc hiểu cấu trúc mã nguồn bên trong.&lt;/li&gt;
&lt;li&gt;Khả năng dựng prototype nhanh chóng tạo ra ảo giác về một lập trình viên 10x. Không cần lo nghĩ về cú pháp, chỉ cần ra lệnh là có kết quả.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Không thể mở rộng quy mô
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bề mặt mượt mà đã che dấu đi một cỗ máy đang rỉ sét. Vibecoding đang tạo ra &lt;strong&gt;nợ kỹ thuật&lt;/strong&gt; ở tốc độ chưa từng có trong lịch sử phần mềm.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Một vài lí do đã tạo ra các repo rác, code rác, khó scale up
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Sự sụp đổ của System Architecture
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;AI rất xuất sắc trong việc viết các đoạn mã chức năng nhỏ lẻ, nhưng hoàn toàn thiếu khả năng thiết kế hệ thống một cách toàn diện và tổng thể bao quát.&lt;/li&gt;
&lt;li&gt;Hệ thống chắp vá từ hàng ngàn đoạn mã rời rạc → Điều này dẫn đến các logic bị lặp lại, luồng dữ liệu rối rắm và tạo ra &lt;strong&gt;spaghetti code&lt;/strong&gt;. Không có tầm nhìn kiến trúc bao trùm, mỗi prompt mới lại làm gãy vỡ cấu trúc cũ&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Tạo ra cơn ác mộng mang tên Debug
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Mã nguồn hoạt động được chưa chắc là mã sạch. Việc tìm lỗi trong một hệ thống mà không phải do bạn xây dựng chẳng khác nào mò kim đáy bể.&lt;/li&gt;
&lt;li&gt;Và điều này cũng dẫn đến việc biến bản thân thành trò hề trong chính mã nguồn của mình → Khi lập trình viên không tự tay viết các logic cốt lõi, họ không hiểu luồng xử lý thật sự. Việc sửa một lỗi nhỏ mất thời gian gấp 10 lần vì họ phải &lt;strong&gt;học lại&lt;/strong&gt; chính hệ thống do mình tạo ra.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Tạo ra các lỗ hổng bảo mật
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Bề ngoài trong có vẻ tốt nhưng bên trong chưa chắc ổn định. Các Vibecoders hiếm khi check kỹ lưỡng các trường hợp ngoại lệ&lt;/li&gt;
&lt;li&gt;Các mô hình ngôn ngữ lớn thường xuyên bị &lt;strong&gt;ảo giác&lt;/strong&gt; tạo ra các thư viện không tồn tại hoặc sử dụng các phiên bản cũ → Các lỗ hổng được tạo ra giúp hacker dễ dàng xâm nhập, hay cho cái gọi là &lt;strong&gt;code vẫn chạy được&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Sự thui chột kỹ năng cốt lõi (làm ngu đi) =))))
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Đây là cái giá phải trả đắt nhất trong tương lai. Sự phụ thuộc vào AI hiện nay đang làm xói mòn khả năng tư duy và giải quyết vấn đề một cách độc lập.&lt;/li&gt;
&lt;li&gt;Mất đi khả năng tư duy thuật toán: Các lập trình viên dẫn mất đi khả năng tư duy độc lập. Khi một vấn đề khó, trừu tượng phức tạp xuất hiện vượt ngoài khả năng xử lý của AI → Vibecoders bó tay chịu thua =))))&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Cạm bẫy MVP, Prototype với doanh nghiệp
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Vibecoding tạo ra các sản phẩm MVP tuyệt vời, nhưng lại là thảm họa khi triển khai thành production.&lt;/li&gt;
&lt;li&gt;Chi phí triển khai đập đi xây lại quá tốn kém: Nợ kỹ thuật tích lũy theo &lt;strong&gt;cấp số nhân&lt;/strong&gt; khiến việc bảo trì trở nên khó khăn. Cuối cùng doanh nghiệp phải bỏ ra số tiền lớn thuê người có chuyên môn viết lại toàn bộ mã nguồn hệ thống.&lt;/li&gt;
&lt;li&gt;Khi có lỗ hổng khiến dữ liệu rò rỉ hay hệ thống sụp đổ khi dùng Vibecoding, ai là người chịu trách nhiệm? AI hay là Vibecoders????&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;→ Sử dụng AI &lt;strong&gt;một cách thông minh&lt;/strong&gt;: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thay đổi phương pháp tiếp cận từ lười biếng sang có kỷ luật.&lt;/li&gt;
&lt;li&gt;Những Software Engineer thực thụ sử dụng AI vào các tác vụ lặp đi lặp lại, nhưng họ luôn là người kiểm soát AI theo System Architecture và Bussiness Logic của họ.&lt;/li&gt;
&lt;li&gt;Thiết lập các ràng buộc như phải review code, check syntax error,... do AI generate.&lt;/li&gt;
&lt;li&gt;Luôn xác định kiến trúc tổng thể dự án trước khi prompt cho AI bởi lập trình viên mới là những người có quyết định cao nhất về dự án.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Và lời cuối cùng tôi muốn truyền tải tới mọi người rằng:
&lt;/h3&gt;

&lt;p&gt;Các lập trình viên sử dụng AI không sai, nhưng hãy sử dụng nó để tạo ra các sản phẩm có giá trị thực tế, bởi một sản phẩm được tạo ra từ AI có giá trị cao khi được điều khiển bởi bộ não trí tuệ thực sự của con người!!!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>vibecoding</category>
      <category>programmers</category>
      <category>vibecoders</category>
    </item>
    <item>
      <title>Cookie, Session và Token-based authentication</title>
      <dc:creator>Đạt Trương Thành</dc:creator>
      <pubDate>Sun, 10 May 2026 04:29:12 +0000</pubDate>
      <link>https://forem.com/datweb07/cookie-session-va-token-based-authentication-je6</link>
      <guid>https://forem.com/datweb07/cookie-session-va-token-based-authentication-je6</guid>
      <description>&lt;h3&gt;
  
  
  1. Phân biệt Authentication và Authorization
&lt;/h3&gt;

&lt;p&gt;Rất nhiều lập trình viên mới hay nhầm lẫn hai khái niệm này:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authentication (Xác thực):&lt;/strong&gt; Ví dụ: Hành động bạn nhập Username và Password để đăng nhập vào hệ thống.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authorization (Phân quyền):&lt;/strong&gt; Ví dụ: Sau khi đăng nhập thành công, hệ thống kiểm tra xem bạn là Admin hay User thường, bạn có quyền xóa bài viết hay chỉ được xem.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Giao thức HTTP và vấn đề "Stateless"
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Giao thức HTTP bản chất là &lt;strong&gt;Stateless&lt;/strong&gt;. Nghĩa là server xử lý xong một request là sẽ forget luôn client đó là ai. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nếu không có cơ chế lưu trữ lại trạng thái, mỗi lần bạn bấm sang một trang mới trên website, hệ thống sẽ lại bắt bạn đăng nhập lại. Để giải quyết vấn đề này, người ta sinh ra &lt;strong&gt;Cookie&lt;/strong&gt;, &lt;strong&gt;Session&lt;/strong&gt; và &lt;strong&gt;Token&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Cơ chế Cookie và Session
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cookie:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Là một đoạn dữ liệu nhỏ (khoảng vài KB) được Server yêu cầu Client (browse) lưu trữ lại ở dưới máy của người dùng.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mỗi khi Client gửi một request mới lên Server, nó sẽ tự động đính kèm các Cookie này theo. Nhờ đó, Server biết được request này đến từ ai.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Session:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lưu toàn bộ thông tin nhạy cảm ở phía Client (bằng Cookie) là rất nguy hiểm (dễ bị hack). Do đó, người ta sinh ra Session.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cách hoạt động:&lt;/strong&gt; Khi bạn đăng nhập thành công, Server sẽ tạo ra một vùng nhớ chứa thông tin của bạn (gọi là Session) và sinh ra một &lt;strong&gt;Session ID&lt;/strong&gt;. Server chỉ gửi cái &lt;strong&gt;Session ID&lt;/strong&gt; này về cho Client để lưu vào &lt;strong&gt;Cookie&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Các lần request sau, Client chỉ gửi Session ID lên. Server lấy Session ID này dò trong bộ nhớ/DB Session của mình để biết bạn là ai.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Token-based Authentication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nhược điểm của Session:&lt;/strong&gt; Khi hệ thống scale lên nhiều Server, Server A lưu Session của bạn nhưng Server B thì không. Nếu request của bạn bị điều hướng sang Server B, bạn sẽ bị bắt đăng nhập lại.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Giải pháp Token (JWT - JSON Web Token):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Thay vì lưu trạng thái ở Server, sau khi đăng nhập thành công, Server sẽ gom thông tin của bạn (như ID, Role), &lt;strong&gt;mã hóa&lt;/strong&gt; và &lt;strong&gt;sign&lt;/strong&gt; bằng một khóa bí mật, tạo thành một chuỗi gọi là &lt;strong&gt;Token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  Server gửi Token này cho Client lưu lại (thường lưu ở Local Storage hoặc Cookie).&lt;/li&gt;
&lt;li&gt;  Lần sau gửi request, Client đính kèm Token này vào &lt;code&gt;Header&lt;/code&gt; (thường là &lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  Server không cần tìm trong bộ nhớ nữa, chỉ cần dùng khóa bí mật để giải mã và kiểm tra chữ ký của Token là biết bạn là ai và có quyền gì.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ưu điểm:&lt;/strong&gt; Cực kỳ phù hợp cho Web API, các ứng dụng Mobile, và hệ thống Microservices vì nó hoàn toàn "Stateless" (Server không cần tốn RAM để nhớ người dùng).&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>authentication</category>
      <category>authorization</category>
      <category>cookie</category>
      <category>session</category>
    </item>
  </channel>
</rss>
