손코딩 자체가 컴퓨터 도움 없이 내가 로직을 끝까지 설명할 수 있는지 확인하는 과정이라고 생각하시면 됩니다. 실제로 알고리즘 대회나 기술 면접을 준비하는 사람들도 종이에 먼저 흐름을 적거나 의사코드를 작성하는 습관을 많이 가지고 있습니다.
다만 실무에서는 손코딩보다 의사코드 작성, 플로우차트, 그리고 디버깅을 반복하는 시간이 훨씬 많습니다.
제가 추천드리고픈 방법은 문제를 풀기 전에 바로 IDE를 켜지 않는 것입니다.
먼저 입력값이 무엇이고, 출력값이 무엇인지. 또, 예외 상황은 무엇인지, 어떤 순서로 처리할 것인지를 종이에 5분 정도 시간을 정해두고 쫙 적어보세요.
그 다음 코드로 옮기고, 마지막에는 문제를 풀었던 다른 사람들의 코드와 비교하면서 내가 어떤 사고를 놓쳤는지 또 다른사람들은 어떻게 코딩 풀이를 하고 있는지 확인해보는 과정을 거치면서 나에게 부족한 부분과 남들이 가진 장점을 동시에 배우고 흡수할 수 있어서 실력이 가장 빨리 늘었던 방법입니다.
그리고 지금 말씀하신 <툴은 다룰 줄 아는데 막상 로직이 안 짜진다>는 고민은 의외로 데이터 분야에서 정말 흔하게 하는 고민입니다. SQL이나 pandas, scikit learn API를 사용하는 것과 프로그래밍 사고력은 별개의 능력입니다. 현업 데이터 엔지니어나 머신러닝 엔지니어들도 새로운 문제를 만나면 IDE보다 메모장을 먼저 여는 경우가 많습니다.
또 주변에 관련 학과 출신들에게 물어보면 하나같이 모두가 나는 개발에 재능이 없는 것 같다 라고 생각하는 시기를 한 번 이상 무조건 겪어보았다고 이야기들 합니다. 사실 이런 고민은 되려 더 성장하기 위한 밑거름이 되기 때문에 너무 깊게 빠져들지 않고 여러 문제들을 계속 풀어보고 부딪히는게 중요하겠습니다.
실력이 늘기 직전에는 항상 내가 아무것도 모른다는 느낌이 강해집니다. 예전에는 문법도 몰라서 무엇을 모르는지도 몰랐다면, 지금은 로직의 부족함을 인지할 만큼 시야가 넓어진 것입니다. 성장하고 있는 것은 체감되기 쉽지 않기 때문에 발전이 없다고 생각하기 보다도 계속해서 더 성장하기 위한 발판과 경험치가 쌓이는 중이라고 생각하면 되겠습니다.
그리고 데이터 분야는 특히 비교를 하면 끝이 없습니다. 통계도 해야 하고, 프로그래밍도 해야 하고, 머신러닝도 해야 하고, 수학도 해야 합니다. 처음부터 모든 것을 잘하는 사람은 거의 없습니다. 현업에서도 SQL만 전문으로 하는 사람, 모델링만 하는 사람, 백엔드 시스템을 담당하는 사람이 나뉘어 있는 이유도 그만큼 범위가 넓기 때문입니다. 그래서 다전공 하고 계신 상황이 미래에 다가올 상황들에 대비하는 경험이 될 수 있으니 지치더라도 포기 마시고 계속 작은 성공이라도 소중히 하며 도전해보시면 좋겠급니다.
하루에 어려운 문제 하나를 붙잡고 5시간 고민하는 것보다, 오늘은 알고리즘 문제 하나를 완전히 이해하고, 내일은 직접 구현하고, 모레는 아무것도 안 보고 다시 구현하는 방식이 훨씬 오래 기억에 남기 때문에 이런 방식의 공부 방법도 도움이 될 수 있을까 싶어 남겨봅니다.
마지막으로 조급하게 언어를 더 배우기보다는 한 언어로 문제를 많이 풀고, 직접 설계하고, 스스로 설명할 수 있는 연습을 꾸준히 해보세요. 코딩은 천재성이 아니라 반복해서 사고하는 습관이 실력을 만듭니다.
지금 느끼는 답답함은 포기해야 한다는 신호가 아니라, 한 단계 올라가기 직전에 거의 모든 개발자가 한 번쯤 겪는 과정이라고 생각하셔도 됩니다.