단독 개발자로 작업 : 코드 살펴보기


39

나는 혼자서 일하는 것 외에는 선택의 여지없으며 , 내 작업을 조사하고, 건강 상태를 확인하고, 아이디어를 브레인 스토밍하고, 모범 사례 등을 논의 할 수있는 적절한 솔루션을 찾을 수 없습니다.

나는 Jeff Atwood의 기사 : 프로그래밍에서 One Is The Loneliest Number을 통해 답을 얻을 것이라고 생각했는데 주제에서 찾을 수있는 가장 좋은 것이지만 내 질문을 반복하는 것으로 밝혀졌습니다.

나는 이와 같은 Stack Exchange 사이트를 알고 있으며 Code Review 는 명백한 잠재적 인 대답이지만 많은 사람들이 알고 있듯이 이상적이지 않습니다.

모든 함정을 나열 할 수는 없지만, 종종 질문을 공식화하고 자체 포함 된 문제에 복싱하는 것은 종종 충분한 준비를 할 때까지 너무 많은 작업을 필요로하므로 더 많은 질문에 대한 답변을 얻을 수 있습니다. 그렇지 않으면 시간보다. 또한 세부적인 내용을 숨겨 잘 정의 된 질문을하면 누군가 생각하지 못한 문제를 발견 할 가능성이 없습니다. 또한 손가락을 대지 못하지만 자유로운 대화의 반응은 내가 생각할 수있는 어떤 형태의 텍스트 인터넷 토론과도 일치하지 않습니다. 마지막으로, 나는 명백한 이유로, 전 세계가 나머지 영원을 바라 볼 수 있도록 프로젝트 전체를 게시하고 싶지 않습니다.

내 코드를 살펴보기 위해 컨설턴트에게 비용을 지불하는 것 외에 다른 답변이 있습니까?


3
나는이 문제도 (재미있는 프로젝트와 함께) 가지고 있지만, 소수의 가까운 프로그래머 친구가 내 코드를 기꺼이 볼 수있을만큼 운이 좋다.
Austin Hyde

23
당신은 항상 자신에게 이야기 할 수 있습니다-이것은 광기 검사에 특히 좋습니다 :-)
Danny Varod

4
여유가 있다면 비즈니스 파크 (이상적으로 IT 직원이 모여있는 곳)에서 사무실 / 데스크를 임대하는 것이 좋은 이유입니다. 사무실에서 일하는 고독한 프로그래머 였을 때 이웃 사무실의 IT 직원과 많은 대화를 나 had습니다.
JW01

6
바보로 일하는 것보다 혼자서 일하는 것이 낫습니다.
직업

2
실제로 해결책은 아니지만 SO 채팅 또는 적절한 IRC 채널에서 행 아웃을 할 수 있습니다. 그것은 혼자서 일하는 부담을 경감시킬 수 있습니다.
Tikhon Jelvis

답변:


36

나는 당신의 신발에 있었고 쉬운 해결책이 없다고 생각합니다. 코드를 살펴보기 위해 컨설턴트에게 비용을 지불하는 것은 돈을 쓰는 좋은 방법이 아닙니다. 문제가 외로워하고 프로그래밍에 대해 이야기 할 사람이 없다는 것이라면 도움이 될 수 없지만 코드의 품질을 향상시키는 데 관심이 있다면 가장 좋은 방법은 코드를 설정하는 것입니다 일주일 정도면 다시 제자리로 돌아옵니다. 코드가 실제로 나쁘면 코드를 이해할 수 없으므로 리팩토링을 시작하여 이해할 수 있기 때문에 분명합니다. 이 과정을 몇 번 반복하면 코드를 쉽게 이해하고 코드 품질이 향상되는 코드 패턴을 알 수 있습니다.


좋은 것! ... 15
Marjan Venema

2
이론적으로는 이것이 효과가있을 수 있습니다. 실제로 실제로는 아무런 방법이 없습니다. 그는 2 주 전에 작성한 코드를 다시 살펴볼 것입니다. 아마도 "더 예쁘다"는 이유만으로 시간을 허비하기 위해 시간을 낭비한다면, 다시 손을 대야 할 때와 시간을 낭비해야한다.
토마스 보니 니

