Làm thế nào tôi có thể cải thiện khả năng giải quyết vấn đề của mình?


50

Mọi người đều nói cùng một điều: "một lập trình viên thực sự biết cách xử lý các vấn đề thực sự". Nhưng họ quên mất cách họ học được khả năng này hoặc ở đâu: nó không được dạy trong trường học.

Tôi có thể làm gì để cải thiện khả năng giải quyết các vấn đề lập trình phức tạp? Những chiến lược nào đã làm việc cho bạn? Có những lĩnh vực cụ thể tôi nên tập trung vào, như thuật toán hoặc các mẫu thiết kế không?


3
Hai cuốn sách hữu ích được đề cập trong Code Complete là: Khái niệm Blockbusting của James Adams và Tư duy bên cạnh của Edward De Bono.
mctylr

1
AH! Tôi quên đăng lại ở đây khi nó chỉ có một vài câu trả lời.
Đánh dấu C

Câu trả lời:


25

Một số kỹ thuật có thể hoặc không thể hoạt động:

  • Nhìn vào các giải pháp hiện có cho các vấn đề phổ biến, ví dụ như các mẫu thiết kế. Có thể bạn tìm thấy một cái gì đó tương tự mà ít nhất một phần giống với vấn đề của bạn. Tìm kiếm trên mạng.
  • Hành động như thể vấn đề đã được giải quyết và theo dõi những gì diễn ra sau giải pháp cần thực hiện. Ví dụ, thay vì thiết kế API cho một lớp, chỉ cần viết mã sử dụng lớp đó, với các lệnh gọi phương thức như bạn muốn, sau đó triển khai API đó.
  • Làm một cái gì đó khác, ví dụ như lướt mạng hoặc chơi solitaire, và chờ cảm hứng xảy ra.
  • Hãy nghĩ về người bạn thích nhất, và giả vờ bạn muốn gây ấn tượng với cô ấy bằng kỹ năng giải quyết vấn đề của bạn. Điều gì sẽ là một giải pháp cực kỳ ấn tượng?
  • Kiểm tra vấn đề cho các mâu thuẫn vốn có hoặc các yêu cầu mâu thuẫn, và nêu chính xác chúng là gì và thỏa hiệp nào có thể được thực hiện. Thông thường, khi những xung đột như vậy tồn tại, nhưng bạn không nhận thức được, bạn có xu hướng loại bỏ một giải pháp có thể sau một giải pháp khác bởi vì bạn không thể đáp ứng hoàn hảo tất cả các yêu cầu.
  • Nếu bạn đã có một giải pháp khả thi, nhưng nó cảm thấy "bẩn" (sao chép-dán, biến toàn cục, mã spaghetti, v.v.), hãy sử dụng nó và làm cho nó tốt hơn sau đó

Điểm cuối cùng là tuyệt vời. Đôi khi để giải quyết vấn đề là chỉ cần làm cho nó hoạt động trong hầu hết các trường hợp và sau đó xem nó cần được cải thiện ở đâu.
JeffO

4
Tuy nhiên, hãy lưu ý rằng số lượng "Tôi sẽ sửa nó sau" sẽ chuyển thành "Tôi đã sửa nó" (ít nhất là theo kinh nghiệm của tôi) một phần nhỏ.
Gareth

3
Gareth: Đúng, nhưng ý tưởng không phải là làm cho nó tốt hơn vào tuần tới, tháng tới hay bất cứ khi nào, mà ngay sau khi nó hoạt động. Nó có nghĩa là một phương pháp để phá vỡ các loại hạt cứng.
dùng281377

3
Tôi không lướt mạng như một cách chờ đợi cảm hứng xảy ra. Bạn cần chu kỳ não nhàn rỗi để có cảm hứng xảy ra, và lướt mạng là một cách lãng phí những chu kỳ não nhàn rỗi đó. Thay vào đó, đi mua sắm, đi dạo hoặc đi xe đạp, dọn dẹp căn hộ của bạn - làm một việc gì đó không tốn nhiều năng lượng não. Cảm hứng sẽ đến nhanh hơn trong những trường hợp đó.
Ken Bloom

1
Geek: Tôi biết rằng # 4 nghe có vẻ hơi nghịch lý, nhưng đôi khi, nó thực sự hiệu quả với tôi; đặc biệt là trong các tình huống có thể có nhiều hơn một cách tiếp cận và vấn đề là lựa chọn một trong những cách tiếp cận đó. # 6 có nghĩa là không bị giới hạn bởi những quyên góp thông thường trong nghề nghiệp của chúng tôi. Đôi khi, chúng tôi có các quy tắc nội bộ như "tránh các biến toàn cục" đến mức chúng tôi vô tình từ chối mọi giải pháp sử dụng kỹ thuật không dùng nữa.
dùng281377

20

Sử dụng tư duy chế độ R hoặc chế độ L theo yêu cầu

Chế độ R là cách tiếp cận sáng tạo, phi ngôn ngữ mà chúng ta thường liên kết với tiềm thức. Chế độ L là cách tiếp cận bằng lời nói, logic, tuyến tính liên quan đến "tiếng nói bên trong" của bạn.

