# 소프트웨어 개발에서 배운 교훈들

> Clean Markdown view of GeekNews topic #13641. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13641](https://news.hada.io/topic?id=13641)
- GeekNews Markdown: [https://news.hada.io/topic/13641.md](https://news.hada.io/topic/13641.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-03-04T11:23:01+09:00
- Updated: 2024-03-04T11:23:01+09:00
- Original source: [henrikwarne.com](http://henrikwarne.com/2015/04/16/lessons-learned-in-software-development/)
- Points: 96
- Comments: 7

## Topic Body

### 개발  
  
- **작게 시작한 후 확장하기**: 새 시스템을 만들거나 기존 시스템에 기능을 추가할 때, 거의 필요한 기능이 없는 매우 단순한 버전으로 시작한 후 점진적으로 확장  
- **한 번에 하나씩 변경하기**: 개발 중 테스트가 실패하거나 기능이 작동하지 않을 때, 한 번에 하나의 변경만 했다면 문제를 찾기가 훨씬 쉬움  
- **로깅과 에러 처리를 조기에 추가하기**: 새 시스템을 개발할 때 로깅과 에러 처리를 추가하는 것이 초기부터 유용함  
- **새로운 코드 라인은 최소 한 번은 실행되어야 함**: 기능이 완성되기 전에 테스트해야 함  
- **전체를 테스트하기 전에 부분을 테스트하기**: 잘 테스트된 부분은 시간을 절약해 줌  
- **모든 일은 생각보다 오래 걸림**: 특히 프로그래밍에서 예상보다 더 오래 걸림  
- **기존 코드를 먼저 이해하기**: 새 기능을 추가하기 전에 현재 솔루션을 이해해야 함. 코드를 읽는 것이 코드를 작성하는 것만큼 필요한 기술이라는 것  
- **읽고 실행하기**: 코드를 이해하는 데는 두가지 보완적인 방법이 있음. 코드를 읽는것과 코드를 실행하는 것   
  
### 문제 해결  
  
- **버그는 항상 존재함**: "처음부터 올바르게"라는 접근 방식은 좋지 않음  
- **문제 보고서 해결하기**: 개발자는 고객의 문제 보고서를 처리하고 버그를 수정하는 데 시간을 할애해야 함. 이를 통해 고객이 무엇을 하려고 하는지, 시스템이 어떻게 사용되는지, 문제 해결이 얼마나 쉽거나 어려운지, 시스템이 얼마나 잘 설계되었는지 훨씬 더 잘 이해할 수 있음   
- **문제 재현하기**: 버그 수정의 첫 번째 단계는 문제를 재현하는 것. 그런 다음 수정 사항이 추가되면 문제가 사라지는지 확인  
- **알려진 오류를 수정한 후 남은 것을 확인하기**: 여러 문제가 있을 때, 알려진 문제를 모두 수정한 후 남은 증상을 확인함  
- **우연의 일치가 없다고 가정하기**: 테스트와 문제 해결 시 우연을 믿지 말고 조사해야함. "타이머 값을 변경했는데 이제 시스템이 더 자주 다시 시작되는 것은 우연이 아님. 새로운 기능이 추가되었는데 관련 없는 기능이 느려지나? 우연이 아님. 더 조사해 볼 것"  
- **타임스탬프와 상관관계 맺기**: 문제 해결 시 이벤트의 타임스탬프를 활용  
  
### 협력  
  
- **대면이 가장 높은 대역폭을 가짐**: 문제 해결 방법을 논의할 때 대면이 다른 모든 방법(영상, 전화, 채팅, 메일)보다 좋음  
- **러버덕 디버깅**: 문제에 막혔을 때 동료에게 문제를 설명하면 해결책을 깨닫게 됨. 동료가 아무 말도 하지 않더라도 대화를 하다 보면 문제가 무엇인지 깨닫게 되는 경우가 많음. 마술처럼 들리지만 놀라울 정도로 자주 작동함  
- **물어보기**: 코드를 파악할때 읽고 실행하는 것이 좋은 경우가 많다. 하지만 이에 대해 알고 있는 사람(아마도 원저자) 에게 묻는게 가능하다면 물어보는 것도 함께 사용할 것  
- **공로 공유하기**: 공로가 있는 곳에 공로를 인정하기. "우리는 ...을 시도했습니다." 대신 "Marcus가 시도할 아이디어를 생각해 냈습니다." (그가 그렇게 했다면) 라고 말하기. 도움을 주거나 기여한 사람이 누구인지 적극적으로 언급할 것.   
  
### 기타  
  
- **시도해보기**: 어떤 언어 기능이 어떻게 작동하는지 확실하지 않을 때 작은 프로그램을 작성하여 테스트  
- **잠자기**: 어려운 문제에 직면했을 때, 결정하기 전에 하룻밤 잠을 자는 것이 좋음  
- **변화**: 가끔씩 역할이나 직업을 바꾸는 것을 두려워하지 말것. . 다른 사람들과, 다른 제품이나 다른 회사에서 일하는 것은 자극적임.   
- **계속 배우기**: 소프트웨어 개발의 가장 큰 장점 중 하나는 항상 더 많이 배우고 알 수 있는 여지가 있다는 것. 다양한 프로그래밍 언어와 도구를 사용해 보고, 소프트웨어 개발에 관한 책을 읽고, MOOC 과정을 수강할 것. 작은 개선이 추가되어 당신의 지식과 능력에 실질적인 변화를 가져옴

## Comments



### Comment 23552

- Author: ohyecloudy
- Created: 2024-03-07T23:21:17+09:00
- Points: 1

대면이 가장 높은 대역폭을 가짐 - 훌륭한 표현입니다.

### Comment 23520

- Author: askurios8
- Created: 2024-03-06T10:30:02+09:00
- Points: 1

+1.

### Comment 23495

- Author: bluekai17
- Created: 2024-03-05T10:44:39+09:00
- Points: 1

러버덕 디버깅. 진짜 프로그래밍을 모르는 사람에게 말하다가도 뭐가 문제인지 깨닫게 됨

### Comment 23473

- Author: bohblue23
- Created: 2024-03-04T13:34:33+09:00
- Points: 1

+1.

### Comment 23472

- Author: ep6tri
- Created: 2024-03-04T12:53:09+09:00
- Points: 1

금과옥조네요.

### Comment 23471

- Author: tested
- Created: 2024-03-04T12:26:38+09:00
- Points: 1

+1　

### Comment 23470

- Author: bichi
- Created: 2024-03-04T11:59:45+09:00
- Points: 1

와웅 다 좋은 말이네용 대면이 가장 높은 대역폭을 가짐 은 아쉽네요 기술이 더 발전됬으면 좋겠네요