3
@ Krelp : 나는 과거 코드를 항상 보며 이전에 작성된 코드를 보지 않고 기능을 추가하고 일반적으로 소프트웨어를 유지할 수있는 방법이 없습니다. 완벽한 아키텍처와 같은 것은 없으며, 유출 된 추상화는 예외가 아니라 규칙이므로 이전에 작성된 코드를 보는 것은 피할 수 없습니다. 마라톤 코더는 프로그래밍 분야에서 우상화되었지만 마라톤 코딩은 빠르게 코드를 소진하고 외딴 프로젝트로 이어 지므로 코드 품질 개선을 통해 다시 돌아와서 다시 제자리를 유지합니다.
davidk01

@ david : 현재 일정이 필요없는 경우에도 일정 시간이 지난 후에 코드를 되돌아 보는 것을 언급했습니다. 처음에는 새로운 기능을 추가하기 위해 코드를 다시 살펴 보라고 말하지 않았습니다. 따라서 말한 내용에 따라 결국 모든 이전 코드를 다시 살펴 봐야하는 이유는 무엇입니까? 고정 된 시간이 아닌 관련성이있는 순간에?
토마스 보니 니

3
@ Krelp : 당신이 당신의 능력에 충분히 확신한다면, 앞서 나가고 느낌이들 때만 작동 코드를 보아라. 몇 주 전에 작성한 내용으로 돌아가 리팩토링하면 올바른 코드 구조를 배우는 정말 좋은 방법입니다. 내 충고는 초기 버전이 적절한 확장 가능한 구조를 가지고 있기 때문에 이전에 작성된 코드를 재구성하는 것이 점점 더 적게 필요한 지점을 개선하고 도달하려는 사람들에게 조언했습니다. 당신은 나의 조언을 무시하는 것을 환영합니다.
davidk01

17

내 코드를 살펴보기 위해 컨설턴트에게 비용을 지불하는 것 외에 다른 답변이 있습니까?

아니.

내 조언은 로컬 개발자 / 사용자 그룹에 가입하고 다른 사람들과 아이디어를 이야기하는 것입니다. 디자인에 대해 이야기하십시오. 그들이 어떻게 특정 문제에 접근했는지 물어보십시오.

코드를 보지 않아도 디자인을 검증하면 충분합니다.


4
많은 전문 작가들이 이것을합니다.
JeffO

10

피드백을 제공하는 데 도움이되는 테스트 중심 개발과 같은 자체 검사 기술이 있습니다. 어려워지면 아키텍처가 제대로 작동하지 않을 수 있습니다.

질문을 공식화하고 독립적 인 문제로 복싱하는 것은 종종 너무 많은 작업을 필요로하므로 충분히 준비 할 때마다 다른 시간보다 더 많은 시간에 자신의 질문에 대답했습니다.

문제 해결됨. 개선하기 위해 모든 단일 코드 라인에 대한 외부 피드백이 필요하지 않으며, 도로의 주요 포크에서 우수한 샘플링 및 중간 지점에서 신중한 자체 점검이 필요합니다.

팀에서 일하는 사람과 같은 시간에 혼자서 일하는 것과 동일한 수준의 품질을 유지할 수 있다는 생각을 극복해야합니다. 사람들이 팀에서 일하는 이유가 있습니다. 좋은 소식은 디자인 결정에 대해 갈등이 없다는 것입니다. 나쁜 소식은 디자인 결정에 대해 갈등이 없다는 것입니다. 품질 유지에 소요되는 추가 시간이 단독 작업의 이점으로 인해 다소 상쇄되기를 바랍니다.


여기서 TDD가 어떻게 대답하는지 알 수 없습니다.
Aaronaught

1
@Aaronaught 나는 TS와 같은 보트에 있으며 테스트 작성 (TDD와 같은 코드 전 또는 후에)이 코드가 정상인지 확인하는 방법임을 확신 할 수 있습니다. 테스트 할 수 없다면 나쁘다.
stijn

1
@stijn : 잘못된 코드가 테스트를 작성하기가 더 어렵다는 것이 (어쩌면) 사실 일 수도 있지만 결코 불가능하지는 않습니다. 레거시 시스템이 업그레이드되는 방식입니다. 좋은 코드가 좋은 테스트로 이어진다는 모호한 주장을 액면가로 받아 들여도 반대 주장은 여전히 ​​입증되지 않았다. 통과 테스트는 코드의 품질이 합리적이라는 것을 의미하지 않습니다. 실제로 TDD의 전제 ( "적색, 녹색, 리 팩터")는 본질적으로 테스트를 통과 한 조잡한 코드 작성 하고 품질을 개선하기 위해 리팩토링하는 것을 의미하므로 하루가 끝나는 즉시 테스트 만하면됩니다.
Aaronaught

