Khi phát triển các thuật toán, bỏ qua giai đoạn bút & giấy có phải là một thói quen xấu? [đóng cửa]


8

Tôi đã nghe nhiều người nói rằng khi phát triển thuật toán, trước tiên bạn nên sử dụng bút và giấy, sơ đồ và những gì không, để bạn có thể tập trung vào chính thuật toán đó, không phải lo lắng về việc triển khai thuật toán đã nói (nghĩa là bạn xử lý một vấn đề tại thời gian).

Tuy nhiên, hầu hết thời gian tôi thấy thực sự dễ dàng hơn để phát triển thuật toán của mình một cách nhanh chóng. Đó là, tôi nghĩ một chút về vấn đề cho đến khi tôi biết hướng chung để thực hiện, và sau đó tôi bắt đầu viết mã và thực hiện các thay đổi cho đến khi thuật toán xuất hiện và hoạt động.

Đây có phải là một thói quen xấu mà tôi nên cố gắng thay đổi?

Câu trả lời:


11

Một số phát triển thuật toán có thể yêu cầu nhiều thử nghiệm và điều chỉnh lỗi và thử, vì người ta có thể thấy rằng các giả định sẽ đi vào thiết kế giấy nghiêm ngặt hóa ra không đủ chính xác khi đưa ra các ràng buộc về dữ liệu và hiệu suất thực.

Có thể lặp lại (think-code-test-think-code-test ...), thay vì chỉ là một hoặc hoặc sự lựa chọn cho "thói quen" tối ưu.


3

Ngoài ra còn có một cách giữa, mà tôi thường sử dụng. Không suy nghĩ quá nhiều trước và không bị lạc vào các chi tiết về mã của tôi ...

TDD (Phát triển theo hướng kiểm tra) cho phép bạn suy nghĩ một chút, sau đó làm cho nó hoạt động; sau đó suy nghĩ thêm một chút về những gì bạn cần, sau đó làm cho nó hoạt động, có mạng bảo mật mà Ca sử dụng trước đó của bạn luôn hoạt động mọi lúc ... Các bước là:

  1. Viết một bài kiểm tra (tức là Ca sử dụng).
  2. Xem nó thất bại, làm cho thất bại dễ hiểu.
  3. Viết mã.
  4. Tái cấu trúc mã và kiểm tra.

2

Điều này phụ thuộc vào thói quen suy nghĩ và độ phức tạp thuật toán của bạn.

Bút và giấy cung cấp tư duy "hình thức miễn phí" mà không cần trình biên dịch hét vào từng ký tự bạn nhập.

Một số người trong chúng ta sử dụng bút và giấy, dành thời gian để điều chỉnh giới hạn vòng lặp, thử các giá trị khác nhau, v.v.

Vì vậy, tôi đoán rằng việc viết mã trực tiếp khuyến khích cách tiếp cận thử nghiệm đầu tiên trong đó khi bút và giấy thúc đẩy cách tiếp cận đầu tiên. Chắc chắn rằng nếu nhiệm vụ là tầm thường, bạn có thể mã hóa nó một cách nhanh chóng (nếu bạn đủ kinh nghiệm) nhưng các thuật toán phức tạp có thể sẽ cần một cách tiếp cận phát triển khác.

Sơ đồ giúp trong một số trường hợp, nhưng điều này đòi hỏi bạn phải làm quen với chúng và đã sử dụng chúng trước đó.


Đó là ít nhiều tại sao tôi hỏi. Tôi nghĩ rằng phương pháp "nghĩ trước tiên" sẽ giúp bạn trở thành một lập trình viên tốt hơn trong dài hạn. Cảm ơn câu trả lời.
Daniel Scocco

Vâng, nhưng bạn là loại người đó? Một số người phát triển mã lặp lại bằng thử nghiệm và faliure và sẽ không học cách nào khác.
NoChance

2

Tôi nghĩ rằng bạn là cách tiếp cận phổ biến hơn. Nếu thuật toán đặc biệt phức tạp hoặc khó khăn, có thể khó khăn để tìm ra thuật toán và thực hiện cùng một lúc, nhưng nói chung tôi nghi ngờ nó sẽ giúp ích cho hầu hết mọi người.

Nhưng tôi sẽ không nói rằng, phát minh ra các quy tắc cho một ngữ pháp và triển khai trình phân tích cú pháp cho nó mà không viết các quy tắc ra giấy (hoặc có thể với một số công cụ đặc biệt mà tôi không có) trước tiên hoặc thực hiện B-Tree mà không cần giả mã có sẵn.

