첫째, 나는이 질문이 다소 길고 모호 할 수 있음을 깨닫고 사과드립니다. 이것은 아마도 "얻은"사람에게는 짧은 이름을 가진 기본적인 문제 일 것입니다. 그러나 이와 관련하여 부족한 점을 발견하면 그 문제를 설명 할 때 저와 함께 해주십시오.
나는 11 살 때부터 이런 식으로 프로그래밍을 해왔다. 이것은 내가 처음부터 모든 것을 스스로 가르치고 있음을 의미합니다. 나는 기술 교육을 받았지만 컴퓨터 과학 (엄밀하게는 Photonic Engineering에서 학위를 취득했습니다)에서는 아닙니다. 우리는 물론 프로그래밍 과정을 가지고 있었지만 이것은 주로 저에게 기본적인 내용이었고 많은 새로운 것을 배우지 못했습니다. 나는 그것의 기쁨을 위해 길을 따라 나 자신을 교육하고 항상 프로그래밍 경력을 추구한다는 것을 알았지 만 그 당시 내 모든 프로젝트는 아주 작았습니다. 나는 그것들을 생각하고 유지하는 데 어려움이 없었습니다.
이제는 팀에서 주도적 인 역할을하지만 회사 환경에서는 그렇지 않습니다. 저는 엔지니어링 응용 프로그램을위한 과학 소프트웨어 (C ++)를 개발하는 대학에서 일하고 있습니다. 갑자기 프로젝트가 (상대적으로) 커지고 있으며 대부분 내 마음을 감싸는 데 어려움을 겪고 있습니다. 나는 주로 두 가지 일에 많은 시간과 노력을 잃고 있습니다.
- 한동안 작업하지 않은 코드 섹션으로 돌아 가야 할 때 작동 방식을 기억하기가 어렵습니다. 관련 클래스의 헤더 파일을 검토하고 소스 파일을 따라 배치 한 주석을 읽는 데 많은 시간을 할애합니다. 나는 "도식적"의 형태가 있었으면 좋았고 그림을 더 쉽게 볼 수 있었다.
- 변경 사항을 소개 할 때 때로는 내가하려고하는 일이 다른 곳에서 문제를 일으킬 것이라고 반쯤 깨달았습니다 (또는 런타임에 놀랍게도 나타납니다). 나는 다른 구성 요소에 대한 영향을 무시한 것을 알기 위해서만 되돌리고 다르게 행동하기 시작합니다. 작업 방식, 수행하려는 작업이 다른 구성 요소에 어떻게 영향을 미치는지, 변경 사항을 구현하기 전에 세부 계획을 세우는 방법을 볼 수있는 "아키텍처 다이어그램"이 있었으면합니다.
내가 일하는 대부분의 사람들은 나 자신과 비슷한 이야기를 가지고 있습니다. 강한 기술 지향과 때로는 훌륭한 기술이지만 그들의 일을 조직 할 방법은 없습니다. 그러나 그들의 프로젝트는 대개 내 프로젝트보다 훨씬 작기 때문에 어떻게 든 대처합니다. 어쨌든, 그것이 저에게 의미하는 것은 제가 혼자 있고 좋은 관행을 배울 사람이 없다는 것입니다.
나는 IT 관리에 대학원 과정을 수강했고, 그것을 만족스럽게 생각하지만, 주로 소프트웨어 설계 및 계획이 아닌 프로젝트 관리 방법론, 예산 / 일정 추정, 엔터프라이즈 아키텍처 등에 대해 가르치는 비 프로그래머를 대상으로합니다. 괜찮습니다. 저도 배우려고 노력하고 있습니다. 물론 UML과 같은 일부 도구와 소프트웨어 개발 프로세스 유형 (캐스케이드, 반복, 민첩성 ...)이 소개되었지만 분명히 자세하게 설명되어 있지 않으며 선택 및 사용해야 할 사항을 결정하기가 어렵습니다. 그리고 어느 정도까지).
SO의 소프트웨어 디자인에 대한 많은 질문과 답변을 읽었습니다.이 도구 또는 특정 도구 또는 방법론을 사용하여 소프트웨어를 작성하는 방법에 대한 많은 것이 있으며 UML 문서가 문제를 해결할 것이라고 확신한다면-그것을 선택하고 사용을 시작하십시오. 그러나 어떤 사람들은 맹세하고 다른 사람들은 쓸모가 없다고 말합니다. 더 높은 수준의 추상화에 대한 답을 찾고 있습니다. 두 가지 문제를 해결할 수있는 방법이 있습니까? 어떻게 개인적으로 수행합니까? 특정 도구에 얽매이지 않고 어떻게 할 수 있는지 배워야합니까? 이것들은 때때로 스타일이 바뀌지 않으며 적용 가능성은 프로젝트 유형에 따라 다릅니다.
읽어 주셔서 감사합니다. 소프트웨어 디자인 경험과 어휘가 부족하다는 것을 더 간략하게 말씀 드릴 수 없었습니다.