angelikatyborska님이 업로드한 아바타

애널라이저, 리프리젠터 & 실라버스 - Exercism의 새로운 기능은?

@angelikatyborska
대략 5년 전
동영상

2021년 9월 초, Exercism v3가 마침내 출시됐어요. Angelika Tyborska는 우리가 마무리할 수 있도록 도와준 핵심 메인테이너 중 한 명이에요. Elixir 학습 문제와 실러버스를 함께 만든 공동 제작자인 동시에, Angelika는 v3 개발 전반에서 핵심적인 목소리를 냈고, 빌드 과정 전반에 아이디어와 통찰을 보탰어요. 그녀는 Exercism의 핵심 기여자예요.

이 영상에서 Angelika는 v3가 해결하려고 했던 문제들, 플랫폼에 추가된 주요 기능들, 그리고 모든 것이 어떻게 서로 맞물리는지를 애널라이저, 리프레젠터, 새로운 학습 문제를 짚어 가며 설명해 줘요.

스크립트

Exercism의 역사

Exercism은 꽤 오래전부터 있어 왔어요. 2013년에 Katrina Owen이 학생들을 위한 도구로 처음 만들었어요. v1에서는 그저 흥미로운 연습 문제 모음이었어요. v2에서는 무료 코드 멘토링 플랫폼이 되었어요.

v3 🚀 01.09.2021

9월 1일, Exercism 버전 3이 출시됐어요.

이 영상에서는 v3의 변경 사항을 하나씩 짚어 드리고, 왜 이런 변경이 있었는지, 그리고 이것이 Exercism에서의 경험을 어떻게 개선해 줄지 설명할게요.

저에 대해서

이 사람이 바로 저예요 [0:38에 나오는 사진]. 저는 Angelika예요. 공동 메인테이너인 Tim과 함께 Exercism v3를 위한 Elixir 트랙의 도구와 30개가 넘는 학습 문제를 만들었어요. 새로운 모습이 된 Exercism은 새로운 프로그래밍 언어를 배우는 최고의 도구가 될 잠재력이 있다고 믿어요.

v3에서 달라진 점은?

Exercism v3에서는 무엇이 달라졌을까요? 짧게 답하자면, 정말 많아요.

v3에서 도입된 모든 주요 변경 사항은 사람들이 v2에서 겪었던 가장 큰 문제들을 해결하기 위한 것이에요.

v2의 문제점

v3가 해결하는 핵심 문제는 세 가지예요.

첫째, 어려운 초기 설정. 둘째, 배움 없는 코드 연습. 셋째, 긴 멘토 응답 시간이에요.

문제 1. 어려운 초기 설정

첫 번째 문제는 어려운 초기 설정이에요. Exercism을 시작하려면 Exercism CLI와 배우고 싶은 프로그래밍 언어를 설치해야 하고, 터미널에 익숙해야 해요. 새 언어의 구문 강조를 위해 에디터를 설정해야 하는 등 할 일이 많아요. 숙련된 개발자에게는 이런 설정이 번거롭게 시간을 잡아먹는 일이에요. 하지만 초보자에게는 넘어설 수 없는 장벽이 될 수 있어요.

해결책은 사람들이 브라우저에서 코딩할 수 있게 하는 것이었어요. 초기 설정이 전혀 필요 없어요.

이를 위해 Exercism에는 이제 웹 에디터가 있고, 각 프로그래밍 언어마다 Exercism 문제의 테스트를 실행하는 전용 테스트 러너가 있어요.

웹 에디터

이것이 웹 에디터예요 [2:25에 나오는 스크린샷]. 두 개의 패널이 있는데, 왼쪽에는 소스 코드가, 오른쪽에는 지침과 테스트 스위트가 있어요.

특별한 기능은 없어요. 즐겨 쓰는 도구를 대체하는 것이 목표가 아니거든요. 목표는 새 프로그래밍 언어에 더 익숙해지고 계속 써 보고 싶다는 확신이 들 때까지 필요한 도구와 의존성 설치를 미룰 수 있게 해 주는 것이에요.

웹 에디터는 전적으로 선택 사항이에요. 계속 CLI를 사용하고, 자신의 컴퓨터에서 즐겨 쓰는 도구로 작업해도 돼요.

테스트 러너