2
@Aaronaught : 당신은 유효한 포인트를 만들지 만 여전히 테스트가 코드 정신을 검사하는 매우 좋은 방법이라는 점을 견지합니다 (실제로 유일한 방법은 아니지만). SRP가 어디에서 심하게 위반되었는지 확인하는 것이 특히 유용합니다.
stijn

@Mark : 훌륭하지만,이 모든 일화는 "2 주 만에 50 파운드를 잃었습니다"라는 광고 주장보다 훨씬 가치가 적습니다. 왜냐하면 논의되는 것은 실제로 통제 된 조건 하에서는 관찰 되지 않았기 때문에 실제로 측정 조차되지 않았기 때문 입니다. 그렇습니다. TDD는 시험판 결함을 줄인다는 증거가 있습니다. 코드 검토는 완전히 다른 문제를 해결하며 TDD가 동일한 문제를 해결한다고 가정 할 근거가 없습니다. "오래된 학교"단위 테스트는 아마도 그룹이 아닌 개별 클래스에 대한 테스트 가능성 제한을두기 때문에 실제로이 방법에 더 좋습니다.
Aaronaught

6

컨퍼런스 및 로컬 사용자 그룹에서 최대한 많은 네트워킹을 수행하는 것이 좋습니다. 나는 위생을 유지하고 알고리즘을 함께 살펴보기 위해 이메일이나 메신저를 통해 항상 위생 처리 된 코드 조각을 찍는 많은 개발자를 알고 있습니다. 아니요, 그것은 직접 대면 대화가 아니며 예, 때로는 코드를 삭제하는 데 어려움이 있지만 때때로 20 명의 인스턴트 메시지 코드 검토가 특히 유용합니다. 특히 두 번째 눈에 절망적 인 경우 특히 그렇습니다.


4

나는 비슷한 상황에 처해 있으며 끔찍한 질문에 대한 피드백을 얻기 위해 Stack Overflow에 크게 의존합니다. 또한 실제로 대답이 종종 명백 해지는 문제에 대한 설명을 작성해야한다는 사실을 알게되었습니다. 모범 사례 측면에서, 나는 .Net 개발자이고, 내가 작성하고있는 코드에 대한 대안을 제안 할 수있는 ReSharper를 사용합니다 (때로는 무시할 수 있습니다). 또 다른 유용한 도구는 정적 코드 분석을 수행하고 규칙 세트와 일치하지 않는 모든 문제를 강조 표시하는 FxCop입니다.

그렇지 않으면 현재 관행을 읽고 최신 상태로 유지하는 것은 당신에게 달려 있습니다. 같은 I 앨빈 Ashcraft의 아침 이슬 새로운 닷넷 세계에서 개선 무엇에 대한 링크.


4

작은 사용자 그룹을 만들거나 찾아보십시오. 코드를 사용할 수있게하고 모든 사람이 매일 30 분 이상 작동하도록 노력하십시오.


3

내 경험에 의한 건설적인 피드백 은 개발 초기에 경험이 풍부한 개발자 가 기초를 세우기 위해 코드를 검토 하는 것이 필수적이지는 않지만 매우 중요하다는 것 입니다. 경험이 있으면 @ davidk01에서 제안한 접근 방식을 따를 수 있습니다. 즉, 정기적으로 자체 코드를 검토하여 코드 품질을 향상시킬 수 있습니다.


2

나는 당신의 상황에 대한 세부 사항을 모르지만, 지금은 어디에서 인턴으로 일하고 무언가를 배우고 싶어하는 경험이 많은 학생들에게 배가 고 ry습니다.

당신이 그들을 처리하고 그들에게 이것을 가르치는 것이 추가 직업으로 들릴지 모르지만, 우리가 처음 시작했을 때 우리는 모두 거기에 있었고 지불 할 차례입니다.

그들은 전문가가 아니며 때로는 당신을 잘못 인도 할 수도 있지만 일반적으로 모든 것에 도전하고 아이디어로 가득 차 있으며 코드의 모든 세부 사항을 방어 해야하는 토론에 좋습니다.


