brunch

You can make anything
by writing

C.S.Lewis

by 아무나 Jul 24. 2019

Python - 7. 좌절의 시간

*Udacity - Intro to Computer Science 를 따라가고 있습니다.

https://classroom.udacity.com/courses/cs101


*여기가 내 좌절의 좌표다 

https://classroom.udacity.com/courses/cs101/lessons/48689154/concepts/6986185930923



1. 유다시티(Udacity)의 장점 - 다양한 난이도의 꽤 많은 연습문제


Udacity 클래스의 장점은 강의 레슨에도 강의 사이에 촘촘한 퀴즈들이 들어있지만 강의 레슨이 끝난 뒤에 연습문제가 평균 2세트 정도 붙어 있으며 한 세트 안에는 5-6개 정도의 문제들이 들어 있다. 한마디로 연습문제량이 장난이 아니다. 마치 수학 문제집에 예제문제와 단원별 연습문제, 종합실력향상문제가 셋트로 따라다니는 것과 비슷하다. 그래서 개념을 이해했다고 세상 다 아는 사람처럼 배를 뚜드리고 있을 시간이 없다. 바로 복습! 바로 풀이! 바로 적용! 그래서 내가 안다고 한 것이 정말 알았던 건지 의심하게 만드는 문제들이 자꾸 튀어나와 내 눈알마저 튀어나오게 만든다.


처음에는 아 쉽네 별거 아니네, 하면서 지난 시간 마지막에는 선생님보다 잘 풀었다고 큰소리 땅땅 치던 나는 바로 뒤에 있는 연습문제를 풀다가 정말... 반성했다. 나는 먼지구나. 한참 멀었구나. 이걸 계속해야 하나 같은 고민과 좌절의 시간을 보냈다. 그래서 그 이야기를 조금 풀어보고자 한다. 





2. 연습문제와 실생활에서의 문제


이전까지 연습문제나 퀴즈는 마치 수학의 연습문제 풀듯이 반복되거나 출제자가 방금 배운 개념을 사용하게 하려는 의도를 가지고 있는 연습문제였다. 하지만 레슨 8부터는 약간 실생활에 밀접한 문제들이 밀집해 있었다. 그러니까 어떤 코드를 의도적으로 쓰려는 것이 아니라 내가 직접 실생활에 일어나고 있는 어떤 일을 코딩으로 해결하고 싶을 때 고민해 볼 법한 질문들이 있었다.


이를테면 앞 단어의 활자를 조합해 뒷 단어를 만들 수 있는지 확인하시오. 마치 신문지에 있는 글자를 오려서 새로운 문장을 만드는 것을 코드로도 해보자는 건데... 이게 뭘 만들자는 건지는 알겠는데 어디서부터 손을 대야할지 약간 감이 오지 않았다. 알듯 말 듯 정말... 참 풀리지 않는 문제라서 꽤 오랜 시간 동안 고민하다가(좀 더 해봤어야 했나... 인내심이 아직 부족하여) 피드백해달라고 메일을 보냈다.





3. 너 태어난 지 며칠 되었니?


이 문제가 바로 내 발목을 제대로 잡은 문제였다. 상단에 링크로도 걸어놓은 문제인데, 미안하게도 코드를 처음 독학하는 나로서, 지금의 나로서는 이 문제가 정말 어려웠다. 혹시 코딩 잘하시는 분 있으면 도전해보시라(물론 잘 푸실 것이라 믿는다, 역시 당신은 멋진 프로그래머!)


내용인즉슨, 생년월일과 오늘 날짜를 입력하면 여태까지 며칠이나 살았는지 찾아내도록 코딩하는 문제다 엄청 간단해 보이는데 막상 코딩으로 짜려니 꽤 막막했다. 특히 아래와 같은 조건들이 심각하게 고민되었다.


<고민거리>

1) 달마다 날짜가 다르다 -  30일, 31일이지 않나 한 달이 28일인 날도 있지를 않나...

2) 윤년까지 고려해야 한다 - 윤년 끼어서 하루 더 있는 날도 있고...

3) 태어난 날, 오늘까지 모두 포함해서 계산하시오



아이고 머리야...




4. 문제를 해결하는 방법 - Don't be panic!


