Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Chúng ta chắc hẳn ai cũng mong muốn kĩ năng code của mình ngày một tốt hơn. Bằng cách học nhiều hơn, làm nhiều hơn để tích luỹ thêm nhiều kinh nghiệm trong xử lý vấn đề. Sau này khi đối mặt với một vấn đề cũ thì có thể giải quyết nó một cách dễ dàng, đơn giản vì khi đó chúng ta đã có kinh nghiệm xử lý chúng.
Nhiều người thường dựa vào số năm kinh nghiệm để đánh giá một người code giỏi hay không. Điều này cũng khá hợp lý trong trường hợp chúng ta có quá ít thời gian để tiếp xúc và đánh giá họ, hay cũng có khả năng là không đủ năng lực để đánh giá. Thực tế vẫn có những người ít tuổi hơn nhưng vẫn có khả năng xử lý vấn đề rất giỏi. Số năm kinh nghiệm lúc này cũng chỉ mang tính tham khảo vì không chắc chắn rằng cứ code lâu hơn sẽ giỏi hơn người code ít hơn.
Như Malcolm Gladwell đã viết trong cuốn sách “Những kẻ xuất chúng” của ông về “10.000 giờ là con số kỳ diệu của sự vĩ đại” tức là bạn sẽ trở nên thực sự giỏi một vấn đề nào đó khi làm việc với nó ít nhất 10.000 giờ. Đến nay con số 10.000 giờ vẫn còn đang gây nhiều tranh cãi, liệu cứ phải trải qua một mốc thời gian đã định thì bạn sẽ giỏi lên hay là còn cách nào khác để vượt qua nỗi ám ảnh của con số này không?
Tư duy lập trình là gì?
Đơn giản đó là cách giải quyết vấn đề bạn gặp phải một cách hiệu quả. Nhưng thế nào là hiệu quả? Điều đó phụ thuộc vào vốn kiến thức và kinh nghiệm của mỗi người.
Nếu cho bạn lựa chọn giữa 3 thứ dao, kéo và liềm để mở một gói Snack bạn sẽ chọn cái nào? Chắc chắn bạn sẽ chọn kéo vì bạn biết kéo là cách đơn giản nhất để mở gói. Nhưng liệu một đứa trẻ sẽ biết lựa chọn thứ tốt nhất trong số chúng? Về cơ bản deo, kéo hay liềm đều có thể mở được gói snack nhưng bạn đã quá rõ về chúng nên bạn biết cách để sử dụng chúng sao cho hiệu quả.
Quay về thế giới của lập trình viên, việc bạn biết cách áp dụng một công cụ, phương pháp… để giải quyết một vấn đề sao cho phù hợp và chính xác nhất đó chính là tư duy lập trình của bạn.
Có một sai lầm phổ biến của những người mới học code là chăm chút vào học (thuộc) mã mà không rèn luyện khả năng tư duy. Có rất nhiều ngôn ngữ mà mỗi ngôn ngữ có rất nhiều cú pháp khiến bạn không thể nhớ hết được. Nhưng khả năng tư duy lại tồn tại xuyên suốt trong các ngôn ngữ.
Để đạt được điều đó đòi hỏi bạn phải bỏ ra một cơ số giờ để tìm hiểu và thực hành hết tất cả kiến thức. Điều đó sẽ mang đến cho bạn tư duy lập trình. Con số 10.000 giờ kia chỉ mang tính tham khảo khi bạn biết mình nên tập trung vào đâu để đến đích nhanh nhất.
Những người có tư duy lập trình tốt thường sẽ có suy nghĩ về cách giải quyết một vấn đề khá giống nhau. Ai cũng từng là thực tập sinh và khi nghe những người có kinh nghiệm hơn nói chuyện với nhau về cách giải quyết một vấn đề nào đó, trông họ có vẻ trao đổi rất trơn tru nhưng mình lại chẳng hiểu gì cả, đơn giản vì bạn chưa đạt đến trình độ của họ để có tư duy lập trình đó.
Làm sao để rèn luyện tư duy lập trình?
Lời khuyên: Cứ làm và làm cho đến khi bạn tìm ra được cách tốt nhất để giải quyết. Không bao giờ hài lòng với cách cách giải quyết vấn đề của bạn vì mỗi cách luôn luôn tồn tại những ưu nhược điểm khác nhau.
Để đạt được điều đó, chung quy có 4 bước để mô phỏng quá trình này đó là:
Hiểu
Đầu tiên bạn cần phải hiểu được chính xác yêu cầu là gì. Hầu hết các vấn đề khó là vì bạn chưa hiểu chúng. Vậy làm sao để bạn hiểu được? Hãy thử giải thích chúng, điều đó cũng góp phần hình thành nên phương pháp “vịt cao su” nổi tiếng. Mấu chốt của phương pháp là bạn giải thích vấn đề đó với vịt cao su, nếu hiệu quả bạn sẽ phát hiện ra những lỗ hổng trong kiến thức của bạn.
Vịt cao su là một phương pháp nổi tiếng trong ngành lập trình trên thế giới. Về cơ bản việc bạn giải thích cho vịt cao su cũng chính là cách để kiểm tra xem bạn có thực sự hiểu vấn đề, vì chỉ khi hiểu bạn mới có thể giải thích lại được. Hơn thế trong quá trình giải thích bạn sẽ nhận ra được nhiều vấn đề mới phát sinh để từ đó tìm ra cách giải quyết chúng.
Có một câu nói nổi tiếng trong trường hợp này là “Nếu bạn không thể giải thích điều gì đó bằng những thuật ngữ đơn giản, bạn thực sự không hiểu nó”. Khi nhận một yêu cầu hãy dành thời gian để “hiểu” chúng trước khi bắt tay vào làm. Đó cũng chính là nội dung của bước 2 dưới đây.
Lập kế hoạch
Đừng vội bắt tay vào code ngay lập tức mà hãy dành thời gian vạch ra cho mình một kế hoạch giải quyết vấn đề. Bạn có thể hiểu vấn đề nhưng nếu ghi ra từng bước giải quyết sẽ giúp bạn nhìn nhận vấn đề một cách rõ ràng hơn, có thể phát hiện ra được những trường hợp không ngờ tới.
Hãy lặp lại câu hỏi “Với đầu vào X, các bước cần thiết để trả về đầu ra Y là gì?” trong khi lên kế hoạch. Xác định được từng đầu vào với từng đầu ra đồng nghĩa với việc bạn biết mình đang cần gì để từ đó biết cách giải quyết chúng bằng cách nào.
Chia nhỏ vấn đề
Hãy chia nhỏ vấn đề càng bé càng tốt. Một vấn đề lớn nhìn qua có vẻ rất phức tạp nhưng khi chia nhỏ ra nó lại trở về những vấn đề đơn giản đến mức có khi bạn đã quá quen thuộc với chúng. Nếu chưa từng gặp một trong những vấn đề đó là một cơ hội cho bạn tìm hiểu.
Cuối cùng khi giải quyết được hết vấn đề nhỏ tự khắc vấn đề ban đầu sẽ được giải quyết. Hãy nhớ phương pháp chia để trị luôn hữu hiệu ở mọi mặt trong cuộc sống.
Bế tắc
Những vấn đề nhỏ ở trên có lúc bạn không hoàn toàn làm chủ được chúng. Đừng lo lắng, bất kì ai cũng từng gặp điều này. Sự khác biệt giữa người giải quyết vấn đề giỏi và người bình thường là tò mò về sự xuất hiện của lỗi hơn là khó chịu về chúng. Về cơ bản việc cần làm trong giai đoạn này là thực hành khả năng gỡ lỗi của bạn từ đó rút ra được kinh nghiệm khi đối mặt với những lỗi tương tự. Hiểu được bản chất của lỗi cũng là hiểu được cách tránh khỏi lỗi đó.
Giải quyết được bế tắc chưa phải là tất cả. Hãy áp dụng phương pháp “đánh giá quy lui” – Tức là lùi về bước trước đó xem có còn cách nào giúp bạn giải quyết được vấn đề nhanh hơn không? Kể cả khi bạn đã giải quyết được vấn đề thì hãy dành thời gian nhìn lại để đánh giá xem liệu chúng có thực sự hiệu quả? Có thể làm lại được gì để giúp giải quyết tốt hơn không.
Kết luận
Tư duy lập trình là thứ luôn tồn tại trong chúng ta. Bạn hoàn toàn có thể làm chủ được tư duy của mình bằng cách rèn luyện mỗi ngày. Hiểu được tầm quan trọng của tư duy lập trình giúp bạn tập trung hơn vào con đường phát triển bản thân và sự nghiệp sau này.
Bài viết gốc được đăng tải tại 2coffee.dev
Có thể bạn quan tâm: