코딩 전의 개념과 디자인 : 이것이 얼마나 사실입니까? [닫은]


14

나는 학교에서 배웠고, 다른 곳 어디에서나 좋은 개발 방법론이 제대로 코딩하기 전에 개념과 디자인이 필요하다는 것을 읽었습니다.

초보자 프로그래머에게도 새로운 정보는 아닙니다. 그러나 여러 프로그래밍 언어로 개발을 시작한 이래 처음부터 모든 것을 설계하고 고안 한 적이 없었기 때문에 이것이 좋은 조언인지 궁금합니다.

나는 항상 디자인, 개념 및 프로그래밍을 녹였다. 나는 세계에서 가장 나쁜 개발자 입니까 , 아니면 우리가 학교에서 배우는 아이디어는 오래된 의미없는 종교적 교리입니까?

우리는 이전에 경험하고 프로그래밍하지 않은 것을 어떻게 생각하고 설계 할 수 있습니까? 그렇게 웃기지 않습니까? 프로그래밍이 대신 개념과 디자인을 이끌지 않습니까?



@gnat 여기에 제공된 링크가 내 질문의 한 측면에 대한 답변 일 수 있습니다. 나는 이것이 중복 질문이라고 생각하지 않습니다.


13
적과의 접촉에서 살아남은 계획은 없지만 그렇다고해서 계획이 없어야한다는 의미는 아닙니다. 계획으로 시작하되 나중에 수정하는 것을 두려워하지 마십시오
Richard Tingle

2
문제를 진정으로 완전히 이해하는 것은 문제를 해결 한 후에 만 ​​가능하므로 일단 문제를 이해하면 문제를 더 잘 해결할 수 있습니다. 그러나 문제를 실제로 이해하려면 발견 연습을 거쳐야합니다.
매트 클링커

답변:


5

답은 다음과 같아야합니다. 최대한 많이 계획하십시오.

계획의 미덕에 반대하는 사람들은 거의 없지만 논쟁은 대부분 중요한 측면을 간과합니다. 계획은 좋은 계획을 세우는 기술이있는 한, 그 기술은 경험이있는 경향이 있습니다. 경험이 많지 않은 경우 계획을 세우는 데 상당한 양의 문제가있을 수 있습니다. 이는 전체 재난이 아닌 제품을 만들기 위해서는 개발 중에 계획을 크게 수정해야한다는 것을 의미합니다. 계획이 상세하면 세부 사항이 무효화되거나 계획을 따르기 위해 조정을 최소로 유지하려고합니다.

계획이 필요한 것들도 있고, 필요한 수준의 계획을 세우는 데 필요한 기술이 없다면, 프로토 타입을 작성하고 코드를 작성하여 적절한 계획을 세우는 데 필요한 작업에 대한 경험을 얻는 것입니다. .

프로덕션 코드를 작성할 준비가되었는지 여부에 관계없이, 최대 계획 수준에 도달하면 코딩 외에는 할 일이 없습니다. 어쩌면 재앙이 될지 모르지만 학습 경험이 좋으며 수정 계획을 세우는 데 훨씬 더 적합 할 것입니다.


30

절대적으로 맞습니다. 요구 사항이 더 크고 복잡할수록 이것이 더 사실입니다.

작은 콘솔 앱이 피보나치 시퀀스를 계산하려면 알고리즘과 UI를 구성하는 방법에 대해 몇 분 이상 생각할 필요가 없습니다.

그러나 실시간 거래 플랫폼은 전 세계적으로 분산되어 초당 99.9999 개의 가동 시간과 100 %의 정확성을 필요로하는 수백만 건의 트랜잭션을 예상 할 수 있습니까? 그냥 코딩에 뛰어들 것입니까?

이 두 극단 사이에는 다른 많은 옵션이 있습니다.

Euler 프로젝트를 살펴보십시오 . 제시된 순서대로 몇 가지 문제를 해결하십시오. 합리적인 시간에 일부 문제를 해결하려면 코드에 들어가기 전에 실제로 생각해야한다는 것을 알 수 있습니다.

코딩을 시작하기 전에 프로그램을 생각하고 디자인하는 데 시간이 걸리지 않으면 사소한 일을하거나 큰 것을 놓치고있는 것입니다.


처음부터 모든 것을 디자인하고 생각한 적이 없었습니다.