Nếu một vấn đề có vẻ khó hiểu thì có lẽ là do bạn đang cố gắng giải quyết nó bằng chế độ suy nghĩ không chính xác. Đối với các lập trình viên, chế độ tư duy mặc định có xu hướng là chế độ L để bạn có thể tắt nó tạm thời và truy cập chế độ R.

Cách truy cập tư duy chế độ R

Có nhiều cách, nhưng có lẽ hãy thử phương pháp Poincare (được đặt theo tên của nhà toán học nổi tiếng).

Viết ra tất cả những gì bạn biết về vấn đề. Ngay lập tức giải quyết tất cả các khía cạnh dễ dàng của nó (nếu có). Chọn một mục duy nhất từ ​​danh sách "các vấn đề khó khăn" còn lại và sau đó đi dạo nơi bạn sẽ không bị làm phiền hoặc mất tập trung.

Đừng cố gắng phân tích vấn đề trong khi đi bộ, chỉ cần để tâm trí của bạn lang thang và quan sát bất kỳ hình ảnh hoặc cảm giác thú vị nào phát sinh có thể liên quan đến vấn đề. Hãy để họ hợp lại. Nếu cảm hứng đình công ngay lập tức dừng bước đi và trở lại để viết ra cái nhìn sâu sắc mà bạn đã đạt được.

Rửa sạch và lặp lại cho đến khi tất cả các vấn đề có cái nhìn sâu sắc. Sau đó bắt đầu khám phá những hiểu biết.

Sách giới thiệu

Ngoài ra, đọc và suy nghĩ thực dụng có thể giúp bạn trở thành người giải quyết vấn đề tốt hơn. (Gần đây tôi dường như đang tham khảo cuốn sách này rất nhiều ...)


4
Suy nghĩ và học tập thực dụng là tuyệt vời
Brad Cupit

Tham chiếu: drawright.com/theory.htmlm (chế độ R và chế độ L là gì)
mctylr

17

Hỏi người khác ...

Không nghiêm túc. Tài nguyên lớn nhất của bạn có thể là người ngồi cạnh bạn. Thậm chí đừng hỏi họ câu trả lời cho vấn đề, yêu cầu họ ngồi cạnh bạn và để bạn giải thích vấn đề.

Thường thì bạn sẽ giải quyết nó khi bạn kiểm chứng nó.

Đôi khi người khác sẽ hỏi một câu hỏi hoặc chỉ ra một chi tiết sẽ mở khóa cổng lũ tinh thần.

Cuối cùng, bạn sẽ học cách diễn đạt những điều trong đầu mà không cần sử dụng một con rối và phát hiện ra các chi tiết chính trong vấn đề nhanh hơn.

Và nếu tất cả những thứ khác thất bại thì ít nhất họ có thể chỉ cho bạn một kỹ thuật mà bạn không nghĩ sẽ sử dụng.


Hỏi người khác hoặc thành lập các nhóm học tập là một cách tuyệt vời để học.
Gary Rowe

Tôi cũng làm như vậy, chỉ để có ý tưởng từ tôi và đây là một trong những cách tốt nhất.
Viswa

Kỹ thuật này được gọi là Cao su Giảm âm lượng, bài viết xuất sắc về nó trong mã hóa kinh dị codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & wiki là cũng hữu ích en.wikipedia.org/wiki/Rubber_duck_debugging
spats

9

Thật ra câu trả lời ngắn gọn của tôi là "giải quyết nhiều vấn đề hơn". Nhưng vấn đề là: Thực sự tập trung vào các vấn đề và đừng bỏ cuộc. Đừng yêu cầu trợ giúp về StackOverflow hoặc bất cứ điều gì. (Đọc StackOverflow là tất nhiên rồi!) Hãy cố gắng cho đến khi bạn nhận được một giải pháp gần như hiệu quả, sau đó bạn gần đạt được mục tiêu của mình. Và tiếp tục cho đến khi bạn có một giải pháp thỏa mãn.

Đối với tôi giải quyết vấn đề là hai điều:

  • chiến lược giải quyết vấn đề
  • kiên trì và chịu đựng thất vọng

Điểm 2 thực sự rất quan trọng theo quan điểm của tôi vì nó buộc bạn phải thay đổi suy nghĩ khi bạn bị mắc kẹt lâu hơn với một vấn đề. Nó cũng cho phép bạn dành nhiều thời gian hơn để giải quyết vấn đề cho phép bạn cải thiện kỹ năng của mình hơn nữa. ;-)

Nhân tiện, tôi khuyên bạn nên đọc Edward de Bono. Mặc dù tôi có kỹ năng giải quyết vấn đề của mình chủ yếu bằng cách học Vật lý, bài viết của anh ấy thực sự thú vị.

