Tại sao trò chơi Life of Life của Conway được sử dụng để rút mã?


15

Code Retreat là một sự kiện đào tạo cả ngày tập trung vào các nguyên tắc cơ bản của phát triển phần mềm. Sắp có một ngày rút lui mã "toàn cầu" và tôi đang mong chờ nó. Điều đó nói rằng, tôi đã từng đến một và phải nói rằng có một số lượng lớn hỗn loạn ... đó là tốt.

Một điều mà tôi vẫn không nhận được là tại sao "Trò chơi cuộc sống" lại là một vấn đề tốt cho TDD, và TDD tốt và xấu cho nó như thế nào.

Nhận ra đây là một câu hỏi kết thúc khá mở, vì vậy hãy bình luận.


Cảm giác này giống như một câu hỏi hướng đến thảo luận mà tốt nhất nên có trong Trò chuyện Kỹ thuật phần mềm của chúng tôi .
Adam Lear

@Anna Lear: Cảm ơn, nhưng không tìm cách trò chuyện, tìm kiếm câu trả lời. Nếu đó không phải là một câu hỏi hay, thì tốt thôi.
sai lầm ngớ ngẩn

3
@AnnaLear Tôi nghĩ rằng câu hỏi liên quan đến chủ đề nhiều hơn là OP cho mình tín dụng.
Tom Squires

1
@Tom Tôi đã tự mình suy nghĩ về nó và tôi rất vui khi thấy nó hoạt động tốt. Hạnh phúc vì đã sai. :)
Adam Lear

Câu trả lời:


26

Ban đầu, Trò chơi cuộc sống của Conway đã được chọn vì chúng tôi đã có một applet java để làm việc tại bộ mã hóa đầu tiên vào tháng 1 năm 2009. Mục tiêu của ngày hôm nay là thử nghiệm một số ý tưởng xung quanh việc thực hành theo thời gian và chúng tôi chỉ chọn các applet GoL bởi vì chúng tôi đã có nó.

Tuy nhiên, sau đó, với tư cách là một vài người hỗ trợ tích cực (đáng chú ý là tôi trong chuyến hành trình của tôi vào năm 2009 và Alex Bolboaca ở Bucharest) đã điều tra việc sử dụng GoL như một công cụ học tập. Đồng thời chúng tôi đã phát triển định dạng coderetreat theo những gì nó đã trở thành ngày nay. Trong năm 2009, Alex đã thử ít nhất một vấn đề khác (ghi bàn bằng tay), nhưng không thấy nó hữu ích như GoL. Bạn có thể tìm hiểu thêm về lịch sử tại http://coderetreat.org/history

Coderetreat tập trung vào việc cải thiện sự hiểu biết của chúng tôi về thiết kế đơn giản (cụ thể là 4 quy tắc của thiết kế đơn giản), phát triển dựa trên thử nghiệm và các khía cạnh cơ bản khác của phát triển phần mềm. GoL có lợi ích là một vấn đề rất đơn giản để hiểu trong khi vẫn rất giàu từ góc độ cấu trúc. Nó dễ dàng cung cấp các bộ phận của hệ thống có thể được sử dụng làm ví dụ cho tất cả các chủ đề chúng tôi thực hành tại coderetreat. Ví dụ, một triển khai chung có các tham số (x, y) trong nhiều phương thức là cơ hội tuyệt vời để nói về nguyên tắc DRY (mỗi phần kiến ​​thức nên có một và chỉ một đại diện trong hệ thống của bạn) liên quan đến cấu trúc liên kết của hệ thống. Có rất nhiều khía cạnh khác có thể được sử dụng làm ví dụ cho việc xây dựng một thiết kế giúp giảm thiểu chi phí thay đổi.

Hiện tại có khá nhiều người đã thực hiện nhiều loại tiền mã hóa, và họ vẫn tìm thấy các khía cạnh thú vị của vấn đề để sử dụng làm thực tiễn.


10

Trò chơi cuộc sống của Conway sẽ rất phù hợp vì đây là một bộ mã hóa khá đơn giản có kết quả cực kỳ mạnh mẽ. Đối với việc sử dụng nó để thúc đẩy Phát triển dựa trên thử nghiệm, tôi muốn đặt cược vì các bài kiểm tra sẽ khá khó để viết vì kết quả bạn đang tìm kiếm không rõ ràng từ mã bạn đang viết. Viết mã giúp bạn có được tàu lượn là một mẹo khá hay nếu bạn không thực hiện nó trước đó hoặc không thực hiện nó trong một thời gian dài. Do đó, nó phù hợp để kéo dài nghệ thuật của ngành học, đặc biệt khi được thực hiện trong lập trình cặp như TDD thường là.

Theo như dạy cho bạn những điều hữu ích; đó là một bài tập trong một kiểu suy nghĩ bên. Bạn phải khái niệm hóa cách mã của bạn sẽ hoạt động, chạy nó, xem nó thất bại, thu thập dữ liệu, tái cấu trúc và tiếp tục lặp lại. Tất cả những điều này rất quan trọng đối với TDD. Liên kết nó với thế giới thực, nó giống như một khách hàng đưa cho bạn một tài liệu yêu cầu mơ hồ chỉ nói "Tôi muốn X". Vì vậy, bạn cung cấp cho họ X nhưng đến X có thể là một khó khăn. Trò chơi cuộc sống của Conway rất giỏi trong việc dạy điều đó. Nó cũng khá dễ để viết mã và thường không mất quá nhiều mã để làm như vậy. ( APL là một trong những ví dụ cực đoan về triển khai.) Vì vậy, nó khá phù hợp cho các phiên ngắn mà một khóa tu sẽ có thay vì lặp lại một hoặc hai tuần như bạn thường thấy trong môi trường sản xuất.


