2008-11-30 24 views
8

Khi tôi đang mắc kẹt với một vấn đề:Kỹ thuật để làm theo khi bạn đang mắc kẹt lập trình

  • tôi tìm kiếm Google cho đoạn mã.
  • Tôi xem xét cách ly sự cố, để tôi có thể giải thích rõ hơn cho người khác để nhận câu trả lời.

Bạn sử dụng kỹ thuật tìm kiếm nào để tìm giải pháp cho vấn đề của mình?

Tôi bắt đầu đặt câu hỏi trong Stack Overflow.

Bạn làm theo các kỹ thuật hoặc phương pháp nào khác để khắc phục sự cố nhanh hơn?

Trả lời

9

Vâng có:

  • Google
  • Google
  • Google
  • Stack Overflow
  • Google
  • Google
  • Có lẽ một cuốn sách nếu tôi có một.

Nghiêm túc, tôi bắt đầu (sở thích) lập trình trong thập niên 1980 và thậm chí vào giữa những năm 90 bạn phải biết mọi thứ và có thư viện kỹ thuật. Sau đó, Google đến và nó dễ dàng hơn với Google một cái gì đó hơn là tìm kiếm (đánh dấu trang!) Tài liệu API (Google "java stringbuilder" sẽ giúp tôi có nhanh hơn so với điều hướng) cho phép một mình một cuốn sách thực tế (điện tử hoặc giấy).

Hầu hết các sự cố bạn đang cố giải quyết đã được giải quyết trước đó. Nhiều lần.

Phần còn lại của gỡ lỗi đi xuống để phân hủy, có thể kiểm tra đơn vị (có liên quan đến phân hủy) và xác minh giả định của bạn.

Bằng cách "phân hủy", ý tôi là giải pháp của bạn được cấu trúc sao cho các phần nhỏ có thể được kiểm tra riêng lẻ và dễ hiểu. Nếu bạn có một phương pháp dòng 7000 bạn (có thể) làm điều gì đó sai trái.

Hiểu những giả định nào bạn đã tạo là chìa khóa để bạn có thể xác minh chúng. Ví dụ: khi tôi bắt đầu với PHP, tôi đã viết một đoạn mã như sau:

$fields = $_SESSION["fields"]; // $fields is an associative array 
$fields["blah"] = "foo"; 

và tôi đã gãi đầu cố gắng tìm ra lý do tại sao nó không hoạt động (mảng không được cập nhật lần sau) Tôi đã truy vấn $ _SESSION). Tôi đến từ một nền Java, nơi bạn có thể làm điều này:

Map fields = (Map)httpSession.get("fields"); 
fields.put("blah", "foo"); 

và điều đó chắc chắn sẽ hoạt động tốt nhất. PHP tuy nhiên các bản sao mảng.Một giải pháp làm việc là sử dụng tài liệu tham khảo:

$fields =& $_SESSION["fields"]; // $fields is an associative array 
$fields["blah"] = "foo"; 

hoặc đơn giản là:

$_SESSION["fields"]["blah"] = "foo"; 

Điều cuối cùng tôi sẽ nói về gỡ lỗi và viết mã mạnh mẽ nói chung là phải hiểu ranh giới của giải pháp của bạn. Bằng cách này, tôi có nghĩa là nếu bạn đang thực hiện một danh sách liên kết thì các điều kiện biên sẽ xoay quanh khi danh sách trống.

+0

Nếu Google không truy xuất đúng kết quả, bạn không hỏi chính xác câu hỏi. –

+1

Hoặc là, hoặc câu hỏi liên quan đến dấu chấm câu quan trọng. –

3

Người bạn tốt nhất của tôi trong nhiều năm đã nhảy lên xe đạp của tôi và về nhà. Chỉ cần tránh xa bàn phím đã giải quyết được nhiều vấn đề trong nhiều năm đối với tôi.

+0

Điều đó có hiệu quả ngay cả đối với các vấn đề bạn gặp phải lúc 9 giờ sáng không? –

+0

Các vấn đề luôn xảy ra vào buổi chiều;) – krosenvold

23

Đi và làm điều gì đó khác. Không, thực sự. Tôi đã thấy rằng việc đặt vấn đề ở phía sau tâm trí của tôi sẽ giúp. Tôi không thể đếm số lần tôi nghĩ về một giải pháp tuyệt vời cho một cái gì đó tôi đã làm việc khi tôi đang làm việc trên một cái gì đó khác, hoặc xem TV, hoặc ăn uống. Có vẻ như bộ não của bạn vẫn đang giải quyết vấn đề ở chế độ nền.

Nếu điều đó không giải quyết được vấn đề của bạn, hãy thử nói chuyện với ai đó. Bạn sẽ ngạc nhiên như thế nào thường những người khác có thể cung cấp cho các giải pháp cho vấn đề của bạn mà đơn giản như vậy bạn facepalm.

+0

