[파이썬] 13강 디버깅하는 방법 (feat. Everyone gets bugs)
Everyone gets bugs
아직 13강인데, 나는 여전히 부족한데 왜 벌써 디버깅하는 방법에 대해 전수해주시는 걸까
준비가 안된 새끼를 둥지에서 빨리 독립시키려는 어미새같이 디버깅하는 방법을 하나하나 친절하게 알려주셨다 ㅋㅋ
누구나 당연히 아는 이야기 같지만 하나하나 꼼꼼하게 짚고 넘어가려는 안젤라쌤 덕분에 기존 코드들도 한번씩 복습할수 있었다.
능숙하게 외워 말하고 싶었지만 결국 머릿속에 들어박히지 않았던 어린날의 주기도문처럼 한자씩 되뇌여본다.
버그를 해결하는 방법
1. 문제를 머릿속에 그려보기 (Describe Problem)
현재 오류가 나는 지점을 들여다보고, 어떤 문제인지 말로 표현해보든 머릿속에서 그려보든 정확하게 묘사해보려고 노력하자
def my_function():
for i in range(1, 21):
if i == 20:
print("You got it")
my_function()
2. 버그를 재현해보기 (Reproduce the Bug)
이 에러가 언제 어떻게 발생하는지 정확히 알기 위해서는 재현해봐야 한다. 코드를 한줄한줄 짚고 넘어가보는 것이다.
예를들면 thonny와 같은 프로그램을 활용하여 코드의 흐름을 하나하나 읊어가며 버그가 발생한 지점을 짚어볼수도 있다.
from random import randint
dice_imgs = ["❶", "❷", "❸", "❹", "❺", "❻"]
dice_num = randint(0, 5)
print(dice_imgs[dice_num])
3. 컴퓨터의 입장에서 생각해보기 (Play Computer)
잊지말아야 한다. 우리는 컴퓨터가 이해할 수 있는 언어로 프로그램을 짜기 위해 파이썬을 배우는 것이다.
따라서 내가 작성한 코드가 과연 컴퓨터가 이해할수 있는 형식과 언어로 작성된 것이 맞는지 꼼꼼하게 살펴야 한다.
year = int(input("What's your year of birth?"))
if year > 1980 and year < 1994:
print("You are a millenial.")
elif year >= 1994:
print("You are a Gen Z.")
4. 에러를 고치자 (Fix the Errors)
에러의 원인을 모르는데 에러를 어떻게 고치란 말인가? 버그가 있는 채로 코드를 실행해보면 콘솔창에 에러메시지가 뜬다.
해당 에러메시지는 단순히 에러가 났다는 것을 알려줄 때도 있지만, 자세히 읽어보면 에러의 원인과 심지어 몇행에서 에러가 난건지도 알려주는 경우가 있다. 꼼꼼히 읽어보는 것이 가장 좋은 팁이 될 수도 있다.
age = int(input("How old are you?"))
if age > 18:
print(f"You can drive at age {age}.")
5. 의심가는 구문은 출력해보자 (Print is Your Friend!)
내 생각엔 5번이 가장 실용적인 팁인 것 같다. 분명 코드를 짤때는 어떤 결과가 나올 것이라는 걸 예상하고 있을 것이다.
따라서, 정말 답답할땐 한줄 한줄 print()문으로 감싸서 콘솔창에 결과를 출력해보면 유용하다.
내가 맞는 방향으로 잘 가고 있는지를 보여주는 최고의 방법이다.
pages = 0
word_per_page = 0
pages = int(input("Number of pages: "))
word_per_page = int(input("Number of words per page: "))
total_words = pages * word_per_page
print(total_words)
6. 디버거debugger를 사용하자
디버깅을 도와주는 각종 툴들을 아우러서 디버거라고 하는데, 그 중 가장 유명한 Thonny를 설치해서 사용해볼 것을 강추한다.
코드를 한줄한줄 짚어가며, 어떤 것 때문에 이러한 결과가 나왔는지 보여주기 때문에 말그대로 하나하나 잘게잘게 뜯어볼수 있다.
그러다보면 문제의 원인이 되는 지점을 딱 발견할 수 있는데, 그때의 쾌감은 이루 다 말할수 없다!
7. Take a break
쉬다와라... 코딩은 막히는 부분을 계속 쳐다본다고 답이 나오는 것이 아니더라. 눈만 아프다.
나 같은 경우엔 마치 학교에서 과제로 쪽글을 써오라고 할때와 같은 심정이다.
워드를 켜놓고 흰 화면을 쳐다본다고 썩 괜찮은 주제가 생각나지 않을때처럼 고통스럽다 ㅠㅠ
졸업 후 회사에 와보니 알겠더라. 엉덩이 무겁다고 일 잘하는 것 아니다. 안풀릴땐 당당하게 쉬고와도된다.
코딩을 배우면서 사고방식도 많이 바뀌었다.
8. 자주자주 코드를 실행해보자
코드를 자주 실행해봐라 충분히 작성한 뒤 실행하기 보단, 단계마다 실행해보는 것이다.
코드를 살짝 바꾼후에도 바로 실행해보자. 즉 코딩을 할땐 완벽주의를 벗어던질 필요가 있다.
애자일스럽게(ㅋㅋㅋ) 생각하고 일해야 한다!!!
def mutate(a_list):
b_list = []
for item in a_list:
new_item = item * 2
b_list.append(new_item)
print(b_list)
mutate([1,2,3,5,8,13])
9. 주변 사람들의 의견을 들어보자
심지어 코딩의 코자도 모르는 사람의 의견을 들어보는 것도 괜찮다고 한다.
어쨌든 영어로된 일종의 글이니까, 주변 사람들에게 보여주고 신선한 관점으로 의견을 듣는것도 괜찮겠다 싶었다.
10. stackoverflow를 활용하자
나는 스택오버플로우가 네이버 지식인쯤되는 신뢰도 정도겠거니 생각했는데(=신뢰도 낮음),
안젤라쌤이 예전에 일하던 회사에서는 스택오버플로 서버가 내려가서 접속이 안되는 날엔 회사사람들 모두가 업무를 접는 날이었다고 하더라. 그정도로 일반적인 업무상황에서도 스택오버플로에 대한 의존도가 굉장히 크다는 말을 한것 같았다.
집단지성의 좋은 예인 것 같아서 나도 실력이 조금더 생기면 이것저것 소통해봐야겠다 생각했다.