가장 사소한 문제 외에는 아무것도하지 않습니다. 다시 말하지만, 프로젝트가 더 크고 복잡할수록 더 사실입니다. 디자인에는 실수, 간과되는 것들 등이있을 것입니다 ...

이 기술은 큰 조각이 맞는지 먼저 높은 수준으로 디자인하는 것입니다. 그런 다음 우선 순위 목록을 확인하십시오. 가장 중요한 인프라에서 먼저 작업을 시작하십시오. 그런 다음 더 큰 조각을 더 작은 조각으로 나누고 더 큰 조각을 의미있는 조각으로 구성합니다.

시간과 노력이 필요하며 처음에는 완전하지 않거나 완전히 정확하지 않을 수 있습니다.

그것이라고하지만 왜이는 부드러운 -ware 아니라 하드 -ware. 가단성이며 변경할 수 있습니다.


4
좋은 대답입니다. 비록 소프트웨어 가단성 있지만 (실제로 이것은 이것에 관한 놀랍고 독특한 것들 중 하나임), 수정은 무료 가 아닙니다 . 소프트웨어 시스템이 밀접하게 결합되고 일관되지 않을수록 소프트웨어 시스템을 수정하기가 더 어렵고 비용이 많이 듭니다. 결론은 소프트웨어의 가단성을 활용하려는 경우 소프트웨어 디자인에 들어가는 부분은 미래에 변화 할 수 있는 능력 이어야한다는 것 입니다.
voithos

9

나는 학교에서 배웠고, 다른 곳 어디에서나 좋은 개발 방법론이 제대로 코딩하기 전에 개념과 디자인이 필요하다는 것을 읽었습니다.

사실입니다.

그러나 여러 프로그래밍 언어로 개발을 시작한 이래 처음부터 모든 것을 설계하고 고안 한 적이 없었기 때문에 이것이 좋은 조언인지 궁금합니다 .

그리고 당신의 문제가 있습니다.

사소한 문제가 아닌 대부분의 경우 상황이 어떻게 진행되는지, 즉 상황이 어떻게 조화를 이루는 지 파악하기 위해 약간의 생각을해야합니다. 역설적으로 대부분의 사소한 문제에 대해서는 모든 것을 계획 할 수있는 방법이 없습니다 . 개발 과정에서 발생할 변화를 너무 많이 설명 할 수 없습니다. 애자일은 거래의 후반부를 받아들이 기 때문에 견인력을 얻었습니다. 사람들은 전지전능하지 않고 변화는 일정합니다.

당신이 미리 설계를 할 필요 것은 사실이지만, 그것은 불가능 것도 사실이다 그래서 에만 미리 설계합니다.


5

코딩하기 전에 디자인이 있어야합니다 .

그 이유는 매우 간단합니다. 디자인 이 없다면 무엇을 만들고 있는지 알 수 없습니다 .

디자인이 완성되기 전에 코드 가 반드시 있어야합니다 .

그 이유는 매우 간단합니다. 디자인이 바뀌고 디자인의 일부를 개발하면 솔루션을 시작하지 않고도 예상하기 어려운 질문, 기회 및 과제가 드러납니다.

개발은 반복적입니다.

계획 여부에 관계없이, 팀의 실현 여부에 관계없이 모든 소프트웨어 프로젝트는 반복적으로 수행됩니다. 작업의 일부가 완료된 다음 평가되며 나머지 작업 수행 방식이 변경됩니다.

하나 이상의 접근 방식을 시도하십시오.

초기 디자인과 코드 작성의 균형을 맞추는 가장 좋은 방법을 이해하려면 실습과 경험이 필요합니다. 거의 마스터 한 사람이없고 각 프로젝트마다 다른 이상이있을 것입니다 (주요 비디오 게임과 같은 대규모 단일 릴리스 제품을 만드는 팀과 자신이 사용할 작은 도구를 설계하는 것을 고려하십시오).


1

과거에 여러 시스템을 설계 한 다른 사람들을 설계하고 강박했으며 프로세스가 여러 가지 방식으로 전개되는 것을 보았지만 초기 아키텍처는 최소한 대부분의 주요 기능 의 존재 를 계획해야한다는 것이 일반적입니다 .

