햄스터 갬성 블로그

[번역] 새로운 언어를 배우는 '흔치 않은' 방법

나는 적어도 1년에 한 번 새로운 언어를 배운다. 그리고 어떻게 하면 빨리 익힐 수 있을까 늘 고민한다. 개인적으로는 공식 사이트에서 언어 spec을 읽고 실제 개인 프로젝트에 적용하며 시행착오를 겪으며 새로운 언어를 배운다. Medium에 새로운 언어를 배우는 방법과 관련해 흥미로운 글이 올라왔길래 미약한 실력으로나마 번역해 보았다. 원문은 Sahil DuaUnconventional way of learning a new programming language이다. 오역과 의역이 난무하니 영어가 익숙한 분들은 링크를 타고 원문을 읽길 바란다.


세상에는 500개 이상의 프로그래밍 언어가 있습니다. 그래서 개발자는 항상 새로운 언어를 배워야 합니다. 우리는 다양한 상황에서 새로운 언어와 맞닥뜨리게 됩니다. 가령 C++과 Java를 능숙하게 다루지만 정작 직장에선 Python으로 개발해야 하는 경우가 있겠죠. 또는 단순히 실력 향상과 호기심 때문에 새로운 언어를 배울 수도 있습니다.

그럼 여기서 질문. 여러분은 새로운 언어를 어떻게 배우나요?

혹은 이렇게 배우는 사람들도 있겠죠.

모두 훌륭한 방법입니다!

저는 새로운 언어를 배우면서 20개 이상의 작은 프로젝트를 진행했습니다. 그 프로젝트 중에는 1주일짜리도 있었고 하룻밤 사이에 완성되는 겁나 짧은 프로젝트도 있었습니다. 저뿐만 아니라 여러분도 늘 그 과정에서 코드가 어떻게든 작동하는 데만 집중할 겁니다. '이 코드가 잘 작동할까?'만이 안중에 있죠. 그래서 코드의 질은 늘 뒷전으로 밀려납니다.

어떤 바보도 컴퓨터가 이해하도록 코드를 작성할 수 있다. 좋은 개발자는 인간도 이해할 수 있는 코드를 쓴다. - Martin Fowler

이제 새로운 언어를 배우는 저만의 비법을 소개하겠습니다.

그 언어로 작성된 오픈소스 프로젝트에 기여(contribute)하라 #

놀랐나요? 아마도 이렇게 반문할 거에요. "잠깐, 오픈 소스는 어려운 거 아닌가요? 그 언어의 전문가가 돼야만 오픈소스에 기여할 수 있잖아요". 하지만 실제로는 그렇지 않습니다.

제 얘기를 들려 드릴게요.

저는 작년에 Booking.com에 스카우트되었습니다. 그 회사는 백엔드 언어로 Perl을 사용하고 있었습니다. 전 2016년 6월 대학을 졸업하면서 제 첫 직장 생활에 대비해 Perl을 공부하기 시작했습니다. 7월 둘째 주에 첫 출근이 잡혀있던 터라 제게는 약 1달간의 시간밖에 없었습니다.

전 Perl의 문법을 공부하고 몇 가지 흔한 패턴을 이해하기 시작했습니다. 곧 Perl을 프로젝트에 실제로 사용해 보면서 제가 배웠던 문법과 패턴을 활용해 보고 싶은 마음이 생겼습니다. Perl로 개발해 볼 만한 것들을 찾던 도중 GitHub에서 DuckDuckGo의 오픈소스 그룹을 찾게 되었습니다. 거기서 몇몇 프로젝트는 Perl을 사용하고 있었습니다. 등록된 이슈를 살펴보던 도중 꽤 많은 "초보자" 이슈가 있다는 걸 발견했습니다. 전 즉시 몇 개의 이슈를 맡아 해결했고 pull request를 날렸습니다. 지금에 이르러 저는 DuckDuckGo의 메인 기여자가 되었으며 Open Source Community Leader 중 한 명이 되었습니다.

