2020년 8월12일 부터 9월 2일까지 건국대학교 WE人교육센터와 소프트스퀘어드에서 주관하는 온라인 몰입형 코딩 교육: 야, 너두 코딩을 수강하게되었습니다.

 

 기존에도 학교의 좋은 교수님들과 다양한 과목들에 대해서 배울 수 있는 기회는 많았습니다. 하지만 교수님 한 분께서  많은 학생들을 가르치시고 교수님들은 대부분 한 학기에 여러개의 수업을 맡으시기 때문에 일방적인 수업이 될 수 밖에 없었습니다. 그렇기 학기중 수업은 일방적인 이론 수업 혹은 실습과 과제를 수행하더라도 개념에 대한 확신을 가지기 어려운 경우가 많았습니다. 

 

 방학때 혼자 공부를 하더라도 이는 마찬가지 였습니다. 혼자서 책, 인터넷강의 등을 수강하고 개인적으로 프로젝트를 하더라도 점점 나아가면서 어렵고 복잡한 개념과 코딩에대한 확신을 가지기 어려웠습니다. 그러던 중 건국대학교 WE人교육센터와 소프트스퀘어드가 주관 하는 본 프로그램을 보게 되었습니다. 온라인 실시간강의와 튜터링, 매주 제시되는 과제와 그에 대한 피드백을 통해서 제 파이썬 실력을 향상시킬 수 있을 것이라는 생각이 들었기 때문에 본 교육에 참여하게 되었습니다.

 

 

1,2주차 - 객체지향! 예제와 게임 제작을 통한 개념 정립과 활용

 파이썬의 기본문법들은 사전학습자료를 제공하고 일정 학습 기간을 주었기 때문에 첫 주차로는 객체지향개념에 대해서 배웠습니다. 비록 컴퓨터공학부의 학부생이긴 하지만 객체지향개념에 대해서 이론적으로만 배우고 하나의 메인함수에서 모든 프로그래밍 코드를 사용하는 것이 아직까지는 더 간단했기 때문에 직접 객체지향을 활용할 기회는 적었습니다. 하지만, 1주차에서 객체지향개념에 대해서 실시간 강의를 통해서 배우고 열가지의 다른 예제들을 통해서 객체지향에 대해서 실제적인 활용예시들을 풀어보면서 개념에 대한 확신을 할 수 있었습니다. 뿐 만 아니라 수업이외 실시간 튜터링도 진행하고 제출 이후 과제에 대한 피드백도 각자의 메일로 받아 볼 수 있기 때문에 비전공자분들도 대략적인 개념을 잡아 낼 수 있을것 이라 생각합니다.

 

 2주차에는 이전에 배운 객체지향개념에 대한 복습과 1주차 과제들 중 수강생이 뽑은 어려운 문제들을 실시간 강의에서 같이 풀어보는 시간을 가졌습니다. 이후, 객체지향이 직접 쓰이는 콘솔기반 게임예제를 통해서 객체지향에 대한 활용을 직접 알아봤습니다. 예제는 여러 몬스터, 영웅, 장면등의 클래스들이 만들어져 있었습니다. 그 중 몇개를 예시로 들자면 몬스터 - 버섯몬스터를 통해서 상속, 장면 - 영웅 과 같은 합성관계들을 통해서 객체지향이 왜 쓰이고 이를 통해서 프로그램과 코드 얼마나 효율으로 작동하는가를 볼 수 있었기 때문에 객체지향이라는 추상적인 개념을 활용을 통해서 눈으로 직접 확인해 볼 수 있었습니다.

 

 여기까지는 처음에는 다른 강의나 수업과는 다를것이 없다고 생각했습니다. 하지만, 개인 메일로 오는 피드백이 본 수업에 더 적극적으로 참여할 수 있는 하나의 계기이자 이 수업의 강점이었습니다. 앞서 말했던 혼자 혹은 일방적인 수업에서 오는 불확실함을 피드백을 통해서 해소 할 수 있었습니다. 어느 부분은 좋았고, 부족했으며, 잘못되었는지 코드 하나하나를 직접 보고 피드백을 받는 다는 느낌을 받았습니다. 

실제 피드백 중 일부를 발췌 했습니다. 

1주차 과제에 대한 피드백 입니다.