웹 에디터를 쓸 수 있으려면, 브라우저에서 작성한 풀이에 대해 테스트를 실행할 방법이 있어야 해요. 이 일을 테스트 러너가 담당해요.

Exercism의 각 언어에는 자체 테스트 러너가 있어요. 테스트 러너는 테스트 결과를 보고하는 역할을 하지만, 그게 전부가 아니에요. 또한 어떤 코드가 실행되는지 알 수 있도록 테스트 본문을 추출해야 하고, 그래야 실패 메시지를 해석할 수 있어요. 그리고 puts, print, console.log 또는 해당 언어가 제공하는 출력 함수를 사용해 브라우저에서 코드를 디버그할 수 있도록 테스트의 출력도 캡처해야 해요.

테스트 러너는 브라우저에서 문제를 푸는 데 꼭 필요하지만, CLI를 통해 제출된 풀이에도 사용될 거예요. 특정 연습 문제의 커뮤니티 풀이를 둘러보거나 학생을 멘토링할 때, 풀이를 내려받아 로컬에서 실행하지 않고도 테스트를 통과하는지 확인할 수 있어요.

문제 2. 배움 없는 코드 연습

두 번째 문제는 이거예요. Exercism은 코드 연습 플랫폼이지만, 특정 언어를 처음부터 배울 수 있는 자료는 제공하지 않았어요. 그건 먼저 다른 곳에서 해야 했어요.

Exercism의 연습 문제들은 흥미롭고 도전적이도록 설계되었지만, 때로는 가장 쉬운 문제조차 새 프로그래밍 언어로 들어가는 진입점이 되기에는 너무 어려웠어요. 특히 문법이 완전히 다르거나 심지어 다른 프로그래밍 패러다임을 사용하는 언어를 배우려 할 때는 더욱 그랬어요.

해결책은 연습과 함께 배움을 제공하는 것이었어요.

실러버스와 학습 문제가 추가되면서, Exercism은 이제 새로운 프로그래밍 언어에 곧바로 뛰어들 수 있는 훌륭한 도구가 되었어요.

실러버스

실러버스가 뭘까요? 실러버스는 각 프로그래밍 언어를 이루는 개념들의 트리예요. 각 프로그래밍 언어가 다르고 개념도 다르기 때문에, 실러버스는 Exercism의 트랙마다 고유해요.

개념들은 서로 의존하며 트리의 여러 가지를 형성해요. 가지에 있는 이전 개념을 배워야 다음 개념을 잠금 해제할 수 있어요.

예를 들어, 이것은 Elixir 실러버스의 시작 부분이에요 [5:10에 나오는 스크린샷]. "basics"라는 개념으로 시작하는데, 여기서는 모듈을 정의하는 방법, 이름 있는 함수를 정의하는 방법, 표준 라이브러리 문서를 찾는 곳을 다뤄요. 이 지식은 모든 Exercism 문제에 필요해요. 다른 어떤 개념이든 잠금 해제하려면 basics를 배워야 해요. 예를 들어 불리언에 대해 배울 수 있고, 불리언을 알게 되면 cond 표현에 대해 배울 수 있는 식이에요.

참고로, 이것이 Elixir 실러버스 전체예요 [6:16에 나오는 스크린샷]. 현재 50개가 넘는 개념을 담고 있지만, 여전히 확장이 필요해요.

맨 위에는 문자열, 배열, 맵, 튜플 같은 개념이 있어요. 중간에는 Enum 모듈, 정규 표현식, 구조체, 타입 명세 작성이 있어요. 그리고 끝에는 프로토콜, 프로세스, 태스크가 있어요.

학습 문제

실러버스의 개념은 학습 문제를 풀면서 배워요. 학습 문제는 연습 문제와 달라요. 학습 문제는 특정 프로그래밍 언어를 전혀 모르지만, 최소한 다른 언어 하나와 기본적인 프로그래밍 개념은 아는 학생에게 프로그래밍 개념을 가르치도록 설계되었어요.

도입

각 학습 문제는 도입부로 시작해요. 도입부에서는 이 문제가 가르치는 개념에 대한 기본 정보를 설명해요. 대부분의 학습 문제는 하나의 개념을 가르치지만, 예외도 있어요.

