Cách học lập trình thất bại

Hôm nay mình chia sẻ một cách học lập trình để thất bại.

Một điều rất kỳ lạ là các bạn sinh viên rất thích học lập trình thất bại. Đạt đã nhận được rất nhiều câu hỏi ở dạng “anh ơi, chỉ em cách học lập trình thất bại”. Các câu hỏi đó trông như thế này

  • Anh có sách có bài tập C/C++/Java/XYZ và lời giải cho em xin với?
  • Xin bài tập của ngôn ngữ XYZ

Đạt không nói cách học này sai, nhưng cách học này chỉ phù hợp với học sinh tiểu học thôi. Học lập trình không phải để giải bài tập. Học lập trình để giải quyết vấn đề thực tế. Và một vấn đề thực tế thì không có lời giài như một bài toán

1 + 1 = ?

Nên nếu các bạn cứ chăm chăm tìm thêm bài tập để giải thì các bạn thất bại rồi. Đạt cũng từng giải bài tập khi mới học lập trình để lấy kiến thức cơ bản. Nhưng Đạt chưa bao giờ thấy việc tìm bài tập để giải là một giải pháp hay để nâng cao kỹ năng lập trình. Khi các bạn học cơ bản, số lượng bài tập các bạn cần quan tâm chỉ là để làm quen với các câu lệnh thôi. Thế nên các bài tập trên trường là đủ dùng.

Tìm thêm bài tập rồi giải nhiều bài tập cho đến khi nhuần nhuyễn là một thất bại của giáo dục. Cái các bạn trở thành sau khi giải nhiều bài tập không phải là một lập trình viên giỏi, mà các bạn trở thành thợ giải bài tập.

Đạt không phủ nhận việc làm thật nhiều đề toán, lý, hóa đã giúp Đạt đậu ĐH. Nhưng Đạt phủ nhận việc làm nhiều “bài tập” giúp mình kiếm được việc làm. Giải quyết các vấn đề mình gặp trong thực tế mang lại nhiều lợi ích hơn.

Hãy tập trung vào việc giải quyết những vấn đề mình gặp phải trong thực tế, giải quyết nó. Có rất nhiều vấn đề các bạn có thể làm được thông qua lập trình.

Ví dụ nhé

Ở nhà bố mẹ bạn mở quán ăn, có nhiều món ăn thay đổi giá tiền liên tục. Các bạn hãy viết một chương trình để in ra thực đơn, chọn thực đơn in ra giá tiền.

Nếu các bạn giỏi hơn, có thể làm nhiều thứ phức tạp hơn:

Viết chương trình nén và giải nén sử dụng thuật toán XYZ
Viết chương trình tìm đường đi ngắn nhất từ nhà mình tới trường
Viết lại một trò chơi mô phỏng một game cổ điển, caro, cờ tướng, …
Viết chương trình để chat nội bộ
Viết chương trình giống Teamviewer

Bạn thấy xyz hay, thử bắt chước làm theo. Nếu bạn làm như vậy bạn sẽ giỏi.

Bổ sung thêm một bài viết trên vinacode.net

125 Likes

mà em thấy với ng mới học như em cũng khó ạ

1 Like

Đối với người mới học, mình chỉ cần làm quen với các câu lệnh là được. Ví dụ như các câu lệnh nhập xuất chuỗi, các vòng lặp for, while, do while, các lệnh if else

Đối với các dạng lệnh như thế, các bài tập trên trường là quá đủ. @Duc_Hoang hỉ cần tập trung vào các bài tập này là được. Việc học ở phổ thông và học ở ĐH học khác nhau ở chỗ

  • Học ở phổ thông mình phải làm nhiều bài tập và học thuộc bài, thì sẽ được điểm cao
  • Học ở đại học mình phải nghiên cứu và sáng tạo chứ đừng học theo kiểu học lặp đi lặp lại cho nhuần nhuyễn.

Nghiên cứu tức là đọc sách, xem code của người khác, suy nghĩ tại sao họ lại làm vậy. Làm nhiều bài tập không thuộc về nghiên cứu, nó thuộc về luyện tập.

Vậy chọn sách nào? Thông thường sách trên trường sẽ không đủ, hãy lên mạng tìm các quyển sách được nhiều người đánh giá cao rồi mua/download về đọc. Một điều chắc chắn là các quyển sách này không phải là sách có bài tập và lời giải. Nó là những quyển sách dùng để nghiên cứu. Nó sẽ nói tới những vấn đề mà người mới học lập trình thắc mắc, giải thích những thắc mắc đó. Việc thực hành thì nhường lại cho trí tưởng tượng của người đọc, họ muốn làm gì, họ sẽ làm cái đấy.

