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

Thảo luận trong 'Kiến thức, kỹ năng lập trình' bắt đầu bởi nhatlectv, 22/2/18.

  1. nhatlectv

    nhatlectv Stanford - Nâng tầm tri thức Thành viên BQT

    Đâ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

    functionselectEvenNumbers(){
    // 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.
    2. Thử bằng tay ít nhất 3 set dữ liệu mẫu khi giải quyết vấn đề

    Lấy một mớ giấy viết và thử bằng tay ít nhất 3 set dữ liệu mẫu. Thử các trường hợp góc cũng như là cạnh
    Ví dụ, sau đây là một vài mẫu data có thể dùng:

    [1]
    [1,2]
    [1,2,3,4,5,6]
    [-200.25]
    [-800.1,2000,3.1,-1000.25,42,600]


    Khi mới bắt đầu, rất dễ bị bỏ qua các bước. Bởi vì não của bạn đã quen với các số chẵn, bạn sẽ nhìn vào các dữ liệu mẫu trên và tập trung vào các số như 2 , 4 , 6 và từ đó trở đi không còn cẩn thận làm toàn bộ các bước để khắc phục vấn đề. Nếu đây là thử thách, “thà một lần đau” thử sử dụng một lương dữ liệu mẫu thật lớn để tập cho não bạn thói quen xử lý chi tiết từng bước một

    Bây giờ hãy nhìn vào array [1]

    1. Soi vào element duy nhất của array [1]
    2. Xác định nó là chẵn hoặc lẻ
    3. Chú ý rằng không còn element nào khác trong array
    4. Thấy rằng không có số chẵn nào trong array này
    5. Trả về array rỗng
    Bây giờ hãy nhìn vào array [1, 2]

    1. Tập trung vào element đầu tiên của array [1, 2]
    2. Nó là 1
    3. Xác định nó là chẵn hay lẻ
    4. Tập trung vào element tiếp theo trong array
    5. Nó là 2
    6. Đúng nó là chẵn rồi
    7. Tạo một array evenNumbers và thêm 2 vào array này
    8. Chú ý rằng không còn element nào trong array này
    9. Trả về array evenNumbers trong đó có [2]
    Tôi làm như vậy vài lần. Chú ý là các bước tôi viết ra cho [1] có thay đổi một chút từ [1, 2]. Đó là lý do vì sao tôi thử với nhiều set dữ liệu mẫu khác nhau. Có vài set có 1 element, có set thì số thập phân thay vì số nguyên, một vài thì số có nhiều chữ số, một số thì là số âm…

    3. Đơn giản hóa và tối ưu hóa các bước

    Tìm các mẫu chung và xem có thể rút ngắn cái gì hay không, để có thể giảm một số bước lặp đi lặp lại

    1. Tạo một function selectEvenNumbers
    2. Tạo một array rỗng evenNumbers để lưu các số chẵn nếu có
    3. Lướt qua các element trong array [1, 2]
    4. Tìm element đầu tiên
    5. Xác định nếu nó là chẵn bằng cách chia hết cho 2 rồi add nó vào evenNumbers
    6. Tìm element tiếp theo
    7. Lặp lại bước #4
    8. Lặp lại bước #5 và #4 cho đến khi không còn element nào trong array
    9. Trả về array evenNumbers, không cần quan tâm có cái gì trong đó

    4. Viết code giả

    Ngay cả sau khi hoàn thành các bước chung chung, viết ra các mã để chuyển hóa ý tưởng sẽ giúp xác định được cấu trúc của code và làm cho việc viết code dễ dàng hơn nhiều. Viết code giả bằng tay từng dòng một. Bạn có thể làm trên giấy hoặc trên editor. Tôi đề xuất bạn viết trên giấy để tập trung tốt hơn.

    Mã giả nhìn chung không thực sự có quy tắc nào cụ thể nhưng đôi lúc, tôi vẫn áp dụng các syntax từ ngôn ngữ lập trình vì tôi đủ quen thuộc với ngôn ngữ đó. Nhưng đừng quá chú trọng syntax mà hãy tập trung vào logic và các bước chạy code trên kia

    Đối với ví dụ trên, có rất nhiều cách khác nhau. Ví dụ bạn có thể dùng filter nhưng để cho đơn giản và dễ theo dõi, chúng ta dùng vòng lặp for cơ bản(nhưng sẽ dùng filter sau, khi cấu trúc lại code).
     

Chia sẻ trang này