이 예시는 Elixir 맵에 대한 도입부를 보여줘요 [7:12에 나오는 스크린샷]. 맵이 무엇인지, 맵을 정의하는 방법, 맵에서 값에 접근하는 방법 등을 설명해요. 새로운 문법을 보여 주는 코드 예시가 몇 개 있지만, 도입부를 그대로 복사해 붙여넣기만 해서는 문제를 풀 수 없도록 너무 많지는 않아요.

지침

그다음에는 지침이 있어요. 학습 문제의 지침은 작은 과제들로 나뉘어 있어요. 이 과제들은 학생이 주어진 개념에서 가장 중요한 부분을 사용하도록 이끌기 위해 설계되었어요.

예를 들어, 맵을 가르치는 학습 문제에서는 학생이 맵을 만들고, 맵에서 값을 읽고, 맵의 값을 갱신하고, 맵의 모든 키를 가져오는 등의 작업을 하게 돼요.

각 학습 문제에는 이야기가 있지만, 그 이야기가 그렇게 중요한 건 아니에요. "foo bar"나 "1 2 3" 같은 말도 안 되는 값을 쓰지 않도록 이야기가 있는 것뿐이고, 연습 문제에서처럼 문제 안에서 큰 역할을 하지는 않아요.

힌트

각 과제에는 학생이 막혔을 때를 위한 간단한 힌트 목록이 함께 있어요. 힌트는 어떤 과제에서 어떤 함수를 써야 하는지 알려 주고, 그 함수의 문서로 안내해 주는 경우가 많아요.

개념 연습하기

하지만 학습 문제 하나를 푸는 것만으로는 개념을 제대로 익히기에 충분하지 않아요. 연습도 해야 해요. 그래서 v2에 이미 있던 모든 연습 문제를 검토하고, 각 개념을 연습하는 데 쓸 수 있는 몇 가지를 골랐어요.

트리에서 하나의 개념은 이렇게 생겼어요 [9:01에 나오는 스크린샷]. 점들은 문제를 나타내요. 전구 아이콘이 있는 첫 번째 점이 학습 문제이고, 나머지 점들은 연습 문제예요.

몇 개의 문제를 푼 뒤의 개념은 이렇게 보여요 [9:37에 나오는 스크린샷]. 학습 문제를 완료했는데도 이 개념의 연습 문제 중 일부는 여전히 잠겨 있다는 점에 주목해 봐요. 연습 문제는 하나의 개념만 연습하는 데 국한되지 않기 때문이에요. 그 문제들의 잠금이 풀리기 전에 아톰 [화면에 나온 개념] 말고도 더 많은 개념을 배워야 할 수도 있어요.

학습 문제는 이미 특정 언어에 능숙한 사람에게는 아주 쉬운 편이에요. 하지만 걱정 마세요, 완전히 선택 사항이에요. 학습 모드에서 연습 모드로 전환할 수 있는데, 그러면 실러버스를 먼저 다 끝내지 않고도 흥미로운 연습 문제 모두에 곧바로 접근할 수 있어요.

실러버스 = 엄청난 노력

기대를 조절하실 수 있도록 꼭 말씀드려야 할 중요한 점이 있는데, 실러버스를 개발하는 것은 정말 어마어마한 노력이 필요해요. 모든 트랙에 지금 당장 실러버스를 준비할 수 있을 만큼 활동적인 메인테이너가 충분한 건 아니에요.

이 영상을 녹화하는 시점 [2021년 9월 4일]에 학습 문제는 Common Lisp, C#, Elm, Elixir, F#, Go, Java, JavaScript, Python, Ruby, Rust, Swift에서만 제공돼요. Julia 트랙은 곧 실러버스를 선보일 예정이에요.

문제 3. 긴 멘토 응답 시간

세 번째 문제는 긴 멘토 응답 시간이에요. 모든 트랙에 멘토가 충분한 건 아니에요. 어떤 트랙은 멘토가 너무 적어서 멘토링을 기다리는 시간이 한 달까지 걸리기도 해요. 이것은 늘 학생들에게 큰 좌절을 안겨 주었어요. Exercism에서 이렇게나 핵심적인 문제라서, 세 가지 각도에서 해결하고 있어요.

자동 피드백

첫 번째 해결책은 자동 피드백을 제공하는 것이에요. 멘토가 학생에게 써 주는 피드백 중 많은 부분이 반복적이에요. 흔한 실수를 자동으로 감지해서 학생에게 바로 알려 줄 수 있다는 것은 판도를 바꾸는 일이에요.