Tránh xa bàn phím và đi dạo/chạy/cà phê/nói chuyện với đồng nghiệp thường là câu trả lời hay nhất. Tôi thấy tập thể dục giúp làm rõ bộ não của tôi! – Fortyrunner

+0

Phải đồng ý với điều này. Tôi thậm chí không biết bao nhiêu lần giải pháp cho một cái gì đó đã đến với tôi trong khi tôi đang ở trong phòng tắm hoặc trên xe buýt. –

+0

Ngoài ra, hãy xem [Giai điệu gấu Teddy hữu ích] (https://www.youtube.com/watch?v=VnQu83nbBVc). – gaborous

2

Nếu sự cố kéo dài đến cuối ngày, tôi cố gắng khóa và giải quyết vấn đề đi trước khi đi ngủ.

Tôi nhận ra điều này nghe có vẻ ngoài kia, nhưng nó đã rất phổ biến trong kinh nghiệm của tôi rằng tôi sẽ thức dậy với ít nhất một cách tiếp cận thay thế cho vấn đề, nếu không phải là giải pháp đầy đủ. Ý tưởng không phải là để nhấn mạnh về nó - nhưng tích cực quyết định để giải quyết nó qua đêm. Bằng cách đó bạn có thể đi ngủ mà không cần lo lắng.

Tôi nghĩ rằng ăn uống tốt, tập thể dục thường xuyên và ngủ ngon là những người đóng góp rất lớn cho quá trình giải quyết vấn đề.

1

Thông thường tôi sẽ cố gắng nut ra vấn đề trong một vài giờ hoặc lâu hơn, cố gắng điều khác nhau viết nó trên giấy, làm cho sơ đồ. Nếu không có công trình nào hoạt động, tôi thường sẽ làm việc thông qua các tùy chọn sau.

  1. Đặt một lưu ý dính trên màn hình của tôi và tiếp tục đi với cái gì khác
  2. nháy mắt tại các lưu ý thông qua trong vài giờ tới để giữ cho vấn đề ở phía sau tâm trí của tôi
  3. Google cho các vấn đề tương tự và các phương pháp sử dụng
  4. Tham khảo ý kiến ​​đồng nghiệp hoặc một người bạn
  5. Ask trên một diễn đàn như stackoverflow
  6. Từ bỏ và thiết kế các vấn đề đi hay thiết kế một con đường xung quanh vấn đề để nó có thể được giải quyết với một số thời gian khác và st ick ghi chú TODO tại địa điểm giải pháp đã nói
0

Thường là cách tốt nhất để xóa đầu bằng cách làm một việc khác ngoài lập trình trong một thời gian ngắn. Xem this answer cho một ví dụ - Tôi đã làm nó trong khi đấu tranh với một lỗi đặc biệt gai góc, và khi tôi trở lại vấn đề tôi đã giải quyết nó trong khoảng một phút.

4

Giải thích vấn đề cho đồng nghiệp hoặc viết xuống để mô tả nó. Điều đó sẽ khiến bạn suy nghĩ theo một cách khác, từ một quan điểm khác.Để chính xác hơn, và để mô tả bối cảnh của vấn đề, bạn sẽ quay trở lại, có cái nhìn cấp cao hơn về vấn đề, bạn có thể thấy rằng bạn đã bỏ qua điều gì đó thực sự quan trọng.

Đôi khi, bạn thậm chí còn tìm thấy giải thích trước khi kết thúc mô tả của mình.

0

Thông thường tôi cố gắng giải quyết nó cho đến khi tôi đi ngủ .. Đôi khi tôi viết trên giấy những gì mã đang làm và sau đó tôi chia nó thành nhiều phần; Tôi cố gắng biết làm thế nào các biến của chương trình thay đổi khi nó đang chạy.

0

Hãy thử giải quyết một phiên bản nhỏ hơn nhiều của vấn đề trước và xem cách bạn bắt đầu với điều đó. Một khi bạn đã làm được điều đó, vấn đề lớn hơn sẽ không quá đáng sợ.

-1

Đi vệ sinh. Bạn di chuyển, vì vậy bộ não của bạn bị oxy. Bạn thư giãn, vì vậy bạn tập trung vào những thứ khác.

Đi tiểu để đổi mới! :)

0

Hãy tự hỏi: đang giải quyết vấn đề khó khăn đặc biệt này thực sự quan trọng đối với những gì bạn đang làm?

Vì mục đích của ứng dụng của bạn (hoặc bất kỳ hình ảnh lớn) là có một vấn đề tương tự nhưng dễ dàng hơn mà bạn có thể giải quyết để thực hiện rộng rãi cùng một điều.

0

Thông thường, tôi sẽ lấy bút và giấy và cố gắng tìm ra chi tiết của sự cố ở đó. Nếu điều đó không giúp được gì, Google. Nếu không, tôi sẽ làm điều gì khác trong một thời gian, hoặc yêu cầu trực tuyến. Làm việc cho tôi cho đến nay.

0

