무언가를 디자인 한 후에 실제로 코드를 작성하도록 동기 부여하기


27

그것은 나에게만 발생합니까 아니면 당신에게도 익숙합니까?

다음과 같습니다 : 무언가를 만들어야합니다. 모듈, 기능, 전체 응용 프로그램 등 당신이 전에 한 번도 해본 적이없는 것은 흥미로운 일입니다.

그래서 당신은 어떻게 할 것인지 생각하기 시작합니다. 스케치를 그립니다. 아이디어를 테스트하기 위해 프로토 타입을 작성합니다. 당신은 완전한보기를 얻기 위해 다른 조각들을 모으고 있습니다.

결국 원하는 디자인, 모든 사람에게 간단하고 명확하며 유지 관리가 쉬운 디자인으로 끝납니다. 당신은 모든 기초를 덮었 고 모든 것을 생각했습니다. 이 클래스와 해당 파일 및 데이터베이스 스키마를 갖게 될 것입니다. 여기에 이것을 구성하고 거기에 다른 것을 적용하십시오.

그러나 이제 모든 것이 확정 된 후에는 실제로 코드를 작성해야합니다. 그리고 더 이상 도전하지 않습니다 .... 거기에갔습니다! 지금 코드를 작성하는 것은 단지 "형식"이며 방금 완료 한 것을 반복하는 것처럼 보입니다.

다른 사람이 내 사양에 따라 코딩을했기 때문에 이전 직장에서 때로는 그것을 얻지 못했지만 새로운 공연에서는 전체 프로세스를 담당 하므로이 작업도 수행해야합니다 (왜냐하면 지불해야하기 때문입니다) 그것).

그러나 나는 집에서 일하고있는 애완 동물 프로젝트를 가지고 있습니다. 퇴근 후 나만 있고 아무도 그것을 지불하지 않습니다. 나는 창조적 인 일을 할 시간이이처럼 그냥 생각하지 않습니다 아래를 쓰기에 관해서 다음 때 (웹 검색 조금 할 수 있습니다에 새로운 기능을 참조 P.SE 에, SO 등).

나는 단지 다음 도전적인 것으로 이동하고 다음으로, 다음으로 이동하고 싶습니다 ...

이것도 당신에게도 발생합니까? 어떻게 처리합니까?

당신은 어떻게 자신을 괴롭히는 코드를 작성하도록 설득합니까?

답변을 드리겠습니다.


프로젝트 규모에 대한 추정치는 얼마입니까? 당신의 목표는 무엇입니까? 프로젝트가 성공하면 누가 혜택을 받습니까? 어떤 종류의 혜택이 있습니까?
rwong

2
@ rwong : 내 주요 목표는 내 지식을 확장하는 것입니다. 나는 자기 개선의 목적으로 다른 아이디어, 기술, 라이브러리 등으로 개인 프로젝트를 실험합니다. 그러나 관련없는 프로토 타입이 아닌 실제 사용 사례 시나리오로 무언가를 만들고 싶었습니다.

1
디자인 만하고 코딩하지 않는 경우 디자인이 제대로 작동하는지 어떻게 알 수 있습니까? 코드는 "디자인"의 가능성을 검증하거나 반증합니다. 달리 말하면, 모호한 손짓으로 "디자인"하는 것은 쉽지만 실제로 구현하는 것은 일반적으로 엄청난 양의 작업입니다. 때로는 실망스럽고 때로는 지루하지만 궁극적으로는 적어도 만족 스럽습니다.
Kevin

나는 3 년 전에 이것을 대답했지만 귀하의 질문을 다시 읽으면서 이것이 ADHD (내가 가지고있는)의 징후가 아닌지 궁금합니다. 또한 귀하의 질문에 설명 된 내용으로 어려움을 겪고 있으며, 답변 한 내용이 약간 도움이 되더라도 여전히 매우 어렵습니다. Russell Barkley가 이유를 잘 설명합니다 : youtu.be/LyDliT0GZpE
Mark Freedman

답변:


6

도전 과제가 디자인하고 구현하지 않은 경우 다른 동기 부여 요소가 필요할 수 있습니다.

그것이 애완 동물 프로젝트 (일이 아닌) 인 경우, 실제로 그것이 살아있는 것을 기대하기 때문에 그것을 디자인하는 것은 충분하지 않습니다. 자신의 애완 동물 프로젝트를 계획 할 때 목표는 무엇입니까? 사용해야 할 것이 있습니까? 그렇다면이를 구현 동기로 사용할 수 있습니다. 작동하는지 확인하십시오. 당신이 찾고 있던 기능을 제공하기 위해.