Vâng và bộ công cụ giải quyết vấn đề của tôi là thế này:

  • ngẫu nhiên thử một cái gì đó
  • đọc các bài viết / blog / bài viết ngẫu nhiên về chủ đề tôi quan tâm (hoặc một chủ đề được kết nối chặt chẽ)
  • vẽ đẹp
  • chia vấn đề thành nhiều vấn đề nhưng đơn giản hơn
  • làm việc gì khác
  • Google một cái gì đó có liên quan theo một cách nào đó cho vấn đề
  • nói chuyện với người khác về vấn đề này
  • lập danh sách TODO
  • viết ra những thứ bạn biết về ảnh hưởng của vấn đề để bạn có thể dễ dàng tìm thấy các mẫu hơn

Xin lưu ý rằng hầu hết các công cụ này có thể được áp dụng đệ quy.

Và thuật toán của tôi là thế này:

  1. Công cụ nào trong bộ công cụ giải quyết vấn đề của tôi có ý nghĩa nhất vào lúc này?
  2. Vấn đề chưa được giải quyết? Tiếp tục với 1. ;-)

Bước 1. là một quyết định khó khăn, nhưng bạn đưa ra quyết định tốt hơn khi bạn thực hành nhiều hơn.

Oh và tôi gần như quên mất thành phần quan trọng nhất:

Suy nghĩ tích cực về toàn bộ quá trình. Đừng nghĩ rằng "Tôi hy vọng XYZ sẽ giải quyết vấn đề." Thay vào đó hãy suy nghĩ: "Nếu XYZ không hoạt động thì tôi biết rằng YZX không thể là nguồn gây ra sự cố và tôi sẽ kiểm tra xem ZYX có hoạt động không." Việc giải quyết vấn đề đôi khi có thể rất thú vị nếu quá trình tìm kiếm vấn đề của bạn kết thúc trở nên thanh lịch và nhiều thông tin.


Tôi đã tìm trang này để tìm từ "Vật lý" để xem ai đó đã viết về nó chưa. Toán học là một trong những khác.
Đánh dấu C

Giá trị của việc nghiên cứu vật lý liên quan đến khả năng giải quyết vấn đề của bạn là khó để nói quá, tôi nghĩ.
Đánh dấu C

+1 cho suy nghĩ tích cực. Nếu bạn thấy mình đang làm việc thì khả năng giải quyết vấn đề của bạn bị suy giảm. Nhìn vào vấn đề vì nó cung cấp cho bạn kiến ​​thức.
Gary Rowe

7

Bắt đầu làm việc trên các kỹ năng xác định vấn đề là tốt. Đôi khi bạn phải nhận ra có một vấn đề trước khi bạn có thể giải quyết nó. Ở trường, họ yêu cầu quá nhiều câu trả lời và không đủ câu hỏi của học sinh.

Tìm những người xung quanh bạn giải quyết vấn đề và hỏi họ xem họ làm thế nào.

Hãy chuẩn bị để được sai. Bạn sẽ không cải thiện nếu bạn giữ tất cả cho riêng mình và bạn sẽ không được sử dụng.


+1 cho "Ở trường, họ yêu cầu quá nhiều câu trả lời và không đủ câu hỏi của học sinh." Điều này rất đúng và dành thời gian để học hỏi những câu hỏi đúng ... hãy kiểm tra mọi nơi có rất nhiều ví dụ về câu hỏi tồi
Rémi

4

Lợi ích chính của giáo dục khoa học máy tính cho các kỹ sư phần mềm là khả năng tạo và hiểu trừu tượng. Các tóm tắt được sử dụng để đóng gói các chức năng phổ biến, như các phương thức lớp String, vào các gói chặt chẽ, có thể tái sử dụng cho phép chúng ta tập trung vào vấn đề lớn hơn.

Tìm hiểu để nhận biết và tạo Trừu tượng :

Nhưng quan trọng nhất, trừu tượng dạy chúng ta làm thế nào để chia nhỏ vấn đề thành các phần nhỏ hơn, dễ quản lý hơn . Khi kết hợp với một nền tảng khoa học, sự kết hợp của những kỹ năng đó có thể tạo ra một kỹ sư có khả năng vượt qua tiếng ồn và đi vào trọng tâm của vấn đề.

Tìm hiểu để giải quyết vấn đề bằng Phương pháp khoa học :

Khi xử lý sự cố một ứng dụng sản xuất có tồn tại vấn đề khó tìm, đôi khi nó thực sự giúp phá vỡ ứng dụng hơn nữa (trong môi trường không sản xuất) để loại bỏ một số biến để cô lập và loại bỏ một biến.

Tóm lại, phương pháp khoa học, học được từ việc lấy tất cả các môn tự chọn Vật lý và các môn tự chọn khoa học khác cần thiết cho bằng cấp khoa học máy tính, giúp giải quyết những vấn đề này như thể chúng ta đang thử dùng giả dược và thử nghiệm thuốc mới trên một loạt tình nguyện viên. Giống như các nhà khoa học đôi khi phải làm một cái gì đó tồi tệ hơn để làm cho nó tốt hơn, đôi khi chúng ta là các kỹ sư cũng phải làm như vậy.

Tư duy khoa học theo cách này có thể - nói chung - chỉ đến từ việc có kinh nghiệm trong một nền tảng khoa học. Đôi khi giải quyết một vấn đề không thể được coi là một đường thẳng từ A đến B.

