[커리어 스킬]

의서·2023년 10월 9일

DEVOCEAN YOUNG

목록 보기
5/7

32. 디버깅

디버깅이란, 코드 베이스에서 문제를 고치기 위해 여러 요인에 대한 가설을 시험, 오류를 제거하는 과정이다.

디버깅에 접근하는 태도가 중요하다.

문제에 체계적으로, 차분하고 논리적, 분석적으로 접근해야한다.


1) 디버거를 사용하지 마라

디버거는 최후의 수단이다. 디버거 손대기 전에 스스로 해결하려고 노력해보기.

2) 에러를 재현하라

디버깅을 시작하기 전에 버그를 재현하여 지자 버그인지 확인한다. 재현이 안되는 에러가 있을 수 있다. 이 경우 간헐적으로 버그가 발생하여 버그가 발생되는 환경을 모르는 것이기 때문에 테스터에게 재현하도록 하고, 도움을 받아야한다.
어려울 경우 로그문을 삽입하여 상황을 추적하여 어느 부분에서 버그가 발생하는지 파악한다.

3) 앉아서 생각하라

조급하게 생각하지 말고, 천천히 훑어보면서 소스코드를 보고 2~3가지 가설을 찾아본다.

4) 가설을 테스트하라

단위 테스트를 작성한다! 일부 가설에 대한 테스트를 작성하고, 문제의 원인을 조금씩 좁혀간다. 여러가지 가설을 통과할 때마다 가능성이 사라지는 것이고, 결국 남은 가설들 중에서 버그를 찾게 되는 것이다. 혹시나 디버거를 사용하게 된다면 무슨 문제를 찾고 확인했는지 확실하게 알고 넘어가야 한다.

5) 가정을 확인하라

본인의 가정이 틀렸을 수 있다. 이 경우도 단위 테스트를 통해 정말 당연한 코드도 모두 검사해봐야한다.

6) 분할정복하라

코드가 지나치게 길 경우, 문제를 반으로 잘라서 코드 시스템 변수를 최대한 제거하여 확인해본다.

7) 고칠 때는 이유를 이해하라

단순히 고쳐졌다 해서 넘어갈 것이 아니라, 왜 고쳐졌는지 확인하고 무엇이 정확한 원인이었는지를 파악해야한다.

45. 좋은 리더 되기

나쁜 팀은 없다. 나쁜 리더만 있을 뿐이다.

리더십이란?

리더십은 지위가 아니라, 먼저 나서서 무언가를 스스로 해내는 사람이다. 리더십이란, 다른이들로 하여금 자신이 품은 미래의 비전을 따르게 하는 것, 자신이 가는 길로 오게 하는 것, 그리고 자신이 펼쳐놓은 경로를 좇게 하는 것이다.
뒤에서 미는게 아니라, 새 길을 개척하며 앞에서 이끌어가는 것으로, 사람들의 마음을 얻어서 이끌어 가야한다.

이끌기 위해

사람들을 이끌기 위해서는 팀이 할 일을 솔선수범하여 해결하고, 본보기를 보이며, 하기 싫은, 어려운 일을 해야 한다.

모범을 보여라

자신의 영역뿐만 아니라 다양한 영역에서도 앞서나가야 한다. 팀이 훌륭한 업무 윤리를 갖추기 바라는지, 팀원들이 의욕있게 일하길 바라는지, 팀원들이 의사소통 능력과 소프트 스킬을 키우기 바라는지, 그 어느 부문에서든 본인이 가장 앞서 나가야할 것이다.
팀은 리더를 닮아간다.

책임감

  • 사람들의 열정이 고무되도록 나에게 기대하는 것보다 더 높은 목표를 세운다
  • 특별히 높은 책임감을 가진다
  • 업무를 할 때 무슨 일이 있어도 포기하지 않고, 못할 것이라고 예상되는 분량의 업무를 해내려고 노력한다.

팀 전체의 성과를 책임져야 한다.

완전한 주인의식을 가지고 살아야 한다. 팀원들이 실수를 하게된다면 그 또한 리더의 책임이며, 팀원이 실수하지 않고 계획을 잘 이해하도록 지지하는 것이 리더의 역할이었던 것이다. 하지만 모든 이들을 끌고 가는 것이 아니라, 따라오지 못하는 팀원을 내보내며 자신을 따르는 이들을 성공으로 이끌어야 한다.

신뢰

리더 없이 돌아가지 않는 팀은 제대로 된 팀이 아니다. 임무와 의도를 최대한 명확하고 단순하게 전달하며, 업무의 목표와 명확한 작업 절차를 만들어야 한다. 다른 이들에게 업무를 잘 위임하는 것도 리더의 역할이지만, 위임과 포기는 다르다는 것을 엄연히 알고있어야 한다.

55. 진로

소프트웨어 개발자

직업 개발자

기본설정

  • 웹 개발
    프론트/백/웹 디자인 - 프론트와 백엔드를 모두 할 경우 풀스택이라고 부른다.
  • 모바일
    앱 개발
  • 데스크톱
    브라우저, 클라우드 IDE, 데스크톱 IDE
  • 비디오 게임
  • 자동화
    자동화 프레임워크, 테스트 자동화용 툴, 기능을 실행하고 확인하는 자동화된 테스트를 작성
  • 임베디드 시스템
    프린터 제작-운영체제, 전문적인 기술 요구
  • 데이터 사이언스
    빅 데이터, 거대시장
  • 툴과 엔터프라이즈
    상업적이지 않은 소프트웨어 개발-사내 애플리케이션에 쓰이는 툴 제작 / 조직과 파벌에 대한 깊은 이해를 갖춰야 함.
  • 클라우드
    분산 모델, 클라우드 개발 / 클라우드의 확장성과 가용성을 이해해야함

프리랜서

용병으로, 자신이 선택한 고객만을 위해 일한다.

안트러프로그래머

기업가이며 개발자이다. 자신의 제품이나 서비스를 개발하여 판매하는 사람이다.

0개의 댓글