흔한 실수에 대한 자동 피드백을 받으면 학생은 멘토링을 요청하기 전에도 풀이를 개선할 수 있고, 이는 멘토의 일도 더 쉽게 만들어 줘요. 그러면 멘토는 snake_case냐 camelCase냐 같은 지루한 세부 사항을 언급하지 않아도 되고 풀이의 본질에 집중할 수 있어요. 어떤 경우에는 자동 피드백만으로도 학생이 만족해서 멘토링을 아예 요청하지 않을 수도 있어요.

v3에는 자동 피드백을 위한 두 가지 종류의 도구가 있어요. 바로 애널라이저와 리프레젠터예요.

애널라이저

애널라이저는 풀이에서 특정 특징을 찾아내고, 찾아낸 내용에 대한 미리 정의된 코멘트 목록을 학생에게 반환하는 도구예요. 어떤 특징을 찾는지는 전적으로 언어와 특정 연습 문제에 달려 있어요.

예를 들어, Elixir에는 함수와 변수에 대한 아주 특정한 작명 규칙이 있어요. Elixir 애널라이저가 모든 연습 문제에서 수행하는 검사 중 하나는 모든 변수 이름과 함수 이름을 확인하는 것이에요. snake_case를 사용하지 않은 이름을 발견하면, 학생에게 작명 규칙을 상기시켜 줘요.

Elixir 애널라이저가 할 수 있는 또 다른 검사는 특정 모듈의 사용을 감지하는 것이에요. 예를 들어, Enum 모듈을 사용하지 않았는지 확인하는 이 검사 [13:20에 나오는 스크린샷]는 재귀 학습 문제에 특화된 것이에요. Enum 모듈을 사용하면 학습 문제의 취지가 무색해지기 때문에, 애널라이저는 그렇게 하지 말고 대신 재귀를 사용하라고 학생에게 상기시켜 줘요.

리프레젠터

Exercism에서 자동 피드백을 제공하는 데 도움을 줄 두 번째 도구는 리프레젠터예요. 리프레젠터는 풀이를 가져와서 본질적이지 않은 부분을 제거해요. 서식을 정규화하고, 주석과 문서를 제거하며, 함수와 변수 이름을 자리 표시자로 바꿔요.

리프레젠터의 출력을 리프레젠테이션이라고 해요. Exercism에 제출된 각 풀이는 리프레젠터로 전달되고, 그 리프레젠테이션은 풀이와 함께 플랫폼에 저장돼요.

그러면 멘토는 제출된 풀이들의 리프레젠테이션을 둘러볼 수 있는 인터페이스에 접근할 수 있어요. 각 고유한 리프레젠테이션에 대해, 멘토는 그 리프레젠테이션에 피드백을 남길 수 있어요. 그러면 그 피드백은 같은 리프레젠테이션을 가진 비슷한 풀이를 제출한 모든 학생에게 제공돼요. 멘토는 피드백을 한 번만 작성하면 되고, 그 피드백은 필요한 모든 사람에게 전달될 수 있어요.

리프레젠터 자체는 일부 언어에 대해 이미 구현되어 배포되어 있지만, 이 영상을 녹화하는 시점 [2021년 9월 4일]에는 멘토용 인터페이스가 아직 플랫폼에 없어요. 그래서 이 기능이 완전히 제공되기까지는 조금 기다려야 해요.

원치 않는 멘토링 세션 피하기

긴 멘토링 대기열에 대한 또 다른 해결책은 원치 않는 멘토링 세션을 피하는 것이에요. v2에서는 핵심 문제에 멘토링이 필수였어요. 핵심 문제를 제출하면 자동으로 멘토링을 요청하게 되었고, 멘토의 승인 없이는 다음 핵심 문제로 나아갈 수 없었어요. 많은 학생이 핵심 문제를 풀어 나가며 언어를 배웠기 때문에, 학습 과정을 안내해 줄 멘토링이 필요했어요.

이제는 그렇지 않아요. 핵심 문제의 교육 역할과 멘토 승인은 학습 문제와 애널라이저가 대신하게 되었어요. v3에서는 멘토링이 항상 선택 사항이고 명시적으로 요청해야 해요.

멘토링 요청

