Giải quyết vấn đề trong lập trình một cách hiệu quả

Giải quyết vấn đề là một kỹ năng quan trọng. Vấn đề luôn xuất hiện, và chúng ta luôn phải đối mặt và giải quyết chúng, có cả vấn đề đơn giản và vấn đề phức tạp. Các vấn đề trong lập trình có thể là một trong những loại sau đây:

  • Bạn làm theo tài liệu hướng dẫn để cài đặt phần mềm, nhưng phần mềm không hoạt động như mong đợi.
  • Bạn gặp một lỗi lạ. Có một error message xuất hiện và bạn không biết lỗi đó có ý nghĩa là gì, hoặc khó hiểu hơn là phần mềm tư đóng và không có message nào cả.
  • Trong dự án maintaince, bạn không biết phải phân chia code, ghép code vào phần nào trong project. Bạn ko biết dự án đó hoạt động như thế nào, không có ai hướng dẫn cho bạn cả.
  • Bạn gặp khó khăn khi chọn library, framework, cái nào sẽ phù hợp hơn với dự án. .. Qua các vấn đề bản thân và đồng nghiệp gặp phải, tôi có tích luỹ và tổng hợp lại vài gợi ý sau để bạn có thể tham khảo khi gặp phải các vấn đề.

Vì sao điều này lại quan trọng?

Giải quyết vấn đề là một kỹ năng quan trọng.

Tất cả chúng ta đều có vấn đề, từ lớn cho đến nhỏ. Đôi khi cách mà chúng ta giải quyết vấn đề của chính mình khá là … ngẫu nhiên.

Trừ khi bạn đã có một hệ thống rõ ràng hơn thì có lẽ là cách mà bạn “giải quyết” một vấn đề (đây cũng là lộ trình tôi làm theo khi mới bắt đầu viết code ):

  1. Thử một giải pháp nào đó.
  2. Thử một cách khác nếu nó không hiệu quả.
  3. Nếu vẫn không hiệu quả, lặp lại bước 2 cho đến khi may mắn mỉm cười với bạn.

Đôi khi may mắn sẽ đến nhưng thực tế đây  là một cách tồi tệ nhất khi giải quyết một vấn đề, nó khiến bạn lãng phí thời gian của mình.

Theo ý kiến cá nhân của mình, cách tốt nhất để giải quyết vấn đề chính là:

  1. Có một phương pháp cụ thể
  2. Thực hành nó thật nhuần nhuyễn liên tục

Báo cáo Hacker Rank’s 2018 Developer Skill có chỉ ra :

“Kỹ năng giải quyết vấn đề ở ứng viên gần như là một tiêu chuẩn không thể thiếu mà các nhà tuyển dụng tìm kiếm… Nó còn được săn đón hơn cả việc thông thạo các ngôn ngữ lập trình, khả năng fix bug hay thiết kế hệ thống.

Điều này cũng có nghĩa là những kỹ năng mềm như giải quyết vấn đề cũng quan trọng không kém các kỹ năng kỹ thuật cơ bản cho công việc.

Tại sao lập trình không chỉ dành cho các lập trình viên?

Hầu hết chúng ta mỗi khi nghe nhắc đến lập trình, đều sẽ nghĩ rằng đó là một công việc khá nhàm chán vốn chỉ dành cho những người yêu thích máy vi tính hoặc thích làm việc với những con số và logic. Nhưng bạn có biết rằng, học cách lập trình còn có thể mang lại lợi ích cho nhiều khía cạnh khác trong cuộc sống của chúng ta?

Nhiều nghiên cứu đã cho thấy việc học và sử dụng các ngôn ngữ lập trình một cách thường xuyên có khả năng thay đổi cách thức vận hành của não bộ. Được biết, khả năng về logic, phân tích, ngôn ngữ, tư duy trừu tượng và giải quyết vấn đề của các lập trình viên lâu năm nhìn chung cao hơn những người chưa từng học lập trình.

Vậy, các lập trình viên có phương pháp tư duy và giải quyết vấn đề như thế nào, chúng ta hãy cùng nhau tìm hiểu nhé!

Các lập trình viên tư duy như thế nào?

Điểm khác biệt quan trọng nhất giữa một lập trình viên và một người chưa từng học lập trình có lẽ nằm ở cách thức họ tiếp cận và giải quyết các vấn đề.

