PHƯƠNG PHÁP PHÂN TÍCH VẤN ĐỀ

PHƯƠNG PHÁP PHÂN TÍCH VẤN ĐỀ

Ta thường nghe nói thành công không phải đích đến, mà là quá trình. Trong việc giải quyết vấn đề cũng vậy, điều quan trọng là kinh nghiệm ta học được, bởi vì khi giải quyết xong vấn đề này, thì vấn đề khác sẽ ập tới. Việc nắm được yếu điểm chung sẽ giúp chúng ta càng lúc càng giải quyết vấn đề tốt hơn, từ đó sinh ra niềm yêu thích giải quyết các vấn đề của bản thân, trong công việc cũng như của người khác. Mời bạn cùng đến với những phân tích sau đây:

1. Vấn đề phức tạp là sự kết hợp giữa các vấn đề đơn giản hơn

Một cánh rừng được tạo thành từ những cây đơn, một ngôi nhà được tạo thành từ những chi tiết. Kỹ năng đầu tiên khi giải quyết vấn đề, đó là biết cách đưa vấn đề phức tạp về các vấn đề đơn giản. Chẳng hạn khi được yêu cầu phải lập trình ra một hình chữ nhật 5×3 như hình dưới đây

* * * * *
* * * * *
* * * * *

Việc đầu tiên cần phân tích là sẽ tách vấn đề hình chữ nhật ra thành 3 vấn đề nhỏ và cách kết hợp 3 vấn đề đó. Cụ thể là lập trình ra 1 dòng, rồi sau đó sẽ nhân bản dòng đó lên 3 lần.

* * * * *

Về kỹ thuật (sử dụng python) thì để thể hiện 1 dòng như trên, ta chỉ cần 1 vòng lặp là đủ.

for i in range(0,4) #lặp 5 lần
   print('* ', '') #in giá trị ra màn hình, không xuống dòng

Sau đó kết hợp 3 dòng lại với nhau để tạo thành hình chữ nhật ban đầu thông qua 1 vòng lặpbọc bên ngoài:

for j in range(0,2) #lặp 3 lần
   for i in range(0,4) #lặp 5 lần
       print('* ', '') #in giá trị ra màn hình, không xuống dòng
   print('') #in giá trị ra màn hình, có xuống dòng

2. Rèn luyện thì tách riêng còn áp dụng thì chung một lượt

Tôi nhớ rằng ngày xưa khi đi học võ, thầy thường bắt tôi bỏ rất nhiều thời gian vào những đòn đấm, đòn đá rất cơ bản, trong khi tôi chỉ muốn học những bài quyền, muốn nhanh chóng như những võ sĩ trong phim. Thầy chỉ nói là bật tinh thông thực ra là do thành thạo những đòn cơ bản, để khi kết hợp lại mới tạo ra sức mạnh thực sự. Như vậy, để giải quyết một bài toán lớn, thì trước đó ta nên luyện tập với bài toán nhỏ hơn, và luyện tập sự kết hợp giữa các bài đó. Như ví dụ về bài toán hình chữ nhật ở trên là phải học vòng lặp và cách kết hợp 2 vòng lặp với nhau. Ngẫm lại thấy ông cha ta từng nói: dục tốc bất đạt, chưa học bò đã lo học chạy, phần nào cũng liên quan đến dụng ý này.

3. Kỳ vọng và định kiến

Khi mình nghĩ ai cũng ghét mình thì từng lời đùa giỡn của mọi người đều làm mình tổn thương. Như khi mình nghĩ ai cũng tôn trọng mình thì cũng lời nói đó lại thấy vui và vô hại. Khi giải quyết vấn đề phải gạt bỏ những suy nghĩ tiêu cực như cho rằng vấn đề quá khó, quá phức tạp, mình chắc không đủ trình để giải quyết đâu. Suy nghĩ như vậy thì nhìn đâu cũng thấy khó. Đúng là có nhiều vấn đề bản thân mình không giải quyết được, nhưng trước khi bỏ cuộc, mình phải tĩnh táo và có những phân tích xem có chia nhỏ được vấn đề ra không, trong cái phức tạp thì có cái nào đơn giản mình có thể làm được, cái còn lại phức tạp thì sẽ nhờ người giúp hoặc lần sau sẽ chú ý rèn luyện để có thể giải quyết sau. Có như vậy dù không giải quyết được vấn đề thì mình cũng sẽ học hỏi được một số kinh nghiệm, tạo tiền đề cho sự phát triển về sau.

4. Ăn con ếch trước

Sau khi chia nhỏ vấn đề ra, sẽ có phần dễ phần khó, phần biết làm và phần còn mông lung. Điều cần thiết là phải giải quyết ngay phần khó, phần mông lung trước, để sớm lấy được thông tin rằng vấn đề này bản thân có giải quyết được không, hay phải nhờ người khác. Nếu phải nhờ người khác giúp thì thông qua việc “ăn con ếch trước” này mà mình hỏi sớm và người giúp mình họ có nhiều thời gian để chuẩn bị câu trả lời hơn.

5. Chạy nước rút ngược

Mọi người khi nhận 1 dự án, 1 nhiệm vụ thường có xu hướng ban đầu làm từ từ, lúc sau nếu thấy không kịp thì mới làm nhanh hơn. Hậu quả của việc này là đến gần cuối dự án, mới phát hiện ra những phần khó nhằn của vấn đề, lúc này mới đặt câu hỏi cho sếp, cho thầy cô thì sẽ dễ gây khó chịu, vì mình đang gây áp lực phải trả lời gấp cho họ. Nếu ta đảo ngược lại cách làm, thì cũng bằng ấy công sức, ngay từ đầu ta cố gắng làm thật nhanh, thu thập thật nhiều những thắc mắc, rồi hỏi sớm, khi đó người trả lời vừa không có áp lực về thời gian, đồng thời giai đoạn đầu cũng ít câu hỏi từ những người khác, nên họ sẽ vui lòng trả lời hơn.