10
Tôi sẽ coi tàu lượn là hành vi "xuất hiện". Các bài kiểm tra đơn vị của bạn chỉ cần mã hóa các quy tắc cho sự sống và cái chết của các tế bào với một số lượng lân cận cụ thể.
Robert Harvey

1
Tàu lượn chắc chắn là một hành vi mới nổi. Một số người tham gia tại coderetapse sẽ xây dựng một số thử nghiệm lớn hơn bao gồm những thứ như tàu lượn, nhưng đây là các thử nghiệm hướng dẫn, không phải thử nghiệm định hướng đơn vị / tdd. Các hành vi nổi lên từ việc xây dựng các quy tắc, được xác định rõ.
coreyhaines

3

Game of Life một mặt là một bộ quy tắc rất đơn giản, mặt khác chứa một số cảnh báo tồi tệ nhất của lập trình nâng cao, liên quan đến khả năng mở rộng . Trong khi các kết quả mang tính quyết định, có một thách thức về sân chơi vô hạn và số lượng ô vô hạn để xử lý.

Nếu thông số kỹ thuật thách thức bao gồm hiệu suất tối thiểu và dung lượng bộ nhớ tối đa , thì các thử nghiệm bao gồm các mẫu phát triển nhanh hoặc các mẫu di chuyển theo nhiều hướng xa và rộng, điều này có thể trở thành một thử thách rất khó chịu.

Bạn đã nhận được đầu vào đã biết và đầu ra đã biết sau các lần lặp X và bạn biết tất cả các bước để đến đó ... ngoại trừ các bước mất quá nhiều và quá lâu. Bạn phải thực hiện một số tối ưu hóa cực kỳ để phù hợp với thông số kỹ thuật. Thuật toán tầm thường với việc quét một mảng bit 2d có kích thước cố định trở nên hoàn toàn không đủ vì hiệu suất của nó suy giảm với O (n ^ 2) kích thước. Xử lý các khối đầy khi các vật thể mới sinh ra đột nhiên ngốn hàng tấn bộ nhớ và bị chậm lại. Đôi khi tách mọi thứ thành các bảng kích thước giới hạn hoạt động, đôi khi thất bại ...

Và vì hầu hết các bài kiểm tra "toàn cầu" sẽ không đạt tiêu chuẩn về hiệu suất, bạn cần phát triển các mục tiêu nhỏ hơn, các bài kiểm tra phụ nhỏ hơn để giải quyết vấn đề ...


2

Tất cả phụ thuộc vào khía cạnh của quá trình bạn muốn thực hành / đào tạo.

Một ngày là không đủ để bao gồm tất cả các khía cạnh của công nghệ phần mềm bất kể mô hình quản lý dự án / phương pháp quản lý dự án bạn chọn. Vì vậy, để làm cho nó hiệu quả, có lẽ bạn nên tập trung vào một tập hợp nhỏ của tổng thể.

Nếu bạn tập trung vào các khía cạnh kỹ thuật của TDD chẳng hạn, thì bạn có thể muốn bỏ qua các khu vực màu xám lớn xung quanh các yêu cầu và quan hệ với khách hàng và cắt ngay mã hóa giải pháp.

Về mặt này, Trò chơi cuộc sống là một ứng cử viên tốt bởi vì nó đơn giản, được hiểu rõ và không có nhiều khu vực màu xám trong yêu cầu của nó sẽ được mở để tranh luận. Vì vậy, bạn có thể bắt đầu viết bài kiểm tra của bạn ngay lập tức và mã chống lại chúng.

Mặt khác, mục tiêu là để xem làm thế nào chúng ta có thể sử dụng TDD để thực hiện các yêu cầu thì tôi có thể đã chọn trò chơi cuộc sống nhưng tôi đã không nói với các nhà phát triển rằng đây là điều tôi muốn. Thay vào đó tôi sẽ đi vòng quanh cung cấp các gợi ý và ý tưởng mà không thực sự đề cập đến nó theo tên. Điều đó nói rằng trò chơi của cuộc sống có thể chứng minh một chút quá đơn giản cho loại bài tập này vì những người tham dự rất có thể sẽ nhìn xuyên qua mánh khóe khá nhanh.

Các ví dụ không phải lúc nào cũng dễ dàng tìm thấy cho bài tập tổng hợp như vậy. nó phải đơn giản như được thực hiện trong một ngày nhưng không quá đơn giản để làm cho nó qua ngày. Nó phải vui nhưng không vô nghĩa ... Nhưng với tôi nó phải là một chút nguyên bản, tôi không thể nhớ lại bao nhiêu lần tôi được yêu cầu các sinh viên tạo ra một hệ thống quản lý videoclub cho bài tập về nhà .... iiirch.

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.