2

모든 함정을 나열 할 수는 없지만, 종종 질문을 공식화하고 자체 포함 된 문제에 복싱하는 것은 종종 충분한 준비를 할 때까지 너무 많은 작업을 필요로하므로 더 많은 질문에 대한 답변을 얻을 수 있습니다. 그렇지 않으면 시간보다.

내가 게시 한 질문의> 75 %에 대해서도 동일하게 경험합니다.

그러나 이것이 그렇게 귀찮게하지 않는 주장은 아닙니다. 이것은 효과적으로 고무 오리 디버깅입니다. 당신은 당신의 질문에 대한 응답으로 잘릴 수 있다고 생각 되는 질문에 대한 답을 찾고 있습니다. 이는 다른 사람들의 관점에서 문제에 대해 생각하고 있음을 의미합니다. 이는 가능한 모든 방향에서 문제에 대해 생각하고 있음을 의미합니다. 결함을 찾는 가장 좋은 방법입니다.

기껏해야 여기에서 대답을 명확하게 생각할 수 없다는 결론을 내 렸습니다. "최악"에서는 자신의 질문에 대답하게됩니다. 전혀 나쁘지 않기 때문에 따옴표를 명심하십시오. 시간이 조금 비효율적이었을 수도 있지만 문제를 해결하지 않기로 결정하는 것보다 천천히 문제를 해결하는 것이 좋습니다 . 결국 문제를 더 빨리 해결할 수 있습니다.

지목 사항:

신생 개발자 였을 때 ASP.Net 오류 페이지를 여러 번 처리했습니다. 무엇이 잘못되었는지 파악하기 위해 Google에 메시지가 필요했습니다. 올바른 솔루션을 얻기까지 몇 시간이 걸릴 수 있습니다. 나는 기본적으로이 책의 모든 실수를 저지르고 그 결과 문제를 디버깅해야하는 결과를 처리해야했습니다.

이제 오류가 표시되면 문제의 원인이 될 수있는 "일반적인 용의자"를 이미 알고 있습니다. "정상 용의자"에 대한 나의 정신 목록은 내가 일하는 동안 가장 많이 겪었던 문제들을 효과적으로 근거로합니다. 시간이 많이 걸리지 않는 구글링 시간의 레그 작업을 먼저 수행하지 않았다면 결코이 정신 목록을 작성하지 않았을 것 입니다. 그러나 이제 그 정신 목록을 얻었으므로 문제 해결에 훨씬 빠릅니다.


또한 손가락을 대지 못하지만 자유로운 대화의 반응은 내가 생각할 수있는 어떤 형태의 텍스트 인터넷 토론과도 일치하지 않습니다.

나는 여기에 다소 동의하지 않는다. 당신은 인터넷 통신이 반응이 좋지 않다는 것이 맞지만, 이것이 당신에게 나쁘다는 잘못된 생각입니다.

고독한 개발자는 고무 오리 디버깅에 의존합니다. RDD 작업을 수행하는 데있어 핵심 요소 는 고무 오리가 가지고있는 질문을 예상 한다는 것입니다. 고무 오리가 실제로 말하는 것에 의존 할 수는 없습니다.

느린 메시징 시스템 (StackOverflow에 게시하거나 편지를 통해 통신)을 처리 할 때, 처음에 올바르게 처리하도록 인센티브가 부여됩니다. 실수를 바로 잡아야하므로 느리고 힘든 과정이 될 것입니다.
이에 비해 빠른 메시징 시스템 (대화, 인스턴트 메시징)을 사용하면 즉시 무언가를 수정할 수 있습니다 . 무언가를 빨리 고칠 수있는 능력은 사람들이 그것이 올바른지 확인하기 위해 인센티브를 줄입니다.

