Tôi có nên lo lắng nếu tôi giải quyết nhiều vấn đề theo cùng một cách không?


13

Tôi thực sự thích trò chơi lập trình và người sáng tạo câu đố / trò chơi. Tôi thấy mình kỹ thuật rất nhiều những vấn đề này theo cùng một cách và cuối cùng sử dụng kỹ thuật tương tự để lập trình chúng mà tôi thực sự thoải mái.

Để cung cấp cho bạn cái nhìn sâu sắc ngắn gọn, tôi muốn tạo các biểu đồ nơi các nút được biểu diễn với các đối tượng. Các đối tượng này giữ dữ liệu như tọa độ, vị trí và tất nhiên tham chiếu đến các đối tượng lân cận khác. Tôi sẽ đặt tất cả chúng trong một cấu trúc dữ liệu và đưa ra quyết định về thông tin này trong một "vòng lặp trò chơi".

Mặc dù đây là một ví dụ ngắn gọn, nhưng nó không chính xác trong mọi tình huống. Đó chỉ là một cách tôi cảm thấy thực sự thoải mái. Cái này có tệ không


Nếu bạn cứ lặp đi lặp lại, tại sao không tạo ra một thành phần có thể tái sử dụng?
Kugel

Không nhất thiết, nếu đó là một cách tốt để giải quyết chúng :)
haylem

4
Nếu bạn đang lặp đi lặp lại tất cả các thời gian, sau đó viết một thư viện.
Công việc

@Bryan Harrington đã phải đối mặt với cùng một vấn đề chính xác, tôi phải nói rằng tôi làm việc trên các lĩnh vực khác nhau như từ logic kinh doanh (tại nơi làm việc) đến lập trình kernel (tại nhà) và từ làm việc trên C # (tại nơi làm việc) đến C ++ (tại nhà) đã giúp tôi rất nhiều Tôi cũng có thói quen đọc mã nguồn mở ở đây một số liên kết :) Ngoài ra, bạn có thể đọc GOF
Chani

Câu trả lời:


26

Không, nó ổn.

Quan điểm của lập trình thực tế là tìm ra các giải pháp có thể sẽ hữu ích trong nhiều phát triển tương tự. Bạn chỉ cần tìm thấy một.

Bạn không thể và không nên tạo ra các giải pháp khác nhau chỉ vì chúng khác nhau. Nhưng bạn chắc chắn nên có một cái nhìn quan trọng về các giải pháp của mình mỗi lần và tự hỏi liệu chúng có còn tốt không hoặc có thể ngành công nghiệp đã phát triển kể từ đó và bạn cần phải phù hợp với nó.


+1 cho điểm cuối cùng "hãy tự hỏi mình xem họ có còn tốt không hoặc có thể ngành công nghiệp đã phát triển". Rất thường xuyên bạn thấy các lập trình viên giỏi trở nên hẹn hò và xấu vì họ bị mắc kẹt sau đường cong và không cải thiện kỹ năng của họ
CaffGeek

12

Nếu nó hoạt động tốt, gọi nó là một mẫu thiết kế. Nếu không, nhưng bạn không biết rõ hơn, đó là phản hạt búa vàng.


1
Điều này. Đó chỉ là một vấn đề nếu bạn thấy mình buộc giải pháp của mình vào một vấn đề mà nó không hoạt động. Nếu tất cả các vấn đề của bạn là đinh, bạn nên sử dụng búa, nhưng nếu bạn thấy mình đang cố gắng đập vào vít, bạn nên lùi lại.
Satanicpuppy

@Satanicpuppy ... đôi khi chúng tôi không có tuốc nơ vít và có một vấn đề cần khắc phục NGAY BÂY GIỜ. Trong trường hợp đó, búa là công cụ tốt nhất có sẵn tại thời điểm nhất định.
CaffGeek

@Chad - một sự tương tự chính xác đáng lo ngại
Normanthesquid

5

Thực tế trong các công việc hàng ngày của chúng ta, chúng ta có xu hướng đặt ra một số lượng khá lớn các vấn đề khá giống nhau.

Trong những tình huống gắn bó với những gì bạn biết có thể là tốt. Tôi đã thấy nhiều ví dụ về các giải pháp tồi từ những người thực hiện điều gì đó mà họ không hiểu rằng ai đó sử dụng kỹ thuật không lý tưởng tốt.

Nếu bạn biết một cái gì đó tốt, cơ hội là bạn có thể uốn cong nó khi cần thiết và việc thực hiện của bạn sẽ vững chắc và hiệu quả. Những điều đó có lẽ sẽ không đúng với những nỗ lực đầu tiên của bạn về các kỹ thuật mới.

