연습 문제 개선을 제안하기 전에 고려할 점
연습 문제에서 개선하고 싶은 점을 찾으셨군요. 먼저 관심을 가져 주시고, 시간을 내어 알려 주셔서 감사해요! 💙
연습 문제를 바꿀 때는 고려할 점이 몇 가지 있는데, 개념 연습 문제(실러버스에서 주제를 가르치는 문제)와 실습 연습 문제(나머지)에 따라 조금씩 달라요. 그 차이는 아래에서 다뤄요.
그런데 그 전에, 일반적으로 고려해야 할 점이 몇 가지 있어요.
연습 문제를 바꾸면 여러 가지 결과가 따라와요:
이런 이유들 때문에, 우리는 확실하고 뚜렷한 이점이 있을 때만 연습 문제를 바꾸려고 신중하게 판단해요.
연습 문제의 테스트 스위트는 가능한 모든 경우를 빠짐없이 다루는 것이 목표가 아니에요. 우리의 연습 문제는 프로덕션 소프트웨어가 아니고, 실제 사용 사례를 흉내 내도록 설계된 것도 아니에요. 단지 프로그래밍 언어에 능숙해지도록 돕는 장난감 같은 문제로 설계됐어요. 그래서 우리는 모든 엣지 케이스를 다루거나, 과도한 입력값 검증을 요구하거나, 그 밖의 실제 세계의 걱정거리를 끌어들이는 일을 의도적으로 피해요. 제안하신 개선이 엣지 케이스를 잡거나 입력값 검증을 확인하는 것이라면, 그 연습 문제에 상당한 차이를 만들지 않는 한 받아들여지기 어려워요.
개념 연습 문제는 단 하나의 목표로 설계됐어요: 개념을 가르치는 것이에요. 연습 문제에 대한 모든 변경은 무엇보다도 그 개념을 가르치는 데 도움이 되는지를 기준으로 검토돼요.
개념 연습 문제는 (특히) 테스트가 빠짐없이 모든 걸 다루도록 설계되지 않았어요. 또 학생이 아직 배우지 않은 개념을 쓰지 않도록, 혹은 학생이 부담을 느끼지 않도록 일부러 다소 인위적이거나 난해한 형태를 취하기도 해요.
제안하신 변경이 개념 학습에 방해가 될 수 있다면 아마 받아들여지지 않을 거예요. 그 변경이 학습을 더 쉽게 만든다면 적극적으로 검토해요. 그 중간쯤이라면 받아들여질 수는 있지만, 우선순위가 높아지기는 어려워요.
실습 연습 문제에 대해 가장 먼저 이해할 점은, 거의 대부분이 중앙 저장소(이른바 "Problem Specifications")에 있다는 거예요. 따라서 연습 문제를 바꾸면 모든 트랙에 연쇄적인 영향이 미쳐요. 즉, 좋은 변경은 모든 언어에 도움이 되니 그만큼 강력해요. 하지만 변경의 부담도 커져요. 변경이 받아들여지려면 여러 트랙 간 메인테이너의 동의가 필요하고, 그다음 각 언어의 메인테이너가 그 변경을 자기 트랙으로 내려받아 반영해야 하거든요.
연습 문제를 바꾸면 실러버스에서 그 문제가 연결된 개념이 흐릿해지거나, 문제를 풀기 위해 추가 기능이 필요해질 수 있고, 그러면 문제가 잠금 해제되는 위치도 달라져요. 이 점 역시 변경이 받아들여지기 전에 트랙 전반에 걸쳐 고려해야 해요.
일부 트랙에만 특정 테스트 케이스를 두는 방법도 있긴 하지만, 이런 분기는 메인테이너와 학생 모두에게 혼란을 줄 수 있어서 되도록 권하지 않아요. 그러니 실습 연습 문제에 변경을 제안할 때는 트랙 전체의 큰 그림을 함께 고려해 주세요.
제안을 받아들이지 않는 이유는 여러 가지지만, 사람들이 좋은 아이디어를 내서 실제로 받아들이는 경우도 아주 많아요!
또한 명확성을 더해 주는 문구 변경은 거의 언제나 환영해요. 특히 개념 연습 문제에서는요.
제안이 승인될 가능성을 높이려면, 다음 사항을 고려했다는 걸 보여 주면서 제안을 작성해 주세요:
그리고 의견은 의견으로, 사실은 사실로 표현해 주세요. 그래야 가장 생산적인 대화로 이어지기 쉬워요.
제안을 위해 시간을 내주시고 이 문서를 읽어 주셔서 다시 한번 감사해요!