Khi đối diện với một vấn đề bất kỳ, một người chưa từng học lập trình thường sẽ:

1/ Thử áp dụng một phương án giải quyết vấn đề đó.

2/ Nếu phương án trên không thành thì áp dụng một phương án khác.

3/ Tiếp tục lặp lại bước số 2 cho đến khi tìm ra được phương án hiệu quả.

Về cơ bản, do cách giải quyết vấn đề như trên phụ thuộc phần lớn vào chuyện may rủi, nên nó vừa không hiệu quả trong mọi trường hợp, vừa gây mất thời gian.

Tự xây dựng một mô hình (framework) giải quyết vấn đề:

Trong khi đó, một lập trình viên lâu năm sẽ có hẳn cho mình một mô hình/hệ thống (framework) gồm một số bước cụ thể để giải quyết các vấn đề gặp phải. Đó là:

Hiểu được vấn đề:

Để giải quyết các vấn đề một cách hiệu quả, bạn cần nắm rõ được nguyên nhân chính xác đã tạo ra chúng. Bạn có thể tự bắt bản thân diễn tả lại các vấn đề để xem bạn có hiểu rõ chúng không.

Như cái cách mà Richard Feyman đã nói, “Nếu bạn không thể diễn tả một điều gì đó bằng những từ ngữ thật đơn giản, điều đó có nghĩa là bạn chưa hiểu rõ nó”.

Lập kế hoạch từng bước giải quyết vấn đề:

Sau khi hiểu rõ vấn đề, bạn nên lên một kế hoạch gồm các bước cụ thể để giải quyết, không nên vội vã bắt tay vào hành động.

Bạn có thể tự hỏi mình: với những dữ kiện và thông tin X, đâu là những bước cụ thể để có thể cho ra kết quả Y.

Chia nhỏ vấn đề:

Đây là bước quan trọng nhất. Khi đứng trước một vấn đề, bạn không nên tập trung vào việc giải quyết nó, mà nên chia nó thành những vấn đề nhỏ (sub-problems) và đơn giản hơn. Hãy cứ tiếp tục chia nhỏ các vấn đề cho đến khi bạn cảm thấy chúng đủ đơn giản và dễ giải quyết.

Sau đó, với mỗi vấn đề nhỏ, hãy đưa ra một phương án giải quyết (sub-solutions). Khi liên kết các phương án nhỏ này với nhau, bạn có thể tìm ra được phương án lớn cho vấn đề lớn của bạn.

Liên tục khắc phục các lỗi:

Có thể bạn sẽ hỏi: “Vậy nếu tôi không giải quyết được cả những vấn đề nhỏ thì sao!?”. Chà, lúc này bạn cần phải kiên nhẫn.

Trước hết, bạn cần phải xem lại toàn bộ hệ thống các bước giải quyết vấn đề của mình xem có trục trặc hoặc bất hợp lý ở chỗ nào, và cố gắng khắc phục. Dân lập trình thường gọi công đoạn này là debug.

Bạn cũng có thể cố gắng nhìn nhận vấn đề theo một góc nhìn khác, một khía cạnh khác. Bằng cách này bạn có thể tìm ra một phương án sáng tạo và hiệu quả hơn.

Sau cùng, nếu quá thiếu ý tưởng, bạn có thể tìm kiếm và tham khảo phương án của các lập trình viên trên Google. Bạn nên tích cực tham khảo ngay cả khi bạn đã giải quyết được vấn đề của mình.

Rèn luyện kỹ năng giải quyết vấn đề:

Ngoài việc tự xây dựng cho mình một mô hình giải quyết vấn đề, bạn cũng nên tích cực và chủ động trong việc tìm kiếm các vấn đề và rèn luyện kỹ năng xử lý chúng.

Bạn có thể tự mình rèn luyện kỹ năng giải quyết vấn đề thông qua các hoạt động như chơi cờ, tập giải toán, chơi sudoku, Monopoly (cờ tỉ phú), game, cryptokitties (game mua bán gà ảo), hoặc thông qua việc học và sử dụng các ngôn ngữ lập trình như Java, Go, Python, v.v…

Tổng kết

Trên đây là một số vấn đề cần lưu ý trong lập trình, mong rằng sẽ giúp ích cho bạn trong công việc.

Xem thêm:

Bài viết liên quan

Leave a Reply

Your email address will not be published.