Nhưng mặt trái là nếu tất cả những gì bạn có là một cái búa, mọi thứ trông giống như một cái đinh. Bạn nên làm mọi thứ để khiến bản thân nhận thức được các lựa chọn thay thế và khi bạn có thể đẩy yêu thích của mình quá xa.

Có lẽ chọn một vài thay đổi không khẩn cấp / không quan trọng và sử dụng chúng để tăng tốc với các giải pháp thay thế?


4

Câu hỏi hay, và tôi phải thừa nhận đây là điều ám ảnh tôi.

Khi nào thì ổn? Thực hiện phân tích hiệu suất mã của bạn - nếu bạn thấy rằng bạn đang ở O (log n) hoặc O (n) hoặc O (n log n) và như vậy vấn đề có thể ánh xạ tới các cấu trúc dữ liệu đã biết, bạn thường ổn.

Khi nào thì không ổn? Độ phức tạp thời gian hoặc không gian của bạn là O (n ^ 2) hoặc tệ hơn hoặc vấn đề theo định nghĩa là NP hoàn tất. Trong những tình huống này, bạn cần áp dụng một chút heuristic, áp dụng kiến ​​thức từ các lĩnh vực khác, v.v.

Ví dụ nhanh: Trong thiết kế chip, việc chọn cách sắp xếp các cổng trong mạch để có công suất tối thiểu là NP-Complete. Chỉ cần đồ thị một mình sẽ không làm bạn tốt nhiều mặc dù nó là cần thiết. Bạn cần phải đọc tài liệu bổ sung, rất nhiều trong số đó đôi khi liên ngành và áp dụng kiến ​​thức trong miền của bạn. Ví dụ, thuật toán di truyền (thuật toán bắt chước giao thoa và đột biến gen, như được định nghĩa trong sinh học 101) có rất nhiều ứng dụng trong việc thiết kế chip phần cứng.


3

Không nhất thiết, nếu đó là một cách tốt để giải quyết chúng :)

Thông thường khi làm việc trên một "giải pháp", tôi đi theo những thứ sau:

  • đơn giản ,
  • tái sử dụng ,
  • chỉ thực hiện cuối cùng .

Không phải là hiệu suất không thành vấn đề: Tôi thiết kế với hiệu suất trong tâm trí, nhưng không đẩy nó đi quá xa (vì vậy nếu tôi cần phải gọi đến một phương thức tiện ích như StringUtils.isEmpty hoặc một cái gì đó tương tự trong cùng một luồng, tôi đã thắng ' t tâm). Nếu hiệu suất là cần thiết (trường hợp kinh doanh hoặc vấn đề kinh nghiệm người dùng), thì tôi đi theo một cách tiếp cận khác với cách tiếp cận đơn giản và có thể sử dụng lại. Là người thực dụng.

Thật kỳ lạ, khi mã hóa bằng C, tôi quan tâm nhiều đến hiệu năng hơn là khi mã hóa trong Java ... Lực lượng thói quen :))


2

Miễn là vấn đề được giải quyết một cách hiệu quả, không cần phải lo lắng.


2

Tôi nghĩ rằng đồ thị là một thiết kế phù hợp để thiết kế các trò chơi để thể hiện các quyết định \ lựa chọn. Chỉ cần lưu ý rằng có lẽ điều này có thể được tinh chỉnh và làm cho hiệu quả hơn, và đây có thể không phải là giải pháp tốt nhất cho các miền khác.


2

Nếu nó hoạt động, nó ổn.

Nếu bạn lo lắng về việc áp dụng quá nhiều vào một kỹ thuật duy nhất, hãy thử như một bài tập để đưa ra các biến thể của một số vấn đề được giải quyết sẽ khiến giải pháp của bạn không thể thực hiện được. Điểm bổ sung nếu bạn có thể khái quát các thay đổi để xác định không gian áp dụng của quy trình thông thường của bạn.


2

Nếu bạn giải quyết vấn đề thì tốt. Và nó không quan trọng bằng cách nào cho đến khi nó không gây ra nhiều vấn đề.


0

"Nhà phát triển nghệ thuật" thực sự có câu trả lời chính xác nếu mục tiêu của bạn là sản xuất một sản phẩm. Và nếu "nhà máy" của bạn sản xuất những sản phẩm thỏa mãn thì tuyệt vời.

Nhưng...

Nếu bạn muốn học những cách mới (và có khả năng tốt hơn) để làm những việc bạn phải thay đổi mọi thứ. Điều này sẽ tạo ra thất bại nhưng chỉ thông qua thất bại, người ta mới thực sự học được. Và thông qua việc học mới này, bạn có thể tạo ra phần mềm thậm chí tốt hơn và hấp dẫn hơn.

Điều này thực sự được hỗ trợ thông qua nghiên cứu thần kinh. Vì vậy, có bạn đ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.