Flutter를 강의하기도 했고, 간단한 앱을 만들어보기도 했지만 2023년 상반기가 지나서야 꽤 큰 프로젝트를 마무리하고 있다. 제목을 보면 Flutter에 대한 글을 쓸 것 같지만, 이번 글은 아니다. 물론 언젠가 쓰겠지.
Flutter를 처음 써본건 1년이 조금 더 된 것 같다. 클론 코딩으로 시작해서 이제는 회사 앱을 Flutter로 변경하여 오픈을 준비하고 있다.
새로운 언어를 배운다는 건 나에게 어떤 의미인가.
많은 개발자들이 얘기하기를, 하나의 언어를 깊게 이해하고 동작하는 환경에 숙련이 되면 새로운 언어를 배우거나 환경이 바뀌더라도 쉽게 적응할 수 있을 것이라고 한다. 그래서 하나를 깊게 이해하고 다른 언어를 시도해보라고 얘기하곤 한다.
나에게 그런 언어가 있다면 파이썬인데, 개발자들이 얘기하는 “깊은 이해”에 도달했는지는 잘 모르겠다.
파이썬의 내부 동작 과정에 대해 스터디도 하고 코루틴, 비동기 등 단순한 예제로 스터디만 했지 활용해본적이 없다. 개인적으로 이런 개념은 오히려 JS를 다룰 때나 시스템을 구성할 때 조금 더 활용했던 것 같다.
이번에 Flutter를 경험하면서 개인적으로, 하나를 깊게 이해하는 것도 중요하지만, 언어가 추구하는 철학을 제대로 이해하는 것이 중요한 것 같다는 생각이 들었다. 철학이라고 하니 거창해 보이지만 그 언어를 만들게 된 배경과 방법을 온전히 이해한다고 할 수 있다.
왜냐하면 비교적 새로 생긴 언어들은 기존 언어들의 장점은 빠르게 흡수하고 문제를 날카롭게(달콤하게) 해결하기 때문이다. 언어에 대해 자세히 얘기하진 않겠지만 Flutter(Dart)의 경우 타입언어이지만 var 키워드도 제공하고 있고 Null safe 방식도 제공하고 있다. 모던 웹 프레임워크들이 Redux나 Vuex 등으로 상태 관리를 해결하듯이 비슷하거나(GetX 등) 또는 조금 다른 형태로(Bloc 등) 해결하고 있다.
또 최근에 노마드 코더 뉴스레터를 통해 알게된 내용도 있었는데, 파이썬 코드와 호환되는데 type을 제공하면 이런 부분을 C언어 수준의 성능으로 낼 수 있도록 하이브리드(?)처럼 쓸수 있는 Mojo라는 언어도 있다고 한다.
이런 다양한 환경을 경험하니, 생각이 넓어지는 기분이다. A언어에서 쓰던 이런 기법은 B에서도 쓰면 아키텍쳐가 조금 더 나아질 수 있겠다고 생각한다거나, 해보니 B에서는 이런 경우 때문에 제약이 필요하다거나.
해본 사람들은 알겠지. 꽤 즐겁다.
신입개발자라면 사실 앞서 얘기한 대로 하나의 환경을 조금더 깊게 이해할 필요는 있다. 하지만 그게 꼭 과거 리눅스를 잘 알고 싶어 커널 스터디를 하고 부트로더를 분석하고 glibc를 분석하는 것과 같을 필요는 없는 것 같다. (어쩌면 이렇게 생각한 것은 내 오해일 것 같다.) 물론, 필요한 분야도 있고 그 과정에서 정말 뛰어난 개발자가 되겠지만..
무튼,
그래서 나에게 새로운 언어를 배운다는 건 아이러니하게도, 옆으로 책을 쌓듯이 넓혀가는 느낌이 아니라 그저 내 그릇에 물을 붓는 것 같다. 이미 가진 것들과 섞일 것은 섞이고 아닌 것들은 알아서 자기들끼리 계층을 이뤄서 잘 배치되어있다.
있어보이게 잘 포장했으니, 조금 더 부담없이 시작할 수 있겠다. (이미 시작함..)