2009-06-11 25 views
12

Khi bạn bắt đầu một dự án mới, bạn dự định làm như thế nào hoặc mất bao lâu?Bạn định làm gì trước khi bắt đầu viết mã?

Mã giả? Lưu đồ?

Bạn có cố nghĩ trước tất cả các lớp không?

TBH, tôi không bao giờ lên kế hoạch gì cả. Tôi đi thẳng vào nó và nghĩ về các giải pháp như vấn đề nảy sinh. Chủ yếu là bởi vì vài lần tôi đã cố gắng lên kế hoạch trước, tôi sẽ luôn luôn quên một cái gì đó lớn, và do đó logic của kế hoạch sẽ là thiếu sót.

+0

Trùng lặp: http://stackoverflow.com/questions/44254/how-do-you-plan-small-work-or-hobby-projects – gnovice

Trả lời

16

Sau khi trải nghiệm LOT của các dự án chưa hoàn thành, tôi có xu hướng triển khai phiên bản đơn giản hóa quy trình kinh doanh của mình vào phương pháp phát triển cá nhân của tôi.

Họ thường làm theo cấu trúc sau:

  1. Tạo một ngắn gọn vì vậy tôi có một mục tiêu trong tâm trí.
  2. Triển khai class diagram để hiểu dữ liệu tôi sẽ xử lý.
  3. Triển khai tất cả các lớp.
  4. Vẽ lên một use-case diagram để phác thảo các hoạt động.
  5. Giàn giáo trường hợp sử dụng phân biệt chữ hoa chữ thường (trong HTML cho webapps)
  6. Dây giàn giáo, bằng cách thực hiện kiểm tra đơn vị và xây dựng để vượt qua chúng.
  7. Quyết định để phát hành sản phẩm cho thành công thương mại, sau đó quên tất cả về nó.
11

Rất nhiều ít hơn tôi nên

tôi luôn bổ nhào vào, có được bẩn và sau đó nhận ra rằng tôi đã thực hiện một mớ hỗn độn. Sau đó quay trở lại và lên kế hoạch, và làm đúng.

nhưng pha sai lầm lộn xộn mang lại cho tôi những ý tưởng tuyệt vời mà tôi sẽ không có mặc dù thông qua quy trình thiết kế chính thức.

Chỉnh sửa Tôi chủ yếu nhận được trong các loại đập vỡ bàn phím gây rối khi chơi với lớn hơn/phức tạp. Thật thú vị khi nhìn thấy những thứ xa xôi như thế nào trước khi bạn nhận ra rằng thiết kế 'nó nằm trong đầu của tôi nên nó ổn' là 100% thiếu sót.

+0

Tôi hiện đang lập kế hoạch. Nó hoạt động tốt hơn. –

1

Điều đó tùy thuộc. Hầu hết những thứ tôi viết là khá đơn giản và một thiết kế lớn hơn được xây dựng từng bước và tôi nhận thấy những gì còn thiếu và những gì đã hoàn thành. Có một vài thứ lông nhiều hơn mà yêu cầu phác thảo rộng rãi và nghĩ để có được quyền, mặc dù tôi đã không đi qua nhiều vấn đề kiến ​​trúc mà yêu cầu như vậy (vẫn còn trẻ và các công cụ). Chủ yếu là những thứ số học phức tạp.

1

Tại cơ quan thực tập của tôi năm ngoái, người quản lý của tôi rất ngạc nhiên khi tôi sử dụng biểu đồ luồng cho một vấn đề. Ông nghĩ rằng đó là một nghệ thuật bị mất với sinh viên những ngày này. Tôi đã không ngạc nhiên như vậy mà họ được coi là ngày.

Dù sao thì, tùy thuộc vào thời gian của dự án đối với tôi, thời hạn là điều quan trọng nhất của khóa học.

6

Có lẽ không phải là kỹ thuật tốt nhất ... nhưng ... Tôi có kế hoạch mã.

Tôi thường khám phá lớp/phương pháp/v.v. mà tôi cần chỉ bằng cách làm theo cách này. Với điều đó đã nói, tôi luôn cho rằng mã lập kế hoạch của tôi sẽ không phải là giải pháp cuối cùng.

Ngoài ra, tôi sẽ viết ghi chú chi tiết "các tính năng chính" và "các tính năng nhỏ/mong muốn".

+0

Tôi nghĩ rằng điều này có lợi thế, bạn càng sớm viết mã, càng sớm bạn biết những sai lầm của thiết kế ... –

+2

