Thứ Năm, 5 tháng 3, 2020

10 bước để viết thuật toán giải quyết các vấn đề trong lập trình

Mẹo dành cho các lập trình viên mới vào nghề không biết bắt đầu từ đâu

Tôi nghe một số developer mới vào nghề đang xoay sở và không biết bắt đầu từ đâu rằng họ hiểu vấn đề, hiểu logic, các syntax cơ bản, etc. Lúc nhìn code của người khác thì có thể hiểu, nhưng nếu tự làm thì lại không cảm thấy chắc ăn lắm khi chuyển suy nghĩ của mình thành code ngay cả khi họ hiểu syntax hoặc logic. Đây là trình tự hoặc là các mẹo để giải quyết các vấn đề(ví dụ) đó, hy vọng sẽ có ích với bạn.

1. Đọc vấn đề ít nhất 3 lần(hoặc cho đến khi nào bạn cảm thấy thoải mái)

Bạn không thể giải quyết vấn đề nếu bạn không hiểu(đừng thử vận may bằng cách sửa hàm này, sửa biến kia). Có sự khác nhau giữa vấn đề thực sự và vấn đề mà bạn nghĩ là mình đang sửa. Đọc vài line code đầu và bạn sẽ dễ dàng lâm vào sai lầm là giả định phần còn lại của nó cũng tương tự. Nếu làm một cái game nổi tiếng như Hangman, chắc chắn rằng mình đã đọc qua tất cả các rule ngay cả khi bạn đã từng chơi nó trước đó. Một lần tôi làm game giống Hangman và nhận ra rằng mình chỉ là "Hangman Quỷ Dữ" vì chỉ đọc hướng dẫn mà không đọc tất cả các rule. Vì vậy hãy đọc nốt pần code còn lại. Đừng hiểu một nửa, sẽ khiến bạn hiểu nhầm vấn đề, bỏ thêm thời gian lúc đầu này sẽ có giá trị, càng hiểu nhiều thì sẽ càng giải quyết vấn đề dễ dàng.
Giả vờ như chúng ta đang tạo một function đơn giản selectEvenNumbers là trả về một mảng các số chẵn evenNumbers trong một mảng hỗn hợp các con số chẵn lẻ. Nếu không có số chẵn nào cả thì trả về mảng rỗng evenNumbers
function selectEvenNumbers() {
  // your code here
}
Sau đây là vài câu hỏi chạy qua trong đầu tôi:
  • Làm thế nào mà máy tính biết số nào là chẵn? Chia nó cho 2 và xem phần còn lại có là 0
  • Tôi sẽ gán cái gì vào function này? Một array
  • Mảng đó chứa cái gì? Một hoặc vài con số One or more numbers
  • Kiểu dữ liệu của từng element trong array? Các con số
  • Mục đích của function này là gì? Tôi sẽ trả về những gì vào cuối function? Mục tiêu là lướt qua các phần tử và chọn ra các số chẵn rồi cho nó vào array và trả về ở cuối function, nếu không có số chẵn nào thì trả về array rỗng.