Đạt không phủ nhận việc luyện tập là sai, cái đạt muốn nói ở đây là mình nên đầu tư nhiều hơn cho việc nghiên cứu. Một khi mình đã nghiên cứu được một vấn đề, thì tự động mình sẽ chuyển hướng sang thực hành. Đó là bởi vì khi mình đã nghiên cứu, mình sẽ chuyển từ dạng không biết, sang biết chút chút và tò mò. Nếu đã tò mò thì mình sẽ tìm mọi cách để giải quyết cái vụ tò mò đó. Lúc này mình sẽ phải nghĩ ra vấn đề và giải quyết nó. Vậy nếu vấn đề mình đang tò mò nó vẫn còn quá mơ hồ thì sao, đặt câu hỏi và thảo luận là giải pháp tốt nhất.


Yeah, ít ra Đạt cũng qua được môn triết học bằng cách học thuộc lòng hết tất cả mọi thứ thầy viết trong sách. Nhưng Đạt thật sự tiếc về môn học này, đáng lẽ ra nên dành nhiều thời gian để đọc sách triết hơn là học thuộc lòng.

Nói gì thì nói, triết học dành cho các ngành kỹ thuật ở vn chán không thể tả. Học thuộc lòng, chép đầy đủ mà được có 6-7 điểm gì à, chán :frowning:

61 Likes

hay quá anh ơi! em cũng đã nghĩ như vậy rồi,lúc làm em luôn nghĩ là phải áp dụng nó vào thực tế như thế nào? và hôm nay đã đc một chuyên gia như anh xác nhận việc này. :smile:

5 Likes

bài viết tâm huyết quá a Đạt .:slight_smile: . e mới tìm thấy 1 q sách có các bài toán thực tế mà lại áp dụng kiến thức học trên trường ý a ạ :smiley: , viết = tiếng việt nhé :blush:

10 Likes

:+1: chia sẻ với các bạn ở đây đi. Cái anh muốn chia sẻ là cái này này.

9 Likes

em ko có file mềm :smile: , e tìm trên thư viên trường , tên sách là " cấu trúc dữ liệu và giải thuật " , các bài toán của nó trình bày bằng giải thuật trước , rất dễ hiểu , nhưng sau đó lại code mẫu = pascal . :sweat_smile:

7 Likes

Chính xác là chỗ này, nếu em có những quyển như thế này, thì nhiệm vụ của em là convert code pascal ra code ngôn ngữ em đang học. Đây là cách để hiểu được nhưng kiến thức cơ bản của ngôn ngữ lập trình mới.

Anh hoàn toàn đồng tình với cách học này, và anh cũng là người học ngôn ngữ lập trình mới bằng cách này (nếu có thời gian nghiên cứu). Tức là anh chỉ chọn một số bài cơ bản anh đã làm ở ngôn ngữ cũ sau đó anh dịch sang ngôn ngữ mới. Nếu có nhiều thời gian hơn, anh sẽ làm các bài phức tạp hơn.

Nhưng anh lại kịch lịch phản đối cách học là đi tìm sách và giải thật nhiều bài tập. Vì cách này không phải là cách để phát triển kỹ năng lập trình. Cách này là luyện thi học sinh giỏi giải bài tập lập trình.

Thay vào thời gian đó, nên đi tìm các câu hỏi hay và trả lời các câu hỏi đó. Hoặc đọc thêm sách hay về ngôn ngữ đang muốn học. Hoặc đọc các quyển hướng dẫn cách code hay hơn.

11 Likes

Giờ sao thấy vì những năm cấp 3 của mình dạy không tốt, gv không biết gì về lập trình mà giờ thấy thua thiệt bạn bè, đâm ra chán nản anh ạ. Lên này học những cái cũng không thích và không biết nó giúp gì được cho mình, ai cũng tìm bài tập thêm làm, trong khi mình thì không. Rồi trường KHTN khi xưa nghe có tiếng nhưng vào rồi cũng không biết lý do nó nổi tiếng là vì gì, em thấy dạy cũng bình thường mà bằng cấp không phải cao như BK… Nói chung đang cảm thấy mất phương hướng anh ạ

10 Likes

Vấn đề không phải là do trường, mà là do cách mình học chứ :smile: Đừng bi quan thế.

13 Likes