다른 사람이 사용할 수 있도록 계획하고 있습니까? 동기 부여 요소는 최종 제품의 이점을 볼 수 있습니다. 그들은 단지 디자인 모드에 있다면 유틸리티를 꺼내지 않을 것입니다. 그리고 마케팅을 계획하고 있다면, 애완 동물 프로젝트가 디자인 모드에 갇혀있는 동안 아무도 동기 부여 요인으로 지불하지 않을 것이라는 사실을 사용하십시오.

내 일을 할 때는 직장에서 할 수있는 것보다 더 반복적 인 접근 방식을 취합니다. 무언가를 생성하기 전에 모든 세부 사항에 대해 걱정하지 않습니다. 시간이 더 걸릴 수도 있지만 1) 나만을위한 것이기 때문에 (또는 아직 어떤 형태로 존재하는지 알지 못하는 사람도) 실험을하고 시간을 내야 할 유연성이 있습니다. 2) 나는 많은 사이클을 리팩토링하고 더 나은 방법을 배우는 데 소비합니다. 비 유적으로 말해서 내 자신의 소름에.

그러나 궁극적으로 무언가가 얇은 공기에서 나오는 것을 보는 진정한 만족감이 아닌가? 그것이 나를 위해하는 일입니다. 그것이 당신을위한 동기 부여가 최종 제품이 아니라면 당신을 위해 그것을하지 않으면, 나는 왜 당신이 애완 동물 프로젝트에서 일하기를 원하는지 잘 모르겠습니다. 디자인이 당신에게 과즙이되고 직장에서하는 일이라면, 이미 만족하고있는 것 같습니다.


6

집에서 빠른 프로토 타이핑이 필요합니다.

개인 개인 프로젝트에 동일한 수준의 전문적인 엄격함을 적용하면 과도하게 엔지니어링됩니다.

개인 프로젝트에 대해 높은 표준을 설정하는 것은 완벽하게 허용되지만 프로젝트 진행에 필요한 자원 (코딩 시간, 8 시간의 일일 작업 시간)이 부족할 수 있음을 이해해야합니다.

애완 동물 프로젝트에서 가장 중요한 목표는 무엇입니까? 통찰력 중 하나의 유용성을 증명하기 위해? 이 경우 개념 증명 프로젝트가 될 때까지 프로젝트를 정리하십시오 . 그런 다음 빠른 프로토 타이핑을 사용하여 코딩 시간을 줄이면서 더 많은 것을 달성 할 수 있습니다.


5

나는 그것이 단지 나인 것 같지만 반대의 문제가 있습니다. 코드 작성을 시작하고 실제로 관련 문제가 발생하기 전에 모든 세부 사항을 생각하는 데 어려움이 있습니다. 현실적으로, 나는 무언가를 코딩하기 시작할 때 일반적으로 머릿속에 모호한 디자인을 가지고 있습니다. 저의 큰 도전은 모든 세부 사항을 생각하고 선제 적으로 설계하는 것입니다.


5
왜 이렇게 높은 투표를 받았으며, "당신은 어떻게 자신을 괴롭히는 코드를 작성하도록 설득합니까?"라는 주요 질문에 대답하지 않습니까?
dan_waterworth

1
@ dan_waterworth : 많은 사람들이 답과 관련이 있기 때문에 생각합니다. 내가 주니어 였을 때도 같은 일을했고, 계획을 세우지 않고 먼저 머리를 껴 안았다. 그 후 나는 타이핑 단계로 가기 전에 실제로 앉아서 생각하는 것이 더 나은 (어려운 길)을 배웠습니다.

2

나는 분명히 그것에 관련 될 수 있습니다. 내가 겪지 않은 일에 도전하는 것을 좋아하지만 이미 해결 한 일을 시작하는 데 어려움을 겪고 있습니다. 내가하는 가장 큰 일은 X를 수행하고 작동시키는 목표를 가지고 앉도록 강요하는 것입니다. 일반적으로 일단 나가면 나는 처음부터 설정 한 것보다 재미있게 즐기고 더 많은 것을 얻지 만 목표를 세지 않으면 몇 시간 동안 병에 걸린 것입니다.

나는 또한 사무실에서보다 집에서 더 많은 일을한다는 점에서 당신과 함께 있습니다. 산만 해 지거나 직장에서 화상을 입 었는지, 아니면 ...


2

나는 내가 전에 그것을 겪었던 것에 대한 당신의 좌절을 확실히 이해합니다.

이것이 좋은 접근 방법이 아니라는 것을 알고 커뮤니티의 불길을 두려워하지만, 보조 프로젝트에 대한 나의 접근 방식을 당신과 공유 할 것입니다. 이 방법은 저에게 효과적이며 중장기 프로젝트에 사용하지만 작은 일에는하지 않습니다 (보통 한 번에 끝내는 동기가 있기 때문에).

전체 프로젝트를 잡아서 '패키지'로 나누십시오. 각 패키지는 서로 자주 상호 작용하는 부분으로 구성됩니다. 그런 다음 각 패키지를 디자인하고 코딩 할 수있는 작은 조각 (최대 몇 시간 생각)으로 나눕니다.

이상적으로 하루 동안 부업 프로젝트에 할당 할 때마다 각 작품을 완성 할 수 있지만 필요하지는 않습니다 (사람에 따라 다름).

개인적으로, 나는 그 견적에 실패하면 그냥 dissapointed하고 동기를 부여하기 때문에 각 조각에 대한 예상 기간을 설정하지 않기 때문에 권장하지 않습니다. 시간이 걸리지 만 너무 오래 걸리지 마십시오.

이제 각 작은 조각은 일반적인 개발 프로세스, 디자인, 테스트, 구현 및 기타 필요한 모든 단계를 수행합니다. 아이디어는 각 피스에 좋은 킥 스타트를 제공하지만 완전히 마무리되지는 않았습니다.

실제 코딩 지루한 두 시간 후에 더 맛있는 디자인을 할 것이라는 것을 알기 때문에 이것은 동기 부여를 유지합니다. 자신의 목표에서 벗어나지 말고, 그 무서운 작업을 계속하면 곧 끝나고 끝날 것입니다.

모든 과정을 마친 후에 패키지를보십시오. 작동 방식, 작동 방식을 확인하고 전체 패키지를 다시 검토 하십시오. 나는 변화와 조정이있을 것이라고 확신합니다. 지금 그렇게하십시오. 다른 모든 패키지에서 작업 할 때 필요한 정보를 염두에 두십시오. 메모도 많이하면 도움이됩니다.

각 패키지를 살펴보고 이전에 수행 한 다른 모든 것을 계속 기억하십시오. 작성하는 새 코드는 일주일 전에 작성한 내용과 어떻게 상호 작용합니까? 이미 작성하고 잊어 버린 물건을 찾는 것을 두려워하지 마십시오.

마지막으로, 패키지를 모두 사용할 수없는 경우 일반적으로 며칠 동안 그대로두고 휴식을 취하고 다른 것에 중점을 둡니다.

일반적으로 돌아가서 패키지 간 상호 작용을 시작하고 재미있는 테스트를 수행하려고합니다. 작성할 코드가 많지 않고 목표가 가까이 있습니다.

이것이 당신의 노력에 도움이되기를 바랍니다.


2

필자는 원래의 가정이 전적으로 적용되지는 않았으며 실제 구현을 수행하는 동안 수집 된 경험에 따라 원래의 디자인이 다소 변경되어야한다는 것을 항상 발견했습니다.

일부 상자를 그린 후 디자인이 절대적으로 완벽하고 완벽하다고 생각하지만 실제로 시도하기 전에 일부 프로젝트 구현을위한 완벽한 후보라고 생각합니다.

배송은 기능입니다. 전체 거리를 가지 않으면 건축가 일뿐입니다.


1
+1 전체적으로 좋은 점은 건축가가 자신의 자리를 차지하고 있다는 것입니다.
Orc

@Orbling : Thorbjørn이 (자제했다 훨씬 더 품위를 떨어 뜨리는) 아키텍처 우주 비행사입니다.
rwong December

@ 오브 링, 잘 될 수 있습니다. 다른 사람들에게 지시 한 것을 스스로 할 수 없다는 사실을 어떻게 말하고 싶습니까?

1

문제가 잘못된 목표에 있다고 생각합니다. 목표 "디자인 시스템"을 설정 한 것 같습니다. 그리고 당신은 그것을 잘하고 목표에 도달합니다. 따라서 한 가지 제안은 또 다른 목표 "구현 시스템"을 설정하는 것이지만 동기 부여 및 수행 방식과 관련이 있습니다.

