왜 하필 Dart 팀으로 옮겼나

왜 하필 Dart 팀으로 옮겼나

2주 전에 저는 Dart 팀으로 자리를 옮겼어요. 많은 사람에게는 당연한 이직처럼 보였겠지만, 일부 사람들은 정말 의외라고 생각했어요.

출처: 원문

본문

2018년 5월 업데이트: 2년이 지났는데도 이 글은 여전히 한 달에 수백 번씩 읽히고 있어요. 아래 내용 중 일부는 이제 옛말이 됐다는 점을 짚어 둘게요. 예를 들어 아래에서 "곧 네이티브 Android·iOS 앱을 위해 Dart 코드를 쓸 수 있게 될 거예요"라고 말했는데, 그건 이미 충분히 가능해졌죠. 그럼 이 역사적인 글을 재미있게 읽어 주세요.

좋은 의도의 반응 중 하나였어요.

반응은 가벼운 놀라움부터 다정한 놀림, 완전한 부정까지 다양했어요. 그분들을 탓할 순 없어요. 많은 사람에게 Dart는 낯선 동물이니까요. 인터넷에는 Dart가 성공하지 못할 거라거나 이미 실패했다고 강하게 믿는 똑똑한 개발자가 많아요.

저는 정반대라고 굳게 믿어요. 물론 제가 틀렸을 수도 있어요. 하지만 저는 Dart에 대해 확신이 충분해서 제 커리어를 그 위에 걸고 있어요.

그래서 제가 Dart의 밝은 미래를 믿는 이유 몇 가지를 소개할게요. 물론 염두에 둬야 할 점은, 저는 Dart 팀의 Google 직원이라는 거예요. 저만큼 편향된 사람도 없죠. Google 직원이 아닌 시각을 원한다면 다른도 있어요.

1. Dart는 Google에서 큰 비중을 차지해요

(아직은) 실제 수치를 공유할 순 없지만, Google에서 작성되는 Dart 코드가 정말 많아요. 수많은 줄의 코드가 매일 작성돼요.

거의 모든 코드가 미션 크리티컬(misson critical)이에요. Dart는 Google에 매출의 대부분을 가져다주는 제품 팀에서 쓰이고 있어요.

거기에 더해, Dart는 최근 Google에서 특별한 리뷰 절차를 요구하는, 손에 꼽을 만한 프로그래밍 언어들의 전용 클럽에 합류했어요.

다시 말해, Google 말고는 아무도 Dart를 쓰지 않더라도 Dart는 성공할 거예요. 활기찬 커뮤니티가 있는 건 어떤 기술에게도 엄청나게, 엄청나게 큰 축복이에요. 다만 Dart의 경우, 지금 당장은 그게 생존의 조건이 아니라는 거죠.

2. Dart는 매우 활발하게 유지보수되고 있어요

Dart는 이제 안정적이에요. 지금은 v1.13이죠. 하지만 그렇다고 개발이 멈추거나 느려진 건 아니에요. github.com/dart-lang을 보면 Google이 유지보수하는 Dart 관련 저장소가 139개 보여요. 핵심(sdk) 저장소만 한번 볼게요.

크리스마스 연휴가 있었던 지난 한 달 동안 GitHub Pulse 보고서는 이렇게 말해요:

머지(merge)를 제외하고 32명의 작성자가 master에 408개의 커밋을, 모든 브랜치에는 412개의 커밋을 푸시했어요. master에서는 828개의 파일이 변경됐고, 93,059줄이 추가되고 88,236줄이 삭제됐어요.

이 숫자를 오픈소스로 개발되는 다른 비슷한 프로젝트, 예를 들어 Rust, Go, Scala, TypeScript, Ruby와 비교해 보세요.

커밋 속도가 품질과 같다는 말을 하려는 건 아니에요. 하지만 그것은 투자, 집중, 개선 속도에 대해 뭔가를 알려 줘요.

프로그래밍 언어와 그 표준 라이브러리는 절대 완성되지 않는 복잡한 존재예요.

개발자들이 흔히 꾸는 환상이 있어요. 아름답고 우아한 시스템을 설계하면 — 그냥 잘 작동한다는 거죠. 여기서 핵심 단어는 '환상'이에요. 우리가 매일 쓰는 기술이 설계상 우아한 경우가 많지만, 더 중요한 건 최고의 기술 뒤에는 엄청난 양의 작업(그리고 재작업)이 있다는 거예요.