4 가지 경우 :

  • 개발자로 개인 분석 / 할 일 목록을 만들 때도 펜과 종이를 사용합니다. 노트를 입력 할 때 "나중에 쉽게 고칠 수있다"고 생각하기 때문에 가정과 허위에 대해 글을 쓰는 것을 알았습니다. 그러나 종이에 쓴 내용을 수정해야하는 것은 성가신 일입니다. 여러 줄을 긋고 선 사이에 글을 써야합니다. 종이 에 글을 쓰려고 노력하기 전에 사실을 확인해야 합니다. 이것은 버그를 생성하는 코드를 작성하기 전에 많은 오해를 일찍 발견합니다.
  • 할머니는 비서 (타자기의 나이)였습니다. 공식 문서에 오타를 만들면 전체 페이지를 다시 입력해야했습니다. 내 이모는 비서 (워드 프로세서의 연령)입니다. 그녀는 자동 맞춤법 ​​검사기에 의존 할 수 있으며 최소한의 노력으로 실수를 쉽게 해결할 수 있습니다. 놀랍게도, 할머니는 이모에 비해 타이핑 오류와 철자 오류가 훨씬 적습니다.
  • 비디오 게임은 카트리지에 인쇄되었습니다. 출시 후 버그를 수정하는 것은 거의 불가능했습니다. 모든 카트리지를 다시 인쇄하고 모든 공급 업체에 배포해야 하며 공급 업체가 이미 게임을 구매 한 고객과 연락 할 수 있기바랍니다 . 비용이 많이 들며 (실제 생산 비용의 두 배) 여전히 일부 고객에게는 도달하지 못합니다. 이제 인터넷 패치 시대에 게임 개발자는 출시일 버그를 피할 수 있도록 게임 테스트에 상당히 적은 투자 를하는 것으로 나타났습니다 . 모든 고객에게 직접 수정 프로그램을 전달하기가 훨씬 더 쉽기 때문입니다. 실수로 인한 영향은 가능한 모든 테스트를 수행하는 것과 비교하여 사실 이후 몇 가지 문제를 해결하는 것이 더 나은 지점까지 최소화됩니다 발생할 수있는 오류.
  • 나는 엘리베이터가없는 3 층짜리 아파트에 살았으며 종종 건물에서 한두 개의 거리를 주차해야했습니다. 나는 내 차에서 무언가를 가져가는 것을 거의 잊었다. 이제 차도 옆에있는 내 차가있는 집에 살고 있습니다. 나는 항상 내 차에서 물건을 가져가는 것을 잊었다 .

여기서 근본적인 아이디어 는 어려운 교환 시스템으로 사람들이 정확하고 사실을 확인한 교환을 장려한다는 것 입니다. 형벌의 심각성 (= 어려운 수정 과정)은 실수하지 않도록 가르쳐줍니다.


또한 세부적인 내용을 숨겨 잘 정의 된 질문을하면 누군가 생각하지 못한 문제를 발견 할 가능성이 없습니다.

MCVE 를 만들 때 단순히 MCVE 를 만들어 질문에 게시해서는 안됩니다. 먼저 그것을해야 자신의 문제를 분리 할 수 있도록. 그리고 나서 더 이상 문제를 줄일 수 없다고 생각할 때 여전히 원인을 알 수 없습니다. 그런 다음 StackOverflow에 대한 유효한 질문이 있습니다.

지목 사항:

항상 샌드 박스라는 간단한 콘솔 앱으로 실행되는 두 번째 Visual Studio가 있습니다. 기술적 인 문제가 생길 때마다 문제가되는 코드를 샌드 박스에 복사하고 그 문제를 해결하기 시작합니다.

  • 이 설정을 변경하면 어떻게됩니까?
  • 코드를 줄이면 문제를 재현 할 수 있습니까?
  • 어떤 설정으로 문제를 재현 할 수 있습니까?

90 %의 경우 샌드 박스가 주변 상황에 방해받지 않고 문제 코드를 보도록 도와 주었기 때문에 문제의 원인을 찾았습니다 (예 : 코드의 다른 부분에 대한 값에 대한 불확실성).

다른 10 %의 경우 문제를 재현하기위한 최소한의 코드가 남았습니다.이 코드는 StackOverflow에 게시하는 완벽한 예제 스 니펫으로 사용됩니다.


마지막으로, 나는 명백한 이유로, 전 세계가 나머지 영원을 바라 볼 수 있도록 프로젝트 전체를 게시하고 싶지 않습니다.

MCVE를 이미 가지고 있다면 개인 정보 (또는 회사 정보)에 많은 정보가 없어야합니다. 그렇게하면 코드가 최소화되므로 이름을보다 기본적인 foo / bar / baz 예제로 쉽게 바꿀 수 있습니다.

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