@Liran Tôi thực sự sẽ nói rằng bạn viết sớm hơn, sau này bạn biết những sai lầm và sẽ phải tái cấu trúc cho phù hợp (hoặc nhiều khả năng không từ bỏ/bắt đầu từ đầu) – Matt

0

Khi tham gia vào một vấn đề với mọi kích thước, tôi luôn có kế hoạch viết nó ít nhất hai lần.

3

Tất cả phụ thuộc vào dự án lớn như thế nào. Đôi khi nó có thể mất vài tháng để chỉ thu thập tất cả các yêu cầu và biết chính xác những gì nó cần phải làm.

Khi nói đến phần mã hóa, tất cả phụ thuộc vào mức độ phức tạp của nó. Nếu nó cực kỳ phức tạp, tôi sẽ bắt đầu bằng cách đơn giản rút ra những gì tôi muốn nó làm. Sau đó, tôi sẽ gõ mã giả của tôi trong các bình luận. Sau đó, tôi sẽ viết mã xung quanh những nhận xét đó.

Tuy nhiên, nếu nó là mã hóa đơn giản.Tôi thường sẽ chỉ viết ra những gì trong tâm trí của tôi và kiểm tra nó.

Chúng tôi sử dụng một cách tiếp cận rất nhanh trong đó chúng tôi sẽ làm việc trên các bộ phận chính và tất nhiên mọi thứ luôn đến để bật lên trong các yêu cầu. Vì vậy, chúng tôi sẽ phục vụ cho những người khi họ đi lên. Bạn sẽ không bao giờ hoàn toàn biết chính xác những gì bạn muốn tạo vào đầu chu trình tạo.

Đó là ý kiến ​​của tôi.

1

Hầu hết thời gian, ít nhất tôi cố gắng có một sơ đồ tổng thể (ngay cả trong đầu) về cách mô-đun/hệ thống sẽ hoạt động. Tôi thích biết những gì tôi sẽ làm trước khi tôi làm điều đó. Nó làm cho các chương trình dễ dàng hơn và nhanh hơn (chúng tôi thường dưới thời hạn chặt chẽ, nơi tôi làm việc). Mỗi khi tôi không làm như vậy, tôi gặp phải những vấn đề thường dẫn tôi rút mã và đưa vào một nơi khác. Tôi sẽ thừa nhận, quá trình của tôi đã trải qua những trải nghiệm cay đắng và tôi đã thực sự thực sự giỏi sử dụng regex trong mã cùng với việc tìm kiếm và thay thế toàn cầu.

Một người khác đã đưa ra một điểm tốt, đôi khi bạn có một hệ thống thực sự lớn và điều đó trở nên khó khăn. Tôi thử và chia nhỏ thành từng phần. Tôi sẽ làm việc trên một cái gì đó và nhận được nó fleshed ra, và làm việc trên cái gì khác trong một thời gian ngắn và xem cách họ tương tác. Ngay cả với việc lập kế hoạch trước, tôi nhớ những thứ và phải viết lại mã, nhưng ít nhất tôi không làm lại mọi thứ vì ít nhất tôi cũng có kế hoạch làm việc.

1

Điều đó tùy thuộc vào vấn đề phức tạp mà bạn đang cố giải quyết. Nếu bạn đang tham gia vào một dự án lập trình lớn, bạn cần phải có một mức độ nhất định về lập kế hoạch trước khi bắt đầu. Nếu không, bạn sẽ bị mất chi tiết về những thứ không liên lạc được với các phần khác trong thời gian ngắn.

Về cơ bản, hãy thử xem qua các vấn đề bạn cần giải quyết. Xem liệu có bất kỳ vấn đề nào đủ nhỏ để bạn có thể giải quyết chúng và tìm ra những gì nó có thể cần để giao tiếp với phần còn lại của giải pháp của bạn. Hãy nghĩ về nó như một hộp đen với một API cho thế giới bên ngoài.

Sau khi bạn có tất cả các khối của mình, hãy xem liệu bạn có cần phân chia vấn đề thành các vấn đề phụ nhỏ hơn không, hoặc bạn có đủ chi tiết về toàn bộ dự án mà bạn có thể bắt đầu bằng mã.

Kinh nghiệm của tôi là kế hoạch sẽ giúp bạn ngăn ngừa các vấn đề trong tương lai, làm cho bạn suy nghĩ nhiều hơn về cách mã được cho là phát triển trong tương lai nếu bạn cần phải thêm bất cứ điều gì, vv

