이 질문에 심각한 문제가 있습니다. 시작하자.
건축 설계 시간 낭비를 멈추는 방법
이 질문은 오히려로드되었습니다. 또한 아키텍처를 디자인 하지 않습니다 . 당신은 건축가 입니다. 건축과 디자인은 상호 보완적인 활동이지만 겹칠 경우에도 동일하지는 않습니다.
마찬가지로 아키텍처를 수행하는 데 시간을 낭비 할 수있는 것과 같은 방식으로 (과도한 아키텍처로) 초과 설계 및 코드를 작성하는 데 시간을 낭비 할 수 있습니다 (필요한 것보다 훨씬 복잡한 방식으로 코딩, 또는 필요한 것들에 대한 코드.)
적절한 아키텍처는 코딩 낭비를 방지하는 것을 목표로합니다. 이는 복잡한 시스템이 1) 설계, 2) 코딩 및 테스트, 3) 제공, 4) 유지 보수, 5) 장애 복구 및 6) 궁극적으로 폐기되는 가능한 방법을 제한, 축소 및 문서화함으로써 가능합니다.
내 경험이되었습니다 만, 그들은 단지 코딩을 즐기는 사람들이 코드를 시스템이 작동하고 다음으로 이동, 긴 안목에서 유지 관리하는 방법에 대한 어떤 생각없이 뜨거운 감자 못생긴 골렘을 유지하는 불쌍한 영혼을 떠나.
하지만 난 ...
이것은 일 : 아주 간단 시스템의 아키텍처는 자명 및 사운드 디자인 및 구현 사례에서 발산.
명시적인 아키텍처가 필요한 매우 복잡한 작업을 수행하는 사람이나 시스템 수준의 소프트웨어가 많은 대규모 시스템에만 해당됩니다.
나는 최근에 uni를 졸업하고 프로그래머로 일하기 시작했습니다. "기술적 인"문제를 해결하거나 디버깅을하기가 어렵다는 것을 알 수 없습니다.
이것이이 직업에 필요한 최소한의 것입니다. 문제가 없어서 다행입니다.
그러나 하나의 해결책이없는 일련의 문제가있는 것 같습니다.
이것들은 우리 직업의 빵과 버터이며, 고용주가 우리의 (일반적으로) 평균 이상의 월급을 기꺼이 지불하는 문제의 유형입니다.
사실, 해결해야 할 문제는 둘 이상의 솔루션을 가질 수있는 문제입니다. 실제 문제는 그와 같습니다. 그리고 세계는 소프트웨어 개발자로서 우리의 전문 지식이 수용 가능한 트레이드 오프를 만들어 내야합니다.
-소프트웨어 아키텍처와 같은 것들.
사물의 아키텍쳐는 복잡한 시스템의 불가피한 특성입니다. 가상 / 소프트웨어 또는 콘크리트 세계에서든 마찬가지입니다. 작동하고 입력을 받고 출력을 생성하는 모든 시스템은 복잡하며 아키텍처를 갖습니다.
이러한 시스템 (뱅킹 시스템, 전력 모니터링 시스템, 티켓 판매 시스템 등)을위한 소프트웨어를 개발할 때 이러한 시스템 의 기능과 요구 사항 을 모방 하는 소프트웨어를 제작하는 것이 목표 입니다.
우리는 단순히 그것을 날개로 잡고 카우보이 스타일로 코딩 할 수 없습니다 . 우리는 일종의 아키텍처가 필요합니다. 프로젝트에 수십 명의 엔지니어가 필요한 경우 특히 그렇습니다.
이런 것들이 나를 괴롭 히고 큰 고통을 안겨줍니다.
괜찮습니다. 많은 연습없이 배우거나 가르치는 것은 쉬운 주제가 아닙니다.
프로그램과 시스템을 "아키텍트"하는 방법을 결정하기 위해 몇 시간과 몇 시간을 보냅니다. 예를 들어,이 논리를 1 개 또는 2 개의 클래스로 나누고, 클래스 이름을 어떻게 지정하고, 개인용 또는 공개용으로 만들어야합니까? 나는 단지 프로그램을 만들고 싶다. 아키텍처는 저주 받았다.
불행히도 이것은 소프트웨어 아키텍처가 아닙니다.
디자인이 아니라 코딩 일뿐입니다. 이 게시물의 맨 아래에 제안 사항을 제공하겠습니다.
어떻게하면 더 빨리 건축 상을 통해 코딩과 디버깅 단계에 얻을 수 있습니다 내가 즐길 ?
나는 이것에 대해 대답 할 수있는 방법을 찾는 데 어려움을 겪고 있습니다. 오히려 감정적이기 때문입니다.
우리는 일을 끝내려고 노력하고 있습니까 아니면 연습을 즐기려고 노력하고 있습니까? 둘 다 하나이고 같은 경우에는 좋지만 실제 생활에서는 그렇지 않은 경우가 많습니다.
우리가 즐기는 일을하는 것이 좋지만 우리와 같은 복잡한 직업에서 우리가 즐기는 것에 초점을 맞추는 것은 유익한 경력을 쌓는 데 도움이되지 않습니다.
당신은 발전하지 않으며, 성숙하지 않거나 새로운 지식을 습득하지 않을 것입니다.
군대에는 이런 말이있다.
다른 문구들도 비슷한 조언을합니다. "빨리 빨지 않으면 가치가 없어요."그리고 내가 가장 좋아하는 "빨리 빨면 (중요하다면) 빨지 않을 때까지 해주세요."
내 추천 :
당신이 여전히 차이점을 이해하려고 애 쓰고있는 것 같습니다.
코딩 (클래스, 모듈을 코딩하는 방법 또는 그렇지 않은 것, 명명 규칙, 액세스 가시성, 범위 등)
설계 (계층 수, 프론트 엔드 / 백엔드 / DB, 각각의 통신 방식, 위치) 및 간단한 시스템 설계에서 발생하는 암시 적 아키텍처 결정,
아키텍처 (수십만 시간이 아닌 수천을 필요로하는 복잡한 시스템에서 발견)
따라서 첫 번째 주제 (코딩)에 대해 깊이 탐구하여 다음 단계로 넘어가는 것이 좋습니다.
깨끗한 코드
Robert "Uncle Bob"Martin의 "Clean Code" 는 시작하기에 좋은 곳입니다.
소프트웨어 응집력
또한 LCOM 또는 LCOM4라는 특정 객체 지향 소프트웨어 메트릭에 익숙해지는 것이 좋습니다.
다소 수학적으로 표현할 수 있으며 방탄하지는 않지만 클래스가 응집력이 있거나 응집력이없는 경우 경험적으로 이해하고 감지 (또는 원하는 경우 시선)하는 것이 목표입니다.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
소프트웨어 원칙
이것은 우리 모두에게 친숙해야 할 "단일 책임 원칙" 또는 SRY 와 밀접한 관련이 있습니다. SRY는 코딩에 능숙 해지려면 우리 모두가 알아야 할 5 가지 "SOLID" 중 하나입니다 .
SOLID 원칙을 살펴보면서 클래스 코딩 방식을 결정하거나 안내하는 "GRASP" 원칙 을 숙지해야합니다 .
추가 서적
마지막으로 다음 사항도 제안합니다.
Martin Fowler와 Ken Beck의 "Refactoring" 은이 목록에서 읽은 다음 책이 될 것입니다.
Richard Mitchell, Jim McKim 및 Bertrand Meyer (에펠의 명성의 후반부)의 "계약 별 디자인, 예제 별" 이 책은 인쇄되지 않았지만 아마존에서 저렴하고 사용 된 사본을 찾을 수 있습니다.
이를 통해 코딩 및 디자인을 시작하는 방법과 실제로는 소프트웨어 아키텍처를 이동 및 마스터 (또는 최소한 파악)하는 방법을 잘 이해해야합니다.
이 제안에 더하거나 빼거나 반대 할 다른 전문가들이있을 것이라고 확신합니다. 그들은 자신의 경험으로 검증 된 다른 제안을 제시합니다.
내가 말할 수있는 것은 이것입니다-지름길이 없습니다.
모두 제일 좋다.