[리뷰] 줄리아를 생각하다(Think Julia)


한빛미디어 출판사의 "줄리아를 생각하다(벤 로언스,앨런 다우니 저 / 송한별 역)"을 읽고 작성한 리뷰입니다.

표지


줄리아(Julia)는 수치해석 및 계산과학용으로 개발된 속도가 빠르고 문법도 우아한 언어이다. 사실 Julia를 처음 알게 된것은 쥬피터 노트북 이름의 어원에서였다. 왜 쥬피터인지 궁금하였는데 Ju(Julia)+py(Python)+te+r(R) 즉, 데이터 분석의 대표적인 3가지 언어의 약자 합성어라는 것을 알게되었다. Jupyter와 Julia

R, Python은 자주 접했지만 Julia는 대체 뭐길래 제법 유명세도 있고 데이터 사이언스 도구로서 점유율도 높은것일까? 궁금하여 일단 페이스북 그룹 Julia Korea에 가입하여 살펴보니 특히 성능 측면에서 큰 인기를 끌고 있음을 알 수 있었다. 쉽게 말하면 속도는 C언어인데 난이도는 Python인 셈이다.

조금 더 깊이 파보고 싶었지만 레퍼런스도 많지 않았고 대부분의 레퍼런스가 원어로 쓰여져있어 피곤함을 느끼곤 했다. 한글로 된 도서는 거의 전무하다시피 했는데 마침 본 도서가 등장하게 되어 매우 반가웠다.

아마 국내에서 한글로 된 줄리아 서적은 2번째인 것으로 알고 있다. 본 도서를 읽고 정리한 줄리아의 특징을 간단히 요약하면 다음과 같다.

  • C, 포트란 언어 수준으로 속도가 빠르다.
  • 다중 디스패치(Multiple Dispatch)
    • Python과 같은 동적언어는 컴파일 과정이 없어 자료형을 미리 알 수 없어 속도가 느려진다.
    • Java 등의 언어를 다룬 사람들은 익숙하겠지만 생김새가 마치 제네릭 프로그래밍과 유사하다.
    • 이 기능을 활용하여 동적언어임에도 속도를 보장하며, 여러 프로그래밍 패턴을 골라 쓸 수 있다.
  • 모든 패키지의 저장소가 Github이기에 서드파티가 탄탄하다.
  • 수학적 표현을 (마치 노트에 수학공식을 쓰듯이) 거의 그대로 사용할 수 있다.
    • 예를 들면, 원주율(파이)를 쓰고 싶으면 \pi라고 입력 후 TAB을 누르면 파이 수학기호가 등장한다.
    • 레이텍(Latex) 노가다를 생각하면 ㅜㅜ..
  • LISP 수준의 메타 프로그래밍이 가능하며 고수준 언어의 편리성을 제공한다.

이번에는 책을 완독하며 인상깊었던 점을 간추려본다.

  • Think라 불리는 독특한 구성
    • 저자는 본 도서를 Think Python의 책에서 Python을 Julia로 바꾼 책이라 표현한다.
    • Think Python은 이미 Python의 초급 교재로 선풍적인 인기를 끌었던 도서이다.
    • Think 방식이 개인적으로 굉장히 마음에 드는데 그 이유는 2가지이다.
      • 언어의 문법만 가르치는 것이 아니라 프로그래밍 언어론에 1:1 대응하듯이 설명한다.
      • 즉, Python만 배운 사람이 C언어를 접할때 얼마나 좌절하는지 종종 보게된다. 이런 문제에 좋은 솔루션이 될 수 있다.
      • 다상량(多商量)을 유도한다. 그냥 문법을 외우는 것이 아니라 왜 이런식의 표현을 하는지 생각하게 되는데 이를 통해 문법의 장기적인 기억에 도움이 될 뿐 아니라 처음 접하는 문법에 응용력이 생긴다. 예를 들면 아래 그림을 참고하시기 바란다. 함수작성의 접근법 스택 도식
  • 프로그래밍을 처음 배우는 사람에게는 최고의 책
    • 앞서 언급한 Think 구성덕분에 이미 다른 언어를 알고 있는 사람은 더욱 쉽게 익힐 수 있을뿐더러 Julia만의 특징을 입체적으로 느낄 수 있다.
    • 프로그램의 개념부터 변수, 함수, 문자열 등의 기초적인 설명을 각각 한 챕터 분량으로 설명한다. (이해가 안될수가 없다.)
  • 연습문제의 수준이 훌륭한데 난이도는 크게 높지않아 능동적인 학습이 가능하다.
  • 단원 마지막에 용어집이 등장하여 배운 내용을 복습할 수 있게 해준다.

Julia 입문자 및 초보자라면 이 책을 첫 단추로 삼으면 절대 후회하지 않을 듯 하다. R, Python과의 기능 차이가 명확히 보여 혼동할 일이 줄어들고 Julia에 빠르게 적응할 수 있도록 도와주기 때문이다.






© 2019.04. by theorydb

Powered by theorydb