Điều chỉnh lời khuyên lập trình mâu thuẫn: làm cho một cái gì đó hoạt động và lặp đi lặp lại so với thực sự nghĩ về nó trước khi mã hóa


19

Tôi là một lập trình viên trung cấp với một vài năm kinh nghiệm chuyên môn, người đã đi được một nửa bằng thạc sĩ. Khi học lập trình, tôi thường nghe thấy hai lời khuyên dường như trái ngược nhau.

Lời khuyên đầu tiên là làm cho một cái gì đó hoạt động nhanh chóng, xem cách nó hoạt động (thông qua thử nghiệm tạo mẫu hoặc thử nghiệm không chính thức), cải thiện phiên bản, xem cách nó hoạt động trở lại, cải thiện lại ... và sau đó lặp lại chu trình cho đến khi bạn hoàn thành . Điều này đôi khi được gọi là "phát triển xoắn ốc" hoặc được gọi là "phát hành sớm, phát hành thường xuyên."

Lời khuyên thứ hai là: thực sự nghĩ về một dự án thông qua trước khi viết bất kỳ mã nào.

Tôi đã thành công với cả hai phương pháp và tôi sẽ nói rằng tôi đồng ý với từng triết lý.

Nhưng bây giờ tôi bắt đầu giải quyết các dự án phức tạp hơn nhiều mà tôi không biết làm thế nào để hoàn thành (như các ứng dụng phân tán và lập trình đồ họa hướng đến hiệu suất).

Làm thế nào để tôi đi về các dự án này?

Tôi chỉ bắt đầu viết mã SOMETHING và học (nền tảng / phương pháp / ngôn ngữ / kiến ​​trúc) khi tôi đi - hay tôi không giữ mã hóa và thực hiện nhiều nghiên cứu / đọc trước khi tôi mở IDE?

Làm thế nào để tôi hòa giải những phần mâu thuẫn của lời khuyên lập trình?


Làm cả hai, cùng một lúc. Lặp lại, tài liệu, lặp đi lặp lại, tài liệu, lặp đi lặp lại và một khi bạn đã có một kế hoạch rõ ràng hoạt động. Xây dựng nó: D
Matt D

1
Liên quan phần nào là bài luận Kent Beck về "Làm cho nó chạy, sau đó làm cho nó VS. đúng Làm cho nó phải, sau đó làm cho nó chạy": facebook.com/notes/kent-beck/runright-and-vice-versa/...
Thiago Silva


1
Tôi không thấy chúng trái ngược nhau như thế nào. Đầu tiên tôi nghĩ rất nhiều, và sau đó làm cho một cái gì đó hoạt động nhanh chóng.
fjarri

Rất sâu. Tôi đồng ý. Dự án chuyên nghiệp trung bình của tôi là khoảng 40 -50% công việc thiết kế phía trước, 10, mã hóa tối đa 15% và phần còn lại để thử nghiệm.
Mawg

Câu trả lời:


20

Tôi không chắc chắn rằng suy nghĩ về một vấn đề trước thời hạn so với phương pháp lặp lại là mâu thuẫn với nhau. Cũng giống như nhiều thứ khác, tôi nghĩ bạn nên cố gắng đạt được sự cân bằng giữa hai điều này. Làm thế nào để bạn tìm thấy sự cân bằng? Đó là điều bạn học được bằng kinh nghiệm và thường là những bài học hay nhất (ví dụ như những thứ mang lại cho bạn trải nghiệm) là khi bạn không hiểu nó hoàn toàn đúng (hoặc thậm chí là bài học tốt hơn: chỉ cần hiểu sai). Như bạn đã chỉ ra, có một câu nói "phát hành nhanh, phát hành thường xuyên". Có một câu tương tự khác, "thất bại sớm, thất bại nhanh, thất bại thường xuyên"

Suy nghĩ phía trước là tuyệt vời và bạn hoàn toàn nên làm điều đó. Nhưng với kinh nghiệm, hãy học khi ngừng suy nghĩ và chỉ xây dựng một cái gì đó ngay cả khi bạn không có tất cả dữ liệu. Bằng cách xây dựng nó, bạn sẽ có thể hiểu rõ hơn về miền vấn đề và có khả năng đưa ra giải pháp tốt hơn nhiều. Vì vậy, tôi khuyên bạn không nên loại trừ cái này khỏi cái kia mà hãy biến "phần đầu suy nghĩ" thành các lần lặp của bạn và theo thời gian tôi nghĩ bạn sẽ tự tìm được câu trả lời đúng cho câu hỏi này.

