본인은 PS도 나름 깊게 파봤고, 개발자든 연구자든 PS가 중요하다고 생각해서 적어봄.



내가 PS를 하면서 얻은 한가지 능력은, 아무리 어려운 알고리즘이더라도 논문이나 해설을 보면 이해할 수 있게 된거임. 어렸을적에 못 푼문제 해설을 봐도 이해가 안되는데 꼴에 자존심은 쎄서 마음에 상처도 많이 받고 했었다. 그래도 꾸준히 문제를 풀면서 알고리즘 관련한 배경지식과 함께 문제해결력을 많이 길렀음. 그래서 이제 앵간한 PS수준 씹덕트릭이나 코포 Div2 에디토리얼은 읽으면 다 이해할 수 있고, 논문도 너무 세부분야(계산기하라던가, 그먼씹 복잡도 분석같은거)만 아니면 커버 가능함.

요즘 코테때문인지 PS를 ㅈ으로 보는놈들도 있는거같은데, 코테따위 아득히 넘어서는 대회수준 문제들은 많이 다름. 물론 쉬운문제는 기출인 경우도 많은데, 최종보스급문제는 가끔 SOTA논문(의 약화버전)도 나오고 심지어는 APIO2016 Fireworks는 문제가 먼저 출제되고 그걸 주제로 논문이 나왔다고 들음. 게다가 PS의 많은 알고리즘 문제는 이론컴퓨터분야에서 연구되는 특정 주제(LP라던가)의 제한된 형태인 경우가 많은데, 그러한 특정 케이스를 먼저 풀 줄 알아야 일반화된 형태를 풀 수 있겠지? 물론 형태를 제한하기 때문에 존재하는 더 효율적인 알고리즘을 요구하니까 항상 더 쉬운문제가 되는건 아니지만 어쨌든.

여기까지가 연구에 PS가 도움될 수 있다고 생각하는 부분임. 이후로는 본인도 몸담고 있는 현업에서의 활용도를 알아보자.



두번째 능력은 내가 짜는 코드에 대한 설명을 논리적으로 남에게 할 수 있게된거임. 물론 남이 발로짜놓은 코드도 논리적으로 분석해가면서 읽을 수도 있음. 이게 기본이라고? 그럴리가 없음. 남이 짠 코드는 물론, 본인이 짠 코드도 1년뒤의 자신이 봤을때 못읽겠다는게 개발자 평균임. 그런데 PS를 하면 그런경우가 많이 줄어듬. 그리고 이러한 능력은 코드리뷰에서 꽤 많은 도움이 된다. PS용 코딩을 할 때는 각 변수 의미와 루프 불변식을 머릿속에서 정리하지 않으면 문제를 푸는것 자체가 힘듬. PS할땐 디버거로 삽질하면서 어떻게든 때려맞춘다 쳐도, 대회에서는 디버깅할 컴퓨터자원 자체가 귀하기 때문에 스스로 싼 코드 혹은 팀원이 싸둔 코드를 읽고 분석하고 구현오류가 있는지를 모두 종이와 펜만으로 해결할 수 있어야 함. 그걸 하다보면 본인이 짜는 코드가 점점 논리적이게 되고, 먼 미래의 내가 와서 다시봐도 이해할 수 있게 됨. 각 변수에 수학적으로 정의한 의미와 불변량은 시간이 지난다고 달라지지 않기 때문이지. 수많은 맞왜틀로 단련된 디버깅능력은 덤.



세번째로 학습능률이 좋아짐. 다른분야 도메인지식 공부하는게 PS에 비해 노잼이라서 그렇지, 알고리즘 잘하는 학식이 원하는 분야 1년정도 준비하면 대부분 갈 수 있다고 봄. 어떤 분야던지 도메인지식을 빼면 남는게 알고리즘 말고 뭐가있음? 도메인 지식이라고 퉁쳐서 말하는게 아니라 정말로 많은 분야에 공통적으로 영향을 줄 수 있는 지식이 알고리즘 말고 뭐가 있는지 모르겠음. 정말로 대학내내 PS만하면 대학원에 납치되겠지만. 대부분의 빅테크기업이 왜 신입뽑을때 SWE직군 하나만 두고 코테를 어렵게 낼까? 영재고/과학고/해외 좋은대학들이 왜 올림피아드 수상경력을 평가할까? 생각해보면 납득할 수 있을거라 생각함.

이건 뇌피셜이지만 많은 구루들이 야크쉐이빙을 즐겨하는거로 앎. 물론 처음부터 세상에 도움되는걸 만들 능력이 된다면 좋겠지만, 그런 번뜩이는 아이디어가 없다면 그냥 야크쉐이빙하다가 기회가 왔을때 발휘하면 된다고 생각함. 그리고 그걸하려면 개발에는 그렇게나 필요없는 PS수준 알고리즘이 반드시 필요해짐. 본인은 요즘 딥러닝 구현해보고 있는데, 뉴럴넷 자체가 거대한 계산그래프 DAG라서 위상정렬, dfs, DP같은건 밥먹듯이 사용해야되더라.

본인이 쉽다고 느끼는 길은 다른사람들에게도 쉬움. 이건 좀 과장된 표현이긴 한데, PS처럼 요구사항 명확한 쉬운것도 못풀면서, 현실세계의 동적으로 변하는 복잡한 요구사항을 가지는 ㅈ같은 문제들은 어떻게 풀겠다는거임? 해봤자 남들 다 할줄 아는거 하는, 대체가능한 인력밖에 안됨. 그래서는 기술로 자신의 가치를 인정받기는 힘들고, 결국 영업과 정치의 길을 가야됨. 그게 나쁘다고는 안하겠지만, 그 길은 우리같은 코딩 아스퍼거들에게 정말 피곤한 일이잖아? 차라리 PS를 하고말지.



위의 첫번째 두번째 능력은 많은 PS무용론자들이 중요시하는 커뮤니케이션과도 직접적인 연관이 있다고 볼 수 있겠다. 세번째 능력은 결국 PS를 하는게 뇌속의 코어 근육을 단련해주는 헬스란 말임. 헬스를 하는 사람에 비해 헬스로 돈을 버는 사람은 극소수 인것처럼, 알고리즘 문제만 풀어서는 이게 좀처럼 돈이 안되긴 함. PS같은거 왜하냐고? 너네는 헬스하는 사람한테도 그런거 왜하냐고 물어봄? 심지어 PS는 시간만 있으면 공짜임.