Tóm lại, nghiên cứu khoa học máy tính, nghiên cứu các lĩnh vực khoa học khác, học lập trình chức năng. Những điều này sẽ giúp bạn suy nghĩ như một nhà khoa học và suy nghĩ bên ngoài hộp.


Chính xác. Phá vỡ những vấn đề lớn thành những vấn đề nhỏ hơn.
Bill Michell

3

Tất cả phụ thuộc vào loại vấn đề bạn đang nhắm đến để giải quyết, nhưng học cách suy nghĩ logic nếu bạn đã không làm là một điều tốt.

Tất cả trong tất cả, và bạn sẽ ghét tôi vì đã nói nó, nhưng thực hành làm cho hoàn hảo. Tôi đã không bị lôi ra khỏi bụng mẹ khi biết cách trở thành người giải quyết vấn đề tốt và không ai khác làm thế. Bạn cần thực hành và học cách tự làm mọi thứ. Nếu bạn vẫn còn đi học và không có các lớp học về lập trình / khoa học máy tính, toán học và khoa học cũng khá tốt để thúc đẩy sự phát triển của các kỹ năng này.


3

Tôi nghĩ rằng những gì bạn đang tìm kiếm là heuristic khoa học máy tính.

Khi nói đến những gì 99% chúng ta làm trong các chiến hào, thực sự không có gì mới dưới ánh mặt trời. Vì vậy, bạn có thể thấy một vấn đề và nhận ra đó là một vấn đề DP, hoặc một vấn đề khác là một vấn đề có thể có lợi từ việc ghi nhớ, v.v ...

Làm thế nào để bạn có được kiến ​​thức này? Bằng cấp CS phù hợp là một nơi tốt để bắt đầu ... Không phải Kỹ thuật phần mềm hoặc Hệ thống thông tin, nhưng đó là thứ mà hầu hết sinh viên đại học phàn nàn về "không thực tế".

Bạn có thể tự làm điều này, nhưng có lẽ sẽ khó hơn. Tôi sẽ bắt đầu với hai khóa học này:

Giới thiệu về thuật toán

Những ý tưởng tuyệt vời trong lý thuyết CS


2

Câu trả lời của tôi liên quan cụ thể đến mã hóa nhưng có thể được áp dụng cho bất cứ điều gì.

  1. Bước ra khỏi bàn phím. Nói chuyện đi bộ, chạy bộ, nói chuyện với một đồng nghiệp qua cà phê
  2. Trở nên 10 tuổi! Kinh nghiệm của tôi đã giúp tôi rất nhiều.
  3. Sử dụng Chặt nhị phân. Chia vấn đề thành hai và thu hẹp vấn đề: lặp lại.
  4. Hãy nhớ Sherlock Holmes: Khi bạn đã loại bỏ điều có thể, bất cứ điều gì còn lại (dù lạ đến đâu) là câu trả lời
  5. Kiểm tra dữ liệu thử nghiệm của bạn. Hơn một nửa các vấn đề thực sự khó khăn của tôi đã được gây ra bởi dữ liệu bị lỗi và không phải là mã hoặc thuật toán bị lỗi.

1

Về mặt thực hành, tôi có thể cho bạn biết những gì tôi làm. Tôi quan tâm đến toán ứng dụng hơn là lập trình, nhưng toán ứng dụng khi áp dụng vào điện toán là lập trình các loại. Tôi thấy các vấn đề và giải pháp xung quanh. Trước đây (hoặc đôi khi sau đó, nếu nói rằng công việc của tôi yêu cầu một giải pháp kịp thời), liên kết đến một giải pháp đã biết - hoặc thư viện mã hiện có, tôi muốn tự hỏi: "Nếu đây là một vấn đề còn nguyên vẹn - bạn sẽ không thể tìm thấy một giải pháp đóng hộp, bạn sẽ tiến hành như thế nào? " Nếu câu trả lời có phần đơn giản, hãy xem xét viết một giải pháp (phân tích, hoặc một chương trình máy tính để giải quyết nó). Bỏ qua các trường hợp kết thúc phức tạp, - bạn quan tâm đến các phương pháp tiếp cận và thuật toán, không phát minh lại một thư viện hiện có. Nếu giải pháp sẽ đòi hỏi quá nhiều nỗ lực, đừng lập trình giải pháp đầy đủ, nhưng ít nhất hãy nghĩ về các loại cấu trúc dữ liệu và phương pháp mà bạn muốn sử dụng. Cũng nghĩ về các phương pháp thay thế.


1

Có một câu hỏi SO tuyệt vời về điều này.

Câu trả lời của tôi là:

Cách tốt nhất để cải thiện là luyện tập!

Đăng ký với nguồn cấp dữ liệu RSS tại: http://www.mensa.org.uk/puheads/ và dành thời gian để hoàn thành chúng khi chúng xuất hiện.

Một lịch bàn đố-một-ngày (ví dụ http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) là một tốt ý tưởng cũng vì nó sẽ cung cấp cho bạn các vấn đề thường xuyên, cỡ cắn và đa dạng để giải quyết.

