KIỂM TRA
Và sau khi code xong, tất nhiên bạn cần test bằng các test case để xem chương trình của mình đã tốt và đáp ứng được yêu cầu chưa. Tại thời điểm này, các ví dụ bạn đưa ra ở bước 2 sẽ trở nên quá đơn giản và tầm thường, nhường chỗ cho các trường hợp thử nghiệm làm cạn kiệt tất cả các trường hợp có thể xảy ra và ngoại lệ trong bài toán. Nếu bạn đang luyện trên các trang web thuật toán, sẽ có hệ thống kiểm tra giúp bạn.
Nếu xảy ra lỗi hoặc sự cố, hãy lưu ý về cú pháp và lỗi chính tả mà bạn có thể mắc phải trong chương trình, xem xét từng dòng và sử dụng gỡ lỗi gỡ lỗi nếu cần để sự cố có thể được giải quyết. Nếu chỉ là những lỗi cơ bản như lỗi cú pháp, hệ thống gỡ lỗi sẽ giúp bạn tìm ra những lỗi đơn giản. Nhưng nếu đó là một lỗi phát sinh trong quá trình chạy chương trình, thì “của tôi”. Cách dùng thì các bạn tìm hiểu thêm trên mạng, mình không nói nhiều ở đây.
Nếu bạn trượt một số bài kiểm tra, hoặc thậm chí thất bại tất cả, hãy kiểm tra lại với các trường hợp kiểm tra nhỏ để xem vấn đề nằm ở đâu. Phân tích cách chương trình của bạn chạy, xem từng dòng mã, bạn sẽ sớm tìm ra vấn đề ở đâu đó. Đi từ các trường hợp thử nghiệm nhỏ đến các trường hợp thử nghiệm lớn, sau đó là các trường hợp thử nghiệm chứa các trường hợp đặc biệt. Phân tích và suy nghĩ cẩn thận để có thể giải quyết vấn đề còn tồn tại trong chương trình của bạn và giải quyết nó.
Hãy nhớ rằng, thực sự tập trung vào các trường hợp thử nghiệm. Và khi bạn kiểm tra, bạn đang kiểm tra chương trình, không phải thuật toán mà bạn có. Nếu chương trình không có vấn đề, thì hãy nghĩ về thuật toán. Nếu lỗi thực sự nằm ở thuật toán không phù hợp, hãy nghĩ ra một thuật toán khác, một hướng đi mới, đừng “cố đấm ăn xôi”.
Một lưu ý nhỏ cuối cùng là hãy sửa lỗi bằng trái tim của bạn. Đừng đối phó với cách bạn xem các bài kiểm tra là đúng sau đó bạn trả về đúng cho chương trình của mình hoặc đại loại như thế. Nó cho thấy bạn đang quá hời hợt với những nỗ lực của mình, hoặc bạn chưa hiểu rõ vấn đề. Hãy suy nghĩ kỹ về vấn đề gây ra lỗi, đừng cố gắng sửa nó để thỏa mãn 1 hoặc 2 trường hợp, vì có thể lỗi các trường hợp khác. Hãy luôn giữ một đầu óc tỉnh táo và suy nghĩ một cách toàn diện nhất, tập trung vào vấn đề mà bạn đang hướng tới, đừng “con săn sắt bỏ con cá rô”.
Nếu bạn gặp khó khăn và cảm thấy nó mất quá nhiều thời gian, hãy kiên trì với nó và nhớ rằng khi bạn đã quen với nó, bạn sẽ giải quyết nó nhanh hơn vào lần sau. Tất nhiên, nếu nó làm bạn khó chịu và bạn thực sự dành nhiều thời gian cho nó, hãy để nó ở đó và quay lại khi nó sẵn sàng. Đừng bỏ cuộc.
Đó là điều chúng ta cần làm khi giải một bài toán bằng thuật toán, nhưng không có nghĩa là xong. Khi chúng ta nghiên cứu hay thực hành một điều gì đó, bao giờ cũng phải dành thời gian sau khi kết thúc để tổng kết lại những gì chúng ta đã làm cũng như đã nhận được. Đặt câu hỏi như:
- Tôi có thể tối ưu hóa thuật toán này nhiều hơn không?
- Tôi đã gặp vấn đề gì khi giải quyết nó?
- Có sai lầm nào mà tôi thường lặp đi lặp lại không? Làm thế nào để hạn chế tối đa những sai sót phát sinh trong tương lai?
- Làm thế nào có những người khác thực hiện bài này? Tôi có thể học được gì từ họ?
Chúng tôi luôn tích lũy kinh nghiệm từ những gì chúng tôi làm (và những người khác cũng vậy). Đó là một kho tàng vô cùng quý giá để bản thân khai thác và chuẩn bị cho sau này giúp bạn phát triển hơn nữa trong tương lai, vì vậy đừng lãng phí nó. Nếu bạn thực hành giải các bài toán “giải bài toán” trên các trang đào tạo thuật toán như hackerrank, leetcode hoặc geeksforgeek, v.v., thì luôn có một phần ban lãnh đạo gồm những người đã giải bài toán trước bạn. Hãy dành thời gian xem code của họ, điều này vừa giúp bạn hiểu code, vừa giúp bạn bao quát được những ý tưởng hay, thuật toán tối ưu hơn trong những trường hợp tương tự với bài toán. Bạn sẽ thấy mình học hỏi được rất nhiều điều từ những người này, và nó sẽ giúp bạn phát triển hơn cả về khả năng triển khai code, tư duy giải quyết vấn đề cũng như cách bạn chọn thuật toán và cách sử dụng chúng. Sử dụng các hàm có sẵn (bằng ngôn ngữ lập trình của bạn) để giải quyết vấn đề nhanh hơn và tiết kiệm nhiều công sức hơn.
Nhiều khi cách giải của bạn rất tối ưu và ngon lành, nhưng khi xem lại cách giải của người khác, bạn sẽ thường bất ngờ với những ý tưởng không thể ngờ tới của những “bộ óc thiên hạ” đó, bạn luôn có thể rút ra bài học cho mình từ họ, kiểu như có thể suy nghĩ từ nhiều hướng, từ nhiều phía, từ nhiều khả năng. Và nhớ là để hiểu code của họ thể hiện cái gì, bao hàm cái gì thì bạn phải hiểu nó trước đã. Và khi gặp bài toán có thể “mượn” ý tưởng đó từ những anh em đi trước giỏi, bạn có thể vận dụng nó theo cách của mình. Cover nhưng đừng sao chép, hãy là một nghệ sĩ thay vì một “pháp sư”.
Nhiều người khi tiếp cận với thuật toán đều nghĩ mình không có năng khiếu hoặc không làm được, nó khó nhớ đến nỗi mình thực sự không phù hợp với nó, nó quá khó đối với tôi. Tuy nhiên:
Đừng bao giờ nghĩ rằng bạn không có tài năng hay khả năng gì đó và từ bỏ, bạn luôn có thể tận hưởng nó khi bạn tiến bộ hơn, nếu bạn không có tài năng, bạn chỉ cần làm tốt công việc của mình. có thể được, và rồi bạn sẽ thấy nó thú vị. Hi vọng mọi người sẽ quan tâm hơn đến thuật toán. Hẹn gặp lại sau!