2013년 11월 즈음 한 학생이 Ruby On Rails 스터디를 하자는 제안을 해왔다. 나는 NEXT에서 학생들과 함께한 자바 스터디 글에서 다루었듯이 이미 하나의 스터디를 하고 있었다. 또 하나의 스터디를 할 여력이 되지 않을 듯해서 약간 망설이다 "왜 스터디를 하려고 하느냐?"고 물어봤다. 그랬더니 돌아오는 답변이 나의 마음을 울렸다.

NEXT 동기 중의 한명이 지금 슬럼프에 빠져 헤어나오지 못하고 있어요. 학교도 거의 오지 않고 있어 어떻게 구제할까 고민하다가 스터디를 하자고 제안했는데 하겠다고 하더라고요. 1학기 소프트웨어 공학 수업(2013학년 1학기 소프트웨어 공학 수업을 마치면서...)을 할 때 즐거웠던 경험이 있어서 교수님이 같이 하시면 적극적으로 참여할거 같은데...

나는 이 말을 들고 도저히 거절할 수가 없었다. 단, 내가 여력이 없기 때문에 완전히 새로운 주제로 진행하는데는 한계가 있겠다는 생각이 들어 NEXT에서 학생들과 함께한 자바 스터디 에서 진행하고 있는 지뢰찾기 게임을 Ruby로 만들어 보자고 제안했다. 동기의 슬럼프를 극복해 주고 싶은 한 친구의 순수한 우정이 또 하나의 스터디를 진행하게 만들었다. 그 스터디가 이번 주 수요일 끝났다. 더 하고 싶은 마음은 있지만 새로운 학기를 진행하는 상황에서 도저히 내가 여력이 되지 않아 끝내는 것으로 했다. 추후 여력이 되면 다시 시작하는 것으로 아쉬움을 달랬다. 몇 달 동안 달려왔던 스터디 과정을 공유하려 한다.

스터디 진행 방식

스터디 진행 방식은 NEXT에서 학생들과 함께한 자바 스터디와 같았다. 1차 Ruby 스터디 전하고 싶었던 내용은 객체 지향 설계, 단위 테스트의 필요성과 테스트 주도 개발 방식, 리팩토링을 깊이 있게 경험할 수 있도록 하는 것이었다. 학생들이 만들고 싶은 소프트웨어를 하나 정한 후 단계적으로 만들어가면서 위 내용을 소화하는 것을 목표로 했다.

스터디 진행은 다음과 같이 진행했다.

매주 위와 같은 방식으로 진행했다. 1차 Ruby 스터디를 끝낸 후 Ruby On Rails(이하 RoR) 스터디를 다시 시작했다. RoR 스터디는 서비스 기획을 한 후 이 서비스를 단계적으로 완성하는 방식으로 진행했다.

Ruby 주차별 스터디 진행

  • 구현과 리팩토링을 분리해서 생각하는 것이 훨씬 더 명확하고 효율적이었다. 한번에 하나에 집중하는 연습이 된다.
  • 리팩토링하는 시점에 리팩토링만 집중하다보니 더 나은 해결책을 찾는 것에 명확해짐. 즉, 일단 구현해서 마음의 평정심을 가진 후 여유를 가지고 리팩토링을 하니 사고가 훨씬 더 열리게 되는 느낌이 들었다.
  • 위 코드를 리팩토링하면서 수업 시간에 배웠던 code block의 개념을 구체적으로 이해하는 것을 느꼈으며, 자바스크립트에서 배웠던 closure 개념을 위 예를 통해 학생들이 명확하게 이해하는 느낌이 들었다.
  • 여러 명이 같이 개발하다보니 이름을 정하는 것에 있어 좋은 이름을 찾을 수 있었다.
  • 활발한 논의를 하면서 구현하다보니 집중에서 구현하는 것을 경험했다.

 

 

학생 A

객체를 뽑아내는 고민을 하면서 이제 점점 객체지향적 사고방식을 점점 알아가는 것 같습니다. 정말로 신이 존재한다면 그도 이런 사고로 세상을 창조하지 않았을까요? 하지만 아직 수련이 부족하여 객체지향적인 사고에 자신감은 없네요. 

한편, 리팩토링을 할때 이전에 만들어 둔 테스트가 버텨주고 있으니 정말 든든하고 편했습니다. 테스트의 그린라이트를 볼때는 정말 뿌듯하고 진짜 공부를 한듯한 느낌을 받네요. 