아, 그리고 물론 양만 중요한 건 아니에요. Dart 뒤에 있는 팀은 노련한 Google SWE들로 구성돼 있어요. V8로 유명한 Kasper와 Lars, Java 언어 스펙으로 유명한 Gilad, inotify로 유명한 John 같은 사람들이 매일 기여해요. 그리고 C#과 Rx로 유명한 Erik 같은 게스트 스타도 있죠. 제 생각에 SWE의 품질은 그들이 만드는 기술의 품질을 예측하는 가장 좋은 지표예요.

3. Dart는 곧 어디서든 실행될 거예요

Dart의 첫 번째 대상은 웹이었지만, 처음부터 범용 프로그래밍 언어로 설계됐어요.

"Dart로 만든 Conway's Game of Life 예제 (Raspberry Pi + Sense HAT에서 실행)"를 새 탭에서 YouTube로 보기

  • Dart를 JavaScript로 컴파일하면 모든 브라우저에서 실행할 수 있어요.
  • Dart로 커맨드라인 도구는 물론 서버도 작성할 수 있어요.
  • 마이크로프로세서(Raspberry Pi 같은)를 위해 Dart 코드를 쓸 수 있게 될 거예요. 그리고 더 흥미롭게도 마이크로컨트롤러(Arduino 같은)를 위해서도요. 즉, 정말 작고, 정말 싸고, 정말 저전력인 기기 개발이 더 이상 C/C++/asm 전유물이 아니게 된다는 뜻이에요.
  • 네이티브 Android와 iOS 앱을 위해 Dart 코드를 쓸 수 있게 될 거예요.

4. Dart는 안정적이고 일관돼요

초기 도입자들조차 도구와 라이브러리가 그때그때 바뀌는 것(du jour)에 지쳐 가는 걸 봤어요.

Dart도 분명 진화하고 있어요. 하지만 1~2년 전에 쓴 프로젝트도 여전히 같은 표준 라이브러리, 같은 언어 기능, 같은 패키지·의존성 관리자를 사용해요.

그것과 별개로, '다트다운(dartisan)' 방식의 개발 관례가 있어요. 제가 본 대부분의 Dart 코드는 공식 스타일 가이드, 사용 가이드, 설계 가이드를 따르고 있어요. Dart 커뮤니티에서는 가독성을 중요하게 여겨요.

5. Dart로 프로그래밍하면 (저에게는) 느낌이 좋아요

좋아요, 이건 주관적이에요. 하지만 인정하자면, 우리의 개발 스택 선택은 종종 그렇죠. 가능하다면 자기에게 맞는 느낌의 도구를 쓰는 경향이 있어요. 어떤 개발자는 JavaScript를 사랑하고 다른 개발자는 싫어해요. 그래도 같은 언어인데도 말이죠. Java, PHP, Ruby, Dart도 마찬가지예요.

제가 Dart에 커리어를 걸어도 좋다고 생각하는 큰 이유 중 하나는, 저만 그런 게 아니라는 거예요. Dart를 쓰고 그 경험을 좋아하는 사람들이 많아요.

"Notch가 Dart로 Doom을 재현(스트림 발췌)"을 새 탭에서 YouTube로 보기

왜일까요? Dart는 모두를 위한 언어는 아니지만, 특정 유형의 개발자에게는 신선한 공기처럼 다가올 수 있어요.

  • 익숙해요(이상한 문법 숭배 같은 게 없어요). 특히 C#, ActionScript, Java, C 같은 쪽에서 온 사람이라면요.
  • 예상 밖의 일이 없어요(wtf 같은 의미론이 없어요).
  • 방해하지 않아요(선택적 타입, unsoundness, GC, everything-is-an-object, mirrors)…
  • …하지만 견고한 코드를 쓸 수 있게 해 줘요(선택적 타입, 선택적 제네릭, 라이브러리, 패키지, transformer).
  • 흔한 일을 쉽게 할 수 있어요(async/await, 문자열 보간, this.field, null 인지 연산자).
  • 잘 설계된 표준 라이브러리가 함께 와요.

여기까지가 제 이야기였어요. 2016년 동안 제가 위에서 설명한 많은 부분이 더 많은 사람에게 더 그럴듯하게 다가오기 시작할 거라고 생각해요.

하지만 적어도 지금은, 제가 (있다고 생각하는) Dart 팀으로의 이직이 완전한 헛짓이 아닌 이유를 알게 됐죠.

더 알아보기

  • Effective Dart — Dart 커뮤니티가 따르는 스타일·사용·설계 가이드를 확인해 보세요.
  • Flutter — Dart로 네이티브 앱을 만드는 프레임워크예요.
  • dart-lang GitHub — Dart 관련 프로젝트와 저장소들을 살펴보세요.