CHUYỆN TỰ HỌC HỌC LẬP TRÌNH
Kinh nghiệm sương máu gần 4 năm tự học lập trình của mình.

1. Từ con mồi thành thợ săn.
Hồi cấp 1, mấy cái game sandbox như Minecraft, Miniworld, Roblox,... thì mình khoái lắm. Điều làm mình thấy mấy cái game đấy cuốn ở chỗ là mình được cá nhân hóa, được xây map các thứ rồi chia sẻ với mọi người. Nhưng mà các bạn tưởng tượng xây map trên Roblox Studio, trigger trong Miniworld, rồi xây từng block một để lên một công trình mà bị mẹ gank rồi bắt xóa hết thì cay phải biết. (Mẹ mình cấm mình chơi game từ bé và mình cảm ơn mẹ vì điều ấy - mình sẽ kể ở một bài khác)
Mà vấn đề ở chỗ nó lâu ấy chứ!
Hồi đấy mình đã chơi game rồi mà còn lười được, chỉ muốn ăn sẵn, chẳng muốn xây tí nào. Vì những map mình xây ra thì còn gì là bất ngờ nữa. Chơi sinh tồn thì game nhiều khi muốn có chế độ A, vật phẩm B, con quái C hay công trình D mà nhà phát hành hết tiền nên chỉ toàn ra thêm mấy cái skin thổ tả gì ấy, mà mình thì có bao giờ quan tâm đến mấy cái đấy?
Vậy là mình thề rằng sẽ có một ngày mình sẽ tạo ra một cái game hay và cuốn đến nỗi làm mấy đứa trẻ phải dốc tiền vào nó. Vậy đấy, cách mình có đam mê với lập trình bắt nguồn từ ấy!
2. Learn [sh] it [s] the hard way.
Một trong những bài học đắt giá nhất đó là ĐỪNG ĐỐT CHÁY GIAI ĐOẠN và KHÔNG CÓ ĐƯỜNG TẮT khi tự học!
Sau đây là ví dụ thực tế nhất về chính mình mà mình đã rút ra từ chính thời gian và công sức mình bỏ ra.
Đầu cấp 2, mình biết đến cái gọi là Unity, một platform để làm game và ứng dụng miễn phí và đã được sử dụng để tạo ra rất nhiều game từ cơ bản đến chi tiết, lồng lộn như Soul Knight. Khi ấy thì mình có xem video của 1 youtuber tên Dani (link mình sẽ đính kèm bên dưới), những video của anh này khá thú vị nhưng không giúp ích gì nhiều cho việc học lập trình nói chung và game dev nói riêng. Nhưng hồi ấy dù mình học cấp một ở Vinschool đấy, nhưng tiếng Anh vẫn mù dở điếc dở, cộng thêm với việc chưa có kinh nghiệm nên mình cứ tải hết Blender, Unity, đủ các thứ vào con lap của bố mình do cái máy i3 thế hệ 4 đời Tống của mẹ mình cho mình nói cùi quá, bộ nhớ còn kém nữa (mình cũng nghị lực phết, đến giờ lớp 9 rồi vẫn đang viết bài này trên cái máy đấy này :)
Thế là mình thử mở một cái tutorial lên mà bấm những nút mấy anh Ấn Độ này bấm, kéo những tab mà anh Da trắng đeo kính kia kéo, nút nào mình không thấy thì mình sẽ mặc định rằng đấy là do phần mềnh,... được một tuần thì mình nhận ra rằng ngoại trừ cái terrain rởm thì mình chả biết cái con khỉ gì nữa. Thậm chí không một dòng code!
Sau 1 năm lên lớp 7, tiếng Anh của mình đã cải thiện nhiều, mình đã nghe hiểu rõ hơn và năm ấy cũng là lúc mình đòi bố mẹ mua điện thoại nữa, điều quan trọng là nhờ đấy là mình tìm hiểu về công nghệ rất nhiều, và đó quả là 1 bước tiến lớn khi mình hiểu được cách vận hành của thiết bị điện tử. Rồi mình thử lại với một engine khác là GameMaker Studio và thực sự có tiến triển, mình đã học cả syntax, code của GML (một ngôn ngữ lập trình riêng của GameMaker Studio) và đã thực sự tạo ra 1 game 2D đơn giản. Những gì mình làm vẫn là xem, copy code nhưng đã cố hiểu và mỗi khi gặp lỗi, mình sẽ lên mạng tra cách giải quyết. Nhưng mình nhận ra rằng GML không phải là một ngôn ngữ lập trình có tính ứng dụng cao và có thể sử dụng ở ngoài engine cộng với việc GMStudio không hỗ trợ xuất file .apk nên mình quyết định tạm nghỉ một thời gian...
3. Vượt qua đáy của Dunning-Kruger!
Cho những ai chưa từng nghe đến hiệu ứng Dunning-Kruger thì mình xin để link nhé, lười giải thích lắm, sorry mọi người.
Thì đó là câu chuyện của năm lớp 8, khi mình bắt đầu học một cách nghiêm túc Python, ấy mà nói vậy chứ mình cũng chỉ nhớ được đến phần về list với cả function thôi.
Thì khoảng cuối năm ấy (nói năm ấy cho sang vậy thôi chứ từ lúc đấy đến giờ chưa được nửa năm : ), mình có tham gia một cuộc thi lập trình của quận, trường mình cử mỗi mình đi vì trường nhỏ mà, có khi có mỗi mình biết code. Tối hôm trước khi đi thi, mình nhìn cái đề mẫu mà nản, mình cố học thêm được nhiều nhất có thể. Nhưng đúng thật, 3 tiếng làm bài hôm sau y như là 3 tiếng đi net vậy! Vì mình đọc đề mà chả hiểu gì cả, từ cách nhập input đến thuật toán rồi thì điều kiện,... Lúc đấy cảm thấy tuyệt vọng thực sự ấy!
Sau lần đấy, mình quyết tâm học một các tử tế hơn. Và gần đây, mình đã học thử 7 ngày 1 phần mềm tên là Brilliant, chất lượng thật nhưng giá chát quá! Vậy nên sau khi hoàn thành khóa Python cơ bản trên app đấy, mình chuyển qua tự học C# và tạo một project Unity mới.
Nếu bạn nào đọc bài "Phương pháp vô ích- lập thời gian biểu" của mình trên spidderum rồi thì có thể sẽ nhớ tới bà chị họ hoc ngành IT của mình, thì chị ấy học C++ nhưng mà mình muốn trung thành với C# vì Unity hỗ trợ chủ yếu ngôn ngữ ấy và C# với C++ có kha khá điểm tương đồng.
Mọi thứ đang có tiến triển khá tích cực, mình sẽ cập nhật tiếp sau....
4. Kết luận.
Mình thực sự tiếc thời gian mình bỏ ra vô ích, chẳng ít đâu, 3 năm đấy. Nhưng nghĩ kĩ lại thì nếu không nhờ 3 năm ấy thì có khi bây giờ mình cũng chẳng ngồi đây viết bài này rồi. Vì tích cực mà nói, chính những thất bại đã mang mình tới ngày hôm nay, những lời của mấy anh Tây hoàn toàn đúng. Mình khuyên các bạn nên học theo, nhưng mình cũng khuyên các bạn hãy tìm cách học riêng cho bản thân mình!
Còn một điều quan trọng! Nếu các bạn có đam mê với lập trình, hãy cố gắng đầu tư một ông thầy bằng xương bằng thịt hoặc một khóa học tử tế, đừng như mình, kém hiệu quả lắm.
5. Khuyên chân tình này...
Nếu ông nào định học lập trình một mình thì cái mindset quan trọng nhất đó là dẹp ngay mấy cái ý tưởng về game AA hay AAA đi, có khi cả game indie cũng còn khó nữa ấy!
Nhưng nếu có một nhóm 3 đến 4 người thì chưa ai nói trước được điều gì đâu nhé, cứ cố đi, trong tiếng anh có câu: "Many hands make light work" mà.
Byeee!