학생 B
  • 지금 당장 눈앞에 있는 코드에서 벗어나 더욱 더 멀리, 넓게 볼 수 있는 프로그래밍적 관점을 배운 시간이였다. 
  • 특히 injection과 객체화에 대한 토론에서 많은 insight를 얻을 수 있었던것 같다.

injection을 논의할 때에는 지금까지 test코드를 바라보던 관점들인  '서비스코드와 실시간으로 상호작용을 할 수 있다, 에러처리가 빠르다. 소스코드 수정 및 리팩토링에 자신감을 줄 수 있다'는 것에서 발전시켜 코드설계나 객체지향의 시점을 알려주는 선각자가 된다는 것을 배웠다. (수업중에 논의되었던 '테스트코드가 복잡한건 실서비스 항목에서 리팩토링이 필요한 것이다'나, '테스트코드에서 중복되는건 객체화를 고민해볼 시기라는 것') 등과 같은 항목들이 인상깊엇다.

  • 현재 학교수업을 통해 여러 프로젝트를 진행하고 있지만, 루비스터디가 가장 즐겁다. 테스트코드와 todo list가 함께하기 때문인것 같다. 보통 다른 프로젝트의 경우 한번 시작하면 빠져들어 재밌게 코딩하지만, 한번 시작하기가 어렵다. 하지만 루비 스터디는 앞서 이야기 한것과 같이 테스트코드와 todo list덕분인지 코딩의 시작과 끝이 부담되지 않는것 같다.

스터디 중간 회고

Ruby 스터디가 끝났다. Ruby 스터디 시작은 나 + 학생 2명으로 시작했다. 스터디 진행 중에 같이 합류하고 싶다는 친구가 있어 나 + 학생 3명으로 진행하고 있었다. 모두 남자들만 모인 칙칙한 스터디였다. 그런데 RoR 스터디를 진행하는 시점에 여학생 한명이 합류하면서 스터디의 꽃이 되었다. 여학생이 합류하면서 스터디의 상당히 부드러워지면서 토론도 활발해진 느낌이 들었다. 여자의 힘을 다시 한번 느낄 수 있는 계기가 되었다.

스터디를 진행하는 중 NEXT 2기 신입생이 입학하게 되었다. 그런데 신입생 오리엔테이션 모임에서 이 스터디에 대한 소식을 들었다면서 같이 합류하고 싶다는 의사를 밝혀 또 다시 한명의 스터디원이 늘어났다. 3명으로 시작했던 스터디가 끝나는 시점에 6명이 되어 있었다.

같은 인원으로 스터디를 진행하는 것이 좋은 점도 있지만 일정 시점이 지나면 자극이 사라진다는 단점이 있다. 그런데 이 스터디의 경우 중간 중간에 새로운 팀원이 계속해서 합류하면서 스터디의 새로운 자극이 되었다. 학생들 서로 서로가 자극을 주면서 스터디를 활성화하는 계기가 되었다. 이 스터디의 경우 새로운 팀원이 합류될 때마다 그런 느낌을 강하게 받을 수 있었다.

Ruby on Rails 주차별 스터디 진행