Mặc dù những điều này sẽ luôn lạc đề khỏi những vấn đề bạn sẽ gặp phải, nhưng sự đa dạng rất quan trọng vì nó sẽ buộc bạn phải suy nghĩ theo những cách bạn chưa từng thấy trước đây, đó thực sự là vấn đề giải quyết vấn đề.

Chỉnh sửa: Đồng thời kiểm tra: http://www.mindtools.com/pages/main/newMN_TMC.htm để biết các mẹo giải quyết vấn đề tốt.


1

Chơi cờ

Chơi cờ là một huấn luyện viên xuất sắc để giải quyết các vấn đề lập trình. Các lớp vấn đề và cây logic liên quan rất độc đáo. Nó cũng giúp bạn suy nghĩ trước và lên kế hoạch trước khi đi xuống một con đường tối ưu và lãng phí thời gian.

Cờ vua cũng đòi hỏi sự cân bằng giữa các chế độ tư duy bên trái và bên phải. Nếu bạn trở nên quá phân tích, bạn có thể bị sa lầy trong việc cố gắng tính toán mọi thứ, điều này là không thể. Tuy nhiên, mọi cảm hứng sáng tạo cần được kiểm tra bằng một phép tính để đảm bảo nó phù hợp với thực tế cụ thể của tình huống. Vấn đề khó khăn là như thế này.

Cờ vua cho thấy cách học tập và thực hành dẫn đến sự cải thiện vững chắc theo kiểu rất tuyến tính. Điều này đúng với chương trình giải quyết vấn đề là tốt.

Chơi cờ cũng có thể giúp bạn nắm bắt tốt việc học được bao nhiêu. Mặc dù bạn đã lập trình (hoặc chơi cờ vua) được 10 năm, bạn vẫn chưa phải là một đại kiện tướng.


Tôi đã tìm thấy tâm trí của tôi sắc nét với thường xuyên chơi cờ.
Paul Nathan

1

Gần đây tôi đã giải quyết các vấn đề tại Project Euler . Các vấn đề có độ khó khác nhau. Các giải pháp thường không yêu cầu số lượng lớn mã, nhưng bạn phải xem xét nhiều yếu tố như thời gian chạy thuật toán của mình. Bạn có thể sử dụng bất kỳ ngôn ngữ nào bạn thích, vì bạn chỉ cần nhập một câu trả lời. Có một bài viết tốt về một giải pháp tối ưu cho nhiều vấn đề và rất nhiều cuộc thảo luận về từng vấn đề. Cố gắng giải quyết một vấn đề mỗi ngày và bạn sẽ ngạc nhiên về việc giải quyết và phân tích vấn đề của bạn cải thiện đến mức nào. Để có thêm tín dụng, hãy thử giải quyết cùng một vấn đề bằng nhiều ngôn ngữ, như ngôn ngữ thủ tục (có thể là C ++), ngôn ngữ kịch bản (như python) và ngôn ngữ chức năng (như F #).


1

Tôi đến từ một nền tảng khoa học, vì vậy khi tôi nhìn vào một vấn đề, tôi có xu hướng sử dụng các chiến thuật từ Phương pháp khoa học . Tôi đặc biệt thích thiết lập "thử nghiệm" dựa trên các giả thuyết và sử dụng "điều khiển", vì vậy tôi sẽ xây dựng một cái gì đó và sau đó thay đổi / chỉ thêm 1 điều về nó và xem kết quả của một thay đổi / bổ sung đó là gì và nếu tôi Tôi không nhận được kết quả tôi cần, tôi sẽ chuyển nó lại và thay đổi thứ khác. Điều này hoạt động tốt để xử lý sự cố / gỡ lỗi mã. Đôi khi bạn nhận được câu trả lời bạn tìm kiếm, nhưng bạn luôn học được điều gì đó mới ngay cả khi bạn thất bại. Tôi cũng thích học qua chủ nghĩa giản lược- lấy thứ gì đó đã tồn tại (luôn luôn tốt để bắt đầu với thứ bạn có thể không hiểu, nhưng bạn biết nó hoạt động) và có vẻ phức tạp đối với tôi và xem liệu tôi có thể chia nó thành các phần thành phần của nó không và tìm hiểu cách chúng hoạt động trước. Đôi khi bộ não của tôi dễ dàng xử lý việc học như thế này thay vì tiếp cận vấn đề một cách toàn diện và tôi có thể sử dụng kiến ​​thức đó để tự mình xây dựng những thứ phức tạp tương tự khác. Tôi cũng khuyên bạn nên đọc sách về logic và lý luận chọn các tác phẩm từ cả những nhà tư tưởng cổ điển và hiện đại (bắt đầu với Aristotle và làm theo cách của bạn). Họ có thể cung cấp cho bạn một số nền tảng của logic cơ bản mà bạn có thể sử dụng để giúp giải quyết vấn đề trong máy tính. Và, tất nhiên, nếu bạn không thể giải quyết vấn đề và bạn đã làm việc trong một thời gian, hãy nghỉ ngơi. Nhai lại trên một khía cạnh cụ thể của một vấn đề đôi khi gây bất lợi. Mọi người cần nghỉ ngơi :)