나를 위해 일한 또 다른 방법이 있습니다. 초기 목표를 "디자인 시스템"또는 "시스템 만들기"대신 "특정 사용자에게 시스템 제공"으로 설정하십시오. 이러한 방식으로 사용자가 가치있는 것을 얻을 때까지 만족하지 않습니다. 그리고 테스트와 다른 현대적인 멋진 것들을 포함하여 처음부터 잘 수행합니다.


1

실제로 동기 부여의 문제가 아니라 디자인과 코딩 프로세스를 결합하여 솔루션의 일부를 찾을 수 있다고 생각합니다. 그것이 내가 주로하는 방법입니다. 기본적으로 생각할 때 디자인의 기본 사항을 구현 한 후 다음 단계로 넘어갑니다.

예 : 기본 클래스를 디자인 한 경우이를 작성하고 몇 가지 테스트를 실행합니다. 그런 다음 기본 데이터베이스를 디자인하고 설정하고 테스트했습니다. 다음으로 데이터베이스의 모든 것을 가져오고 나가는 데 필요한 메소드와 함수가 있습니다. 기본 수업을 이미 준비 했으므로 테스트는 더 쉽게 수행됩니다. 그리고 마지막으로 사용자 인터페이스를 디자인 할 때 이미 사용할 수있는 코드 세트가 이미 있습니다.

이제 인터페이스를 통해 연결된 블록을 디자인한다고 가정합니다. 나는 교육에 의한 프로그래머가 아니기 때문에 값 비싼 단어를 모른다. 그러나 당신은 내가 무엇을 의미하는지 안다.

이것이 도움이되기를 바랍니다.


1

그런 다음 디자인 아이디어를 적어 블로그에 게시하고 문제와 다른 사람들에게 제기 된 솔루션을 설명하기 위해 최선을 다하십시오.

요령 : 문해 프로그램으로 디자인에 대한 설명을 작성하십시오 ! :) 그런 다음 흥미로운 부분 (디자인 아이디어)으로 자신을 차지하지만 실제로 제공하는 실제 코드로 그들을 정당화하십시오.

그리고 문맹 퇴치 프로그램 을 새로운 아이디어를 다른 사람들에게 발표 하여 게시하십시오 !


1

이것은 trite처럼 들리지만 시작하면됩니다. 개발 환경을 열어야 할 수도 있습니다. 디자인에서 각 클래스를 정의하고 메소드 서명을 작성해야 할 수도 있습니다. 가장 중요한 방법을 구현하기 시작해야합니다.

보통이시기 쯤에, 나는 시작하는데 문제가 있다는 것을 잊었고, 나는 그 지역에있다.

약 80 %의 시간 동안 작동합니다. 나머지는 테트리스입니다.


0

확실히 당신 만이 아닙니다! 나는 실제로 지금 프로젝트를 연기하고 있습니다.

아무도 당신 자신에게 동기를 부여 할 수 없습니다.

현실적인 타임 라인을 만들고 각 섹션을 정시에 완료하도록 도전하십시오. 프로젝트가 설계 단계를 통과하지 못하면 프로젝트에 표시 할 것이 없습니다.


0

귀하의 질문으로 판단하면 문제는 휠을 재발 명하는 것입니다. 이 모든 작업을 이미 완료 한 경우 왜 다시해야합니까? 이를위한 프레임 워크가 없습니까? 그렇지 않다면 (이것은 다소 불가능하지만) 왜 쓰지 않겠습니까?

프로그래밍의 핵심 작업은 지루한 작업을 다시 수행하는 것이 아니라 한 번만 수행하고 올바르게 수행 한 다음 재사용하는 것입니다. 또는 더 나은 방법은 이미 한 번만 올바르게 수행 한 사람을 찾는 것입니다.


0

나는 당신이 어디에서 왔는지 완전히 이해합니다. 관심있는 문제이며 일단 이해하면 구현은 효과가 있습니다.

왜 솔루션을 설계하고 다른 사람들이 구현하지 않습니까?


-1

내가하는 것들 :

  • 내 앞에 큰 타이머를 두십시오 (1 시간 단위로 역 모드 일 수 있음)
  • 몇 가지 목표에 도달 할 때까지 계속 깨워 줘

항상 작동하지는 않지만

추신. 나는 집에서 일한다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.