Đúng vậy, bạn @genius_hcmus đừng quá coi trọng bằng cấp, mình không hiểu sao một câu rất đơn giản, ai cũng hiều là: “Hãy theo đuổi sự ưu tú (hay “Hãy theo đuổi đam mê”), thành công sẽ theo đuổi bạn.” mà lại có ít người tin và làm theo nó thế, nó đơn giản và sáo rống quá chăng?
Thực ra thì cũng không dễ vậy đâu, thỏa mãn đam mê hay được mọi người coi là ưu tú không phải chuyện dễ mà làm được. Mà chưa làm được thì cũng đừng nên coi nó là sáo rỗng :blush:

9 Likes

Vì một sự thật đơn giản, là ai cũng sợ rớt môn và không được ra trường đúng hạn. Ở trường em đang học, giáo viên hướng dẫn lớp em còn bắt em mua sách bài tập về làm như lúc luyện thi đại học nữa để điểm cho cao rồi nhận học bổng chơi nek. Nhưng em chưa rớt môn nào nên chưa sợ gì hết, phần lớn thời gian đều học tiếng anh với lập trình.

10 Likes

Anh thấy làm bài tập như vậy đâu có gì hứng thú đâu? Trừ phi em thực sự thích làm bài tập. Chứ anh thích làm cái gì thực tế hơn là ngồi cứ làm thật nhiều bài tập để nhuần nhuyễn, rồi điểm cao.

À, mà điểm cao cũng có lợi lắm. Nhưng Đạt thấy mấy đứa giỏi nó giỏi sẵn rồi. Nó đâu có làm bài tập như hồi luyện thi đại học đâu. Nó đọc sách + nghiên cứu nhiều. Sau đó nó tự viết/làm mấy món quái dị thôi.

17 Likes

Một thực tế bây giờ mới nhìn ra …

3 Likes

Phòng em cũng có một đứa như anh nói, nó toàn đọc sách gì mà liên quan tới hacker. Nhưng khổ cái là nó rớt một lượt 2 môn: giải tích với đại số tuyến tính mới tội chứ.

9 Likes

mình đc điểm cao mấy môn lập trình, còn 2 môn Giải tích và Đại số tuyến tính cũng không giỏi. Tại mình không hứng thú học mấy môn này, lúc gần thi 1, 2 ngày mới ôn cùng mấy đứa bạn nên lúc thi không làm đc nhiều, chỉ đủ qua. :blush: chứ mình thấy 2 môn đó không khó lắm, chăm học là làm dc thôi.

7 Likes

Như mấy môn này muốn qua môn thì cứ kiếm nhiều bài tập, làm nhuần nhuyễn là đậu thôi ấy mà. Không cần hiểu sâu, thi xong là quên hết. Cái này áp dụng được cho dân CNTT không muốn đi theo toán.

Tương tự với ngành khác, muốn qua môn Tin thì cứ kiếm nhiều bài tập, làm nhuần nhuyễn là đậu thôi.

Đó là lý do nếu mình muốn giỏi lập trình thì phải đi theo hướng nghiên cứu trước, sau đó mới quay lại thực hành cái mình đang thắc mắc. Chứ còn học theo kiểu thi ĐH vừa tốn sức, vừa không có kế quả.


Đạt không biết có ai đi làm rồi vẫn kiếm bài tập ra giải không nhỉ? Chắc là không, bởi vì giải có nhuần nhuyễn cũng không có ai cho điểm. Chỉ thấy đọc thêm sách, nghiên cứu thêm nhiều kỹ thuật rồi áp dụng vào thực tế thôi.

11 Likes

em cũng đọc giải thuật rồi code C cho nó thôi , trước e ko học pascal nên đọc cũng ko sâu dc :smile:
mà e cũng ko biết ở ngoài có bán quyển này ko , thấy cổ lắm ấy :grin:

2 Likes

thật ra thì giải tích và toán rời rạc nếu lập trình những vấn đề khó thì đều phải đụng tới cả, chỉ là nhiều hay ít thôi. Nên học 2 môn này ngoài qua môn cũng phải trao dồi nữa.
Ví dụ em hôm vừa rồi báo cáo đồ án cho nhập môn lập trình, em làm về giải mã Virgenere không khóa :smiley: thế là phải dùng các công cụ như thống kê, least square(công cụ này mới vào học giải tích B1 thầy đã chỉ, hên ghê :D) để lấy mã.
mình thấy các môn toán ở đại học cũng không kém tầm quan trọng đâu, chỉ là chưa có cơ hội sử dụng thôi. :smiley: nhưng mà ngồi giải bài tập thì đúng là chán chết ~~

8 Likes

các bạn mà học kỹ thuật thì sẽ rất khó khăn nếu ko nắm được kỹ công thức toán học nhé , rất khó để lâp trình đấy

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?