0

Phần khó nhất của việc giải quyết vấn đề là "Thu hẹp nhận thức".

Bạn chọn một cái gì đó có vẻ là vấn đề và kiên trì thực hiện sau đó cho đến khi bạn kiệt sức và không tiến bộ.

Cách để làm điều này là chắc chắn - hoàn toàn chắc chắn - bạn thực sự hiểu vấn đề. "Giải quyết vấn đề đúng" là phần quan trọng nhất của việc giải quyết vấn đề.

Đôi khi họ gọi điều này là "suy nghĩ bên ngoài hộp". "Chiếc hộp" là một quan điểm hẹp có thể không bao gồm vấn đề thực tế, cơ bản. Suy nghĩ bên ngoài hộp là tìm kiếm vấn đề phù hợp để giải quyết.

Có rất nhiều sách về các chiến lược để tránh sự thu hẹp đi với sự tập trung sớm vào vấn đề sai.

Chủ yếu là mẹo để xác định kết quả thực sự là gì. Sau đó tìm ra những gì ngăn chặn kết quả mong muốn.


0

Thành thật tôi nghĩ mọi người đều khác nhau, vì vậy bản đồ đường đi để trở thành người giải quyết vấn đề tốt hơn là khác nhau. Bạn có thể học hỏi từ kinh nghiệm của người khác, nhưng cuối cùng bạn phải rèn con đường của riêng mình. Điều này về cơ bản là học một cái gì đó "cách khó", nhưng nó hiệu quả trong trường hợp này.

Đây là cách tôi bắt đầu cải thiện việc giải quyết vấn đề của mình, mặc dù tôi chưa phải là người giải quyết vấn đề tuyệt vời, chỉ là một người giỏi hơn tôi năm ngoái. Tôi đã được giao một dự án mới tại nơi làm việc liên quan đến việc mở rộng một phần mềm theo dõi thời gian nguồn mở, bằng cách thêm ba báo cáo mới để quản lý. Phần mềm này được viết bằng ngôn ngữ mà tôi chưa bao giờ sử dụng và nó được ghi chép kém và bị xáo trộn. Tôi đã nghiên cứu và thực hiện rất nhiều nghiên cứu và sau đó tôi chỉ thực hiện các báo cáo theo các bước nhỏ, khi tôi có chức năng cơ bản, tôi đã cải thiện chúng và cuối cùng tôi đã thêm nhiều tính năng.

Vì vậy, nói cách khác, tôi khuyên bạn nên tìm một số loại dự án chìm hoặc bơi trong thế giới thực để làm việc. Nếu bạn hiện đang làm việc như một lập trình viên, hãy tìm một dự án hoặc hỏi sếp của bạn cho một dự án. Nếu kịch bản này không thể tìm thấy ngoài công việc, có thể là hợp đồng / công việc tự do hoặc một cái gì đó. Tôi giải quyết vấn đề rất tốt và rất nhanh khi tôi phải và tôi giữ lại kiến ​​thức đó vì cường độ của dự án. Nếu điều này không hiệu quả với bạn thì hãy làm những gì mà mọi người khác trong chủ đề này gợi ý :).


0

Câu trả lời là chính nó trong Câu hỏi bằng cách đưa ra các giải pháp khác nhau. Luôn có nhiều hơn một giải pháp (ví dụ: Sắp xếp có thể được thực hiện theo các cách khác nhau viz. Sắp xếp bong bóng, sắp xếp lựa chọn, v.v.) bạn chỉ cần chọn một cách bạn có thể thực hiện (Sắp xếp) một cách hiệu quả. Hãy thử với lần tiếp theo khác và cứ thế ..... Và sách để giải quyết vấn đề ..... Không Bạn không thể học Kỹ năng giải quyết vấn đề từ sách, nhiều mã hơn bạn sẽ thực hiện được nhiều kiến ​​thức bạn sẽ có được. Chúc may mắn


0

Một lập trình viên dễ dàng tấn công tinh thần vào một vấn đề bằng cách hình dung cách giải quyết vấn đề bằng ngôn ngữ lập trình yêu thích của họ. Giống như người thợ mộc cổ điển, người coi mọi vấn đề là móng tay khi công cụ yêu thích của anh ta là cây búa.

Tôi nghĩ rằng các bài tập giải quyết vấn đề tốt nhất xuất hiện khi bạn đạt trên mức thực tế và chỉ nghĩ theo nghĩa "đây là điều tôi sẽ cần để giải quyết nó một cách tối ưu". Trong một số trường hợp, bạn có thể phải học (rất nhiều) công cụ mới để áp dụng giải pháp, nhưng điểm quan trọng là khả năng của bạn để đưa ra giải pháp không nên giới hạn trong các kỹ thuật hiện tại và lịch sử của bạn.

Một ví dụ thực tế cũ đối với tôi là tôi đã học được cách thực hiện đa nhiệm hợp tác hiệu quả khi tôi nhận ra rằng vấn đề của tôi không thực sự cần các chủ đề ưu tiên, mặc dù tôi thường sẽ đi ngay đến vùng thoải mái của mình để đập tan mọi biến đổi đó (điều đó cuối cùng dường như luôn luôn ngừng thoải mái tại một số điểm ..).