Tôi sẽ không nói rằng bạn có một thói quen xấu trừ khi điều đó gây hại cho bạn và tôi nghĩ bạn sẽ chú ý nếu điều đó xảy ra.


Gotcha, và vâng tôi nghĩ rằng đối với các dự án lớn hơn / phức tạp hơn, tôi có xu hướng dành nhiều thời gian hơn cho giấy tờ.
Daniel Scocco

2

Những "nhiều người" này là ai? Và họ đang lập trình để kiếm sống? Những gì bạn đang làm là chính xác những gì hầu hết các lập trình viên làm, ít nhất là hầu hết những gì tôi đã biết. Có ít sử dụng cho giấy khi gõ nhanh hơn và ít sử dụng mã giả khi lập trình bằng ngôn ngữ cấp cao. Thỉnh thoảng tôi sử dụng bút và giấy để hình dung một thuật toán phức tạp (ví dụ như xoay cây), nhưng chủ yếu tôi bắt đầu với mã cấp cao và dần dần điền vào chỗ trống.

Giống như KLE, tôi nghĩ rằng điều này hoạt động tốt hơn sau khi phát triển dựa trên thử nghiệm. Giả sử bạn sẽ viết bài kiểm tra nào, bạn cũng có thể viết chúng trước.


0

bạn có thể tạo một thiết kế trong khi tạo các lớp sơ khai, phương thức và kiểm tra nhưng bạn có thể bị sa lầy trong khi tạo các chi tiết

đối với những thứ thực sự phức tạp (trình biên dịch và như vậy), thiết kế bút và giấy (hoặc ít nhất là trên một công cụ thiết kế sắp xếp) sẽ giúp bạn theo dõi và quan sát toàn bộ bức tranh và tránh những lựa chọn thiết kế tồi và thậm chí cho phép bạn chọn mẫu thiết kế nhất định từ đầu

nhưng cuối cùng nó phụ thuộc vào mức độ bạn có thể tiếp tục nhìn thấy bức tranh lớn


0

Tôi khuyên bạn nên phác thảo các hướng chung (giai đoạn "bút & giấy") trước khi chuyển sang thực hiện để tiết kiệm thời gian bằng cách đưa ra các yêu cầu / ràng buộc rõ ràng nhất trên đường đi.

Sau đó, bạn có thể hoàn thiện nó theo cách mà bạn không bao giờ có thể đoán được mọi thứ khi bắt đầu bởi vì những mâu thuẫn tiếp theo có thể / sẽ xuất hiện sau này trong quá trình phát triển, vì nhiều lý do.

Bằng cách đó bạn biết bạn đang đi đâu nhưng bạn vẫn có thể thích nghi với những thay đổi.


0

1. Lượng chuẩn bị cần thiết thường tỷ lệ thuận với sự phức tạp của những gì bạn đang làm. Thật vô nghĩa khi viết & viết 2 ngày cho một thuật toán được sử dụng một lần trong một quý, chỉ chạy một giờ duy nhất trên một máy. Thật hợp lý khi viết và viết ba tuần một lần (nếu cần thiết) để thiết kế mô-đun bù thông lượng hiệu suất cao mới có thể xử lý nửa triệu yêu cầu mỗi giờ và phải chạy 24/7/365 mà không bị ngừng hoạt động.

2. Bạn có thể biết đó có phải là thói quen xấu trong vòng 30 giây hay không nếu bạn xem những giải pháp nào bạn đang mã hóa. Bạn hỏi rằng đó là một thói quen tốt hay xấu. Vâng, điều đó phụ thuộc vào bạn. Nếu bạn là một người học chậm khi bắt đầu sự nghiệp lập trình của mình, có lẽ nên viết và viết chi tiết đầy đủ mọi thứ. Nếu bạn có một số năm kinh nghiệm, sẽ chỉ đủ để suy nghĩ trong 5 phút và sau đó chỉ cần làm điều đó. Tất nhiên vẫn còn đối với 1. ở trên.

Dòng dưới cùng

Chỉ có mã của bạn cho biết thông điệp cho dù bạn cần nhiều hay ít bút & giấy. Đừng để bất cứ ai khác ra lệnh cho bạn, nhưng hãy tự mình tìm ra nó. Điều đó giúp bạn tiếp tục học hỏi.

Tuyên bố từ chối trách nhiệm: Đây có thể không phải là những gì được gọi là suy nghĩ chính thống và lẽ thường. Vậy là được rồi. Chỉ cần đặt một dấu trang và đọc lại sau năm năm hoặc lâu hơn.

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.