[Q2]
is_valid 메서드는 id 중복 검사만 허용하면 됩니다. 모든 서비스에서 pwd까지 중복 검사를 하는 경우는 없다고 보시면 됩니다. pwd까지 검사를 하기 위해 클래스 변수 user_id를 딕셔너리 형태로 쓰신 것으로 보이는데 문제 해결력은 좋아보입니다. 그러나 문제의 의도를 먼저 파악하는 것을 최우선으로 하시면 좋을 것 같습니다.
print('가입 가능 합니다.')는 없애주셔야 실행 예시와 동일하게 실행됩니다.

[Q6]
def 채굴(self): 에서 if, esif, 절에서 동일하게 반복되는
                    print(f'{광물}을(를) 채굴했습니다.')
                    print()
는 예시 답안 처럼 마지막에 한 번만 작성하면 코드의 중복을 최소화 할 수 있습니다.
존재하지 않는 광물에 대한 예외처리, 좋습니다.

 이와 같이 어떤 부분이 부족하였고 실제 서비스와도 관련된 조언과 방향성에 대해 피드백을 받아 볼 수 있었습니다. 뿐만 아니라 코딩을 하면서 좋은 부분까지 단순히 채점기준을 나누어서 정답, 오답을 나뉘어 채점되는 것이 아닌 저에게 도움이 되는 피드백을 받을 수 있었습니다. 

 

실제 피드백 중 일부를 발췌 했습니다. 

2주차 과제에 대한 피드백 입니다.

1) 객체지향

전반적으로 살폈을 때, 객체지향의 원칙에 맞게 잘 설계해주셨습니다. (상속, 클래스에 필요한 메소드 정의 등)
무기 class를 상속받은 class들의 경우, 마법사의 무기인지 전사의 무기인지에 따라 buff, heal 속성의 유무가 달라지는 것으로 보입니다. 그럴 경우에는 무기 자체의 공통된 속성은 무기 class에서 처리하여 상속받고, buff, heal 속성이 필요한 각 클래스에 속성을 추가하면 코드의 중복을 줄일 수 있을거라 판단됩니다. 

2) 코드 작성 및 설계
코드 중간 중간 주석을 써주신 것, 맨 마지막 부분에 테스트 케이스(전사, 마법사)를 직접 작성해 주신 것은 협업을 위한 좋은 프로세스입니다. 

3) 게임 서비스 측면
마을행동 추가, 레벨 설정, 버프/힐 등 다양한 속성 추가와 같은 디벨롭을 통해 단순 예제가 아닌 하나의 서비스(게임)를 구현하려고 하신 점이 좋습니다...

...이번 과제의 목표는 단순 예제가 아니라 '게임'을 직접 설계 / 구현 해봄으로써 객체지향의 원리를 깊게 이해하는 것입니다. OOO님은 이번 과제를 통해서 '객체지향'의 이점을 스스로 깨닫고 전반적인 이해도 또한 높히셨을 거라고 생각됩니다.

 2주차는 개념보다는 실제 활용을 과제로 수행했기 때문에 피드백을 통해서 직접 코드를 작성했을때 코드의 중복을 줄이는 방법, 협업에 있어서 좋은 습관 및 전체적인 총평까지 단순하게 문법을 배운는 것이 아닌 개발자로서 어떤방식의 프로그래밍을 해야하는지 방향을 잡아가고 배울수 있었습니다. 

 

3주차 - 쓰레드를 통한 프로그램에 생명력 부여

 3주차는 쓰레드에 대해서 배웠습니다. 쓰레드라는 개념을 쉽고 간단하게 배웠으며, 과제는 2주차때 사용했던 예제를 활용하여서 쓰레드 개념을 배웠습니다. 쓰레드를 통해서 하나의 프로세스에 여러가지 흐름을 넣어서 프로그램을 병렬적으로 실행 할 수 있게 해줍니다. 이를 통해서 프로그램의 효율성과 응답성 또한 향상시킬수 있습니다. 중요한 개념이지만 최대한 핵심적이고 실제 활용을 할 수 있을 만큼 배웠습니다. 실습 역시 이전 2주차에 만들었던 과제와 연계해서 다른 예시를 들지 않아도 매끄럽게 활용 할 수 있었습니다. 기존에는 하나의 프로그램 흐름으로 단순한 프로그램만 만들었다면 쓰레드 적용하나로 조금 더 다채로운 프로그램 흐름을 만들어낼 수 있었습니다. 

실제 피드백 중 일부를 발췌 했습니다. 