Thực tế bạn đang mắc kẹt có thể là 'mùi mã'. Đề nghị rằng họ là một cái gì đó sai trái với thiết kế hoặc cách tiếp cận ở một nơi khác. Hãy thử đặt ngón tay của bạn vào những gì gây ra điều này và sửa lỗi này thay thế.

Khi bạn quay trở lại vấn đề của bạn, nó có thể không còn tồn tại.

0

Một lần nữa, duyệt qua những gì tôi cho là có liên quan, sau đó ngủ trưa. Có hai câu trả lời khác đề cập đến ngủ hoặc ngủ trưa, nhưng điều này xứng đáng được nhấn mạnh hơn. Nó bây giờ được biết rằng có máy móc SERIOUS trong đó mà đi làm việc khi bạn ngủ. Google ((CBS SCIENCE SLEEP)) sẽ đưa bạn đến một video miễn phí tuyệt vời.

0

Nếu tôi không thể tìm ra cách giải quyết vấn đề thực sự, tôi cố gắng xem xét một phiên bản đơn giản của vấn đề. Để lấy một ví dụ đơn giản: Gần đây tôi đã gặp vấn đề khi tìm một tập hợp các tuyến vận chuyển để lấy một vật phẩm từ điểm A đến điểm B, khi không nhất thiết phải là tuyến đường trực tiếp từ A đến B, nhưng có thể có A đến C và sau đó C đến B, hoặc từ A đến C, C đến D, và sau đó là D đến B. (Tôi chắc chắn các hãng hàng không và đường sắt làm việc này mọi lúc.) Điều đó khá phức tạp, vì vậy tôi đã cố gắng tìm kiếm đầu tiên đơn giản trường hợp: A trực tiếp đến B. Điều đó thật dễ dàng. Sau đó, xem xét làm thế nào tôi sẽ xử lý nó với một điểm dừng trên đường đi. Sau đó xem xét hai điểm dừng. Tại thời điểm đó tôi đã có thể nhìn thấy các mô hình để một giải pháp.

Các giải pháp cho một phiên bản đơn giản hóa của sự cố có thể sẽ trở thành một phần của giải pháp lớn hơn, với một số phức tạp bổ sung được bao quanh chúng. Nhưng ngay cả khi không, việc thực hiện giải quyết vấn đề dễ dàng hơn thường cho bạn những ý tưởng về cách giải quyết vấn đề thực sự.

0

Các kỹ thuật chính tôi sử dụng (nên được tuân thủ theo thứ tự để bạn có thể tái sử dụng những gì bạn đã làm trong bước trước đó để có hiệu quả hơn):

  1. Xác định vấn đề của bạn: Cố gắng xác định rõ những gì là vấn đề, và những gì mong đợi. Xem 2 để giúp bạn.

  2. Thu thập dữ liệu về lỗi: Ghi nhật ký mọi thứ: nỗ lực của bạn, kết quả mong đợi, kết quả được quan sát. Điều này sẽ tránh sự cần thiết phải làm lại nhiều lần các bài kiểm tra tương tự (vì tâm trí của bạn không thể ghi nhớ tất cả), và có thể giúp bạn nhìn thấy bức tranh lớn hơn.

  3. Reduce your problem. Đây là sự thật nói chung cho bất kỳ mô hình trừu tượng của các hiện tượng tự nhiên, nhưng nó thậm chí còn đúng hơn về lập trình, bởi vì các chương trình là các thực thể rất phức tạp. Bạn nên cố gắng giảm mã của mình thành một chương trình tối thiểu để tái tạo vấn đề của bạn. Automatedtoolsexist.

  4. Nói chuyện với ai đó: một số giai thoại khẳng định hơn 2/3 lỗi được giải quyết chỉ bằng cách nói về nó. Xem Helpful Teddy Bear anecdote. Nếu trước đó bạn đã giảm chương trình của mình xuống một chương trình tối thiểu và có định nghĩa rõ ràng về vấn đề của bạn, cả hai sẽ hữu ích cho giải thích của bạn.

  5. Reach cho sự giúp đỡ hợp tác: tìm kiếm trên Google và trên StackOverflow, và gửi nếu bạn không thể tìm thấy bất cứ điều gì mà trả lời vấn đề của bạn (nhưng trước tiên thấy được 1, bạn phải có một định nghĩa rõ ràng về vấn đề của bạn).

Như bạn thấy, tôi đặt sự giúp đỡ hợp tác như là bước cuối cùng, bởi vì bạn chỉ nên yêu cầu giúp đỡ sau khi bạn đã xác định rõ ràng vấn đề của bạn và cố gắng để làm giảm vấn đề và sửa chữa nó một mình. Nếu bạn liên hệ với trợ giúp cộng tác trước khi thử các bước trước đó, bạn sẽ kết thúc với sự trợ giúp kém hoặc tự mình tìm ra ngay khi bạn đăng.

Bạn cũng có thể quan tâm đến khóa học Coursera Software Debugging, cũng mô tả một số phương pháp gỡ lỗi tự động.

Các vấn đề liên quan