Viết phương pháp giải quyết vấn đề của tôi trên giấy? [đóng cửa]


54

Tôi là sinh viên năm nhất Khoa học Máy tính và chúng tôi mới bắt đầu thực hiện một số dự án thực tế trong Python. Tôi đã thấy tôi rất hiệu quả khi tôi sử dụng phương pháp bút và giấy mà giáo sư của tôi gợi ý trong lớp. Nhưng khi tôi không thể viết ra vấn đề của mình và giải các thuật toán của mình ra giấy thì tôi rất chậm. Trong các phòng thí nghiệm, tôi dường như luôn phải nhận nhiệm vụ trở lại ký túc xá của mình. Khi tôi đến đó và viết nó ra, tôi giải quyết vấn đề khiến tôi mất cả lớp chỉ trong 5 phút.

Có lẽ đó là vì tôi bị căng thẳng khi thấy mọi người giải quyết các phòng thí nghiệm trước tôi. Hoặc có thể đó là phương pháp bút và giấy.

Tôi đã duyệt qua các diễn đàn và ai đó đã viết rằng nếu bạn phải viết chương trình của mình ra giấy thì bạn không nên là một lập trình viên. Tôi thực sự lo lắng vì tôi tốt hơn rất nhiều khi tôi có thể thấy chương trình đang làm gì và theo dõi theo cách của tôi trước khi nhập mã thực tế. Tôi có làm điều gì sai?

Chỉnh sửa: Xin lỗi vì không rõ ràng, nhưng khi tôi nói viết trên giấy tôi có nghĩa là cách tiếp cận giải quyết vấn đề của tôi (ví dụ: viết ví dụ, tạo bảng với các giá trị, v.v.) không phải là mã thực tế của tôi. Tôi chỉ sử dụng giấy để lấy ý tưởng của tôi ra.


28
Tôi không thể thấy bất cứ điều gì sai khi nghĩ về vấn đề trên giấy trước.
Julien Guertault


34
Người đó sai rồi. Hầu hết sử dụng tốc ký như khối UML hoặc mã giả, nhưng bất kỳ phương pháp nào bạn sử dụng đều có tác dụng như trí óc của bạn hoạt động và rõ ràng bạn cần giấy =) Tôi đoán Feynman không nên là nhà vật lý vì anh ta viết phương trình trên bảng đen, phải không?
Patrick Hughes

10
Thách thức đối với bạn rất có thể là học cách giải quyết mọi thứ trên giấy trong khi bạn thực sự ở trong phòng thí nghiệm. Các kỹ sư và nhà khoa học thường xuyên sử dụng máy tính xách tay giấy cho việc này (và như một dấu vết giấy) và tôi luôn tự hỏi tại sao rất nhiều người CNTT coi thường cách tiếp cận đó. Tôi là một kỹ sư đã dành sự nghiệp của mình để viết mã và sử dụng sổ ghi chép mọi lúc.
Móż

4
@ ott-- Tôi và đồng nghiệp của tôi đều sử dụng bút với vở. Đối với tôi, ít nhất, đó là một mẹo hay mà tôi học được ở trường đại học - việc không thể xóa giúp tôi buộc phải suy nghĩ nhiều hơn, vì vậy cuối cùng tôi không phải trải rộng nó ra trên các trang bổ sung. Ngoài ra, sự cám dỗ để giữ tất cả trên một trang và khả năng xóa khiến quá dễ dàng để vô tình xóa thứ bạn muốn. Cách tiếp cận không chính xác cũng chỉ có thể được bỏ qua, không bị xóa, vì vậy bạn có một lời nhắc ngồi đó về những gì bạn đã cố gắng và những gì không hoạt động. Giấy rẻ tiền, đừng làm khó bản thân.
Izkata

Câu trả lời:


70

Không có gì sai khi làm việc với các thuật toán của bạn trên giấy trước. Không quá nhiều cho mã hóa hàng ngày, nhưng đối với các thuật toán phức tạp hơn, các lập trình viên chuyên nghiệp làm việc chúng trên giấy hoặc bảng trắng mọi lúc, đặc biệt là nếu một định dạng đồ họa làm cho nó rõ ràng hơn. Đối với một sinh viên, mọi chương trình đều phức tạp.

Tuy nhiên, nếu bạn muốn giỏi hơn trong việc thiết kế các thuật toán trên máy tính, có một số kỹ thuật bạn có thể thực hành. Đừng chỉ bắt đầu bằng cách viết mã, viết những điều tương tự bạn sẽ viết ra giấy như bình luận, sau đó mở rộng nó thành mã thực hoặc từng bình luận chi tiết hơn.