Quan điểm - Tranh luận
/quan-diem-tranh-luan
Bài viết nổi bật khác
1. Tự học kiến thức thường sẽ rời rạc, nên bỏ thời gian học những cái cơ bản nhất về computer science. Cái này anh recommend khóa CS50 của Harvard, miễn phí trên edx, học xong thích thì có thể trả phí lấy cái certificate cũng đc.
2. Cấu trúc dữ liệu và giải thuật, trong khóa CS50 bên trên có nói về nó, sau có thể tiếp tục tìm hiểu thêm về cái topic này, nhiều khi chỉ cần chọn đúng cấu trúc dữ liệu thôi là bài toán bớt khó đi nhiều rồi.
3. Xong 2 cái trên thì sau này học thêm về database, networking, system design,...
4. Mentor, sau này đi làm mà thấy ông nào giỏi thì có thể bám theo để mà học hỏi họ, nhiều cái họ chỉ cho mình thì sẽ rút ngắn thời gian đi nhiều so với việc tự tìm hiểu. Sau này cũng từ những người như vậy hình thành 1 cái network nho nhỏ để trao đổi, chia sẻ kiến thức cũng sẽ rất hay.
5. Soft-skills, dân IT đa phần bỏ qua mấy cái này, từ kỹ năng giao tiếp, giải quyết vấn đề, sắp xếp công việc,...
Tự học là việc rất khó, đôi lúc cũng nản nhưng mà khi vỡ ra một cái gì đó mới thì cũng rất vui. Chúc em thành công.