스터디를 하기 전, 친구들과 공부를 하다 보면 꼭 발생하는 현상이 있었다. 내가 누군가에게 질문을 하면 그 누군가는 의문에 빠진다. 그래서 또 다른 누군가를 불러오면 다시 그 누군가도 또 의문에 빠진다. 이런 알고리즘으로 같이 공부하던 사람들이 모두 모이게 되면 내 코드를 갖고 치열한 토론회가 열린다. 그런데 이 코드를 제일 잘 아는 사람은 나니까 결국엔 나에게로 모든 질문이 도착하는데 사람들이 하도 많이 모여있다 보니 나도 헷갈려서 결국 그 누구도 이해할 수 없는 코드가 되어버리고 그 코드는 완전히 버린 다음 나는 다시 시작했다.
이런 점에 대해서는 사실 별 생각이 없었다. 그냥 내가 저 친구들보다 훨씬 실력이 못 미치니까 자꾸 이런 짜파게티 코드가 탄생하는구나 하는 생각이었고 막연히 열심히 하면 나아지겠지 하고 생각했다. 그런데, 완전히 새로운 사람들로 구성된 스터디에서 똑같은 현상이 똑같은 절차를 거쳐서 또 발생했다. 단순히 내 실력이 부족해서 벌어지는 일이라기에는 지나치게 패턴화된 형태로 나타난다. 분명 근본적인 문제가 있는 것이다. 그래서 Libft부터 시작해 내가 했던 모든 과제들을 되돌아보았다. 그 결과, 두 가지 특징이 보였다.
첫째로는, 과제에서 무엇을 지시하는지 정확하게 파악하지 못한 상태로 코드를 짜는 것이다. 뭘 하라는 건지 모르니까 주변 사람들이 일단 해야 될 것들을 알려주면 그것들을 말 그대로 일단 해내는 것에 집중한다. 건물을 짓는다고 치면 다른 사람들이 일단 기둥을 세우는 게 먼저라고 하길래 "기둥을 세우는 것 그 자체"에만 집중한다는 의미다. 기둥 위에 뭐가 올라갈지 전혀 생각을 하지 않고 그냥 "기둥을 세우는 것 자체"에만 집중을 해버리니까 어? 주변에 스티로폼 많이 보이는데 저거 주워다가 박스테이프로 둘둘 말아서 땅에 세우기만 하면 되지 않을까? 하는 식으로 과제가 진행된다. 당연히 그 다음으로 해야 할 일인 상판을 올라는 작업을 할 때는 내가 만들어놓은 기둥들은 전혀 쓸모가 없어지게 되고 이런 생각을 하게 된다. 아.. 기둥 위에 상판을 올리려면 스티로폼이랑 박스테이프를 쓸 게 아니라 철근을 구해서 격자 형태로 뼈대를 만들고 시멘트로 그 살을 채우는 식으로 해야 그 무게를 버틸 수 있겠구나. 그러면 당연히 내가 만든 스티로폼 기둥들은 전부 다 지워버려야 하는 것이다.
둘째로는, 자꾸 나만의 해결법에 집착한다. 42서울은 과제를 통해 컴퓨터공학의 기초 개념들을 학습한다. 그 기초 개념들은 몇십년 동안 천재적인 프로그래머들이 고안해낸 문제를 해결하는 방식이다. 그런데 그런 것들을 찾아서 어떻게 적용할지는 생각 안하고 자꾸 어설픈 방법을 생각해내려고 하는 습성이 있다. 10m 정도 땅을 파야 하는 상황에서 포크레인 사용법을 배우기보다는 어떻게 해야 효율적으로 손으로 땅을 팔 수 있지 하는 식으로 생각을 하는 것이다.
앞으로는 어떻게 문제를 풀어나가야 하느냐, 아래와 같이 정리해보았다.
1. 요구사항을 파악하고 딱 한 줄로 압축해서 정리(mandatory를 통과하려면 정확하게 어떤 프로그램을 만들어야 하는가?, Bonus를 받으려면 정확히 어떻게 해야 하는가?)
2. 과제 안의 단계별 소과제 만들기(기둥 만들기 -> 기둥 세우기 -> 상판 얹기 이런 식)
3. 그 소과제를 각각 해결하기 위해서는 어떤 식으로 설계를 해야 할지 인터넷을 찾아보며 그려보기(기둥은 이런 재료를 써서 이렇게 만들면 되네, 상판을 만들려면 이런 걸 조심해야 되네 등등)
'느낌표' 카테고리의 다른 글
일, 공부 모두 더 잘 할 수 있는 방법은 없을까? (0) | 2024.01.29 |
---|---|
문제가 무엇인지 정확히 파악하는 것이 가장 중요하다. (0) | 2024.01.11 |
보풀 제거기나 (0) | 2024.01.05 |
2023년 12월 31일 현 시점 내 인생에서 가장 큰 문제 (0) | 2023.12.31 |
불면 (0) | 2023.12.31 |