Tám năm trước, tôi vừa tốt nghiệp trung học. Không định hướng, không kế hoạch, chỉ với chiếc laptop và một linh cảm mơ hồ rằng mình nên tìm ra ý nghĩa cuộc đời. Giờ đây, tôi là một nhà phát triển Full-stack chuyên nghiệp, làm việc với Node.js, React, TypeScript, xây dựng những ứng dụng thực tế có giá trị.
Nhưng có một điều mà không ai nói cho bạn biết về việc học lập trình: đó không phải là một con đường thẳng tắp. Nó lộn xộn. Đầy rẫy những khởi đầu sai lầm, những ngã rẽ, những lần bỏ cuộc và quay trở lại. Đây là câu chuyện đó. Câu chuyện thật.
(Xin lưu ý, một vài mốc thời gian có thể không hoàn toàn chính xác. Điểm mấu chốt không phải là ngày tháng cụ thể, mà là sự kiên trì, nỗ lực – tất cả chúng ta đều bắt đầu từ một điểm nào đó.)
Hiện tại, tôi đang xây dựng các sản phẩm với Node.js, React và TypeScript — những công nghệ mà ngày ấy tôi thậm chí còn không thể hình dung ra.
Mục lục
Khởi Đầu: HTML, CSS Và Giả Vờ Hiểu Biết (2017)
Hành trình của tôi bắt đầu vào năm 2017, ngay sau khi tốt nghiệp cấp ba. Lần đầu tiên tôi tiếp xúc với code là gì ư? Chính là HTML và CSS. Không phải vì tôi có một kế hoạch cụ thể, mà chỉ vì một video YouTube ngẫu nhiên đã khuyên “hãy bắt đầu từ đây.”
Tôi đã tạo ra những trang web… xấu tệ. Nền xanh lè, font chữ Comic Sans tràn lan, hình ảnh thì to đến mức phá vỡ toàn bộ bố cục. Nhưng nó hoạt động! Tôi gõ code, làm mới trình duyệt, và MÃ CỦA TÔI hiển thị trên màn hình. Cảm giác đó đã cuốn hút tôi.
Tôi dành khoảng một tháng chỉ để nghịch HTML và CSS. Xây dựng một trang portfolio (đáng xấu hổ), một menu nhà hàng giả (thậm chí còn tệ hơn), và cố gắng sao chép trang chủ Google nhưng thất bại thảm hại.
Nhưng điều tôi thực sự học được mà không hề hay biết là: cách các trình duyệt hoạt động, cách cấu trúc một trang, và cách tìm kiếm lỗi trên Google khi mọi thứ đổ vỡ. Nền tảng này quan trọng hơn tôi tưởng rất nhiều.
Tài nguyên đã thực sự hữu ích:
- W3Schools – Mặc dù nhiều người chê bai, nhưng nó đơn giản và hiệu quả cho người mới bắt đầu.
- MDN Web Docs – Tôi đã đánh dấu trang này và vẫn sử dụng nó đến tận bây giờ.
- CSS-Tricks – Cứu tinh mỗi khi bố cục của tôi đổ vỡ (mà điều đó xảy ra liên tục).
Sau đó, tôi trở nên tự mãn. “HTML và CSS dễ thế này, lập trình chắc cũng dễ thôi.”
Sai lầm nghiêm trọng.
Những Năm Tháng Đại Học: Nơi Mọi Thứ Không Hề “Click” (2017-2020)
Đây là một sự thật khó chịu: trường học không dạy tôi nhiều về lập trình thực tế. Chắc chắn, chúng tôi có các lớp khoa học máy tính. Chúng tôi “học” về vòng lặp và biến. Nhưng không có gì đọng lại vì mọi thứ không hề có cảm giác THỰC TẾ.
Giáo viên sẽ chỉ cho chúng tôi mã giả (pseudocode). Chúng tôi viết một ít Java trên giấy (vâng, trên giấy thật). Làm bài kiểm tra. Đạt điểm. Và quên hết mọi thứ vào ngày hôm sau.
Lập trình lúc đó giống như việc ghi nhớ các công thức toán học mà tôi sẽ không bao giờ sử dụng. Trừu tượng. Buồn tẻ. Vô nghĩa.
Tôi chỉ làm theo những gì được yêu cầu nhưng không có gì thực sự “click”. Tôi vượt qua các lớp học, nhưng nếu bạn yêu cầu tôi xây dựng bất cứ thứ gì, tôi sẽ không biết bắt đầu từ đâu.
Nhìn lại, vấn đề không phải là tôi không thể học. Mà là tôi không ĐƯỢC XÂY DỰNG bất cứ thứ gì. Chỉ đơn thuần sao chép ví dụ và trả lại chúng trong các bài kiểm tra.
Ngã Rẽ Bất Ngờ: CCNA Và “Thức Tỉnh” Về Dòng Lệnh (2018)
Khoảng năm 2018, tôi đưa ra một quyết định kỳ lạ. Bỏ hẳn lập trình. Quyết định chuyển sang mạng máy tính. Bắt đầu học để lấy chứng chỉ CCNA (Cisco Certified Network Associate).
Nghe có vẻ ngẫu nhiên, đúng không? Nhưng điều thú vị đã xảy ra.
Tôi đang cấu hình các router và switch bằng giao diện dòng lệnh của Cisco. Các lệnh trông như thế này:
Router> enable
Router# configure terminal
Router(config)# interface fastethernet 0/0
Router(config-if)# ip address 192.168.1.1 255.255.255.0
Và một điều gì đó đã “click”. Cái thứ dòng lệnh này, gõ lệnh và thấy kết quả ngay lập tức, nó có cảm giác… mạnh mẽ. Như thể tôi đang nói chuyện trực tiếp với cỗ máy thay vì thông qua một giao diện đồ họa.
Tôi dành khoảng 6-9 tháng đào sâu vào CCNA. Học về mạng, địa chỉ IP, giao thức định tuyến, VLAN. Thành thật mà nói, tôi khá giỏi trong lĩnh vực này.
Nhưng suốt thời gian đó, có một cảm giác thôi thúc dai dẳng: “Cái này thú vị đấy, nhưng tôi muốn XÂY DỰNG mọi thứ, chứ không chỉ cấu hình chúng.”
Tuy nhiên, trải nghiệm với dòng lệnh ư? Điều đó đã gieo một hạt giống. Nó khiến tôi tò mò về terminal, về scripting, về việc tự động hóa mọi thứ thay vì chỉ nhấp chuột.
Sự Khởi Đầu Thực Sự: Quay Lại Lập Trình (Cuối 2018)
Cuối năm 2018, tôi đang trong một kỳ nghỉ ngắn — mắc kẹt với rất nhiều suy nghĩ, tự hỏi liệu mình có nên hoàn toàn dấn thân vào coding sau khi bị cuốn hút bởi CCNA hay không.
Tôi quay lại với lập trình, nhưng lần này đã khác. Lần này với một dự án trong đầu, vì chúng tôi sắp đến lúc làm các dự án của trường.
Tôi đã nghiên cứu rất nhiều trên Google và quyết định xây dựng một hệ thống đăng tin tuyển dụng. Giống như một bảng tin việc làm nội bộ nơi các công ty có thể đăng tin tuyển dụng và sinh viên có thể ứng tuyển. Tôi đã chọn dự án này.
Tôi không hề biết mình đang làm gì.
Vẫn đang cố gắng định hình cuộc sống ở trường đại học, bạn biết đấy — một nửa cố gắng xây dựng sự nghiệp, một nửa chỉ cố gắng vượt qua các lớp học. Nhưng tôi đã cam kết xây dựng thứ này.
Dự Án Trường Thay Đổi Mọi Thứ: Cổng Thông Tin Việc Làm (Job Portal)
Dự án này, hệ thống cổng thông tin việc làm này, đây chính là nơi mọi thứ cuối cùng đã “click”.
Tôi chọn PHP vì tôi tìm thấy một hướng dẫn nào đó làm cho nó trông có vẻ dễ dàng (thực ra không hề). Tôi đã dành BA THÁNG để xây dựng thứ này. Không chỉ sau giờ học – tôi nói đến những đêm thức trắng, cuối tuần, bỏ qua các sự kiện xã hội vì tôi bị ám ảnh.
Phạm vi dự án là điên rồ đối với một người mới học:
- Công ty đăng ký và đăng tin tuyển dụng.
- Sinh viên tạo hồ sơ và ứng tuyển.
- Bảng quản trị (admin panel) để quản lý mọi thứ.
- Cơ sở dữ liệu MySQL lưu trữ tất cả dữ liệu.
- Hệ thống đăng nhập/đăng xuất với session.
- Tải lên file cho CV và tài liệu.
Bạn bè tôi nghĩ tôi bị điên. “Sao mày làm nhiều thế? Cứ làm cái gì đơn giản thôi để qua môn.”
Nhưng tôi không thể. Tôi đã bị cuốn hút. Đây là lần đầu tiên tôi xây dựng một thứ gì đó THỰC TẾ. Một thứ mà mọi người sẽ thực sự sử dụng (mặc dù nó là một dự án trường học).
Code là một mớ hỗn độn, tôi đã đọc và đọc rất nhiều. Lỗ hổng SQL injection ở khắp mọi nơi (tôi không hề biết gì về bảo mật). Có lẽ 80% là sao chép-dán từ Stack Overflow, 20% là tôi cố gắng tìm hiểu cách mọi thứ hoạt động. Nhưng nó HOẠT ĐỘNG!
Sau đó, tôi đụng phải một bức tường. Trang web có vẻ… chết lặng. Tĩnh. Nhấp vào nút, trang làm mới, chờ đợi. Nhấp lại, trang lại làm mới. Nó có cảm giác cũ kỹ và cồng kềnh.
Đó là lúc tôi khám phá ra jQuery. Tôi tìm thấy một hướng dẫn về cách thêm hoạt ảnh và làm cho các form gửi đi mà không cần làm mới trang. Dành thêm vài tuần để học AJAX, làm cho mọi thứ xảy ra mà không cần tải lại toàn bộ trang.
Và đột nhiên, cổng thông tin việc làm như HỒI SINH. Các nút hoạt ảnh khi bạn nhấp vào. Danh sách việc làm tải mượt mà mà không cần làm mới. Xác thực form diễn ra trong thời gian thực.
Khi tôi trình bày nó trước lớp, bạn bè tôi choáng váng. Các giáo viên bối rối vì nó vượt xa những gì họ mong đợi. Một giáo viên thậm chí còn hỏi tôi có sao chép nó từ đâu đó không (tôi có sao chép một phần, nhưng tôi hiểu chúng, đó mới là điều quan trọng).
Tất nhiên, tôi đã được điểm A. Nhưng quan trọng hơn, tôi nhận ra một điều:
Sự tương tác này. Cái thứ JavaScript này. Đây chính là điều làm cho các trang web trở nên hiện đại. Đây chính là điều tôi muốn làm.
Dự án vẫn còn trên GitHub nếu bạn muốn xem code của tôi lúc đó lộn xộn đến mức nào: https://github.com/elvis-sautet/job-portal-system
Nhìn lại nó bây giờ khiến tôi hơi rụt rè một chút, nhưng tôi cũng tự hào về nó. Đó là dự án đã biến tôi thành một nhà phát triển.
JavaScript: Khi Mọi Thứ Cuối Cùng Cũng Có Ý Nghĩa
Sau dự án cổng thông tin việc làm, tôi đã bỏ PHP. JavaScript là nơi phép thuật xảy ra, và tôi muốn tìm hiểu sâu hơn về nó.
Tôi bắt đầu học JavaScript một cách đúng đắn. Không phải từ các khóa học, mà từ việc XÂY DỰNG.
javascript.info trở thành cuốn kinh thánh của tôi. Miễn phí, toàn diện và không coi bạn là một kẻ ngốc.
Tôi đã trải qua:
- Biến (let, const, var – thành thật mà nói, tôi vẫn còn bối rối về var).
- Hàm (mất rất lâu để hiểu giá trị trả về).
- Mảng và đối tượng (bất ngờ khi đối tượng có thể chứa hàm).
- Thao tác với DOM (getElementById trở thành người bạn tốt nhất của tôi).
- JavaScript bất đồng bộ (callbacks, promises, async/await – cái này làm tôi đau đầu).
Tôi đã xây dựng mọi thứ có thể nghĩ ra:
- Máy tính (tất nhiên rồi).
- Ứng dụng Todo (xây dựng nó khoảng 10 lần).
- Trình theo dõi chi tiêu (vì tôi đã từng rỗng túi).
- Trình tạo câu nói ngẫu nhiên.
- Ứng dụng thời tiết sử dụng các API miễn phí.
Sự khác biệt chính lần này? Tôi đang xây dựng những thứ tôi thực sự muốn sử dụng. Không phải các dự án hướng dẫn. Mà là CÁC DỰ ÁN CỦA TÔI.
Tôi thậm chí còn tìm hiểu về Node.js, với kiến thức JavaScript đã được củng cố của mình. The Net Ninja cũng đã phần nào thúc đẩy tôi hiểu về Node, haha.
Các kênh YouTube đã cứu vớt tôi:
- The Net Ninja – Danh sách phát JavaScript của Shaun là huyền thoại. Anh ấy giải thích mọi thứ như đang nói chuyện với một con người, không phải một giáo sư khoa học máy tính.
- Web Dev Simplified – Kyle làm cho những điều phức tạp trở nên đơn giản. Video về React hooks của anh ấy cuối cùng đã giúp tôi hiểu được hooks sau nhiều tuần bối rối.
- Programming with Mosh – Phong cách giảng dạy của Mosh có cấu trúc và rõ ràng. Rất tốt cho các kiến thức cơ bản.
- Traversy Media – Các khóa học cấp tốc của Brad đã dạy tôi nhiều kỹ năng thực tế hơn bất kỳ khóa học trả phí nào.
Nhưng đây là bí quyết tôi học được: xem không phải là học. Tôi sẽ xem một video, tạm dừng nó, cố gắng tự xây dựng nó mà không nhìn. Phá vỡ nó. Sửa chữa nó. Đó là cách mọi thứ được ghi nhớ.
Tôi đã dành 6-8 giờ mỗi ngày để code. Không hề nói quá. Sáng, chiều, tối. Laptop của tôi về cơ bản là một phần mở rộng của cơ thể tôi. Cha mẹ tôi nghĩ tôi đang lãng phí thời gian. Bạn bè tôi nghĩ tôi bị ám ảnh.
Tôi đã bị ám ảnh. Và chính sự ám ảnh đó đã tạo nên sự khác biệt.
React: Framework Gần Như Đánh Gục Tôi (Cuối 2021-2022)
Khoảng cuối tháng 12 năm 2021, tôi thấy React xuất hiện khắp mọi nơi. Các tin tuyển dụng yêu cầu nó. Các nhà phát triển nói về nó. Thế là tôi lao vào.
Và tôi suýt bỏ cuộc hoàn toàn với việc coding.
React KHÔNG HỀ CÓ Ý NGHĨA gì trong tháng đầu tiên. Components? Props? State? JSX trông giống HTML nhưng không phải HTML? Chuyện quái quỷ gì vậy?
Tôi đã cố gắng học nó ba lần riêng biệt trước khi nó “click”:
- Lần thử đầu tiên: Xem một khóa học 10 giờ. Chẳng hiểu gì. Đau đầu. Bỏ cuộc.
- Lần thử thứ hai: Cố gắng tự xây dựng một cái gì đó. Dành một tuần vật lộn với lỗi. Lại bỏ cuộc.
- Lần thử thứ ba: Quay lại những kiến thức cơ bản. Đọc tài liệu React từ từ. Từng khái niệm một. Xây dựng các ví dụ nhỏ. Không tiến lên cho đến khi tôi hiểu.
Đó là lúc nó cuối cùng cũng “click”. React không phải là phép thuật. Nó chỉ là JavaScript với một cách tư duy khác về giao diện người dùng (UI).
Dự án đột phá của tôi? Một ứng dụng tìm kiếm phim sử dụng OMDB API. Gõ tên phim, xem kết quả, nhấp để xem chi tiết. Đủ đơn giản để hoàn thành, đủ phức tạp để thực sự học hỏi.
Sau đó, tôi đã làm một điều củng cố sự hiểu biết của mình: tôi xây dựng lại nó từ đầu mà không nhìn vào các hướng dẫn. Đó là lúc tôi biết mình thực sự đã học được nó, chứ không chỉ sao chép.
Các tài nguyên React hiệu quả:
- Tài liệu chính thức của React – Bắt đầu từ đây, nghiêm túc đấy.
- Hướng dẫn React của freeCodeCamp – Dài nhưng kỹ lưỡng.
Tôi đã đi sâu vào nó, à, nó đã “click”, nhưng không quá nhiều, nhưng này, tôi cũng đã đi sâu vào Node.js, tôi nhận được các dự án nhỏ tại địa phương, xây dựng các dự án, và thậm chí tôi đã thoải mái với React và Node nhưng tôi không phải là một “GURU”, tôi chỉ ở một mức độ nào đó.
TypeScript: Cấp Độ “Trùm Cuối” (2023-2024)
Đầu năm 2024, TypeScript xuất hiện khắp mọi nơi. Các tin tuyển dụng yêu cầu nó. Các nhà phát triển cấp cao thề thốt về nó. Đã đến lúc nâng cấp bản thân.
“Nó chỉ là JavaScript với các kiểu dữ liệu,” họ nói. “Dễ thôi,” họ nói.
Họ đã nói dối. TypeScript thật ĐÁNG THẤT VỌNG.
Mọi thứ tôi viết đều báo lỗi. “Tại sao cái này lại bị lỗi? Nó hoạt động tốt trong JavaScript mà!” trở thành tiếng hét hàng ngày của tôi vào hư không.
Sau đó, tôi tìm thấy Matt Pocock.
Matt Pocock và kênh YouTube của anh ấy là MỌI THỨ về TypeScript. Các hướng dẫn miễn phí của anh ấy trên Total TypeScript đã thay đổi tất cả.
Anh ấy giải thích TypeScript một cách dễ hiểu. Không hàn lâm, không quá phức tạp, chỉ thực tế.
Lộ trình học TypeScript thực sự hiệu quả:
- Danh sách phát TypeScript cho người mới bắt đầu của Matt Pocock trên YouTube.
- Hướng dẫn TypeScript miễn phí cho người mới bắt đầu trên Total TypeScript.
- Tài liệu chính thức của TypeScript – Tốt khi bạn đã có kiến thức cơ bản.
- Chuyển đổi một dự án JavaScript sang TypeScript (đau đớn nhưng rất bổ ích).
Các kiến thức TypeScript cơ bản bạn thực sự cần:
- Chú thích kiểu (Type annotations) cho biến và hàm.
- Giao diện (Interfaces) cho đối tượng.
- Kiểu hợp nhất (Union types – toán tử
|). - Generic cơ bản.
- Các kiểu tiện ích như
Partial,Pick,Omit.
Những gì bạn có thể bỏ qua lúc đầu:
- Các thủ thuật Generic nâng cao.
- Kiểu ánh xạ (Mapped types).
- Kiểu điều kiện (Conditional types).
- Các tệp khai báo (Declaration files).
Hãy học những thứ đó sau khi bạn thực sự cần chúng. Đừng tự làm quá tải bản thân.
Những Điều Thực Sự Giúp Tôi Phát Triển (Những Bài Học Thật)
Hãy bỏ qua những lời lẽ động viên sáo rỗng và tôi sẽ cho bạn biết điều gì THỰC SỰ đã giúp tôi nâng cấp bản thân:
1. Xây Dựng Các Dự Án Mà Tôi Quan Tâm
Ngừng xây dựng các ứng dụng todo. Hãy xây dựng thứ gì đó MÀ BẠN muốn sử dụng.
Tôi đã xây dựng:
- Trình theo dõi thói quen (đã sử dụng trong một năm).
- Trình quản lý ý tưởng dự án phụ (vẫn sử dụng).
- Tiện ích mở rộng Chrome chặn Twitter trong giờ làm việc (cứu vớt năng suất của tôi).
- Bảng điều khiển tài chính cá nhân (giúp tôi thoát khỏi cảnh rỗng túi).
Khi bạn sử dụng sản phẩm của chính mình, bạn sẽ tìm thấy lỗi. Bạn sẽ thêm tính năng. Bạn quan tâm đến việc làm cho nó tốt hơn.
2. Đọc Code Của Người Khác
Tôi tìm các dự án trên GitHub. Những dự án nhỏ, khoảng 500-1000 dòng. Đọc kỹ toàn bộ.
Tôi đã học được:
- Cách các dự án thực tế được cấu trúc.
- Các mẫu thiết kế mà tôi chưa bao giờ thấy trong các hướng dẫn.
- Những cách làm tốt hơn cho những điều tôi đã biết.
- Cách điều hướng một codebase.
Tôi đã đọc qua khoảng 30-40 dự án. Học được nhiều hơn từ đó so với bất kỳ khóa học nào.
3. Triển Khai Mọi Thứ
Đã xây dựng một cái gì đó? Hãy triển khai nó. Tôi không quan tâm nó xấu hay hỏng. Hãy đưa nó lên mạng.
- Vercel cho frontend – miễn phí, mất 2 phút.
- Railway cho full-stack – thay thế Heroku.
- Netlify cho các trang tĩnh – cũng miễn phí.
Có các dự án thực tế trên mạng > có các dự án trên localhost mãi mãi.
4. Viết Về Những Gì Tôi Đã Học
Tôi bắt đầu viết trên DEV.to khoảng năm 2022. Những bài viết ngắn về những gì tôi đã tìm hiểu được.
Hãy xem các bài đăng của tôi trên Dev.to.
Viết buộc bạn phải hiểu rõ. Và mọi người bình luận với những giải pháp tốt hơn. Bạn cũng học được từ đó.
5. Hàng Giờ Đồng Hồ. Lượng Thời Gian Khủng Khiếp
Không có lối tắt. Tôi đã dành 6-8 giờ mỗi ngày để code. Đôi khi còn nhiều hơn. Cả cuối tuần. Sáng sớm. Đêm khuya.
Không phải vì tôi kỷ luật. Mà vì tôi bị ám ảnh. Không thể ngừng suy nghĩ về những vấn đề tôi đang cố gắng giải quyết.
Nếu bạn không bị ám ảnh một chút, con đường này sẽ rất khó khăn. Hãy tìm ra điều gì khiến bạn bị ám ảnh về việc viết code.
Lộ Trình Tôi Sẽ Đi Nếu Bắt Đầu Lại Từ Đầu Hôm Nay
Biết tất cả những gì tôi biết bây giờ, đây chính xác là những gì tôi sẽ làm nếu bắt đầu lại từ con số không:
Tháng 1-2: HTML, CSS, Cơ Bản JavaScript
Tuần 1-2: Kiến thức cơ bản về HTML và CSS
- W3Schools cho các kiến thức cơ bản.
- Xây dựng 3 trang đơn giản (portfolio, landing page, bất cứ thứ gì).
Tuần 3-6: Kiến thức cơ bản về JavaScript
- javascript.info – Đọc các phần này: biến, hàm, mảng, đối tượng, vòng lặp, điều kiện.
- Xây dựng: máy tính, sổ điểm, trình tạo câu nói ngẫu nhiên.
- KHÔNG framework. Chỉ JavaScript thuần túy.
Tuần 7-8: Thao tác với DOM
- Học
querySelector,addEventListener,innerHTML. - Xây dựng: ứng dụng todo, bộ đếm, trò chơi đơn giản (oẳn tù tì).
Tài nguyên:
Tháng 3-4: JavaScript Hiện Đại + Bất Đồng Bộ
- Các tính năng ES6+: arrow functions, template literals, destructuring, spread/rest.
- Promises và async/await.
- Fetch API, làm việc với các API.
Xây dựng: Ứng dụng thời tiết, trình xem hồ sơ GitHub, tìm kiếm phim.
Tháng 5-6: React
Đừng động vào React cho đến khi JavaScript của bạn đã vững chắc. Nghiêm túc đấy.
Khi sẵn sàng:
- Hướng dẫn chính thức của React.
- Xây dựng 3-4 dự án nhỏ (Ý TƯỞNG CỦA BẠN, không phải hướng dẫn).
- Học sâu về hooks: useState, useEffect, useContext.
Tháng 7-8: Node.js và Backend
- Kiến thức cơ bản về Express.js.
- Các khái niệm về REST API.
- Cơ sở dữ liệu (MongoDB hoặc PostgreSQL).
- Xác thực (JWT hoặc sessions).
Xây dựng: Ứng dụng full-stack (todo, blog, hoặc CRUD đơn giản).
Tháng 9-10: TypeScript
BÂY GIỜ hãy học TypeScript, không phải trước đó.
- Các hướng dẫn miễn phí của Matt Pocock (Total TypeScript).
- Tài liệu TypeScript (TypeScript Docs).
- Chuyển đổi một dự án JavaScript sang TypeScript.
Tháng 11-12: Portfolio và Chuẩn Bị Tìm Việc
- Xây dựng 3-5 dự án thực tế.
- Triển khai mọi thứ.
- Viết về những gì bạn đã học.
- Thực hành phỏng vấn (đáng tiếc là cần thiết).
- Ứng tuyển việc làm.
Những Điều Nên Bỏ Qua Hoàn Toàn
Để tối ưu hóa hành trình học tập và tránh lãng phí thời gian, đây là những điều bạn nên bỏ qua hoàn toàn, ít nhất là ở giai đoạn đầu:
Bỏ Qua: Design Patterns Trước Khi Bạn Cần Đến Chúng
Singleton, factory, observer – hãy học những thứ này khi bạn cảm thấy được “nỗi đau” mà chúng giải quyết. Nếu không, chúng chỉ là những khái niệm trừu tượng khó hiểu.
Bỏ Qua: Nhiều Framework Cùng Lúc
Chọn React HOẶC Vue.js. Nắm vững một cái. Sau này, nếu cần, hãy học các cái khác.
Bỏ Qua: Vòng Lặp Tutorial Hell
Nếu bạn đã xem hơn 3 hướng dẫn về cùng một chủ đề, hãy dừng xem. Bắt đầu xây dựng.
Bỏ Qua: Chứng Chỉ
Không ai từng hỏi tôi về các chứng chỉ Udemy của tôi. Hãy xây dựng các dự án thay vì chạy theo chứng chỉ.
Bỏ Qua: Chủ Nghĩa Hoàn Hảo
Hãy đưa ra code hoạt động. Sau này hãy refactor. Code hoàn hảo nhưng không bao giờ được đưa ra thì vô giá trị.
Các Tài Nguyên Tôi Đã Lưu Bookmark (Những Thứ Thực Sự Có Ích)
Học Tập:
YouTube:
Dành Riêng Cho TypeScript:
Cộng Đồng:
- DEV.to – Viết về những gì bạn học được.
- freeCodeCamp – Chương trình học có cấu trúc.
- Frontend Mentor – Các đề án dự án thực tế.
Triển Khai (Deployment):
Những Sự Thật Khó Chịu Mà Không Ai Nói Với Bạn
Đây là những điều mà có thể bạn sẽ không nghe được từ những câu chuyện thành công hào nhoáng, nhưng chúng là một phần không thể tránh khỏi của hành trình phát triển bản thân trong ngành lập trình:
Sẽ Tốn Nhiều Thời Gian Hơn Bạn Nghĩ
Tôi đã làm việc 8 năm (2017-2025) và vẫn đang học hỏi mỗi ngày. Bạn không bao giờ “học xong”. Công nghệ phát triển quá nhanh.
Bạn Sẽ Thường Xuyên Cảm Thấy Ngốc Nghếch
Ngay cả bây giờ, tôi vẫn nhìn vào code và nghĩ “cái này là gì vậy?”. Cảm giác đó không bao giờ biến mất hoàn toàn. Hãy chấp nhận việc không biết.
Việc Tìm Được Công Việc Đầu Tiên Rất Khó Khăn
Tôi đã nộp đơn vào có lẽ hơn 100 công ty trước khi tìm được công việc đầu tiên của mình. Tuy nhiên, một khi bạn có kinh nghiệm một năm đầu tiên, mọi thứ sẽ dễ dàng hơn.
Hội Chứng Kẻ Mạo Danh (Imposter Syndrome) Là Có Thật
Tôi vẫn thỉnh thoảng tìm kiếm “cách căn giữa một div”. Các nhà phát triển cấp cao vẫn tìm kiếm những thứ cơ bản. Tất cả chúng ta đều đang tìm cách giải quyết vấn đề.
Bạn Không Cần Phải Biết Mọi Thứ
Hãy nắm vững MỘT chồng công nghệ (stack). JavaScript, React, Node, TypeScript. Chừng đó là đủ để được tuyển dụng và xây dựng những thứ thực tế.
Tôi Đang Ở Đâu Hiện Tại (2025)
Hôm nay, tôi là một nhà phát triển full-stack. Tôi làm việc với Node.js, React, TypeScript, PostgreSQL. Xây dựng các ứng dụng sản xuất mà mọi người thực sự sử dụng.
Tôi không phải là một thiên tài. Không phải là một kỹ sư siêu việt. Chỉ là một người đã dành rất nhiều giờ để viết code, làm hỏng mọi thứ, sửa chữa mọi thứ, và học hỏi từ những sai lầm.
Con đường từ những trang HTML xấu xí năm 2017, qua ngã rẽ CCNA, dự án cổng thông tin việc làm PHP năm 2020, đến các ứng dụng sản xuất ngày nay không phải là một đường thẳng. Nó lộn xộn. Đầy rẫy những khởi đầu sai lầm, những lần bỏ cuộc và quay trở lại.
Nhưng tôi sẽ làm lại tất cả. Có lẽ sẽ bỏ qua năm học CCNA (mặc dù trải nghiệm dòng lệnh đó đã giúp ích). Tập trung hơn vào việc xây dựng sớm hơn. Dành ít thời gian hơn trong “vòng lặp hướng dẫn” (tutorial hell).
Nhưng cốt lõi sẽ vẫn như cũ: xây dựng mọi thứ, triển khai nó, phá vỡ nó, sửa chữa nó, học hỏi, lặp lại.
Nếu Bạn Đang Bắt Đầu Hôm Nay
Bạn đang ở một vị trí tốt hơn tôi vào năm 2017. Có nhiều tài nguyên tốt hơn, công cụ tốt hơn, AI để giúp gỡ lỗi (nhưng đừng phụ thuộc hoàn toàn vào nó).
Nhưng những nguyên tắc cơ bản thì vẫn như cũ:
Dành hàng giờ viết code. Xây dựng các dự án mà bạn quan tâm. Triển khai mọi thứ ngay cả khi nó chưa hoàn hảo. Hãy chấp nhận cảm giác lạc lối vì cảm giác đó không bao giờ biến mất.
Bắt đầu với HTML và CSS. Sau đó là JavaScript thật sâu sắc. Đừng vội vàng nhảy vào các framework.
Rồi React. Rồi Node. Rồi TypeScript.
Từng bước một. Từng dự án một. Từng giờ một.
Trong vài năm nữa, bạn sẽ nhìn lại và nhận ra mình đã đi được xa hơn nhiều so với những gì bạn nghĩ là có thể.
***
Đó là câu chuyện của tôi. Câu chuyện thật. Không lối tắt, không thành công chỉ sau một đêm, chỉ là 8 năm làm việc kiên trì, học hỏi không ngừng, và rất nhiều giờ nhìn chằm chằm vào các thông báo lỗi lúc 3 giờ sáng tự hỏi điều gì đã sai.
Nếu bài viết này đã chạm đến bạn, hãy chia sẻ nó với ai đó đang cố gắng học lập trình. Tất cả chúng ta đều cần những câu chuyện thật, chứ không chỉ những khoảnh khắc nổi bật.
Theo dõi hành trình của tôi:
Tôi vẫn đang học hỏi, vẫn đang xây dựng, vẫn đang mắc lỗi. Hãy đến và chào hỏi nhé.
Elvis Sautet
Nhà phát triển Full Stack | JavaScript | TypeScript | React | Node.js
Có câu hỏi? Bạn nghĩ tôi sai về điều gì đó? Hãy liên hệ với tôi trên Twitter. Tôi chỉ là một nhà phát triển khác đang cố gắng tìm hiểu những điều này.



