ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메가테라 웹 개발자 과정 3주차 주간 회고
    주간 회고 2022. 5. 28. 14:55

     

     

    컴퓨터 견적을 짜던 게 엊그제 같이 느껴지는 느낌과는 달리 어느새 3주차 금요일이 마무리되었다. 20대 후반이 되면서부터 별달리 한 게 없는데도 시간이 부스터가 달려있는 것마냥 순식간에 지나가버리는 느낌이다. 눈 몇번 깜빡이는 잠깐 사이에도 몇 분이고 몇 시간이고 흘러가 있지만, 되려 그렇게 빨리 지나가버리는 시간 속에서도 이제는 얻은 것들을 잊지 않기 위해 한 주를 되돌아보는 글을 정리해본다.

     

    3주차가 시작되기 전 주말에 미리 봤던 3주차 강의들에서는 프로그램들을 만들어 보면서 프로그래밍에 사용되는 여러 개념들과 접근법에 대해 학습했다. 먼저 구구단 출력 프로그램을 만들면서 소스코드 구조에 빈번하게 쓰일 수 있는 반복문의 하나인 for 반복문에 대해 학습하였다. for 반복문을 통해 반복문이 수행되기 위해 필요한 개념들인 '초기값 지정, 조건 확인, 상태 변경'에 대해 살펴보고, 이를 소스코드에서 어떤 특정한 작업을 수행하기 위해 필요한 요소들이 모여 있도록 하는 개념인 '응집도'의 측면에서 for 반복문과 while 반복문을 비교하였다. 그리고 숫자 야구 게임 프로그램을 만들면서는 같은 타입의 여러 데이터들을 응집시켜 인덱스로 접근할 수 있도록 하는 배열에 대한 개념, Random method의 개념, 두 변수가 가진 값을 서로 바꿔주는 swap 개념에 대해 살펴보았다. 추가적으로 이번 주에는 지난 주에 계획했었던 강의의 내용을 인출해내는 방식의 학습을 시도해보기 위해 강의에서 문제를 해결하기 위해 어떤 과정을 거치는지에 대해서도 정리해 보았다.

     

    이번 주에 주어진 주간 과제들과 코딩 테스트 중 특히 숫자 야구 게임, 로마 숫자 변환 프로그램은 구조가 복잡하거나 한 번의 프로그램에서 여러 작업을 처리하는 과정을 구현해줘야 했기 때문에 선뜻 쉽게 손이 가지 않는 문제들이었다. 이전에 학교에서 프로그래밍을 배울 때에도 그런 어려운 문제들에 좌절했었던 기억이 많이 있었었기 때문에 월요일, 화요일에 강의들에서 문제를 해결하기 위해 어떻게 문제에 접근하는지를 주의깊게 살펴보았다. 강의에서는 먼저 문제의 요구사항들을 놓치는 부분이 없게끔 정리했고, 소스코드가 올바르게 작성되었을 경우 기대될 수 있는 출력값들을 기술했다. 그런 뒤 문제를 먼저 해결할 수 있는 작은 부분들부터 작성하면서 그렇게 작성했을 때 어떤 결과들이 도출되는지 확인했고, 도출된 결과값들이 보완되기 위해 어떤 부분들이 소스코드에 추가되어야 하는지를 고려하는 과정이 반복적으로 이루어졌다. 그리고 그 과정들이 마지막으로 끝났을 무렵에는 우리가 흔히 길고 복잡하다고 생각하는, 그렇지만 문제 해결을 위해 필요한 논리 구조가 갖춰져 있는 소스코드가 완성되어 있는 모습을 확인할 수 있었다.

     

    그렇게 수요일에 처음 문제풀이를 시도했던 숫자 야구 게임을 작성하는 과제를 수행하면서 나도 그런 과정들을 비슷하게 가져갈 수 있을지 한번 따라해 보았다. 강의에서 진행되었던 그대로 문제의 요구사항을 분석하고, 문제 해결 과정을 어떻게 풀어나가야 할지 작성했다.

     

     

    숫자 야구 게임 소스코드를 작성하기 전에 문제의 요구사항을 분석하고 어떻게 풀 것인지 과정을 미리 설계했던 내용을 발췌하였다.

     

    그러자 신기하게도 엄청나게 큰 덩어리로 보였던 하나의 큰 문제가 덜 어렵게 느껴지는 여러 작은 부분 문제로 나뉘어 있는 것처럼 보이기 시작했다. 처리 과정의 경우 구체적으로 요구사항을 분석하기 전에 문제만 봤을 때는 '스트라이크와 볼을 경우에 맞게 판정해주는 식으로 만들고 결과를 확인해본다'의 크고 복잡한 방식으로 보였던 것이 요구사항을 분석한 뒤에는 '먼저 스트라이크를 판정하고 결과가 맞는지 확인하고', '그 다음에 볼을 판정해서 또 결과가 맞는지 확인한 뒤에', '두 부분을 합치고 중복을 줄여주는 과정을 수행하면서 계속해서 결과를 확인한다'라는 여러 작은 덩어리들로 쪼개져 보여지면서 문제 해결을 위해 어디서부터 손을 대야 할지 보이기 시작했다. 그 흐름을 토대로 문제를 만들어 나갔고, 예상했던 것보다 훨씬 빠른 40분 뽀모도로 두 번만에 문제를 해결해낼 수 있었다. 이렇게 앞으로 주어질 수많은 어렵고 거대한 문제들을 풀어내는 방법의 한 가지를 캐치해냈다는 큰 성과를 이번 주에 이루어냈다고 생각한다.

     

    반면 이번 주에 미진한 성과를 보였던 부분도 있었다. 그것은 바로 지난 주부터 Java와 더불어 공통 강의로 주어졌던 Git, HTML, CSS를 배우고 정리하는 과정을 거의 수행하지 못했다는 점이었다. 비록 지난 몇 년과는 달리 그냥 흘려보낸 시간보다는 주어진 것들을 학습하고 회고하면서 내 것으로 만들기 위해 노력한 시간들이 훨씬 많았지만 그럼에도 주어진 시간 안에 해내야 하는 것들을 해내지 못한 데에서 오는 아쉬움은 짙게 남는다.

     

    그렇지만 어떻게든 해내야 하는 것들이기에, 먼저 기존에 세웠던 계획으로는 왜 그것들을 수행해내지 못했을까에 대한 부분들을 고민해보았다. 우선 1시간이라는 강의의 분량이 개인적으로 상당히 부담스럽게 느껴졌다. 그로 인해 다른 과제들도 해내야 할께 많은데 생각하면서 강의나 자료들에 선뜻 손이 가지 않았고, 그런 나날이 하루하루 흘러가면서 마침내는 한 주의 마지막에 오지 않았나 싶었다. 이번 주에 주어졌던 Java 주간 과제들의 커다란 하나의 문제를 여러 부분으로 잘게 나눠서 하나씩 해결했던 것처럼, 1시간짜리 거대한 한 덩어리의 강의도 그 안에서 세부 주제에 맞게끔 작은 부분으로 나눠서 강의를 듣고 배운 것들을 부분부분 정리해볼 수 있을 것이다. 글을 쓰는 오늘 토요일과 내일 일요일 동안 그 과정을 적용해보면서 본격적으로 다음 주가 시작되기 전에 마무리짓지 못한 것들을 어떻게든 마무리지어볼까 한다.

     

     

     

     

    댓글

Designed by Tistory.