문제를 해결하기 위한 수단으로서의 프로그래밍

작성일:2024.04.01|조회수:2

문제를 해결하기 위한 수단으로서의 프로그래밍

최근 몇 주 동안 프로그래머스에서 알고리즘 문제를 풀고있다. 하루에 몇 문제씩 풀다보니 어느새 레벨1 문제가 네다섯 개 정도밖에 남지 않았다. 이것까지 다 풀면 레벨2로 넘어가야지 생각하고 있다.

코드잇 스프린트 기간 동안 알고리즘에 대한 생각은 전혀 하지 못했고, 때문에 처음에 문제를 접했을 때 나는 대략 정신이 멍해졌다. 마치 3차원 벡터 문제를 받은 중학생 같은 기분이랄까. 풀이는 고사하고 어떤 방식으로 접근해야 좋을지 감도 잡히지 않았다. 그래서 일단 인프런으로 달려가 가장 잘 나가는 알고리즘 강의를 들었다. 하루에 10문제씩 많게는 15문제씩 접하며 실전 압축 경험치를 쌓았다. 덕분에 프로그래머스 문제를 푸는 데 큰 도움을 받았다.

그러나 프로그래머스 레벨2 어려운 문제들은 여전히 감이 오지를 않는다. 좀 더 발전하려면 알고리즘/자료구조 책들을 읽어야 쓰겠는데, 이런 책들은 대부분 예제 코드가 파이썬으로 되어있다. 프로트엔드 개발자를 목표로 하고 있는 입장에서는 자바스크립트로 문제를 푸는 게 더 좋다고 생각이 되지만, 파이썬으로 코테를 풀어볼까 고민하고 있기도 하다.

우선 몇 가지 부분에서 파이썬이 압도적으로 좋다고 생각되는 부분이 있다. 가령 if문에서 변수의 범위를 비교할 때, 자바스크립트라면 if (i > 42 && i < 74) 처럼 두 개로 나눠서 비교해야 하는데, 파이썬이라면 if 42 < i < 74 와 같이 훨씬 직관적으로 비교할 수 있다. 파이썬은 sort 메소드와 sorted 메소드로 나뉘어 있어서 필요한 걸 취사선택할 수 있는 점도 좋다. 정확한 수치로 비교한 것은 아니지만 동일한 형태의 코드라면 일반적으로 파이썬 쪽이 실행 속도가 더 빠르다. 시간 복잡도 관련해서 좀 더 땡깡(?)을 부려볼 여지가 있는 것이다.

물론 '그리하여 자바스크립트를 버리고 파이썬을 쓰도록 하겠습니다'같은 소리를 하려고 이 포스트를 쓰고 있는 것은 아니다. 큰 하자가 발생하지 않는 한 내가 자바스크립트를 버리고 파이썬으로 옮겨갈 일은 없을 것이다. 이유는 단순하다. 그리고 그 이유를 정돈된 언어로 남겨놓기 위해 이 잡생각을 쓰고 있다.

내가 처음 리액트를 배우고 라이브러리에 대해서 알게 되었을 때 멘토님께서 해주신 말씀이 있다. "결국 리액트도 라이브러리도 특정 문제를 해결하기 위한 하나의 수단에 불과하다. 그러니 여러분이 선택하려는 라이브러리가 특정 문제를 잘 해결해주는지를 생각해야 한다."

formik과 react-hook-form 모두 form 처리를 위해 만들어진 사용자 정의 훅 라이브러리이다. input 값을 추적하고, form submit과 에러를 처리하는 등 두 라이브러리 모두 일반적으로 form 처리를 위해 필요하다 생각되는 기능을 제공한다. 물론 formik은 리액트가 권장하는 제어 컴포넌트 방식으로, react-hook-form은 비제어 컴포넌트 방식으로 input 값을 추적한다. 그렇지만 이 부분 때문에 '해결하고자 하는 문제를 해결하지 못하'지는 않는다. 여기서부터는 순전히 취향의 영역으로 넘어간다.

프로그래밍 언어를 이런 관점에서 볼 수 있을 것 같다. 자바스크립트도 파이썬도 혹은 다른 언어도 ─ 아주 단편적인 예시가 되겠지만 ─ 배열이 있고, 해당 배열의 아이템을 앞에서부터 넣고 빼거나 뒤에서부터 넣고 빼는 기능이 있다. 따라서 어떤 언어를 사용하든 스택과 큐를 이용할 수 있다. 해시 테이블도 그렇고 이진 탐색도 그렇다.

결국 특정 문제를 해결하는 데 있어 두 언어가 필요한 수단을 모두 제공해줄 수 있다면, 어떤 언어를 선택하는지는 순전히 개개인의 취향에 달려있다고 생각한다. 파이썬이 압도적으로 좋다고 생각하는 부분이 여럿 있음에도 나는 함수의 스코프를 들여쓰기로 지정하는 게 너무 어색하다. 적응하고 싶다고 생각하지 않을 정도로 말이다. 또, 자바스크립트에서 if문을 아래와 같은 방식으로 쓰는 것도 나는 무척 좋아한다.

JS
if (a > b) return true
else return false

많은 알고리즘/자료구조 책들이 파이썬으로 예시 코드를 제공하고 있지만, 중요한 것은 저자가 예시 코드를 통해 독자에게 전하려는 개념이지 코드 그 자체가 아닐 것이다. 그러니 각자의 취향을 존중하고 나는 자바스크립트로 문제를 풀어야지.

더 읽어보기

  • 2025.04.25

    더 좁은 타입의 유효성에 대하여

    사람이 무언가를 집중해서 바라보다 보면, 어느샌가 주변부가 흐려지고 가끔은 집중하고 있던 그 대상조차 보이지 않게 된다. 처음엔 분명하게 인식되던 경계가 서서히 사라지고, 오히려 애써 무시했던 주변이 본질을 가릴 때도 있다. 잘 보려 애쓰는 행위가, 역설적으로 시야를 좁히는 순간이다.개…

  • 2024.03.04

    코드잇 스프린트 1기를 수료하며

    아주 오래된 질문나는 한국에서 남자 간호사 만큼이나 보기 드문 남자 영양사이다. 대학을 식품영양학 전공으로 졸업했고 직장 생활도 영양사 자격으로 시작했다. 그래서일까 최근 자기소개를 하다보면 "어떻게 하다가 코딩에 관심을 가지게 되었어요?" 하는 질문을 자주 받고 있다. 확실히 영양사와…

  • 2024.01.09

    헤밍웨이의 자살

    대부분의 부모님이 그러하듯 우리 부모님도 내가 어렸을 때 여러 위인전을 사서 책꽂이에 구비해두셨다. 정말 어렸을 때는 만화로 된 위인전이었고, 조금 컸을 때는 줄글에 삽화가 자주 나오는 위인전이었다. 양쪽 모두에 헤밍웨이가 있었다. 그리고 어린이를 위한 위인전치고는 이상하리만치 그의 말…

  • 2023.10.04

    여행 계획의 방법론

    살다보면 나 자신이 어떤 존재를 불현듯 깨닫게 되는 순간이 찾아오곤 한다. 이러한 순간은 (언젠가 잡생각으로 올릴 지도 모르는 "흔들리는 버스에서 춤을 추는 사내"와 같이) 누군가를 관찰하는 동안 찾아오기도 하지만, 보통은 특정한 사건에 맞닥트린 나 자신의 모습이 어떠했는가를 곱씹어보면…

  • 2026.04.11

    Trie 자료구조

    문자열 데이터를 다룰 때 단순히 “이 단어가 있나?”만으로는 부족한 순간이 있다. 자동 완성처럼 특정 접두사로 시작하는 후보를 모아야 할 때도 있고, 어떤 키에 값을 두고 빠르게 찾고 싶을 때도 있다. 이럴 때 가장 자연스럽게 떠올릴 수 있는 자료구조가 바로 Trie이다.Trie는 무엇…

  • 2026.03.19

    Streams API 부록 2. 왜 이미지는 위에서 아래로 나타날까

    웹 페이지에서 이미지를 로드할 때 흥미로운 장면을 종종 볼 수 있다. 이미지가 한 번에 완전히 나타나는 것이 아니라, 위에서 아래로 조금씩 채워지면서 나타나는 경우가 있기 때문이다. 특히 네트워크가 느리거나 이미지가 큰 경우 이런 현상이 더 분명하게 보인다. 마치 이미지가 위쪽부터 스캔…

댓글

댓글을 불러오는 중...