0

Trong quá trình phát triển ứng dụng, nhiều vấn đề chúng ta gặp phải là phát minh của chính chúng ta hoặc là phát minh của tên ngốc mà chúng ta thừa hưởng đã làm hỏng cơ sở mã từ đó. Giải quyết một vấn đề thường xuyên nhất là tìm nguồn . Thông thường, một khi chúng ta tìm thấy nơi nó xảy ra, chỉ có năng lực là điều cần thiết để giải quyết nó.

Để kết thúc đó:

  1. Tìm hiểu nền tảng của bạn.
  2. Tìm hiểu các công cụ của bạn.
  3. Tìm hiểu những công cụ có sẵn cho nền tảng của bạn mà bạn chưa gặp phải.

Tất cả các khóa đào tạo não trên thế giới đều vô dụng nếu không có thông tin cho não sử dụng. Để giải quyết vấn đề, bạn phải biết những khả năng đầu tiên là gì! Thậm chí sau đó, làm việc với thông tin tốt sẽ nhanh hơn rất nhiều thay vì chỉ mô tả vấn đề.

Tôi có thể suy đoán cho đến khi những con bò về nhà tại sao một cái gì đó mất quá nhiều thời gian để thực hiện. Nhưng nếu tôi nói "hãy lấy một số dữ liệu trước", tôi có thể thấy rằng rất nhiều trường hợp ngoại lệ đang bị ném và nhận ra rằng tôi có thể thay đổi điều này thành một câu lệnh if thay thế. Không biết cách thu thập thông tin, biết rằng các ngoại lệ trên nền tảng của tôi mất khá nhiều chi phí và có cách kiểm tra trước khi thử nhanh hơn, tôi sẽ không bao giờ giải quyết được vấn đề.


0

Có hai phần cho câu trả lời của bạn:

a) Kỹ thuật giải quyết vấn đề thực tế

b) Làm cho bộ não của bạn vốn đã "tốt hơn" trong suy nghĩ và giải quyết vấn đề

Luôn có một số câu trả lời tuyệt vời về kỹ thuật (giả sử bạn biết vấn đề, v.v.) vì vậy tôi sẽ không đề cập nhiều đến vậy. Đối với việc đào tạo bộ não của bạn, có một vài điều bạn có thể làm để vượt qua các khớp thần kinh đó và xây dựng nhiều mối liên kết hơn

1) Học một ngôn ngữ mới, một ngôn ngữ thực sự (như tiếng Pháp hoặc tiếng Trung Quốc có thể là một lựa chọn tốt trong những ngày này)

2) Học chơi một nhạc cụ mới

3) Làm một cái gì đó nghệ thuật như vẽ, vẽ hoặc điêu khắc

4) Chơi scrabble hoặc làm ô chữ

5) Nhảy như bạn có nghĩa là nó. Không, tôi không đùa. Khiêu vũ đã được chứng minh là có tác động đến não và suy nghĩ của bạn

6) Mở rộng kinh nghiệm của bạn, các giải pháp sáng tạo đến từ việc áp dụng một lý thuyết trong một lĩnh vực trong một lĩnh vực khác để nghiên cứu các lĩnh vực và lĩnh vực khác nhau mà bạn thấy thú vị

7) Tập thể dục, tập thể dục là rất quan trọng để cải thiện quá trình tư duy

Cuối cùng, tôi sẽ đưa ra lời khuyên tốt nhất để giải quyết các vấn đề khó khăn: đi bộ dài. Tôi đã thấy rằng nó hoạt động thần kỳ để xóa đầu bạn và để một người suy ngẫm về vấn đề



0

Lời khuyên của tôi sẽ là vứt cuốn sách ra!

Tất nhiên không phải theo nghĩa đen. Ý tôi là, hãy vào một lĩnh vực chủ đề mà bạn có ít kinh nghiệm và giải quyết các vấn đề khó khăn ở đó, mà không cần tìm hiểu về các giải pháp hiện có. Dựa vào không có gì ngoài sự sáng tạo và suy nghĩ phê phán của bạn và có lẽ là một hướng dẫn tham khảo.

Bạn có thể thiết kế một định dạng hình ảnh. Hoặc một máy chủ web. Hoặc một sơ đồ nén. Hệ thống tập tin. Hạt nhân. Trí tuệ nhân tạo. Ngôn ngữ lập trình. Hệ thống thị giác máy tính.

Một cái gì đó bạn thấy thú vị, đó là khá phức tạp, và điều mà bạn chưa bao giờ tìm hiểu về. Đừng đọc về nó: chỉ cần nhảy thẳng vào. Thử nghiệm. Mắc sai lầm. Làm việc vô ích.

Đừng yêu cầu giúp đỡ. Tránh xa các hướng dẫn. Tránh xa lý thuyết. Đừng kéo một giải pháp ra khỏi kệ.