Ví dụ: nếu tôi xóa một phần tử từ giữa danh sách được liên kết, tôi có thể bắt đầu bằng một cái gì đó như:

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

Sau đó, tôi có thể thay thế // find the elementbằng một hàm có nhiều mã giả hơn và tiếp tục cho đến khi tôi có một giải pháp hoàn chỉnh. Đừng nghĩ rằng mã phải được viết theo cách tuyến tính.


Lời khuyên tốt Karl.
andy256

2
Tôi kết hợp phương pháp trên với giải quyết vấn đề Rubber Duck (mặc dù tôi là một SuSE sang trọng) để thực hiện hầu hết các công việc phức tạp của tôi. Tôi cũng có sự sang trọng của một bảng trắng để viết nhiều thứ trên đó.
Deco

+1. Viết câu hỏi và sau đó trả lời là cách tôi thường giải quyết mọi thứ. Nó buộc tôi phải tìm kiếm những cạm bẫy và vấn đề trong kế hoạch của mình.
Andy Hunt

1
Bạn sẽ tìm thấy một số doanh nghiệp định hướng phát triển phần mềm sẽ có bề mặt có thể ghi được ở mọi nơi. Chúng thường chứa đầy sơ đồ, mã giả, ghi chú, công trình. Tôi có một sở thích rất mạnh mẽ cho việc viết nguệch ngoạc xuống. Nếu tôi đang bao thanh toán lại mã, tôi thích mã này nếu tôi thực sự có thể in mã ra và chú thích nó. Tôi thấy tôi cảm thấy tốt hơn cho nó hơn là đọc qua và ghi chú.
Twirrim

1
Kỹ thuật này thực sự có một tên: Quá trình lập trình mã giả
roufamatic

15

Cứ liều thử đi! Nếu chúng tôi gọi những gì bạn đang nghĩthiết kế giải pháp của bạn, thì điều đó có nghĩa là quá trình của bạn sẽ nhanh hơn nhiều so với việc làm nổ mã.

Mọi người thích nghĩ (và những người ồn ào muốn nói với chúng tôi) rằng cách làm của họ là tốt hơn. Nhưng khả năng và kỹ năng pha trộn của mọi người là khác nhau. Vì vậy, làm những gì làm việc cho bạn. Khi bạn thực hành, có lẽ bạn sẽ chuyển sang thực hiện nhiều công việc thiết kế trong đầu và sử dụng giấy cho các vấn đề lớn hơn.

Một điều cần chú ý là các hình thức thi sẽ diễn ra. Họ sẽ ở trên giấy, hay họ sẽ dựa trên máy tính? Nếu chúng dựa trên giấy, thì cách của bạn sẽ cho bạn một lợi thế. Nếu chúng dựa trên máy tính, thì điều đó cũng tốt: thực hiện bất kỳ thiết kế nào trên giấy, sau đó viết mã. Bất cứ điều gì làm việc tốt nhất!


1
Tôi có thể bảo đảm cho việc suy nghĩ và thiết kế giải pháp mất ít thời gian hơn trong thời gian dài. Quá thường xuyên, ở trường đại học, tôi sẽ thấy mọi người (bao gồm cả bản thân mình) khởi động sau 2 giờ đồng hồ, chỉ để thấy rằng giải pháp của họ đã bị phá vỡ. Dành thời gian để thiết kế và giải quyết vấn đề sẽ giúp tìm ra giải pháp đơn giản. Chúng tôi có bảng trắng, sổ ghi chép và "tư vấn" nơi tôi làm việc vì lý do này.
Jamie Taylor

6

Tôi không đặt mã thực tế xuống giấy, nhưng đối với bất kỳ thứ gì không tầm thường, tôi hầu như luôn bắt đầu trên bảng trắng hoặc sổ ghi chép. Tôi thường phác thảo ra:

  • Thuật toán / quy trình / luồng điều khiển
  • Cấu trúc dữ liệu
  • Các mối quan hệ
  • Các thành phần (làm thế nào để tôi giải quyết vấn đề này)

Nó thường là sự kết hợp của các bản phác thảo, mã giả và tiếng Anh.

Tôi thấy rằng bằng cách này, dễ hình dung hơn khi tôi bắt đầu viết mã. Tôi cũng sẽ phát hiện ra sai sót trước khi bắt đầu nhập mã bởi vì tôi có thể thấy mọi thứ trước mặt (thay vì cuộn không ngừng và nhảy cửa sổ). Không chỉ vậy, một khi nó được viết ra, tôi có thể để mọi thứ hình thành trong đầu khi tôi đang làm việc khác. Tôi cũng có thể làm việc theo kiểu phi tuyến tính, cam kết một ý tưởng ra giấy khi nó chạm vào tôi và sau đó quay lại với nó khi tôi đạt đến điểm mà tôi cần.

