post-image

Tại Sao Bạn Thường Tạch Thuật Toán Khi Phỏng Vấn?

1. Tổng quan
Trước khi lên Đại học, tất cả những gì tôi làm với máy tính chỉ là lên facebook, chơi game, đọc truyện, xem phim…. Thậm chí, tôi đã suýt tạch môn ngôn ngữ lập trình trong năm đầu tiên. Nhìn chung là cũng chán, tôi có thử nói chuyện với vài anh em khóa trên và bạn bè nhưng cũng chẳng mấy khả quan, và thậm chí lúc đó, tôi đã nghĩ rằng thôi xong, mình xin giã từ cái nghiệp lập tình từ đây.

Tại sao cần thuật toán?

Khi lên năm 3, một người bạn đang giải thích thuật toán đệ quy để in ra số Fibonacci thứ n. Cậu ấy nói với tôi rằng code này rất xấu vì máy tính sẽ mất vài năm để tạo ra kết quả cho một giá trị lớn của n!!!
Tôi hỏi: “Thật á. Thế quái nào lại thế được???”
“Độ phức tạp thời gian của thuật toán này là một hàm số mũ của n”. Cậu bạn vẫn tiếp tục giải thích cho tôi ý tưởng về sự phức tạp của thời gian và đưa ra bằng chứng.
Tôi hoàn toàn ngạc nhiên và nói, “Thế sao anh em mình thằng quái nào cũng phải code cái này này trong kỳ kiểm tra năm nhất?”
“Bởi vì đấy chỉ là một bài thi, học thuộc rồi viết ra chứ hầu như đếch ai quan tâm đến hiệu suất cả!”.
 
 
 
Lập trình viên không thể thiếu thuật toán
Sau đó, cậu bạn này đã chỉ cho tôi giải pháp tốt hơn thông qua cách tiếp cận từ dưới lên của lập trình động. (Thực ra sau này tôi còn phát hiện ra rằng Luỹ thừa ma trận mới là giải pháp tốt nhất cho số Fibonacci thứ n vì nó có độ phức tạp về thời gian là O (logn)).
Đây gần như là bước chuyển đầu tiên khi tôi hiểu được tầm quan trọng của Thuật toán, nó đã giúp tôi thay đổi suy nghĩ của mình. Thậm chí, sự tò mò của tôi còn cao đến mức tôi đã nghiên cứu cuốn sách Giới thiệu về Thuật toán hai lần trong vòng 100 ngày (LoL ;))))) )

5 thách thức trong việc học thuật toán

Giờ đây, việc học và giải quyết các vấn đề về cấu trúc dữ liệu và giải thuật đã trở thành một trong những “đam mê” của tôi. Sau 4 năm trải nghiệm với tư cách 1 sinh viên và thêm 5 năm nữa làm việc trong ngành IT, sau đây tôi chia sẻ 5 thách thức hàng đầu trong việc học Thuật toán và Cấu trúc dữ liệu và khi đi phỏng vấn của các bạn trẻ hiện nay:

1. Thiếu sự học hỏi liên tục:

Học lập trình không phải câu chuyện ngày một ngày hai, không phải những lời mời chào kiểu “3 tháng thông thạo Python”, “6 tháng tự tin xin việc Frontend”. IT là một môi trường khắc nghiệt, nơi học sinh phải có được các kỹ năng cơ bản trước khi học lên cấp độ nâng cao. Học sinh thường thiếu tư duy, mất định hướng và bị mắc kẹt trong các ví dụ phức tạp như chính tôi trong câu chuyện phía trên. Cuối cùng, chúng ta thường bắt đầu ghi nhớ các giải pháp máy móc chẳng mấy hiệu quả, những giải pháp được soạn sẵn từ cách đây cả 10, 15 năm, khiến bản thân mình mất điểm trầm trọng trong mặt nhà tuyển dụng.

2. Yêu cầu về đa kỹ năng:

Các bạn nên học cách diễn giải câu lệnh, thiết kế thuật toán chính xác và dịch nó thành mã chương trình. Hiểu về ứng dụng thực tế của các thuật toán cũng rất hữu ích, không chỉ giúp bạn nhớ lâu hơn mà còn phát triển tư duy thuật toán và hỗ trợ trong công việc sau này. Đừng chỉ học thuộc, bạn cần không ngừng tư duy, suy nghĩ và lật đi lật lại vấn đề để có được kiến thức tốt nhất.

3. Thiếu nhận thức về thuật toán:

Hầu hết sinh viên cho rằng thuật toán là một cái gì đó kinh khủng tởm và khó khăn vô cùng. Tư tưởng này dần được truyền qua hết thế hệ này tới thế hệ khác, khiến mọi người nảy sinh tâm lý sợ hãi ngay cả khi chưa kịp học thuật toán. Điều này không hẳn đúng. Thuật toán nào thì cũng “có this có that” cả.
 

4. Khả năng hợp tác và giải quyết vấn đề kém:

Đây là một vấn đề chung của sinh viên tại Việt Nam. Nhiều bạn cảm thấy “ngượng” khi phải hỏi 1 câu hỏi nào đó và cho rằng thật ngớ ngẩn và mất mặt. Thực tế rằng những thắc mắc đó đều hết sức bình thường và ai trong chúng ta cũng đều có thời “ngok nghek” như vậy cả. Một số khác lại gặp khó khăn khi làm việc cùng người khác và từ chối việc hợp tác. Muốn đi nhanh thì đi một mình, nhưng muốn đi xa thì nên đi cùng nhau. Việc học cùng người khác và giải quyết vấn đề chung sẽ giúp bạn học được nhiều thứ giá trị hơn rất nhiều, cũng như mang đến một cái nhìn “đa chiều” hơn cho cùng 1 vấn đề, từ đó đưa ra được giải pháp tối ưu nhất.

5. Không chắc chắn về kế hoạch nghề nghiệp:

Học lập trình giúp sinh viên có được một công việc được trả lương cao nhưng hầu hết trong số họ không rõ về các kỹ năng cần thiết để phát triển. Tìm kiếm một công ty và vị trí mà họ quan tâm là một thách thức nghề nghiệp quan trọng. Học thuật toán cũng vậy, bạn không thể cứ hùng hục học mà không quan tâm mình học để làm gì, mình theo đuổi lĩnh vực gì. Có những lĩnh vực không cần nhiều đến thuật toán thì bạn không nhất thiết phải giành quá nhiều thời gian cho nó mà bỏ đi những kỹ năng, kiến thức quan trọng khác. Thuật toán không phải là tất cả, code cũng thế.

Tạm kết

Mong 5 điều trên đây sẽ giúp các bạn phần nào có một cái nhìn đúng đắn và hiệu quả hơn trong việc học thuật toán và cấu trúc dữ liệu của mình. Thuật toán không phải “con ngáo ộp” ăn thịt bạn, sợ quái gì mà không “giết” nó?

Tham khảo:10 thuật toán mà mọi lập trình viên cần biết.

Tham gia KHOÁ HỌC CGC JAVA TRỞ THÀNH LẬP TRÌNH VIÊN JAVA FULL-STACK TRONG 6 THÁNG

Leave a Reply

Your email address will not be published. Required fields are marked *