Trong hầu hết các trường hợp, bạn sẽ tiết kiệm thời gian bạn dành cho việc lập kế hoạch khi bạn đang gỡ lỗi hoặc mở rộng dự án. Ngoài ra, có một bố cục thô của dự án có nghĩa là nó sẽ dễ dàng hơn để được giúp đỡ xây dựng các hộp đen bạn cần, vì vậy bạn có thể làm việc trên nó với nhiều người hơn là chính mình.

1

Tùy thuộc vào độ phức tạp của dự án, tôi thường bắt đầu bằng pad và giấy, và viết một thông số kỹ thuật và một số mã giả của luồng điều khiển. Sau đó, tôi luôn có thể tham khảo lại trong khi tôi đang viết mã. Nó làm cho nó dễ dàng hơn và yêu cầu tái cấu trúc ít hơn bởi vì bạn không nghĩ rằng vấn đề thông qua.

1

Cá nhân nó phụ thuộc vào phạm vi & tính phức tạp của dự án, số người tôi đang làm việc với nó, và kỳ vọng chung về phân phối.

Điều quan trọng là phải hiểu được kỳ vọng chung của các bên sẽ sử dụng phần mềm. Tất cả mọi người tham gia vào dự án nên có một sự hiểu biết chung về những gì đang được làm việc trên - làm thế nào mà được truyền đạt đi theo nhiều hướng.

Thông thường, các bên liên quan đến phát triển phần mềm không nhận ra rằng giao tiếp giữa các bên đôi khi là phần quan trọng nhất và được định giá thấp của dự án - và nguyên nhân hàng đầu của các rủi ro dự án.

1

Tôi pha một ít cà phê và chế biến một vài bánh mì kẹp.

Thực sự nó phụ thuộc vào dự án. Tôi đã làm việc trên một số dự án trong ngành công nghiệp quốc phòng mất 2 năm lập kế hoạch chi tiết trước khi viết một dòng mã, và tôi đã ngồi xuống và tung ra một số tiện ích nhỏ từ một vài yêu cầu trong email từ 3D hoặc họa sĩ kết cấu trong một lần ngồi với một túi bánh quy và một tách Joe.

Có thể phát triển sơ đồ, sơ đồ UML, từ điển sử dụng và tiêu chuẩn mã hóa mở rộng trước khi bàn tay là cách hay để giữ mọi thứ được tổ chức và chắc chắn có giá trị trong các dự án lớn hơn, nhóm lớn hơn và dự án quan trọng . Nhưng những điều này làm mất thời gian, và thường là quá mức cần thiết cho các dự án nhỏ hơn.

Điều duy nhất bạn thực sự phải đảm bảo là bạn có hiểu biết đầy đủ về miền sự cố. Nếu không, dành thời gian lên phía trước để nghiên cứu nó cho đến khi bạn làm là luôn luôn có giá trị thời gian.

3

Khi tôi đã vào "thác nước" cách làm những điều tôi sẽ viết hàng trăm tài liệu trang hiển thị tất cả các chi tiết có thể được phát hiện trong quá trình nghiên cứu.Để có được để tome khổng lồ này của tài liệu tôi sẽ thường

  1. gặp gỡ và chào đón tất cả mọi người tham gia vào dự án
  2. ghi chép phong phú liên quan đến các yêu cầu nhận thức
  3. tạo danh sách dài gạch đầu dòng các yêu cầu trình độ cao
  4. bắt đầu để chia nhỏ các yêu cầu cấp cao thành các chi tiết được xác định rõ ràng
  5. bắt đầu điền vào mẫu từ Yêu cầu phần mềm đặc điểm kỹ thuật: SRS
  6. cre ăn khung dây trong photoshop, excel, hoặc (yêu thích của tôi) Balsamiq
  7. danh sách ra dữ liệu đó phải được bắt và bắt đầu xây dựng ra một sơ đồ thô
  8. danh sách ra cấu trúc lớp trong UML
  9. xác định mốc thời gian dự án
  10. blah blah blah
  11. viết mã
  12. hy vọng rằng những gì được yêu cầu là những gì vẫn còn muốn khi mã hoàn tất!

Trong vài năm qua, tôi đã theo dõi Agile (SCRUM) và đã thực hiện một cách tiếp cận hoàn toàn khác.

  1. đáp ứng với sở hữu sản phẩm nghe về nhiệm vụ được xây dựng
  2. câu chuyện phân hủy thành các nhiệm vụ (quy hoạch cơ bản)
  3. assign thời gian để nhiệm vụ
  4. làm một số việc lập kế hoạch chi tiết hơn
  5. -> ghi kiểm tra, viết mã để vượt qua kiểm tra, refactor -> check in dance
  6. chứng minh sản phẩm/tính năng làm việc
  7. quy trình bắt đầu qua