멘토링을 요청하려면 두 가지 질문에 답해야 해요. "이 트랙에서 무엇을 배우고 싶나요?" 그리고 "멘토가 풀이에 어떻게 도움을 줄 수 있나요?" 학생이 멘토링 세션에서 무엇을 기대하는지 미리 알면, 멘토는 자신의 지식과 멘토링 스타일에 가장 잘 맞는 멘토링 요청을 고를 수 있고, 그러면 양쪽 모두 만족스러운 멘토링 세션을 마칠 가능성이 높아져요.

멘토링 대기열과 즐겨찾기

새로운 멘토링 대기열에서 멘토는 학생의 멘토링 이력에 대한 통계를 볼 수 있어요. 어떤 학생이 한 번도 멘토링을 받은 적이 없어 더 세심한 검토가 필요할 수 있는지, 어떤 학생이 여러 번 멘토링을 받아 그 과정을 잘 이해하고 있는지를 볼 수 있어요.

멘토는 마침내 이전에 멘토링했던 학생을 찾아 관계를 발전시킬 수도 있어요. 멘토는 학생을 즐겨찾기에 추가해서, 이전에 좋은 경험을 함께한 학생을 우선적으로 멘토링하는 데 활용할 수도 있어요.

차단 목록

각 멘토링 세션이 끝난 후, 학생과 멘토 모두 상대방을 차단할 수 있는 선택지가 있어요. 차단 목록은 두 가지예요. 차단한 학생과 차단한 멘토예요. 제가 멘토로서 어떤 학생을 차단하더라도, 그 학생이 나중에 저를 멘토링할 수는 있어요. 차단된 사람은 물론 자신이 차단되었다는 걸 전혀 모르기 때문에 보복할 수 없어요.

어떤 이유로든 누군가를 차단할 수 있지만, 그 사람이 행동 강령을 위반하고 있다면 다른 사용자를 보호하기 위해 그 사람을 명시적으로 신고도 꼭 해 주세요.

긴 대기 시간의 부정적 결과 완화하기

마지막으로, 긴 대기 시간 문제를 다루는 마지막 단계는 가끔 기다려야 하더라도 기다림의 부정적 결과가 최소가 되도록 하는 것이에요. v3에서는 멘토링을 기다린다고 해서 다른 연습 문제를 푸는 것이 막히지 않아요. 여전히 트랙을 진행할 수 있어요.

멘토링 세션은 어느 쪽이든 끝낼 수 있어요. 학생이고 특정 멘토가 취하는 접근 방식이 마음에 들지 않는다면, 언제든 다른 접근 방식을 요청하거나 세션을 떠나기로 선택할 수 있어요. 멘토링 세션이 어떻게 끝나든, 학생은 같은 풀이에 대해 다른 멘토와 새로운 멘토링 세션을 요청할 수 있어요.

멘토링 슬롯

각 트랙마다 1개에서 4개의 멘토링 슬롯을 가질 수 있어요. 멘토링 슬롯을 여러 개 두면, 빠르게 멘토링을 받기 어려운 어려운 문제에 대해 멘토링을 요청하면서도 동시에 다른 문제에 대한 멘토링을 받을 수 있어서 도움이 돼요.

멘토링 슬롯은 평판을 쌓으면 잠금 해제할 수 있어요. 평판은 자신의 풀이를 모두가 볼 수 있도록 게시하거나, 학생을 멘토링하거나, Exercism의 어떤 저장소든 기여하면 주어져요. 즉, 플랫폼에 더 많이 기여하는 학생이 더 많은 멘토링을 받을 수 있다는 뜻이에요.

정리

지금까지 2021년 9월 1일 Exercism이 달라진 주요 변화 몇 가지를 살펴봤어요.

플랫폼을 떠나지 않고도 배울 수 있도록 학습 문제를, 아무것도 설치하지 않고도 코딩할 수 있도록 웹 에디터를, 곧바로 자동 피드백을 받을 수 있도록 애널라이저와 리프레젠터를 추가했어요. 또한 멘토링 과정에서 답답하게 막던 요소들도 많이 없앴어요.

그리고 살펴볼 새로운 것들이 정말 많아요. 기여 섹션, 배지, 새로운 프로필, 전체 Exercism 활동 기록을 담은 여정 페이지 등등이요.

exercism.org에 와서 한번 해봐요.

감사해요.

2021년 09월 11일 · 유용했나요?