Tại sao?

  • Chúng tôi học tốt nhất từ ​​những sai lầm.
  • Nó cung cấp cho bạn một cơ hội để thực hành đưa ra các giải pháp một cách sáng tạo, thay vì hồi sinh và thích nghi các giải pháp cũ.
  • Bạn buộc phải đánh giá ý tưởng của mình. Bạn không thể đánh giá chúng mà không phát triển sự hiểu biết tốt về các công cụ của bạn, về vấn đề bạn đang giải quyết và về ý tưởng bạn muốn đánh giá. Điều này dẫn đến sự hiểu biết sâu sắc hơn về chủ đề mà bạn sẽ phát triển. (Vui lòng đọc về các công cụ bạn đang sử dụng, đừng đọc về vấn đề bạn đang cố gắng giải quyết.)

Thực hiện một vài nỗ lực và một khi bạn cảm thấy hạnh phúc với những gì bạn đã đạt được, hãy để nó trong vài tháng. Sau đó trở lại tươi mới và xem nếu bạn có thể tìm thấy một quan điểm mới. Sau đó, đã đến lúc bắt đầu đọc về vấn đề và cách người khác giải quyết nó (hoặc nói chuyện với mọi người). Tại thời điểm này, thay vì tự nói với mình "có, điều đó có ý nghĩa" trong khi bạn đọc, bạn sẽ nói "có, chính xác ", hoặc "tốt, ở một mức độ nào đó", hoặc "wow, thật thông minh".

Nói cách khác, bạn sẽ suy nghĩ nghiêm túc hơn nhiều về những gì bạn đọc và bạn sẽ thấy dễ hiểu và dễ nhớ hơn nhiều vì bạn đã có một "khung tinh thần" lớn để gắn nó. Bạn sẽ cảm thấy tốt về những điều mà bạn phát hiện ra một cách độc lập và bạn sẽ bỏ đi với vô số kiến ​​thức mới.

Đừng cố gắng làm cho giải pháp của bạn hoàn hảo. Chỉ cần chứng minh với bản thân rằng bạn có thể giải quyết vấn đề. Chấp nhận một thái độ "có thể làm" và nếu bạn cảm thấy nản lòng trước vấn đề này, hãy nhớ rằng người đầu tiên giải quyết nó có thể biết nhiều như bạn (thực tế, họ không biết nó có giải pháp!).


0

Giải quyết vấn đề không phải là thứ có thể dạy hoặc thậm chí học bằng cách đọc. Cách duy nhất để giải quyết vấn đề tốt hơn là giải quyết vấn đề.

Có nhiều kỹ thuậtphương pháp khác nhau để giải quyết vấn đề mà bạn có thể đọc và bạn có thể đọc về các công cụ và công nghệ mà bạn có thể sử dụng để giải quyết các vấn đề trong một miền cụ thể. Trừ khi bạn liên tục nghĩ về các vấn đề, hãy thử đưa ra các giải pháp (đưa ra nhiều giải pháp cho mọi vấn đề và đánh giá chúng với nhau), sau đó đánh giá các giải pháp của bạn chống lại các giải pháp do người khác phát triển, bạn sẽ không gặp vấn đề tốt hơn giải quyết.

Tôi khuyên bạn nên chọn một bản sao của Tư duy và Học tập thực dụng: Tái cấu trúc Wetware của bạn bởi Andy Hunt . Đó là một cuốn sách về cách hiểu cách bạn suy nghĩ, phản ứng và học hỏi. Nó mang lại các lý thuyết có liên quan từ lý thuyết hành vi và các ngành khoa học nhận thức khác. Nó đặc biệt hướng đến các nhà phát triển phần mềm, nhưng áp dụng cho bất kỳ nhân viên tri thức nào.


0

Đối với những người mới lập trình như tôi, tôi giới thiệu cuốn sách "Nghĩ như một lập trình viên". Trong chương đầu tiên, nó bao gồm các kỹ thuật giải quyết vấn đề như nghỉ ngơi và phân chia vấn đề, bắt đầu với những gì bạn biết, giảm bớt, tương tự và thử nghiệm.

Sau đó, có các kỹ thuật nâng cao hơn với các ví dụ trong C ++: giải quyết các vấn đề với mảng, con trỏ và bộ nhớ động, các lớp, đệ quy, tái sử dụng mã. Tôi không thể bình luận về phần này vì nó quá khó đối với tôi.


-1

Tôi giải quyết càng nhiều vấn đề càng tốt. Tôi cũng thích một số cuốn sách giải đố như thế này . Tôi cũng mày mò với các trò chơi giải quyết vấn đề, như các trò chơi toán học liên quan đến các số nguyên tố hoặc một cái gì đó, sudoku, Tháp Hà Nội, v.v. Chỉ cần tìm những thứ để giải quyết. Ngoài ra, mã nó ra khi có thể.


-1

Tạm biệt giải quyết RẤT NHIỀU vấn đề!

bạn bắt đầu với những vấn đề dễ dàng và bạn chuyển sang những vấn đề khó khăn hơn một khi những vấn đề dễ dàng trở thành thói quen thay vì những vấn đề.


-4

Đừng giữ mình theo lý thuyết, hãy thực hành nhiều hơn. Với thực hành đi kèm kinh nghiệm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.