결론부터 말하자면 사실 나는 이 문제를 풀지 못했다. 몇 시간의 씨름 끝에 결국 포기했다. 그리고 강의를 뒤로 넘겨버렸다. 그랬더니 "못 푸셨죠? 좌절하지 마세요. 그럴 수도 있죠."라고 상큼하게 말하는 선생님이 나타났다.(아 선생님!!! 쫌!!) 그러더니 이제 푸는 방법을 차근차근 가르쳐주시겠단다. 그리고 제시하는 문제 푸는 비법은 다음과 같았다.


0단계 - 문제를 읽고 패닉 하지 않는다


어떻게 알았지...? 알고 보면 유다시티는 쌍방향 캠이 달려있는지도 모른다(아니다). 좌절한 마음을 추스르고 그럼 선생님과 함께 해답을 향해 나아가 보기로 하였다.





5. Keep calm Keep going


이 강의를 들으며 정말 감사했던 것은 이 해설 파트가 정말 잘게 쪼개져 있다는 것이다. 만약 해설 파트가 길고 긴 40분짜리 동영상이 었다면 나는 이쯤에서 파이썬을 접고, 아 모르겠다! 를 외쳤을 텐데 Udacity는 나 같은 인내심 없는 학생들을 거의 1분 단위로 강의를 쪼개 놓았다. 이를테면 이렇게 (뒤의 숫자는 예시다)


1번 영상 : 패닉하지 말아요 도와줄게요 (1:00)

2번 영상 : 자 문제를 한 번 읽어볼까요? (1:30)

3번 영상 : 무슨 값이 필요할까요? (2:00)

4번 영상 : 결과 값은 무슨 값이 나오길 바라요?

5번 영상 : 자 그럼 작은 예를 하나 들어볼게요.


이렇게 호흡이 짧다 보니, 좋아, 1분만 더 참아보자 하면서 계속 넘어갈 수 있었다. 자 그럼 선생님이 무슨 예를 들어서 파이썬을 그만 두려는 나를 설득했는지 보자. 간단한 예시는 정말 간단했다. 


2012.01.01 과 2012.01.02는 며칠 차이나는가? - 하루요!

2012.01.01 과 2013.01.01은 며칠 차이나는가? - (윤년이 이니까)366일이요!


같은 간단한 것들이었다.




6. 할 수 있어요. 참 쉽죠? 재밌지 않나요? 


사실 간단하다고 생각했던 이 문제의 풀이는 정말 만만치 않게 길었다. 한 레슨이 이 문제의 풀이에 다 할애될 정도였다. 이렇게! 어렵다고! 진작! 말하지! 하마터면 파이썬 접을뻔했잖아요!!라는 내면의 외침 소리가 오래오래 울려 퍼질 문제였다. 


사실 이 문제는 1분 2분짜리로 조각조각 내서 만든 작은 코드들을 나중에 합쳐나가면서 (정말 짱이다. 이건 마치 합체로봇을 만드는 느낌이다) 완전한 코드를 완성하는 과정을 배우는 레슨이었다. 단순히 어려운 문제다! 젠장! 이렇게 끝날 것이 아니라 이런 문제를 만났을 때 우리가 어떻게 대처해 가야 하는지, 어디서부터 발걸음을 떼어야 하는지를 알려주는 소중한 시간이었다. 그리고 이 소중한 시간을 아무런 예상이나 경고 없이 겪으며 소중한 내 머리카락도 조금 빠진 것 같았지만...!


해설까지 다 보고 나서, 내가 짠 코드로 돌아가 다시 한번 짜는 과정을 거쳤다. 정말 한 걸음씩 더듬더듬 움직이는 기분이었는데 거북이가 경주를 완주하는 느낌이었다. 그리고 다 완성한 다음에 완성했다! 나는 천재야! 이런 게 아니라. 뭔가... 완성했네. 와... 코드가 돌아가네... 이게 되네... 와 시간 좀 봐. 벌써 이렇게 됐네... 아 자야겠다. 아 몰라. 자야지. 아이고 완성은 했네. 하나님 감사합니다. 잔다 자. 드디어 내가 누워본다. 아이고 허리, 아이고 내 눈알. 악.


대략 이런 기분이었다. 


가끔 SNS에 프로그래머 짤들을 보며 쿡쿡 웃으며 정말일까. 진짜 프로그래머들 이렇게 사나 했는데. 이번에 이 느낌을 제대로 체험했다. 아... 이렇게도 사는구나. 정말... 이렇게 사는 거구나 프로그래머는...


프로그래머 여러분 힘내세요! 당신들은 정말 대단합니다!!


존경해요!!


매거진의 이전글 Python - 6. 코드계의 무한동력 loop
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari