
최근 몇 주 동안 프로그래머스에서 알고리즘 문제를 풀고있다. 하루에 몇 문제씩 풀다보니 어느새 레벨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문을 아래와 같은 방식으로 쓰는 것도 나는 무척 좋아한다.
if (a > b) return true
else return false많은 알고리즘/자료구조 책들이 파이썬으로 예시 코드를 제공하고 있지만, 중요한 것은 저자가 예시 코드를 통해 독자에게 전하려는 개념이지 코드 그 자체가 아닐 것이다. 그러니 각자의 취향을 존중하고 나는 자바스크립트로 문제를 풀어야지.
더 읽어보기
2026.04.29
필요한 사람들의 세상 - omocon 후기
이전 잡생각인 <너만의 월남쌈을 싸> 와 맥락적으로 이어지는 부분이 있지만, 꼭 가서 볼 필요는 없습니다. 나는 10년이라는 시간 동안 장편과 단편 소설을 썼다. 하지만 5년 전 어느 순간부터 더 이상 써야 할 이야기가 남지 않았다는 느낌을 받았고, 그 이후로는 단 한 번도 완성된 형태…
2026.04.23
너만의 월남쌈을 싸
이 포스트의 제목은 유튜브 영상 <너만의 월남쌈을 싸 - 아이네 INE>에서 따왔다. 4월 초부터 @ilokesto 네임스페이스에 속한 거의 모든 라이브러리를 리뉴얼 하고 있다. 이미 deprecated 처리는 끝났고, 새로운 기준 위에서 라이브러리의 구조를 재정의하는 단계를 거치고 있…
2025.04.25
더 좁은 타입의 유효성에 대하여
사람이 무언가를 집중해서 바라보다 보면, 어느샌가 주변부가 흐려지고 가끔은 집중하고 있던 그 대상조차 보이지 않게 된다. 처음엔 분명하게 인식되던 경계가 서서히 사라지고, 오히려 애써 무시했던 주변이 본질을 가릴 때도 있다. 잘 보려 애쓰는 행위가, 역설적으로 시야를 좁히는 순간이다.…
2024.03.04
코드잇 스프린트 1기를 수료하며
아주 오래된 질문 나는 한국에서 남자 간호사 만큼이나 보기 드문 남자 영양사이다. 대학을 식품영양학 전공으로 졸업했고 직장 생활도 영양사 자격으로 시작했다. 그래서일까 최근 자기소개를 하다보면 "어떻게 하다가 코딩에 관심을 가지게 되었어요?" 하는 질문을 자주 받고 있다. 확실히 영양사…
2026.06.01
React Server Components를 위한 컴포넌트 아키텍처
이 포스트는 Vercel의 Next.js 팀 소속 개발자 Aurora Scharff가 자신의 블로그에 올린 Component Architecture for React Server Components 게시글을 번역한 것이다. 번역하는 과정에서 다소 의역이 있을 수 있으며, 일부 번역에는…
2026.05.26
차트는 멈췄는데 윈도우가 움직인다
상황 어느날 서비스를 살펴보시던 팀장님께서 이런 말씀을 slack에 남기셨다. 진호님, 예측 차트에서 zoom을 계속하면 어느 순간 라인 차트가 아니라 단일 스캐터 차트처럼 보이는 데, 이거 수정하면 좋을 거 같아요. 어느정도 zoom을 하면 그 이후로는 zoom이 안 되도록 할 수 없…
2026.05.21
피자가게로 이해하는 디자인 패턴
에이든 피자는 처음부터 복잡한 시스템을 만들 생각이 없었다. 처음에는 메뉴 몇 개만 만들면 됐다. 그런데 손님은 커스텀 주문을 넣기 시작했고, 주방은 상태를 나눠야 했고, 결제와 배달앱과 알림이 하나씩 붙었다. 코드도 가게를 닮는다. 장사가 잘될수록 이상하게 더 쉽게 망가진다. 디자인…
2026.05.21
7. Decorator — 토핑 추가할 때마다 클래스를 새로 만들 수 없다
에이든 피자에서 주문서를 객체로 만들자 취소와 재주문은 한결 편해졌다. 그런데 주문이 편해지자 손님들도 한결 편해졌다. 편해진 손님은 더 많은 요구를 한다. "치즈 추가요", "올리브도 추가요", "소스 많이요", "조금 더 바삭하게 구워주세요" 같은 요청이 주문대 위로 쌓이기 시작했다…
댓글
댓글을 불러오는 중...