예를 들어 건물, 바닥, 방 등이 개조되지 않은 HVAC 제어 시스템을 보았으며 그 결과는 추악했습니다. 또는 (스마트하지 않은) 회중 시계에 더 적합한 구성 요소로 제작 된 모바일 음악 장치. 두 제품 모두 최종 제품이 고객이 선호하지 않았다는 것은 말할 필요도 없습니다.

"개념"이라고 말하면 "아이디어"에서 한 단계 만 올라가면 개념이 매우 모호해질 수 있습니다. 비즈니스는 일반적으로 개념에 관심을 갖습니다. 고객은 일반적으로 사용하기 쉽고 즐거운 방식으로 실현되고 사용을 통해 가치를 창출하는 개념 인 UX에 관심을 갖습니다.

프로그래밍하기 전에 "개념"을 수행해야합니다 .Visual Studio (또는 선택한 IDE)를 열고 무작위로 코드를 작성하여 어디로 가는지 알 수는 없습니다.

코딩하기 전에 완전한 디자인을하지 않아도되고 사용자의 작업 흐름을 대략적으로 스케치해야합니다.

UX 디자인과 코딩은 서로에게 매우 빈번하게 영향을 미치므로,이 사실을 작업 접근 방식에 통합하는 방법으로 가장 작은 프로젝트를 제외하고는 민첩한 접근 방식을 사용해야 할 것입니다. 따라서 한 번에 모든 것을 볼 수 없다면 프로그래머가 최악이라고 생각하지 마십시오. 아무도 할 수 없다고 생각하는 사람들은 문제를 충분히 무시하고 완전한 것을 가지고 있다고 주장 할 수있는 사람들이 없습니다. 그림.


큰 무언가에 크기를 넣는 예입니다. 개념 : "기업이 소프트웨어 플랫폼을 통합 할 수있는 시각적 클라우드 기반 도구를 만듭니다." 이것은 훌륭하게 들리며 마케팅 자료를 작성하여 판매하기 전에 판매 할 수 있습니다. 코딩하기 전에 이것을 가지고 있어야합니다.

사전 디자인 : "Visio에서 논리를 설명하기 위해 모양과 화살표가 있으며 다양한 플랫폼 (SAP, SF, 데이터베이스 등)에 연결할 수있는 플러그인 기능이 있습니다. 모니터링 콘솔을 통해 데이터를 전달할 수 있습니다. 데이터를 시각적으로 설명하고 한 형식을 다른 형식으로 변환하는 방법이 있습니다. 또 다른 훌륭한 마케팅 Blob. 또한 중요한 것에 대한 아이디어를 제공하며 코딩하기 전에 스케치를해야합니다.

디자인 / 코드 : "브라우저 호스팅 HTML 디자이너와 같은 기능을 갖추고 있습니다. 기존 서버에서 실행할 수 있도록 Java로 백엔드를 코딩하십시오. 필요에 따라 쿼리하거나 수정하기위한 데이터 구조와 UX를 정의하십시오. 재해 복구 계획, 오류 보고, 감사 로깅, 계획 버전 관리, 계획 액세스 제어; .... "-목록이 세밀할수록 모든 것을 예측하는 것이 더 비현실적입니다.

... 일이 무엇 그러나 하나의 이상을 알고 있어야합니다 처럼 보이는 결국은 약 또는 다른 큰 소리가 나는 개념을 죽이는 끝이 몇 가지 정말 쓸모 구현으로 끝낼 수 있습니다 최종 제품 - 말은 비주얼 디자이너는 "40 필요 실제 워크 플로를 표시하는 화면 또는 로그의 20 개 필드 중 하나로 제한된 정확한 문자열 일치 이외의 로그를 검색 할 수있는 방법이 없습니다. 구현을 실행하는 것 외에는이를 방지하는 좋은 방법이 없습니다. -어떤 사람들은 성공할 것이고 다른 사람들은 실패 할 것입니다.


0

나는 항상 다음과 같이 시간을 할당합니다.

  1. 1/3 디자인
  2. 1/3 개발
  3. 1/3 테스트

디자인 : 시각적 일뿐만 아니라 개념도. 시각적으로나 논리적으로 여러 부분으로 나눕니다. 재사용되고 공통적 인 디자인 패턴 인 공통점을 찾으십시오.

개발 : 일단 당신이 당신의 부분을 알면 코딩하십시오. 그런 다음 통합하십시오.

