Learn With Me: Elixir에 오신 것을 환영합니다. 이 시리즈의 목적은 제가 엘릭서에 대해 배운 것을 여러분에게 알려드리기 위함입니다. 앞으로 프로그래밍 언어 엘릭서의 개념을 배우고 최근에 배운 주제에 대해 글을 쓸 것입니다. 저는 다른 사람이 이 언어를 배우는 것을 돕고 저도 글을 쓰는 과정에서 더 잘 배우기를 희망합니다. 어떤 것의 마스터가 되기 위한 최고의 방법은 그것을 가르치는 것이라고 들었고, 저는 수년에 걸쳐서 이것이 정말 사실이라는 것을 깨달았습니다.
전문가가 아닌 여러분과 함께 배우고 있는 사람의 관점에서 설명할 수 있는 가치 있는 시리즈가 되길 바랍니다. 바라건대 이것이 끝날 때쯤 나는 전문가가 되었을 것입니다.
동적 타입 언어인 자바스크립트와 정적타입 언어인 C#의 비교를 제공할 것입니다. 이 두가지 언어를 선택한 이유는 두가지가 있습니다. 먼저 둘다 매우 널리 쓰입니다. 특히 자바스크립트가 그렇습니다. 두번째로 그것들은 제가 최근에 자주 썼고 가장 친숙한 언어입니다. 파이썬과 자바와 같은 조합을 제가 과거에 써본 언어들이지만 고르지 않은 이유이기기도 합니다. 아마도 가끔은 다른 언어와 비교를 하겠지만, 엘릭서를 주로 자바스크립트와 C#과 비교하는 것에 중점을 둘 것입니다.
이 시리즈가 여러분에게 유용하도록 여러분이 자바스트립트나 C#을 알 필요가 없다는 것을 명확하게 해두고 싶습니다. 여러분은 둘중 하나도 모르더라도 저와 함께 엘릭서를 배울수 있어야합니다. 비교들은 이 언어들이 친숙한 사람들에게 상황을 명확히 하도록 도와주고, 여러분이 알기 위해 필요한 필수 정보가 아닌 추가적인 정보 제공이 목적입니다. 그래서 파이썬, 루비 그리고 자바 개발자들이 따라오는데 문제가 없을 것입니다.
이것이 제가 배운 첫 함수형 언어가 된다는 것에 주목하고 싶습니다. 음, 제가 진심으로 배운 첫 함수형 언어가 될 것입니다. 오래전 대학 수업에서 저희는 일주일 동안 ML에 대해 조금 배웠지만, 선생님은 함수형 언어에 대한 설명을 잘하지 못하여 저는 어떻게 돌아가는지 이해하지 못하였습니다. 지금 다시 돌아간다면 더 많이 이해할 수 있을 것 같지만, 실용적이고 의미 있는 커뮤니티가 있는 함수형 언어를 배우고 싶습니다. 미안해요 ML팬 여러분.
저는 자바스크립트(람다,immutable.js*, 로다쉬)와 C#의 LINQ의 여러 함수형 개념들에 대해 친숙하여, 함수형 프로그래밍의 동작에 대해 완전히 모르지는 않습니다. 이러한 사전 지식이 함수형 언어를 이해하는데 크게 앞서게 할 것으로 생각합니다.
immutable.js 현재 접속 주소 https://github.com/immutable-js/immutable-js왜 제가 이 시리즈를 위해 엘릭서를 골랐을까요? 저는 원래 엘릭서로 일하며 만족스러워하는 프로그래머들에게 듣고, 게다가 온라인 글을 읽거나 혹은 주로 듣는 테크 팟캐스트를 들으면서 엘릭서 학습의 동기부여가 되었습니다. 그게 처음 엘릭서가 제 레이더에 잡힌 이유입니다.
그리고 저는 동시성 모델에 대해 배웠고 흥미로웠습니다. 엘릭서가 실행되는 환경은 액터 모델을 구현하였으며, 여러 "액터"들이 있고, 엔티티를 스스로 포함하고 있으며, 독립적이며 동시에 실행됩니다. 액터들은 오직 불변 데이터(혹은 어떤 언어에서는 가변 데이터의 복사본)만이 포함된 메세지를 서로 비동기로 보냅니다. 이러한 언어들은 큐에 저장되고 수신자에 의해 비동기로 처리됩니다. 액터 모델은 버그 없이 사용하기 어려운 OS 쓰레드, 락, 그리고 세마포어 방식들에 비해 고수준입니다. 액터 모델을 사용하는 것은 스레드 간의 가변 데이터 공유 시 발생하는 많은 이슈를 피하는 좋은 방법입니다. 그것은 데드락이나 경쟁 상태를 포함하는 진단하기 매우 어려운 문제들을 만들기 매우 쉽습니다.
액터 모델 프레임워크는 보통 액터들의 모니터링이 내장되어있고 충돌 난 액터들을 자동으로 살리는 능력이 있기 때문에, 매우 복원력 있게 소프트웨어를 만드는 경향이 있습니다. 그 기능으로 강력하고 신뢰할 수 있는 소프트웨어를 만들 수 있도록 합니다. 저는 Akka와 Akka.net이 이 기능을 하고 있다는 것을 알고, 엘릭서도 확실히 그렇습니다.
액터 모델이 JVM 언어에서는 Akka로 .NET 언어에서는 Akka.net으로 구현되어 있지만, 이것은 제가 액터 모델이 표준 런타임 환경에 통합된 것을 본 첫 언어입니다. (사실, 얼랭도 같은 환경으로부터 오는 이점이 있지만, 엘릭서 배우기 전까지는 몰랐습니다.) 엘릭서는 동시성 프로그래밍을 아주 쉽게 만들어 주는 것으로 나타났고 저도 그것에 대해 더 배우고 싶었습니다. 병렬 처리는 프로세서의 코어 수가 증가로 더 중요해지고, 저는 오랫동안 동시성에 관심이 있어 왔습니다.
엘릭서가 함수형 언어라는 것 또한 제가 배우고 싶었던 이유였습니다. 저는 오랫동안 함수형 언어를 배우고 싶었습니다. 저는 익숙한 프로그래밍 언어와는 다른 콘셉트의 언어를 배우는 것이 더 나은 소프트웨어 개발자가 되도록 도와준다는 것을 알게 되었습니다.
저는 프로그래밍에 이미 능숙하고 경험이 있는 사람을 위해 시리즈를 쓸 것입니다. 여러분이 적어도 한 개의 언어와는 친숙할 것으로 예상합니다. 비록 제가 언급한 저 주제들에 아주 깊게 파고들지 의심이 되지만, 컴퓨터 과학의 기초와 친숙함이 아마 도움이 될 것입니다.
저는 여러분이 재귀 함수 호출과 반복된 컬렉션을 통하여 재귀적으로 반복하는 법에 친숙할 것으로 추정합니다. 재귀는 함수형 언어에서 매우 중요한 개념이고 여러분은 그것을 잘 이해해야 합니다.
그래서 이 시리즈가 입문 프로그래머들을 위한 것은 아니지만, 여러분은 따라가기 위해 숙련된 프로그래머가 될 필요도 없습니다. 저는 제가 이론적인 심화 개념들이나 무거운 수학을 파고들지 매우 의심스럽습니다. 전형적으로 능숙한 소프트웨어 개발자가 읽고 이해할 수 있는 실용적인 것을 목표로 하였습니다. 쉽게 읽히고 유익한 것을 목표로 합니다.
여러분은 제가 누구인지 저의 페이지에서 자세한 정보를 찾을 수 있지만, 제가 누구인지 간략하게 설명하겠습니다.
제 이름은 Kevin Peter이고, California의 Sacramento 근처에 사는 소프트웨어 개발자이며 주로 웹 애플리케이션과 웹서비스 관련해서 일하고 있습니다. 과거에 C, C++, 자바를 썼었지만, 주력 언어는 C#과 자바스크립트입니다. 전에 파이썬도 배웠지만 특별하게 무언가를 구축한 적은 없습니다. 그러나 그 배움이 프로그래밍에 대한 저의 이해에 영향을 미쳤고, 거기서 생성기와 같은 constructs, list comprehension 문법 그리고 사실은 테이블을 위장한 객체를 처음 접했습니다.
저는 제가 배운 것을 쓰고 사람들에게 가르치는 것을 즐기고, 이것은 저에게 있어서 특히 즐거운 프로젝트입니다.
여가 시간에는 저는 사람 언어들을 배우고, (그 언어들 연습할 수 있는 곳으로)여행가고, 흥미로운 팟캐스트 듣고, 역사 공부하며 즐깁니다. 리소스 페이지에서 제가 듣는 팟캐스트와 보는 비디오를 찾을 수 있습니다.
또한 깃허브 레포지토리(https://github.com/Maultasche)도 가지고 있습니다. 여기에는 제가 몇 년 동안 여가 시간에 작업한 주로 작은 프로젝트들이 포함되어 있습니다.