ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메가테라 웹 개발자 과정 2주차 주간 회고
    주간 회고 2022. 5. 22. 00:01

     

    1주차 컴퓨터 견적 발표, 애플 M1 칩 분석 글 작성이 끝난 직후부터 본격적으로 프로그래밍을 익히는 과정이 시작되었다. 먼저 토요일, 일요일의 주말 동안 주어지는 백엔드 퀴즈와 공통 퀴즈들을 풀어보고 모르거나 정확하게 알고 있지 못한 개념들을 파악한 뒤, 주어지는 강의를 시청하면서 강의 내용을 이론 위주로 정리한 뒤 다시 문제를 푸는 과정을 반복했다. 월요일부터 목요일까지는 오전 9시부터 1시간 동안 주어지는 코딩 도장 문제들을 수행한 뒤, 일과시간 동안 주간 과제로 주어진 여러 단계의 코딩 과제들을 해결하는 과정을 거쳤다. 주간 과제는 매일 같은 문제를 새로 코드를 작성하며 해결해나가는 과정과, 작성한 소스코드들을 과제 제출 Repository에 Pull Request하여 트레이너분들의 리뷰를 받는 과정을 반복했다. 그 과정에서 문제를 푸는데 필요한 추가적인 프로그래밍에 필요한 개념들이나 구체적인 Class들, 해당 Class의 method 사용법 등을 여러 레퍼런스를 참고하여 학습해 나갔다. 금요일에는 코딩 도장의 문제보다는 난도가 다소 높은 문제들을 풀은 뒤, 백엔드 퀴즈의 습득 정도를 확인하는 메가 골든벨에 참여하고 일부 팀원 분들과 그룹을 이루어 주어지는 문제를 해결하는 페어 프로그래밍 시간을 가졌다.

     

    사실 이번 주에 배우는 내용의 80% 가량은 Java를 이용하여 프로그래밍의 가장 기초적인 수준의 기반을 다지는 주간이었기 때문에, 강의나 참고 자료에서 다루는 프로그래밍에 관련된 부분은 이전에 C나 C++ 같은 다른 프로그래밍 언어를 다루면서 익혔던 프로그래밍 언어들 간의 공통적인 개념들과 규칙들 같은 사전에 알고 있었던 기반 지식들을 Java에 맞게끔 응용하여 활용할 수 있었다. 그렇기에 퀴즈나 과제들의 난이도 자체는 일부 원론적인 개념을 정의하는 것들 외에는 대부분 어렵지 않았고, 과제를 처음 접한 월요일, 화요일에도 거의 대부분의 과제를 해결하여 제출할 수 있었다. 그렇게 Pull Request하여 제출한 과제들에 대해 트레이너 분들이 달아주시는 리뷰들을 확인했다.

     

     

    트레이너 분들의 리뷰들 중 하나를 발췌하였다.

     

    트레이너 분들의 리뷰들은 '이 정도의 논리면 과제의 요구사항은 충분히 맞췄겠지' 생각하고 있던 내게 그것들뿐만 아니라 그 이상을 생각해야 한다고 알려주는 것 같았다. 지금까지 나는 내가 작성하는 코드가 누군가에게 어떻게 읽힐 것인가를 크게 고민할 필요가 없었다. 부전공 때 들었던 컴공 강의들의 과제를 수행할 때에는 일단 과제의 요구사항을 맞추는데만 해도 많은 힘을 쏟아야 했고, 팀원들과의 협업을 필요로 하는 프로젝트 위주의 강의 같은 경우에는, 애초에 신청하지 않았었거나 참여했던 프로젝트에서도 코딩보다는 문서 작업 등 코딩 외적인 부분에 더 많은 기여를 했었기 때문에 사실 소스코드의 가독성을 어떻게 좋게 할 것인가와 같은 것들은 크게 신경쓸 부분이 아니었다. 그랬었기에, 무엇을 개선하고 고쳐나가야 할 것인지를 고민하면서 소스코드를 작성한 목요일에는 코딩하는 속도가 그 전 날들보다 상당히 더뎠다. 가장 난도가 높았던 적금 문제 풀기 과제는 목요일에는 다른 과제들의 가독성을 고민하느라 시간이 없어서 제출해내지 못할 정도였다. 하지만 좋은 가독성을 위해 고민한 소스코드를 이전의 소스코드와 비교했을 때 왜 읽기 좋은 소스코드를 쓸 수 있게 고민해야 하는지를 몸소 느낄 수 있었다. 다음의 두 코드블럭은 같은 과제에 대하여 월요일에 제출한 것과 목요일에 제출한 것을 비교한 것이다. 두 번째 코드블럭은 과제에 제시된 요구사항을 읽지 않고 소스코드 블럭만을 보더라도 주어진 변수나 숫자들이 어떤 목적으로 어떻게 이용될 것인지를 비교적 어렵지 않게 짐작할 수 있다.

     

    //제출한 과제들 중 월요일에 제출한 과제 일부 발췌
    
    import java.util.Scanner;
    
    public class Megaboard {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            int rentTime;
            String isParkedInZone = "";
            System.out.print("이용 시간(분): ");
            rentTime = scanner.nextInt();
            System.out.print("파킹존 주차여부: ");
            scanner.nextLine();      //next숫자() 이후 버퍼에 \n이 남아있으므로 반환 인자 없이 nextLine()을 한번 더 수행해 버퍼 비워주기
            isParkedInZone = scanner.nextLine();
    
            int basicFee = 1000, additionalFee = 150, totalFee;
            totalFee = basicFee + (additionalFee * rentTime);
            if (isParkedInZone.equals("O")) totalFee = totalFee - (totalFee / 10);
            if (isParkedInZone.equals("X")) totalFee = totalFee + 3000;
    
            System.out.println("요금: " + totalFee + " 원");
        }
    }
    //제출한 과제들 중 목요일에 제출한 과제 일부 발췌
    
    import java.util.Scanner;
    
    public class Megaboard {
        public static void main(String[] args) {
            //준비
            Scanner scanner = new Scanner(System.in);
    
            //입력
            System.out.print("이용시간(분): ");
    
            int rentalTime = scanner.nextInt();
    
            System.out.print("파킹존 주차여부: ");
    
            String parkedInLegalZone = scanner.next();
    
            //처리
            final int basicCharge = 1000;
            final int additionalChargePerMinute = 150;
            final double discountRate = 0.1;
            final int penaltyCharge = 3000;
            int totalCharge = basicCharge + (rentalTime * additionalChargePerMinute);
    
            if (parkedInLegalZone.equals("O")) {
                totalCharge -= totalCharge * discountRate;
            }
    
            if (parkedInLegalZone.equals("X")) {
                totalCharge += penaltyCharge;
            }
    
            //출력
            System.out.println("요금: " + totalCharge + " 원");
        }
    }

     

    한편 트레이너 분들의 조언을 받아들여 개선을 시도하고 개선 결과를 눈으로 확인할 수 있었던 부분들도 있었지만, 쉽게 받아들이기 어려웠던 부분들도 있었다. 특히 이번 주 페어 프로그래밍을 수행하면서 '강의에서 진행되었던 논리 전개를 그대로 인출해내는' 부분에 있어서는 글을 쓰는 지금 바로 전까지도 완전한 확신을 갖지 못했었다. '이 정도 요구사항의 결과를 만들어내는 것은 얼마든지 팀원 분들과 맞춰가면서 해낼 수 있는데, 과정의 유도까지도 왜 굳이 하나하나 다 따라해야 하는 거지?' 싶었다.

     

    그렇지만 앞으로 진행되게 될 백엔드 트레이닝 과정에서는 이번 주에 수행했던 내용들처럼 내가 아는 부분을 재정리하는 부분들도 있겠지만, 시간이 지날수록 처음 접하는 개념들이 많아지게 되고, 언젠가는 한 주에 접하는 거의 모든 것들을 접하는 그 순간에서야 처음 알게 되는 상황이 오게 될 것임은 자명하다. 지금 개념들을 어떻게 유도하는지에 대한 방식을 충분히 잘 익혀 스스로 그러한 방식을 자연스럽게 해낼 수 있을 정도가 된다면, 어려운 순간이 왔을 때 그때 연습했던 것들이 큰 힘이 되어줄 것이라 생각한다. 오늘부터 새로 주어지는 강의들에 대해서는 여전히 이미 충분히 알고 있는 개념들일 수 있을지언정, 그것들에 대한 생각을 유도하는 과정에 대한 충분한 인출 연습을 하면서 왜 이런 방식의 인출 연습을 해야 하는지 이해할 수 있도록 노력하는 것을 목표로 삼아보고자 한다.

     

     

     

    댓글

Designed by Tistory.