Chỉ là một ví dụ nhỏ. Hôm nọ tôi đang vật lộn với một quyết định thiết kế phần mềm. Nhìn chung, nó tương đối tầm thường nhưng tôi có hai lựa chọn thay thế và có vẻ như cả hai sẽ hoạt động. Tôi tiếp tục quay lại những ưu / nhược điểm của từng người và sau đó quay lại và xem xét lại các quyết định của mình. Nhìn lại, có một chút xấu hổ khi tôi dành bao nhiêu thời gian để suy nghĩ. Rồi tôi tự nhủ, f # @ k đó! Và thay vì sử dụng một trong hai thiết kế, tôi chỉ tiếp tục và hack một số mã với nhau, hoàn toàn bỏ qua tất cả những thứ tốt mà bạn tìm hiểu về thiết kế tốt. Tôi có tính năng làm việc trong khoảng 45 phút. Sau đó, tôi quay lại, xem mã của mình và tái cấu trúc nó thành một thứ gì đó chắc chắn và thứ gì đó tôi sẽ không cảm thấy xấu hổ khi kiểm tra kiểm soát nguồn. Điều thú vị là sau khi tôi sử dụng hack, tôi đã nghĩ ra "

Một điều nữa tôi muốn giới thiệu cụ thể cho các vấn đề bạn đang gặp phải (nghĩa là nhiệm vụ lớn, phức tạp hiện ra trước mắt). Thay vì làm những việc nối tiếp, hãy làm chúng song song. Chia nhỏ ngày của bạn thành các phần mà bạn thực hiện nghiên cứu và sau đó dừng lại, chuyển đổi bánh răng và mã trong một thời gian, ít nhất là trên các phần của dự án chưa hoàn thành ẩn số. Cách này gần với mã sẽ cho bạn góc nhìn tốt hơn và bạn sẽ không bị kiệt sức khi cố gắng tiếp thu quá nhiều thông tin quá nhanh. Đối với tôi ít nhất, sau vài giờ nghiên cứu, thật tốt khi để bộ não tiêu hóa các thứ, chuyển đổi nhiệm vụ và làm một cái gì đó khác trong một thời gian. Sau đó quay lại để nghiên cứu thêm.


Tôi sẽ thêm: bắt đầu mã hóa nếu nó thực sự cần thiết. Nếu không có vấn đề gì, người ta không nên bắt đầu viết mã.
Tassisto

5

Có những quyết định nhất định cần phải được đưa ra trước thời hạn.

Bạn đang làm một ứng dụng web? Sau đó, bạn cần phải biết kiến ​​trúc tổng thể sẽ trông như thế nào. Các kiến ​​trúc như MVC đã xác định các phần chức năng lớn của bạn sẽ là gì (như định tuyến, bộ điều khiển, mô hình, lớp dịch vụ, giao thức truyền thông, v.v.); phát minh ra tất cả những gì từ đầu sẽ là một quãng đường dài, không cần thiết và có lẽ kém hơn những gì đã được phát minh ra.

Bạn có đang viết bất kỳ loại ứng dụng nào liên quan đến các bộ sưu tập các đối tượng hoặc dữ liệu không? Sau đó, bạn sẽ cần biết về loại cấu trúc dữ liệu nào phù hợp nhất cho kịch bản cụ thể của bạn và đặc điểm hiệu suất của chúng là gì. Bạn có cần thời gian tra cứu nhanh? Làm thế nào về bộ dữ liệu được đặt hàng? Một bộ sưu tập trong bộ nhớ sẽ làm gì, hay bạn cần một thứ gì đó có sức mạnh công nghiệp hơn như cơ sở dữ liệu? Bạn không thể bắt đầu viết mã mà không suy nghĩ về những quyết định này, bởi vì nếu bạn chọn sai, bạn sẽ phải bắt đầu lại.

Điều đó nói rằng, một khi các quyết định công nghệ được đưa ra, bạn có quyền tự do trong khuôn khổ bạn đã thiết lập. Mục tiêu sau đó là duy trì sự linh hoạt, lặp đi lặp lại và (tôi dám nói) đủ nhanh nhẹn để khi khách hàng thay đổi suy nghĩ về những gì họ muốn, bạn có thể đáp ứng cho họ một lượng tối thiểu.