Cam kết một cái gì đó trên giấy là một trợ giúp to lớn cho việc duy trì bộ nhớ. Khẩu hiệu cho nhãn hiệu máy tính xách tay Field Notes là:

Tôi sẽ không viết nó để nhớ nó sau này, tôi đang viết nó để nhớ nó bây giờ.

Sau khi thực hiện một cách tiếp cận tập trung hơn để viết mọi thứ ra giấy, ngay cả khi tôi thực hiện một mục trong ứng dụng ToDo trên điện thoại của mình một lúc sau, tôi thấy rằng ý nghĩ đó được củng cố trong đầu tốt hơn nhiều so với việc ghi chú điện tử. IOW, bằng cách lập kế hoạch mã hóa của tôi trên giấy / bảng trắng, các ý tưởng ở trong đầu tôi tốt hơn.

Nó cũng phục vụ như một tài liệu tham khảo hữu ích khi đến lúc ghi lại những gì tôi đã viết.


5

Tôi không nghĩ rằng có bất cứ điều gì sai trái với việc soạn thảo mã (giả hoặc nói cách khác) trên giấy trước - nó thực sự không khác gì viết nó ra trên bảng trắng, điều mà nhiều người làm khi thảo luận về cách giải quyết vấn đề.

Bạn có viết bản thảo đầu tiên của bài luận cho các lớp không CS trên giấy trước khi gõ chúng không? Trên thực tế, tôi đã từng làm điều đó từ nhiều năm trước khi tôi còn là sinh viên đại học, nhưng sau năm thứ nhất, tôi buộc mình phải viết tất cả các bản nháp lên màn hình, vì nó khiến việc viết các bản nháp tiếp theo trở nên dễ dàng hơn rất nhiều, và ý tưởng tương tự cũng được áp dụng để viết mã.

Tôi sẽ đề nghị bạn thử gõ các thuật toán của mình, ngay cả khi nó chỉ trong một trình soạn thảo văn bản như Word. Bạn càng làm điều đó, bạn sẽ càng thoải mái hơn khi không dựa vào giấy và bút. Và nếu kỹ năng đánh máy của bạn hơi thiếu và thực tế đó là nguồn gốc của sự thất vọng của bạn, hãy tham gia một khóa học đánh máy! Nó sẽ là điều tốt nhất bạn có thể làm cho sự nghiệp tương lai của bạn.


3

Giải quyết vấn đề và viết mã thực hiện giải pháp của bạn là hai hoạt động khác nhau.

Nếu bạn không quen thuộc với một ngôn ngữ, bạn sẽ dành nhiều thời gian cho chính mã - và không đủ để tìm một giải pháp tốt. Nếu giấy, bảng trắng hoặc bắt đầu từ trần nhà giúp bạn trong vấn đề đó, thì bằng mọi cách hãy làm điều đó.

(Cá nhân tôi thấy mình rời khỏi máy tính và đi lòng vòng trong vòng tròn cố gắng xây dựng một giải pháp trong tâm trí của tôi)


2

Bạn sẽ ace phỏng vấn! Họ làm cho bạn viết mã trên giấy hoặc bảng trắng. Tôi hoàn toàn ngược lại. Cố gắng viết niềng răng hoặc cắt và dán bằng bút là quá tẻ nhạt!

Bố tôi đã sử dụng rất nhiều giấy khi lập trình COBOL. Tôi nghĩ đó chỉ là phong cách suy nghĩ của bạn.


0

Chúng tôi đã từng có một lớp học hai học kỳ tên là Cơ bản của lập trình. Cả hai bài kiểm tra giữa học kỳ và bài kiểm tra cuối kỳ đều được thực hiện trên giấy. Nếu bạn thực hiện bất kỳ lỗi biên dịch, bạn đã mất một số điểm nghiêm trọng. Nếu bạn thực hiện các lỗi biên dịch lớn, bạn đã thất bại. Tuy nhiên tôi cảm thấy nó đã phát triển khả năng chúng tôi xem xét bất kỳ mã nào và tìm các dòng lỗi trong một khoảng thời gian tương đối ngắn hơn.


0

Không có gì sai với những gì bạn đang làm, tôi đã học cách lập trình bằng giấy và bút.