Tôi phải nói rằng Agile giảm lượng thời gian dành cho việc viết tài liệu phân hủy ngay sau khi mực khô. Chủ sở hữu sản phẩm sẽ thấy kết quả theo cách nhanh hơn nhiều. Điều đó có nghĩa là họ có thể giữ cho dự án đi đúng hướng theo thời gian - ngay cả khi hướng đó thay đổi khi chúng ta đang phát triển.

Hãy nhớ rằng có thời gian và địa điểm cho cả hai cách phát triển. Tôi sẽ không muốn xây dựng phần mềm Jet sử dụng Agile!

0

tôi vẫn còn ở trường đại học và tôi chưa có kinh nghiệm với việc tạo ra các hệ thống phần mềm quy mô lớn, nhưng ...

Điều đầu tiên cần phải làm là để làm việc hiểu những gì đang muốn. Cho đến nay đối với tôi, đây thường là một đặc điểm kỹ thuật chuyển nhượng, nhưng trong thế giới thực nó liên quan đến việc nói chuyện với khách hàng. Rất nhiều.

Sau đó, tôi tìm hiểu cách thực hiện những gì được yêu cầu. Đối với các chương trình tương đối nhỏ mà tôi đã làm việc, tôi thường hình thành trong tâm trí của tôi một ý tưởng thô về những gì chương trình của tôi sẽ như thế nào (những phần quan trọng của chương trình là gì và cách chúng tương tác với nhau). Điều này có thể liên quan đến đột biến nếu tôi không biết làm thế nào một phần của chương trình sẽ hoạt động. Tôi không nghĩ rằng cách tiếp cận này (làm tất cả trong tâm trí của tôi) sẽ quy mô rất tốt, nhưng câu hỏi đã được hỏi những gì chúng tôi thực sự làm ...

Khi tôi biết nhiều hơn hoặc ít hơn những gì tôi đang cố gắng làm, tôi ngồi xuống và viết mã. Đó là ở đây mà tôi phát hiện ra bất kỳ vấn đề trong những gì tôi đã suy nghĩ.

Tôi không nghĩ rằng mình đã từng sử dụng mã giả để thiết kế một thuật toán. Tôi nghĩ rằng mã giả quá thấp để thiết kế các phần lớn của chương trình.

Tôi chỉ sử dụng lưu đồ vào một dịp để giúp thiết kế chương trình - khi tôi học lắp ráp và khá mới để lập trình (và nó hữu ích). The Mythical Man-Month nói những điều sau đây: "Biểu đồ chi tiết thổi-by-blow, tuy nhiên, là một mối phiền toái lỗi thời, chỉ thích hợp cho việc bắt đầu người mới bắt đầu vào tư duy thuật toán ... Tôi chưa bao giờ thấy một lập trình viên có kinh nghiệm thường xuyên đã lập biểu đồ chi tiết trước khi bắt đầu viết chương trình. "

1

IMO 5 phút kế hoạch trước = 1 giờ mã hóa ....

Vì vậy, nhiều lần chúng ta phải quay trở lại và suy nghĩ lại toàn bộ tình hình, vì chúng tôi không có kế hoạch gì cả.

Phần quan trọng nhất nên là FLOWCHART.

Các chi tiết khác đôi khi có thể được thực hiện cẩn thận khi đang di chuyển.

0

Tôi vẽ biểu đồ luồng rộng và viết mã giả cho các hàm phức tạp hơn. Tôi cảm thấy như vẽ sơ đồ cho phép tôi refactor mà không giới thiệu lỗi một cách tình cờ. Lập sơ đồ trực quan trên giấy chẳng hạn như sơ đồ cũng giúp tôi tìm hiểu xem logic của tôi có đúng là thực sự là không. Điều này chỉ thực sự làm việc cho các dự án vừa và nhỏ, nơi hầu hết các thông số kỹ thuật được biết đến. Với nhiều kinh nghiệm hơn, sự cần thiết phải vẽ các sơ đồ mở rộng và viết ra mã pseudo toàn bộ chức năng sẽ trở nên dư thừa hơn tuy nhiên trước khi bạn đạt đến điểm đó, tôi đề nghị bạn lập kế hoạch trước khi bạn viết mã.

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