Làm thế nào để bạn làm điều đó? Kinh nghiệm, chủ yếu. Như ai đó đã từng nói, kinh nghiệm là những gì bạn nhận được ngay sau khi bạn cần nó. Nhưng nếu bạn tuân theo các quyết định thiết kế thành công của người khác (như được thể hiện trong các nền tảng, thư viện và các công cụ khác của giao dịch), bạn có thể học hỏi từ họ và giảm rủi ro.


1

Tôi không xem cả hai là loại trừ lẫn nhau.

Giống như bất kỳ loại quản lý dự án nào, bạn cần cả tầm nhìn dài hạn và mục tiêu ngắn hạn.

Nếu không có cái trước, bạn sẽ lãng phí thời gian, ví dụ như các tính năng thậm chí không bao giờ được sử dụng và không có cái sau bạn sẽ dành cả ngày để xem xét cách tạo ứng dụng hoàn hảo mà không cần hoàn thành dự án của bạn.

Tần suất bạn phát hành / vv. phụ thuộc vào phương pháp cụ thể bạn đang sử dụng.

Những gì bạn phải nghiên cứu phụ thuộc vào những gì bạn biết so với những gì bạn không thoải mái.


1

"Lặp lại" và "nghĩ về nó" không mâu thuẫn, thay vào đó chúng là bổ sung.

Ngay cả ở thái cực của họ, họ phản ánh hai con đường để đến cùng một nơi.

  • Cực đoan của Iteration là một ngàn con khỉ đập vào một ngàn bàn phím. Với đủ thời gian có thể bạn sẽ nhận được một cái gì đó đáp ứng yêu cầu.
  • Cực đoan của "nghĩ về nó" là một cách tiếp cận Thác nước. Nếu bạn may mắn, các yêu cầu không thay đổi đáng kể từ khi bắt đầu dự án vào thời điểm bạn giao mã. Hoặc bạn sẽ chỉ bị tê liệt phân tích và không giao được gì.

Bạn phải có một số hiểu biết về tên miền và vấn đề trước khi bạn bắt đầu viết mã. Đây là phần "nghĩ về nó thông qua". Lý tưởng nhất là bạn sẽ thấy con đường cấp cao từ đầu đến cuối về cách giải quyết vấn đề.

Nhưng bạn có thể chỉ thấy những phần chính của con đường đó, và chắc chắn không phải điểm dừng nào trên đường đi. Đó là nơi lặp đi lặp lại chơi. Bạn có thể bắt đầu lặp qua các phiên bản của ứng dụng và tìm kiếm phản hồi để:

  • Xác định các rào cản xuất hiện ở các cấp chi tiết thấp hơn
  • Xem phản hồi của các bên liên quan để làm rõ những khu vực âm u trong đường dẫn cấp cao.

Nguồn gốc Latin của quyết định có nghĩa là "cắt đứt". Lặp lại cho phép bạn quyết định những gì hoạt động trong thực tế thay vì chỉ lý thuyết và lặp lại cho phép bạn loại bỏ các tùy chọn khác không khả thi.

Vì vậy, bạn phải suy nghĩ vấn đề thông qua để hiểu những gì bạn sẽ làm. Nhưng sau đó, bạn cần lặp lại qua các phiên bản của ứng dụng để thực sự chuyển đổi ý tưởng thành mã thực tế.


0

Nguyên tắc chung của tôi: nếu bạn không hiểu đầy đủ bất kỳ phần nào của vấn đề bạn cần lùi lại và suy nghĩ đầy đủ về vấn đề này (tôi bao gồm tạo mẫu và mã vứt bỏ để hiểu API, v.v. . Nếu về cơ bản, đó là một tập hợp các vấn đề mà bạn đã giải quyết trước đây và bạn chỉ cần tìm ra cách tốt nhất để kết hợp mọi thứ lại với nhau trong trường hợp cụ thể này, sau đó lặp lại.

Thành thật mà nói, đó không phải là một quy tắc khó và nhanh. Tôi thực sự nghĩ rằng bạn cần phải thực hiện kết hợp cả hai cho bất kỳ dự án nào. Bao nhiêu của mỗi bạn làm có lẽ sẽ chủ yếu phụ thuộc vào mức độ gần với dự án mà bạn đã hoàn thành trong quá khứ.

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.