Tôi có thể tìm các bài tập thiết kế để làm việc ở đâu? [đóng cửa]


16

Tôi cảm thấy điều quan trọng là tiếp tục thực hành các kỹ năng giải quyết vấn đề của mình. Viết các dự án nhỏ của riêng tôi là một cách, nhưng một cách khác là thử và giải quyết các vấn đề được đăng trực tuyến. Thật dễ dàng để tìm thấy các câu đố lập trình thú vị trực tuyến yêu cầu áp dụng các thuật toán thông minh để giải quyết - Project Euler là một ví dụ nổi tiếng.

Tuy nhiên, trong rất nhiều dự án thực tế, việc thiết kế phần mềm - đặc biệt là trong các giai đoạn ban đầu - có tác động lớn và ở giai đoạn sau, nó không thể được điều chỉnh dễ dàng như các thuật toán đơn giản. Để cải thiện các kỹ năng này, tôi đang tìm kiếm bất kỳ vấn đề thiết kế nào.

Khi tôi nói "thiết kế", ý tôi là thiết kế trừu tượng của một giải pháp phần mềm - ví dụ như các mô-đun sẽ có gì và sự phụ thuộc giữa chúng là gì, dữ liệu sẽ chảy trong chương trình như thế nào, loại dữ liệu nào cần được lưu trong cơ sở dữ liệu, vv Các vấn đề thiết kế là những vấn đề rất quan trọng cần giải quyết trong giai đoạn đầu của bất kỳ dự án nào, nhưng giải pháp của chúng là sơ đồ bảng trắng không có một dòng mã.

Tất nhiên các loại vấn đề này không có một giải pháp đúng, nhưng tôi sẽ đặc biệt hài lòng với bất kỳ nơi nào cũng hiển thị ưu và nhược điểm của các giải pháp điển hình có thể được sử dụng để tiếp cận vấn đề.


Câu trả lời:


7

Làm thế nào về Mã Kata . Tôi đã thực hiện một vài trong số này, và chúng rất thú vị để làm, và đủ thách thức để luôn có điều gì đó để học.

Các bình luận cho mỗi kata thường có đủ thông tin để giúp trả lời bất cứ điều gì bạn gặp khó khăn.


Đầu tiên chắc chắn là một vấn đề thiết kế, nhưng tôi có cảm giác những người khác đều hướng mã nhiều hơn. Tôi sẽ cho nó một cái nhìn khác, cảm ơn!
Sồi

3

Bắt đầu với các vấn đề thiết kế cổ điển: -từ.

David Parnas đã sử dụng KWIC làm ví dụ trong bài báo kinh điển của mình về tính mô đun: Về các tiêu chí được sử dụng trong việc phân tách các hệ thống thành các mô-đun , mà mọi người có lẽ nên đọc sau mỗi 10 năm.

KWIC, đối với từ khóa trong ngữ cảnh , là một vấn đề lập chỉ mục và sắp xếp đơn giản trong đó bạn đọc các dòng văn bản, sau đó xoay từng dòng dựa trên các từ khóa (ví dụ: ngoại trừ "the", "with"), thêm từng ca vào một liệt kê bạn sau đó sắp xếp. Ý tưởng là sử dụng KWIC sẽ hữu ích cho việc tạo chỉ mục cho một cuốn sách. Tại thời điểm bài báo kinh điển của mình, Parnas nói rằng một lập trình viên giàu kinh nghiệm có thể giải quyết nó trong một đến hai tuần, nhưng Luật của Yannis nói rằng giờ đây nó có thể được thực hiện trong một đến hai giờ . [Hệ điều hành và thư viện tiêu chuẩn đã trở nên tốt hơn nhiều.]

Đọc qua bài viết của Parnas, và ngay khi bạn có thể tìm hiểu xem chương trình KWIC phải làm gì, hãy đi và tự viết như một bài tập thiết kế. Sau đó, đọc phần còn lại của bài báo, thảo luận về hai thiết kế khác nhau: Cả hai đều là mô-đun, nhưng một cái đạt được thông tin ẩn trong khi cái kia thì không.

Sau khi biết ví dụ về KWIC, bạn sẽ có thể đánh giá cao các giấy tờ thiết kế phần mềm khác sử dụng nó. Ví dụ, Michael VanH While Paper Decoupling Change from Design sử dụng nó để thể hiện một kỹ thuật thiết kế thực sự thú vị bằng cách sử dụng các mẫu C ++. Và, miễn là chúng ta đang nói về các mẫu và thiết kế C ++, hãy đọc bài viết về các đối tượng tổng hợp của Czarnecki và Eisenecker .

Chuyển từ KWIC là các ví dụ cổ điển khác, chẳng hạn như ví dụ Spacewar , đã được chuyển / thiết kế lại trong một số ngôn ngữ, chẳng hạn như Python và AspectJ .

Tất nhiên, bất kỳ chương trình nào cũng có thể được sử dụng như một bài tập thiết kế, nhưng KWIC và Spacewar là những ví dụ mà bạn có thể xem xét một số lựa chọn thay thế.


Re: Làm rõ của bạn ... Tôi đang nói chủ yếu về mức độ thiết kế bảng trắng ở đây. Nhưng cũng đáng để đào sâu xuống cấp mã, vì bạn có thể nhận ra nhiều giải pháp thiết kế của bạn có những sai sót khiến chúng khó diễn đạt hơn nhiều.
Macneil

1

Tôi đã nghe loại điều này được gọi là "katas lập trình." Kata là một thuật ngữ võ thuật cho một hình thức hoặc chuỗi các động tác được thực hành nhiều lần để hoàn thiện. Thực hiện một số tìm kiếm katas bằng ngôn ngữ của bạn và tôi cá là bạn sẽ bật lên thứ gì đó. :)


1

Tôi đồng ý Katas và Euler rất tốt cho việc thiết kế các thuật toán và thực hành mã hóa - có lẽ bạn có thể mở rộng chúng, và sáng tạo một chút và thiết kế một hệ thống xoay quanh một trong những vấn đề.

Chẳng hạn, tôi đang làm việc không chỉ giải quyết các vấn đề của Euler để tìm ra câu trả lời nhanh nhất, ngắn nhất, mà còn giải quyết chúng theo cách phân tán - tôi muốn thiết lập một loạt các nút Erlang để giải quyết một trong những vấn đề. Tất nhiên, điều này có nghĩa là tôi phải tìm ra cách tách vấn đề thành các phần riêng biệt và yêu cầu họ báo cáo lại tiến trình của họ và tổng hợp các kết quả lại với nhau (tất cả đều nằm trong Ngôn ngữ Chức năng mà tôi không phải là chuyên gia).

Có lẽ bạn có thể thiết kế một hệ thống xung quanh giải quyết một trong những vấn đề này như một giải pháp kinh doanh - làm thế nào bạn có thể làm cho nó để nhiều "khách hàng" có thể truy cập vào vấn đề của bạn cùng một lúc, bạn có thể thiết kế các tương tác giữa lớp khách và lớp dịch vụ , Vân vân.

Đó là tất cả về sáng tạo và vui chơi.

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.