6. Hình dung trước và dò xét lần lượt

Khi tìm một người trong đám đông, ta hình dung người đó trước thì mới dễ tìm thấy được, khi đọc sách mà không biết mình đang tìm kiến thức gì, thì có đọc hết cuốn sách chắc gì đã nhớ. Việc phát hiện xem công việc của mình đang bị thiếu sót gì cũng vậy, trước khi đi tìm ta phải tạo ra giả định của ta trước, rồi kiểm tra xem nếu không đúng thì chuyển sang giả định khác. Chẳng hạn khi debug lỗi tại sao server không chạy, thì ta phải liệt kê ra được các nguyên nhân khả dĩ: 

  • lỗi ở network
  • lỗi ở database
  • lỗi ở application

Ta sẽ kiểm tra lần lượt các giả định đó, thì sẽ giảm được khả năng bỏ sót và giảm được thời gian tìm ra vấn đề. Có lần bạn tôi dựng web ở dưới local chạy ok, xong đến khi lên server lại không chạy được. Bỏ hết cả nữa ngày tìm mãi không ra, tôi vô hỏi là bạn đã kiểm tra bên nhà cung cấp chưa, thì phát hiện là do nhà cung cấp chưa mở port nên không vô được.Việc kiểm tra cũng nên được thực hiện theo thứ tự thống nhất, chẳng hạn đi từ network đến application, hoặc đi ngược lại. Có như vậy thì ta sẽ không phải dò lại xem có bỏ quên bước nào không.

7. Không cùng phẩm chất thì không so sánh nặng nhẹ được

Khi hai thứ khác nhau, mà tưởng là giống nhau rồi đi so sánh cao thấp là việc làm vô ích. Chẳng hạn, so sánh PHP và Python xem ngôn ngữ nào tốt hơn mà một việc làm cực kì nông nổi, vì mỗi ngôn ngữ có những triết lý riêng và ứng dụng riêng. PHP chuyên về làm web, còn Python là cho mục đích chung. Cho rằng Python có thể làm được nhiều nền tảng hơn mà bỏ qua PHP khi làm web là một thiếu sót lớn. Hiện nay nhiều bài blog liệt kê ra một vài tiêu chí, đưa ra thang điểm, rồi xếp hạng ngôn ngữ theo thang điểm đó, nếu ta mù quáng mà nghe theo mà không đối chiếu với nhu cầu cụ thể của ta thì sẽ rất tai hại. 

8. Không vội tin khi chưa có căn cứ

Một sự việc là nguyên nhân của sự việc liên quan tiếp theo, đồng thời là kết quả của sự việc liên quan trước đó. Khi gặp vấn đề phải luôn hỏi tại sao, mục đích là để tìm được cái “nhân” của nó. Khi tìm lỗi (debug), nhìn vào biểu hiện của lỗi, nếu như đã có kinh nghiệm (khi thường xuyên hỏi tại sao), thì ta có thể đoán ra được nhiều nguyên nhân từ đó mở ra con đường điều tra tiếp theo. Ngược lại, khi bắt đầu phát triển một chức năng mới, ta phải biết được nếu ẩu tả thì sẽ để lại những hậu quả nào, từ đó bỏ thêm công sức ra để tránh thay vì thoả hiệp chấp nhận. Junior Dev thường sẽ thấy việc làm cẩn thận này rất là rườm rà, mất thời gian, trong khi nếu là Senior Dev, thì họ sẽ sẵn sàng làm bởi họ đã thấy được cái “quả” sau này. Vì vậy, một cách hiệu quả để thành Senior, là phải chịu khó đặt câu hỏi để tìm cái “nhân” của vấn đề, đề lần sau phòng tránh hoặc biết cách giải quyết khi gặp vấn đề tương tự.

9. Chú ý nét đặc biệt

Khi tiếp cận một giải pháp nào, phải chú ý đến đặc điểm mà chỉ riêng nó có, có như vậy mới biết được khi nào thì giải pháp này sẽ phát huy tác dụng, đồng thời chú ý tránh khỏi hoặc khắc phục điểm yếu cố hữu cũng khi áp dụng giải pháp đó. 
Chẳng hạn, số thực trong toán học có thể được thể hiện thông qua kiểu float trong lập trình. Ta phải biết được độ chính xác của float là tương đối và sẽ dễ bị lỗi khi làm phép tính với các float. Vấn đề này là điểm yếu cố hữu của khoa học lập trình chứ không riêng gì ngôn ngữ nào. Nắm được điều này thì khi code PHP, gặp phải lỗi này thì sẽ không phải đỗ lỗi cho sự yếu kém của PHP, và phải tìm một giải pháp thay thế khác thay vì dùng float nếu muốn tránh lỗi.

Kết luận

Vừa rồi ta đã đi qua một loạt các phương pháp để phân tích một vấn đề. Mong rằng thông qua sự chia sẻ này, các bạn sẽ có thêm ý tưởng để giải quyết các vấn đề tốt hơn.

Alex

You can share this post!

SINH VIÊN MỚI RA TRƯỜNG NÊN CHỌN LÀM VIỆC TẠI CÔNG TY LỚN HAY NHỎ?

STEP BY STEP CREATING VIRTUAL PRIVATE SERVER (VPS) AND ADD DEFAULT UBUNTU USER IN DIGITAL OCEAN

Leave a Reply

Your email address will not be published. Required fields are marked *