질문해주신 부분은, 쓰레드 코드의 위치로 인한 문제입니다.

버섯사냥터와 돼지사냥터의 def 입장 메소드를 보면,

        while self.몬스터.hp >0:
            thread = threading.Thread(target = self.몬스터.일반공격, args=(self.영웅,))
            thread.start()

while문 안에 thread를 매번 재생산해주고 있습니다.
그래서 공격을 하는 즉시 while문을 다시 타고 재생산된 thread로 인해 몬스터 -> 영웅 공격이 여러 번 진행됐던 것입니다.

    def 입장(self):
        thread = threading.Thread(target = self.몬스터.일반공격, args=(self.영웅,))
        thread.start()
        while self.몬스터.hp >0:

쓰레드를 while문 밖, def 입장 메소드를 타고 오는 즉시 한 번만 생산되게 해주시면 문제없이 잘 돌아가는 것을 확인할 수 있습니다.

 이와 같이 과제를 하면서 간단한 실수가 있었음에도 피드백과 질의응답을 통해서 해당 원인을 찾아 낼 수 있었습니다. 

 

4주차 - 빅데이터 분석과 Data Science 입문

 빅데이터와 Data Science라 하면 막연하게 고급기술이고 아직은 발을 들여놓기 어렵겠구나라고 생각했었습니다. 하지만 4주차 수업을 들으면서 그 생각을 조금 바꾸었습니다. 

 거창한 기술이나 개념없이 구글 스프레드시트와 Kaggle을 통해서 간단한 데이터 분석부터 어떤 부분을 시작하였는가에 대해서 입문 할 수 있었습니다. 물론 구글 스프레드시트만으로는 방대한 양의 데이터를 분석하고 실제 기술에 적용하기에는 당연히 어렵습니다. 하지만 막연한 두려움을 스프레드시트 와 Kaggle이라는 좋은 플랫폼을 통해서 빅데이터와 Data Science를 입문하고 무엇이 중요한지를 알아가기에는 좋은 시간이었다고 생각합니다.

 

 전체적으로 굉장히 만족스러웠던 수업이었습니다. 처음에는 흥미로운 주제와 실시간 수업 그리고 가장 만족스러웠던 자세한 피드백을 통해서 단순히 과제를 하는 것이 아닌 앞으로 개발자로서 무엇을 생각해야되고 협업 혹은 개발과정에서 하면 좋은 것들을 혼자였으면 미처 생각하지 못하고 깨닫지 못했을 것들을 배울수 있었습니다.

 새로운 기술과 개념들에 대한 간단한 활용들을 통해서 보는 눈을 넓힐 수도 있었습니다. 하지만 단순하게 기계적으로 과제를 수행하면서 무언가에 평가를 받는다는 마음가짐 보다는 자신이 하고싶은 기능을 구현해보고 많은 노력을 쏟는 다면 그만큼 좋은 피드백을 받게 되고 이를 통해서 많은 것을 얻어 갈 수 있다고 생각합니다. 학부생 혹은 코딩을 배워보고 싶은 비전공자들도 이 수업들을 통해서 일방적인 이론식 수업과는 다른 더 많은 것을 얻어 갈 수 있으리라 생각합니다. 

 

 

 

'파이썬' 카테고리의 다른 글

파이썬 자료구조 (Python Data Structure)  (0) 2020.09.03

파이썬 기본 자료구조 정리

 

  • 리스트(List)
list = [1,2,3,'a',[1,2]] 

mylist = [1,2,3]

 

 

-동반 메소드

append()

pop()

reverse()

sort()

  • 딕셔너리(Dictionary)
my_dict = {'key1':123,'key2':[12,23,33],'key3':['item0','item1','item2']}

 

 

-동반 메소드

keys()

values()

items() - 키와 벨류 값을 튜플형태로 묶어서 튜플의 리스트로 반환한다

 

  • 튜플(Tuples)
t = (1,2,3)

 

-동반 메소드

index() - 값의 인덱스값을 반환한다

count()

※튜플의 가장큰 특징은 불변하다는 것이다. 대입 혹은 메소드로 처음 선언된 값을 바 꿀수 없다.

  • 집합(Sets)
list = [1,1,2,2,3,4,5,6,1,1]


set(list1)

{1, 2, 3, 4, 5, 6}

 

-동반 메소드

add()

 

집합은 순서가 없으며 값들이 중복되지 않는다는 특징이 있다.

+ Recent posts