Ayden's journal

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

최근 몇 주 동안 프로그래머스에서 알고리즘 문제를 풀고있다. 하루에 몇 문제씩 풀다보니 어느새 레벨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

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

블로그의 정보

Ayden's journal

Beard Weard Ayden

활동하기