최근에 Three Big Lies 블로그 게시물을 읽었으며 두 번째 거짓말을 정당화하는 데 어려움을 겪고 있습니다.
(LIE # 2) 코드는 세계의 모델에 따라 설계되어야한다
코드는 상상의 세계에 대한 일종의 모델이나 맵이 아닙니다. 나는 이것이 왜 일부 프로그래머들에게 그렇게 매력적인 지 모르겠지만 매우 인기가 있습니다. 게임에 로켓이있는 경우 정확히 하나의 로켓에 대한 데이터를 포함하고 로켓을 수행하는 "로켓"클래스 (코드가 C ++라고 가정)가 있는지 확인하십시오. 어떤 데이터 변환이 실제로 수행되는지 또는 데이터 레이아웃에 대해서는 전혀 고려되지 않습니다. 또는 그 문제에 대해, 한 가지가있는 곳에는 아마도 둘 이상이 있다는 기본적인 이해없이.
이러한 종류의 디자인에는 많은 성능 저하가 있지만 가장 중요한 것은 확장이 불가능하다는 것입니다. 조금도. 100 개의 로켓은 1 개의 로켓보다 100 배나 비싸다. 그리고 그것보다 훨씬 많은 비용이 듭니다! 프로그래머가 아닌 사람도 말이되지 않습니다. 규모의 경제. 더 많은 것을 가지고 있다면 더 비싸지 않고 저렴해야합니다. 이를 수행하는 방법은 데이터를 올바르게 설계하고 유사한 변환으로 항목을 그룹화하는 것입니다.
이 거짓말에 대한 내 문제는 특히 있습니다.
상상의 세계를 모델링하면 (적어도 개인적으로) 코드를 시각화하고 구성하는 데 도움이되기 때문에 상상의 세계의 모델 /지도 인 코드에는 가치가 있습니다.
"로켓"수업을받는 것은 수업을위한 완벽한 선택입니다. 아마도 "로켓"은 AGM-114 Hellfire와 같은 유형의 로켓으로 분류 될 수 있으며, 여기에는 페이로드 강도, 최대 속도, 최대 회전 반경, 타겟팅 유형 등이 포함되지만 여전히 발사되는 모든 로켓은 위치를 가져야합니다. 그리고 속도.
물론 100 로켓은 1 로켓 이상이 든다. 화면에 100 개의 로켓이있는 경우 위치를 업데이트하려면 100 개의 서로 다른 계산이 있어야합니다. 두 번째 단락은 100 개의 로켓이 있다면 상태를 업데이트하는 데 100 회 미만의 계산이 필요하다는 주장을하는 것처럼 들립니다.
여기서 문제는 저자가 "결함이있는"프로그래밍 모델을 제시하지만 그것을 "수정"하는 방법을 제시하지 않는다는 것입니다. 아마도 나는 Rocket 클래스의 비유에 대해 생각하고 있지만 실제로이 거짓말의 이유를 이해하고 싶습니다. 대안은 무엇입니까?