글 시작에 앞서서 저의 재미있는 특징 중 하나를 공유하자면, 보통 같은 목적을 가지지만 상이한 2가지를 함께 사용한다는 점입니다.

macOS와 Linux, Helix와 Zed, Claude와 Grok 그리고 왼손과 오른손이 바로 떠오르네요. (참고로 전 양손잡이입니다)

프로그래밍 언어도 비슷합니다. C/C++로 시작해서 다양한 언어를 한번씩 거쳐서 현재는 Rust와 Crystal에 머물고 있습니다. 다만 이번 조합은 개인적으로 정말 매력적인 조합이라고 생각합니다. 오늘은 왜 제가 두 언어의 조합을 매력적이고 멋진 조합이라고 생각했는지, 그리고 이 조합을 통해 무엇을 만들어가고 있는지 가볍게 이야기하려고 합니다.

Rust and Crystal

두 언어는 Compiled, Typed Language라는 공통적인 특징을 가지고 있습니다. 그리고 둘 다 굉장히 빠릅니다. 다만 인기도 측면에서는 정말 상이한 흐름을 가지고 있습니다. Rust는 두터운 팬층에서 시작하여 현재는 매우 대중적인 언어로 자리잡았고 Crystal은 커뮤니티 내부에서도 조용한 마을이라고 표현할 정도로 대중적이지는 않지만 열정적인 사용자들이 있는 언어입니다.

제가 이 언어들을 주력 언어로 삼은 이유는 여러가지가 있겠지만, 가장 핵심적인 이유는 간단합니다. Rust의 안정성과 대중성 그리고 Crystal의 문법과 개인적인 애착입니다.

Productivity and Ecosystem

언어의 대중성은 언어 자체의 생명력과 생태계의 힘을 의미합니다. 이는 좋은 생산성을 제공해주며, 프로그램이 오랫동안 유지보수 될 수 있도록 도와줍니다. Rust가 안정성과 속도를 위해 시도한 여러가지 업적으로 언어적으로도 매우 뛰어나지만, 튼튼한 생태계와 대중성은 이를 더 강하게 만들어주는 요소입니다.

이러한 점들로 인해 어쩌면 대중적인 언어는 알게 모르게 여러 사람들의 힘을 모아서 개발한다고 볼 수 있겠네요. 제 입장에선 Rust는 정확히 이 포지션을 담당합니다. 안정적인 협업을 위해서도 대중적인 언어를 택할 수 밖에 없습니다.

Love and Learning

그럼 왜 대중적이지 않은 Crystal 을 주력 언어로 삼았는지 궁금하실 수 있습니다. 원래 많이 사용하던 언어인 Ruby와 익숙한 문법, 빠른 속도와 경량 바이너리 등이 있겠지만 근본적으론 개인적인 애착이 크게 작용했습니다. 그냥 이 언어 자체를 좋아합니다.

# Crystal 코드는 상당히 직관적이죠 :)
channel = Channel(Int32).new

3.times do |i|
  spawn do
    channel.send 10 * (i + 1)
  end
end

puts channel.receive

결국 언어를 읽고 쓰고 사용하는건 사람입니다. 길게 지속되는 작업을 이어가기 위해선 언어에 대한 애착이 중요합니다. 물론 언어 뿐만 아니라 다른 부분에서도 중요하겠죠. 그게 좋아하는 일을 지속할 수 있는 이유이자 비결이니깐요. 그런 면에서 Crystal은 개인적인 애착이 많이 들어간, 제가 즐기는 언어입니다. 어쩌면 시간이 지나도 꾸준히 할 수 있는 언어라고 생각이 드네요.

그리고 또 하나의 큰 이유가 있는데요. 오히려 약한 생태계가 기술을 배우는데 있어 중요한 역할을 합니다. 니치한 기술들에 대해선 라이브러리가 없기 때문에 직접 만들어보며 원리를 이해하고 배워나갈 수 있습니다. 개인적으로 이 과정에서 많은 것들을 배웠던 것 같습니다.

Balancing Popularity and Quiet Power

그래서 제가 이 글을 통해 하려는 이야기는 프로그래밍 언어 선택 시 꼭 대중적인 언어만을 배우고 사용할 필요는 없다는 겁니다.

때때로 대중적이진 않더라도 성장중인 언어를 사용하고 커뮤니티에 합류하면서 배우는 것도 중요한 경험입니다. 여유가 되신다면 꼭 메인 언어로 대중적인 언어와 성장중인 언어를 함께 사용해보세요. 생각보다 많은 것들을 얻어갈 수 있습니다.