한줄요약 - 나는 Perl로 작성된 오픈소스 프로젝트에 참여하면서 Perl을 배웠다.

정말로 이 방법이 효과가 있나요? #

저는 Perl의 문법을 배우자마자 오픈소스 프로젝트에 기여했습니다. 그러면서 프로젝트의 코드를 읽으며 자연스레 perl의 기본적인 패턴을 배웠습니다. 기존 코드에 있던 좋은 점들을 제 코드에 녹여내기 시작했고 그것은 제가 Perl로 좋은 코드를 쓰는 데 도움이 되었습니다.

그건 결코 우연이 아니었습니다. 여러분께 확신을 주기 위해 이와 비슷한 이야기를 하나 더 해보죠.

최근 Booking.com에서 일하면서 Go로 작성된 몇 가지 서비스 개발에 참여할 기회를 얻게 되었습니다. 다음은 제 동료와 나눈 대화입니다.

나: 그 프로젝트 정말 괜찮더라~ 나도 참여하고 싶어. 나도 낄 수 있을까?
동료: 물론이지. 네가 관심만 있다면. 근데 너 Go 쓸 줄 알아?
나: 당연 모르지(데헷><)
동료: 그럼 Go 배우고는 싶어?
나: 당근이지!
동료: (방긋) 그럼 같이 해보자!

저는 그렇게 해서 새로운 언어 Go에 뛰어들게 되었습니다.

저는 Go의 문법을 배우기 시작했고 Go의 공식 웹사이트에서 꽤 괜찮은 초보자를 위한 튜토리얼을 발견했습니다. 제가 Go의 기본 개념에 친숙해지는 데 충분했습니다.

저는 다시 한번 Go의 오픈소스 프로젝트 중에서 '초보자'나 '고치기 쉬운' 이슈를 찾기 시작했습니다. 그러던 도중 Gihub's RESTful API의 Go wrapper를 다루는 프로젝트를 발견했고 바로 참여했습니다.

전 Go를 배우기 시작한 지 이틀 만에 첫 Pull Request를 넣었습니다

오픈소스는 어떻게 도움이 되나요? #

이쯤 되면 새로운 언어를 배우는 데 왜 오픈소스가 도움되는지 궁금할 거에요. 몇 가지 이유가 있습니다. 하나씩 알아보죠.

코드의 질 #

대부분의 오픈소스 프로젝트에는 엄격한 코딩 가이드라인이 존재합니다. 당신의 코드가 merge 되긴 위해선 반드시 숙지해야 할 내용입니다. 여러분은 막 언어를 배우기 시작했음에도 그 가이드라인을 따르면서 양질의 코드를 작성할 수 있게 됩니다. 그것뿐만 남들이 쓴 코드를 보면서 어떤 코드가 잘 쓴 코드이고 어떻게 문서화해야 하는지 알 수 있습니다.

코드 리뷰 #

오픈소스 기여의 가장 큰 장점은 코드 리뷰입니다. 당신이 코드를 푸쉬할 때마다 그 프로젝트의 전문가에게 피드백을 받을 수 있습니다. 그런 과정을 통해 언어에 대한 당신의 이해를 높일 수 있습니다. 이것은 마치 시니어 개발자에게 무료 개인과외를 받는 셈입니다!

마음 좋은 사람들 #

우리는 소프트웨어 개발자로서 서로의 작업을 격려하고 응원해 줘야 합니다. 오픈 소스 커뮤니티는 그런 개발자에게 최적의 장소입니다. 저는 오픈소스에 기여하는 내내 모욕적이거나 제 의욕을 꺾는 코멘트를 단 한 번도 받은 적이 없습니다. 모두 친절하고 의욕이 넘칩니다.


다음에 새로운 언어를 배울 기회가 있다면 오픈소스에 뛰어드세요! 그러면서 새로운 언어를 빠르게 익혀보세요 ;)