jc.jang

달랩 - 코딩 도장#8 후기 본문

개발/행사 후기

달랩 - 코딩 도장#8 후기

jangstory 2019. 12. 13. 10:39

달랩 - 코딩 도장

코딩 도장

코딩 도장은 2시간 동안 함께 간단한 문제를 풀면서 프로그래밍 스킬을 수련하는 행사이다. 규칙은 단 하나, 짝 프로그래밍을 하는 것이다.

 

짝 프로그래밍

코딩 도장에 참가하기전에 제대로 짝 프로그래밍을 해 본적이 없었다. 그래서 더욱 기대가 컸다. 내가 함께 문제를 푸는 사람에게 민폐가 되진 않을까 걱정도 했다. 하지만 그런 걱정은 짝 프로그래밍을 하면서 다 날아갔다.

우리는 프로그래머스의 다트 게임이라는 문제를 풀었다. 나는 이 문제를 푼 적이 있다. 하지만 어떻게 풀었는지 기억이 나지 않았고, 기억나더라도 다른 방법으로 풀면 될 것 같아서 이 문제를 풀기로 했다.

나는 sk님과 짝이 되었다. sk님은 스칼라 언어를 전파하셨고 내공이 있는 분 같았다. sk님의 아이디어로 시작하여 문제를 해결 할 수 있었다. 이 과정에서 몇가지 변화를 경험했다.

 

솔루션 코드 - https://github.com/dal-lab/coding-dojo/blob/master/dart-jjc-sk/dart_test.py

 

  • 기존에 테스트 하던 방식을 바꿨다.

input = '123'
output = True

def solution():
    return ""

def test_solution():
    assert solution(input) == output

부끄럽지만 원래 테스트 코드를 이렇게 작성했다. 이렇게 작성하면 test_solution 함수를 이용해 여러번의 테스트를 할 수가 없다. input 배열을 만들고 for loop를 반복하면서 테스트를 할 순 있지만 일종의 트릭이라 좋은 방법은 아니라고 생각한다. 나는 짝 프로그래밍을 하기 전까지 이게 문제인지도 몰랐다. 하지만 나의 짝이 아래와 같이 테스트 코드를 작성하라고 조언해주었다.


def solution():
    return ""

def test_solution():
    assert solution('123') == True

이렇게 작성하면 테스트를 추가할 때 assert solution('456') == False 이런 식으로 하면 된다. 더 간단해졌다.

 

  • 하나의 함수에서 한가지 기능만 하도록 구현했다.

우리가 이 문제를 풀 때 `다트 문자열을 토큰으로 변환 -> 토큰을 점수를 계산할 수 있는 형태로 변환 -> 각 게임에 대한 점수 계산 -> 점수 합계`의 순서로 풀었다. 짝이 워낙 잘하는 사람이라 내가 그 분의 의도를 100% 이해 할 순 없지만 문제를 풀 때는 아마 TDD를 적용해서 작성하신 것 같다. `테스트를 작성하여 실패하고 -> 가장 빨리 테스트를 통과하는 함수를 작성하고 -> 리팩토링하기` 의 순서로 진행 한 것 같다. 그리고 함수를 작성하다 여러 가지 기능을 할 것 같으면 먼저 테스트를 만들고 따로 함수를 만들면서 문제를 풀었다.

 

나는 보통 알고리즘 문제 풀 때 solution이라는 함수에 모든 코드를 작성하는데 함수를 쪼개서 작성하는 것도 좋다는 생각이 들었다. 단계별로 푸는 느낌이 든다.

 

  • 변수명, 함수명이 의도를 드러내도록 작성했다.

기능을 구현하는 것 만큼이나 변수명, 함수명을 짓는데 고민을 많이했다. 다트 게임에서 각 각의 게임을 저장하는 변수를 hits로, 점수 계산에 필요한 계수를 coefficient로 짓는 것을 보고 다시 한 번 주석 대신 의도를 드러낼 수 있는 코드를 작성하는게 중요하다는 생각이 들었다.

 

  • 일단 만들고 리팩토링을 했다.

처음에 만들 때는 문자열을 잘게 쪼개고 점수를 계산하려고 했는데 풀다보니 정규식을 사용하면 간단하게 해결 할 수 있다고 말을 했다. 문제 풀이에 정규식을 사용하긴 했는데 더 간단하게 풀 수 있어서 최종 제출 후 리팩토링을 했다.

 

 

아쉬운 점

내가 가진 Asus 노트북으로 짝 프로그래밍을 했는데 많은 개발자들이 맥을 쓰다보니 내 키보드에 익숙하지 않아서 타이핑하면서 불편함을 많이 느낀 것 같다. 윈도우는 커맨드키가 없다. (어서 빨리 맥을 주는 회사에 입사해야겠다!)

 

짝이 대단한 내공의 소유자라서 단번에 풀이 방법을 제시하고 이에 따라 개발을 진행했다. 나도 뭔가 풀이 방법에 보탬이 되고 싶었는데 단번에 풀이 방법을 생각해내셔서 이에 동의하고 진행했다. 조금 지나고 나니 정규식을 이용한 간단한 풀이 방법도 있었는데... 라는 생각이 들었다. 앞으론 '더 간단한 방법으로 풀 수 없을까?'하고 잠깐 돌아 볼 필요가 있을 것 같다.

 

처음 문제풀이 생각하는 시간이 지나고 대화를 많이 하지 못했다. 풀이 방법을 생각하고 5분씩 번갈아가면서 코드를 작성하다보니 대화할 타이밍이 참 애매했다. 5분 코딩하고 -> 대화하고 -> 5분 코딩하고 이런식으로 했어야됐나 싶다.

 

요약

평소에도 알고리즘 문제를 풀었지만 누군가와 처음부터 고민하면서 푼 적은 없었다. 게다가 바로 짝 프로그래밍까지 하니 뇌를 100% 쓰는 기분이 들었다. 5분씩 번갈아가며 코드를 작성하는게 게임하는 것 처럼 재밌었고 여태껏 했던 가장 역동적인 프로그래밍이었다.

 

 

Comments