슬픈 이야기를 조금 해보려고 한다.
친구가 이런 글을 보내줬다.
그리고 그 글에는 이런 글도 링크되어 있었다.
글을 많이많이 요약하자면,
Problem Solving과 Competitive Programming은 다르다. PS는 문제를 오래 고민하는 학문적인, CP는 빠른 시간안에 문제를 해결하는 경쟁적인 것. “저는 CP를 알고리즘 대회라고 보지 않습니다. 알고리즘 능력이 없으면 문제를 풀 수 없지만, 마찬가지로 코딩 능력도 같기 때문에, 결국 두 가지를 섞은 어딘가에 대회가 위치한다고 생각합니다.”
이런 내용인데 PS를 하고 있다면, 시작했다면, 시작하려고 한다면 한 번 쯤은 고민해봐도 좋을 듯 하다. 이 글에서는 내 경험에 대해서 이야기하려고 한다.
(이 글에서 PS != CP이고, PS ⊂ CS 이다)
일단 나는 CP도 좋지만 PS가 더 좋다. 일주일(좀 과장됐지만) 고민하다가 문제가 풀릴 때의 그 짜릿함(?)과 성취감이 정말 좋다. 대학에 가서는 PS(어떻게 보면 CP에 더 가깝겠다)를 하다가, 취미로 접어두고 PL로 넘어가려고 생각하고 있다. 딱히 PS로 밥 벌어먹고 살기도 어렵고, 주변에 PS를 하지 않는 사람들의 말을 빌리자면 “그래서 PS하면 뭘 할 수 있어요?”를 대답하기 어려우니까. 질문자의 의도야 어찌됐든 사실 반박하고 싶지도 않고, 반박 할 가치도 없고, 반박하기도 어렵지만, 저런 이야기를 들을 때마다 좀 속상하긴 하다. 누군가 해주신 말씀, "남이 하는 걸 존중할 줄 알아야 내가 하는 것도 존중받을 수 있다."
선린과 CS에 대한 얘기
우리 학교는 특성화고이다. 학교 분위기는 개발과 보안에 무게가 실려있다. ‘개발하는데 알고리즘이 필요한가요?’ 라고 물으면 대부분은 NO이고, 아마 학교에서 PS(CS)로 성공한 선배들의 선례가 없어서(있더라도 정말 드물어서) 그럴지도 모르겠다. 다른 근본적인 이유가 여럿 있지만, 아무튼 충분히 이해가 가는 부분이다. 역지사지로 내가 만약 개발에 흥미를 가졌다면 나 또한 CS에 관심이 없을 것 같기도 하다.
선린에는, 적어도 고교 3년 공부하는 동안에는, 개발이나 보안에 대해서는, 외부 커뮤니티가 필요없을만큼 양과 질적으로 좋은 커뮤니티가 형성되어 있다. 그냥 학교 자체가, 옆자리 친구 자체가 커뮤니티이다. 하지만 CS에 대한 커뮤니티는, 관련 동아리는 커녕 애초에 CS를 하는 사람이 드물다. 많은 학년에 1-2명? 내 아래로는 없는 걸로 알고 있다. 나는 결국 정보의 부재로 인해 최근 몇 주간 커뮤니티에 참여하면서 공부한 내용이 2년간 공부한 내용을 압도하는… 말 그대로 ‘우물 안 개구리’신세가 되었다. 차라리 그 시간 동안 놀았다면, 조금 더 일찍 커뮤니티를 찾아 나섰다면 어땠을까.
쉬는 시간에, 하굣길에 알고리즘 문제를 두고 같이 토론할 친구가 없었다. PS는 타인에게 무언가 보여줄 수 있는 분야가 아니다. 친구들의 장난을 가장한 비아냥의 시선들이 너무 싫었고, 이따금 선생님의 ‘그래서 너는 뭘 공부하는 거냐’ 같은 시선을 받을 때면 정말 속상했다. KOI는 파일입출력, 필기 때문에 2년 연속으로 떨어졌고, KOI를 제외하고 학교에서 인정 할 만한 알고리즘 대회는 딱히 없었다. ‘저는 알고리즘 이것도 짜봤구요, 저 문제도 풀어봤구요, 코포 레이팅은 얼마에요’ 할 수도 없고, 실력을 증명 할 수 있는 방법은 입상 밖에 없다. 이는 선린 뿐만 아니라 대학에서 나를 평가할 때도 마찬가지이고, 어쩔 수 없이 최근에 와서는 CP에 초점을 두고 공부했다. 근데 이것도 변하기 시작한 게, “KOI 대상이면 우리나라에서 PS를 항상 제일 잘 하나요?” 그럴 수도 있겠지만, 글쎄. 물론 잘하는 사람은 평균 이상의 좋은 성적을 받긴 한다. 이제는 그냥 그때그때 내 마음 내키는 쪽을 하기로 했다.
CP도 하다보니 나름 재미있긴 하다. 스릴도 있고 문제를 빨리 푸는 게 좋다면 좋은 거니까.
혹시라도 이 글을 보는, 선린을 희망하는, PS를 좋아하는 중학생이 있다면 선린은 다시 고민해봤으면 한다. 대안이라고 하면… 아마 과고가 있지 않을까?
사회와 알고리즘에 대한 얘기
요즘 알고리즘에 대한 지식을 요구하는 기업들이 많아지면서, 자연스럽게 알고리즘(PS, CP와는 엄연히 다르다)에 대한 수요와 공급이 늘어났다. 대학에서도 사회의 흐름(취업에 알고리즘이 필요함)을 인지했고, 4차산업혁명 등등 여러 이유가 겹쳐지면서 ‘SW 특기자 전형’이라는 것과 ‘대학별 알고리즘 경시대회’라는 것이 생겨났다. 둘이 동시에 생긴 것을 보면, 아마 특기자 전형으로 ‘알고리즘 잘하는 애를 뽑(아서 취업시키)겠다는 의도가 먼지만큼은 있지 않을까’라고 조심스럽게 추측… 해본다. 물론 아닐 수도 있는 것이, SW가 굉장히 넓은 의미를 가지고 있기 때문에 창업이든 개발이든 SW와 관련된 것이라면 무엇이든 기준이 될 수 있다. 근데 솔직히 잘 모르겠다.
어떻게 보면 좋은 현상일 수도, 아닐 수도 있다. 사람들이 알고리즘에 관심을 가진다는 건 좋은 일이지만, 맹목적으로 흥미도 없이 취업과 진학을 위해 마치 수능처럼 공부하는 현상이 썩 달갑진 않다. 요즘 KOI를 보면 1~2번 느릿느릿 풀고 3번 부분점수 맞으면 은상인 것 같다. 강남 학원가에서 필기를 외우듯이 공부하고 printf("1");
만 찍어도 장려상이다 ㅠㅠ 은상 50명 중 1등과 50등도 결국 같은 은상이고 대상과 장려상도 같은 전국대회 출신이니, 참으로 안타까운 이야기가 아닐 수 없다. KOI 입상 경험이 없는 내가 이렇게 말하는 게 좀 주제넘은 것 같아서 더 이상 뭐라고 더 말하진 못하겠다 ㅠㅠ
학원가에서 만들어진 학생이 CP를 얼마나 잘 할 수 있느냐고 묻는다면 아마 KOI 동상? 잘하면 은상 턱걸이?가 최대가 아닐까 싶다. 결국 자기가 좋아서 알고리즘의 본질을 고민하고 문제를 찾아 나서지 않으면 주입식 알고리즘으로는 풀 수 없는 문제가 분명히 나오기 때문이다. 막말로 학원에서 binary search는 알려줘도 parallel binary search를 알려주지는 않을 것 아닌가? 대회는 트렌드가 있고, 새로운 알고리즘은 계속 나오기 때문에 알고리즘 책에 쓰여있는 것만으로는 분명히 한계가 존재한다.
취업을 위해 알고리즘을 공부하는 건… 개인적으로 나쁘진 않다고 생각한다. 결국 PS를 하면서 로직설계나 버그헌팅, 휴먼에러(내가 틀릴 수도 있음을 인지하는 것) 같은 것들을 공부할 수 있으니 개발하면서도 분명히 도움이 될 거라고 믿는다. (변수 네이밍과 전역변수 남발 같은 건 어쩔 수 없다…)
대학에서의 PS는 직접 경험해보지 않았기 때문에 적지 않겠다. 남에게 들은 것과 직접 느낀 것은 분명히 다를 테니까.
번외) 우리나라의 컴퓨터식 사고와 코딩
사회와 알고리즘해서 생각났는데, 정말정말정말 너무너무너무 안타깝다. 그냥 맹목적으로 필수 교과에 정보를 포함시키고 블록코딩과 c언어를 가르치는 게 컴퓨터식 사고가 아니다.
- 문제를 발견한다.
- 발생원인을 찾는다.
- 해결방안을 찾는다.
- 직접 해결해본다.
코딩은 4에서 문제를 해결하기 위해 사용되는 수많은 도구 중 하나일 뿐, 컴퓨터식 사고와는 아무런 관련이 없다. 컴퓨터식 사고와 창의적인 사고는 문제의 발견에서 시작한다. 하고 싶은 말이 많지만 아직 내가 이런 걸 비판할 위치도 아니고 (최소한 코딩과 관련된 교육을 받는 입장이니까) 관련된 article이 많으므로 이만 줄인다.
마무리
사실 아무런 생각 없이 처음에 언급된 글을 읽었는데, 갑자기 지금의 내 경험과 생각을 정리해뒀다가 나중에 다시 읽어보고픈 생각이 들었다.
요약하자면,
- 선린에서의 PS(혹은 CS)는 정말 힘들다.
- PS든 CP든 남 신경 안 쓰고 내가 하고 싶은 걸 하기로 했다. 정답은 없다.
- 사회에서 알고리즘에 대한 수요와 공급이 늘어나고 있다.
- 이것 때문에 여러 사회현상이 나타나는데, 안타까울 따름이다.
으 글 쓰기 힘들다 치킨 먹으러 가야지