Như những người khác đã đề nghị làm những gì làm việc cho bạn. Tôi nhớ chương trình Java đầu tiên tôi viết chủ yếu trên giấy và sau đó tôi đã dành hai giờ để gõ nó lên và mười lăm phút khóc khi thấy hơn 200 lỗi biên dịch. Có nhiều hơn nhưng trình biên dịch sẽ chỉ hiển thị 200 đầu tiên! Điểm tôi đang đưa ra là bằng cách viết mã lên giấy tôi đã có thể suy nghĩ thông qua thuật toán cơ bản và chức năng cho những gì chương trình cần làm. Trình biên dịch đã chỉ ra những lý do tại sao chương trình của tôi sẽ không chạy. 90% các vấn đề nằm ngoài giới hạn ngoại lệ với mảng.

Khi bạn có được nhiều kinh nghiệm và sự tự tin, bạn sẽ thấy mình sử dụng bút và giấy ít hơn. Bạn sẽ biết cách sử dụng các khái niệm cơ bản như vòng lặp, v.v. Bạn sẽ có ví dụ trong các chương trình khác, mà bạn có thể sử dụng lại. Bạn sẽ sử dụng trình biên dịch và IDE để tìm các lỗi rõ ràng trong quá trình viết chương trình. Ngay bây giờ mặc dù bạn không có kinh nghiệm đó.

Đọc qua câu hỏi của bạn tôi tự hỏi liệu một số vấn đề của bạn có thể là do tập trung. Nếu sử dụng bút và giấy trong môi trường yên tĩnh giúp bạn tập trung thì thật tuyệt.

Bạn vẫn đang học đại học và bạn vẫn đang học. Cuối cùng, tất cả những gì bạn đang làm là những gì làm việc cho bạn. Nếu bằng cách sử dụng giấy và bút, bạn đang sắp xếp những suy nghĩ và suy nghĩ rõ ràng và bình tĩnh thì bạn đang lập trình.


1
Làm thế nào để trả lời câu hỏi này?
gnat

OP đang hỏi liệu có ổn không khi sử dụng bút và giấy vì anh ta đã đọc 'ai đó đã viết rằng nếu bạn phải viết chương trình của mình ra giấy thì bạn không nên là một lập trình viên.' Anh cũng nói rằng anh đang học đại học nên vẫn đang học. Ý định của tôi là cho thấy rằng không có gì sai với những gì anh ấy đang làm và tôi đã học cách lập trình bằng giấy và bút.
Daniel Hollinrake

-1

Mã của tôi được tổ chức tốt hơn nhiều khi tôi viết nguệch ngoạc các ghi chú và phương pháp tiếp cận trên một sổ ghi chú, kiểm tra sách, kiểm tra trang web và suy nghĩ về nó. Tôi cũng là một người trực quan hơn rất nhiều, vì vậy vẽ tranh với cấu trúc dữ liệu rất hữu ích. Tôi không viết ra từng dòng, nhưng tôi viết nguệch ngoạc những gì tôi cho là những mảnh "quan trọng" hoặc chức năng chính. Đối với các dự án lớn hơn, tôi kích hoạt Visio. Tôi không chắc tại sao ai đó sẽ ủng hộ việc nhảy ngay lên bàn phím trừ khi chúng hiệu quả hơn nhiều hoặc được trả theo giờ.


-1

Hãy làm những gì cho bạn. Tôi sẽ không viết mã trên giấy. Tôi viết mã giả và vẽ sơ đồ trên giấy, nhưng viết mã đầy đủ có vẻ như là một sự lãng phí thời gian.


-2

Tôi cũng đang đối mặt với vấn đề tương tự vào ngày đầu tiên 'học các kỹ năng kỹ thuật.

Nhưng loại thực hành này không nên mang lại thành công 100% vì nếu chúng ta viết mã trên giấy thì không có cơ hội sửa lỗi, có cơ hội giải quyết các lỗi và ngoại lệ trong quá trình làm giấy.

Vì vậy, công việc giấy không cung cấp bất kỳ điều hướng nào để giải quyết các vấn đề. Và chúng tôi có thể nhận được tốc độ loại dưới dạng tiền thưởng do thực hành hệ thống.

Tôi cũng đang làm công việc giấy tờ nhưng khi trước khi thực hiện chức năng của mình, tôi chỉ cần thực hiện ước tính sơ bộ sau đó, tôi sẽ bắt đầu triển khai trên hệ thống.

Hãy cố gắng dành nhiều thời gian hơn cho thực hành hệ thống. Điều này sẽ cho 100% sự tự tin và kết quả.

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.