RoR 스터디부터 스터디 내용을 분석하고 기록하고 싶은 마음이 들어 스터디 내용을 동영상으로 기록하고 정리하는 과정을 거쳤다. 스터디 내용을 기록하고 정리하는 작업은 학생 중의 한명이 담당했다. NEXT는 근로를 제공하고 그에 따르 장학금을 받는 제도가 있다. 한 친구에게 근로도 하면서 스터디까지 같이 진행하면서 배움을 만들어갈 수 있도록 했다. 이 때부터 스터디 내용이 좀 더 구체적으로 정리되어 있다.

 

  • 1주차에는 각자 갖고 있는 경험의 정도가 너무 달라서 잘 어우러져서 스터디를 할 수 있을까 걱정했지만, 생각보다 스터디가 잘 진행된 것 같다.
  • '왜 사용하나'를 아는 것이 단순히 '~한 용도로 쓰인다.'로 배우는 것 보다 좋은 것 같다.
    • RoR에서 guard 등을 왜 사용하나에 각목이 답함으로써 active record pattern을 알게 되고, 자바진영 패턴과의 비교를 자연스럽게 이해할 수 있었다. 각각 따로 배운다면 그 유기적인 관계를 이해하기 어려웠을 것 같다.
  •  라이브러리 사용에 대해서도 차이점이 나타나는 것 같다.
    • 위에서 말한 레일즈의 숙련도에 따라서 루비에 대한 관심이 나타난다.
    • 주디(덜 숙련된 사람)의 경우 
      • 아직 레일즈 자체에 관심이 많았기 때문에 우선 서비스가 돌아가는 것을 첫번째로 봤다.
      • 라이브러리를 사용해서 데이터 파싱에 따른 뷰를 빨리 보여주고 싶었다.
      • 데이터 파싱 기능을 하는 클래스를 만들 수 있겠다는 생각을 하긴 했었지만 우선 순위에서 뒤로 밀려있었다.
    • 각목(숙련된 사람)의 경우
      • 루비를 최대한 활용한 방향으로 코딩을 하였다.
    • 라이브러리에 대한 개인적인 생각이 다르기 때문에 라이브러리 사용에 차이점이 나타났을 수도 있을 것 같다.
      • Q. 라이브러리에 대한 생각은 숙련도에 따라 어떻게 달라질까?
  • RoR-3주차 - 추천음악 Parsing, 협업 환경 공유 : 지금까지 구현한 소스 코드의 중복을 제거하기 위해 구조를 어떻게 개선하는 것이 좋을 것인지에 대해 토론하고 설계안을 만드는 과정을 거쳤다. 학생들이 설계에 대한 아이디어를 내고 내가 이를 그림으로 그려 나가는 과정을 가졌다. 이 과정에서 설계한 내용을 바탕으로 다음 스터디 시간까지 구현해 오는 것이 과제로 제출되었다.
  • RoR-4주차 - 이슈 관리, 소스 코드 정제 : 앞의 설계에 대한 구현 코드를 리뷰하는 시간을 가졌다. 이 스터디에서 최대의 관심사는 이 설계에 대한 구현 리뷰도 있었지만 지난 주부터 새롭게 합류한 친구의 학습 과정을 듣는 시간이었다. 이 친구가 학습 과정을 공유하면서 다른 친구들에게도 많은 자극이 되었다. 특히 vi를 최고의 에디터로 활용하며, 손코딩을 즐겨하고, 문법과 API를 모두 외운다. 프로그래밍을 시작한지 1년도 되지 않는데 밖으로 보여지는 실력은 장난아니라는 느낌이 들었다. 기대되는 친구가 2기로 들어왔다. 내가 감당할 수 있을지 모르겠다.
  • RoR-5주차 - 테스트 및 마지막 스터디 : 정말 긴 시간을 지나 마지막 스터디까지 왔다. 이 날은 마지막 스터디인 만큼 지식을 전달하는데 집중하지 않았다. 단지 학생 발표 중 이슈 사항들에게 대해 꼬리에 꼬리를 무는 방식으로 질문을 지속했다. 그런데 이런 식의 학습이 상당히 흥미롭고 좋았다는 피드백이 있었다. 추후 수업 설계할 때 참고하면 좋겠다. 또 하나 흥미로웠던 활동은 교수들의 공개 뒷담화... 안 당한 사람은 모릅니다 에서 영감을 얻어 우리도 서로 간의 뒷담화를 해보기로 했다. 예상외로 반응은 폭발적이었다. 서로를 알아가고 신뢰를 쌓는 좋은 시간이었다. 마지막 스터디인 만큼 최종 회고를 하고 스터디를 마쳤다.

My 회고

이 스터디와 NEXT에서 학생들과 함께한 자바 스터디에서 다룬 자바 스터디 두 개를 진행하면서 경험한 나만의 느낌을 정리해 본다.

학생 회고

희열감을 맛보게 하기도 하고, 실망을 안겨주기도 했던 친구들. 그들이 스터디에서 느낀 점을 정리해 본다. 전체적으로 즐거움이 더 가득했던 스터디였다. 

학생들의 목소리를 생생하게 들을 수 있는 회고 내용도 들어보면 재미있다.

스터디를 하면서 가장 큰 배움을 얻은 시점은 언제였으며, 어떤 배움을 얻었는가?

더 좋은 스터디를 하기 위해 개선해야 할 부분은 무엇인가?

NEXT 수업을 우리가 진행한 Ruby & RoR 스터디와 같이 진행할 경우 적합한 부분과 우려되는 점은 무엇인가?

NEXT 수업과 Ruby & RoR 스터디에서 차이점이 있다면 무엇일까?

Ruby & RoR 스터디에 대한 전체 회고를 한다면...