Head First Go 본문

Programming

Head First Go

halatha 2020. 5. 26. 02:03

예전에 Go에 관심을 갖고 잠시 해봤던 적이 있었지만 곧 그만뒀다. 이유가 약간 어이없지만, 내가 보기엔 코드가 못생겨서였다(특히 함수의 시작이 대문자인게 맘에 안 들었음). 계속 Python을 사용했고, 몇 년 사이 Python의 위상은 예전과 비교할 수 없을만큼 높아졌고 tiobe에서 상위권으로 진입했다. Go는 그에 비하면 아직도 마이너한 언어이지만 Docker와 Kubernetes를 필두로 한 Go로 작성한 프로그램들이 점점 입지를 다지면서(http://www.ciokorea.com/slideshow/22991) 역시 급성장하고 있다.

과거를 돌이켜보면 원래 C로 사회 생활을 시작했기에 처음에 Python을 봤을 때는 indent로 block을 구분하는 Python이 굉장히 이상해보였던 기억이 난다. 마찬가지로 나에겐 Go의 못생긴 syntax도 혹시 몇 년 후에는 오히려 괜찮아보이지 않을까? 하는 생각으로 이 책을 읽기 시작했다.

1장에도 나오는데 https://play.golang.org/에서 간단한 건 바로 실행할 수 있지만, 그냥 GoLand를 설치해서 따라해보기로 했다. mac에서는 brew install go 로 설치(/usr/local/Cellar/go/1.14.2_1)할 수 있고, GoLand를 사용하는 경우 자체적으로 설치(~/sdk/go1.14.2)할 수도 있다. 1장을 시작으로 2장의 조건, 반복문까지는 전형적인 프로그래밍 초보자용 책의 내용으로 Go의 문법을 다루며 아마 대부분의 사람들이 문제 없이 따라할만 하다.

아마 최초의 장벽은 3장 함수에 포함된 포인터일 거고(예전에는 C가 대부분 프로그래밍 기초 수업에서 사용하는 언어였고 포인터 부분부터 좌절을 맛보기 시작한다), 일단 여기를 잘 넘어가면 4장 패키지, 5장 배열, 6장 슬라이스, 7장 맵, 8장 구조체, 9장 사용자 정의 타입까지는 다시 큰 어려움 없이 배울 수 있다.

10장 캡슐화와 임베딩, 11장 인터페이스에 가면 여기부터는 언어 문법뿐만 아니라 프로그래밍 패러다임에 관계된 부분을 차차 알아야 하기 때문에 두 번째 장벽으로 볼 수 있다. 이 부분은 나에게도 신선하게 다가왔는데, class는 없고 struct가 있는 건 알고 있었지만, interface가 있는 건 몰랐고(duck typing), 또 function과 method의 자체적인 구분을 가지고 있는 부분도 새로웠다(go에 대해 아무 것도 몰랐을 때 어떻게 이런 형태를 구현하지? 했던 의문이 9~11장을 읽으면서 해소).

아마 마지막 관문은 13장 고루틴과 채널일텐데, 내용 자체는 따라가기 어렵지 않지만 멀티태스킹이나 동시성/병렬성에 대한 부분이 초보자에게는 어려울 수 있다. 12장 실패 복구하기나 14장 자동 테스트는 go가 비교적 최신 언어라는 점을 보여주는 편리한 부분이고, 15장 웹 앱, 16장 HTML 템플릿은 책을 정리하면서 종합적으로 보여준다.

go에 대한 인상

system programming을 할 수 있도록 목표를 잡았다는 점은 알고 있었는데 그 때문인지 한 마디로 하면 “advanced C”라고 하고 싶다. 포인터나 클래스 없이 구조체가 있다는 점도 그렇고, 언어의 여러가지 모습이 C를 하던 시절을 생각나게 한다.

그런데 책을 읽으면서 “advanced”된 여러가지 요소가 Go에 대한 흥미를 불러일으켰는데, 가장 큰 부분은 duck typing을 통해 클래스를 안 쓰고 구조체를 통해 OOP를 구현하고 있다는 부분이었다. 개인적으로는 OOP보다 절차식 프로그래밍이 훨씬 직관적이라 생각하기도 하고, OOP = class라고 잘못 생각하는 사람들도 있지만, 사실 클래스는 OOP의 필수 요소가 아니란 점에서 go와 같은 언어 설계가 맘에 들었고, 배우고 싶단 생각이 들었다.

이외에도 여러가지 도구들 (go run, go fmt, go install, go doc 등)도 최근의 언어들은 많이 지원하는 부분이지만, 편리한 도구가 늘어나는 건 당연히 좋은 일이기 때문에 역시 맘에 들었다.

처음 go를 봤을 때 가장 싫어했던 부분인 대문자로 함수/메소드가 시작하는 부분도 대문자/소문자로 외부 노출 여부를 결정한다는 점에서 간단하면서 괜찮다는 쪽으로 생각이 바뀌었다.

Head First Go에 대한 인상

이번에 책을 보면서 예전에는 head first 시리즈가 내용이 좋긴 하지만 조금 스타일이 맞지 않는다고 생각해서 거의 보질 않았는데 오랜만에 이번 책을 보면서 처음 배우는 사람들에게는 확실히 일반적인 프로그래밍 책보다 이런 스타일이 훨씬 쉽고 친숙하게 느껴지겠다는 생각이 들었고, 앞으로 다른 언어에 대한 책도 head first 시리즈를 살펴봐야겠단 생각을 했다.

무엇보다도 go에 대한 나의 예전 생각을 이번에 바꿨다는 점에서 개인적으로는 굉장히 오래 기억에 남을만한 책이 될 거 같단 생각이 든다.

Etc

  1. 약간 의외였지만, 이 벤치마크 글에 따르면 Go를 performance 때문에 선택할 이유는 없다. https://www.quora.com/Will-the-emergence-of-Golang-threat-the-popularity-of-C-Java
  2. 책이 아니라 리디북스 프로그램 관련 문제가 있다. 책의 판형이 조금 달라서 그런지 모르겠지만 맥북 모니터에서는 오른쪽 페이지들이 약간 잘려서 보인다. 리디북스 앱이 스크린캡쳐를 막아놔서 스크린샷 첨부를 하지는 못했지만 외부모니터에서는(가로 1920) 제대로 보이고, 맥북 모니터에서는 그렇지 않았다.

 

Comments