테스트 : 코드가 제대로 통합되고 작성되었는지 테스트하는 것뿐만 아니라 항상 통찰력과 교훈을 얻을 수 있으며 상호 작용하는 새로운 방법을 만들 수 있으며 새로운 기능이 고 안되고 요구됩니다. 스코프 크립에주의하십시오.

이러한 측면 외에도 프로젝트에는이 단계 위에 3 단계가 있습니다.

  1. 저 공학 첫 시도
  2. 첫 번째 시도에서 얻은 교훈을 바탕으로 과도하게 설계된 두 번째 시도.
  3. 올바르게 설계된 세 번째 시도입니다.

디자인 단계를 잘 수행할수록 추가 시도가 최소화된다는 것을 알았습니다. 전체를 다시 수행하는 대신 재 작업되는 하위 시스템 만있을 수 있습니다.

저는 사내, 아웃소싱 및 해외 개발 프로젝트의 소프트웨어 개발자 및 소프트웨어 개발 관리자입니다.


-1

여기에는 근본적으로 잘못된 가정이 있습니다. 코드를 먼저 작성하지 않고서는 좋은 디자인을 만들 수 없습니다 (학교에서는이를 가르치지 않습니다). 그러나 학교는 디자인이 없으면 좋은 코드를 얻지 못할 것입니다.

해결책은 다음과 같습니다.

  1. 문제를 해결할 수 있다고 생각되는 코드를 작성하십시오.
  2. 코드에서 배운 것을 기반으로 한 디자인을 생각해보십시오.
  3. 모든 코드를 버리고 디자인에 따라 처음부터 다시 작성하십시오.
  4. 필요에 따라 반복하십시오.

모든 코드를 멀리 던지는 것입니다 하지 이 과정에서 선택적 단계하지만, 작은 프로젝트에 대해 공식적으로 할 수있는 디자인을 작성. 대규모 프로젝트의 경우 " 모든 코드 폐기 "단계 를 반복 할 가능성이 높습니다. 모듈성이 충분하면 코드베이스의 일부에만 적용 할 수 있습니다.

그들은 그것을 변경하지 않으려이기 때문에 너무나 많은 프로젝트 레거시 코드에 개최 - 또는 너무 복잡하기 때문에, 그것은 결코 때문에 설계되지 폐기 할 수 있습니다. 첫 번째 시도가 실패한다는 사실을 인정하면 인생이 훨씬 나아질 것입니다.


1
오래된 코드를 버리지 않는 많은 이유가 있습니다. 마지막 단락을 뒷받침 할만한 참고 자료를 제공해 주시겠습니까?
mattnz

+1. 이것이 왜 다운 보트인지 모릅니다. "버리기 위해 하나를 만드십시오"는 고전적인 Fred Brooks의 조언입니다.
nikie

이 경우 이전 코드는 프로토 타입에서 가져온 것으로 생각하고 프로토 타입이 충분히 우수하다고 생각되어 프로덕션에 투입 될 위험이 있습니다. 말 그대로가 아니라 현재 프로젝트와 관련하여 버립니다.
JeffO

-3

개념은 항상 변경 될 수있는 핵심 설계이며 프로그래밍은 완전히 고안된 앱의 요구 사항을 충족해야합니다.

첫 번째 요점, 두 번째 요점은 어떻게 액세스해야하는지, 세 번째는 사용자가 누구인지, 네 번째는 작업의 전체 SOW 범위를 특정 용어로 정의하여 모든 응용 프로그램이 수행해야하는 작업을 정의합니다. 추가 한 각 기능의 작동 방식

웹 응용 프로그램의 아키텍처를 선택하기 전에 완전히 계획하고 생각하십시오.

그런 다음 가장 좋은 스택을 선택하십시오

저는 램프 개발자입니다

그래서 내가 사용할 PHP 프레임 워크로 질문을 좁히는 경향이 있습니다. 그리고 프론트 엔드 스크립트는 내가 이상적인 방식으로 필요한 모든 일을하도록해야합니다.

이것을 추가하고 MVC 프레임 워크를 사용하는 법을 배우십시오. ZEND와 CAKEPHP는 최고의 빠른 개발 프레임 워크입니다 (PHP)


7
" 최고의 스택을 고르 세요 . 저는 램프 개발자입니다. "-누군가의 뜨개질에 충실해도 괜찮지 만, 그 진술은 약간 모순되는 것처럼 들리지 않습니까?
JensG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.