SKN/Family AI camp 3기 회고록

SKN Family AI 3기 회고록 1주 차

coiljuice 2024. 7. 13. 08:23
  • 회고(Retrospective) 목적
회고는 우리가 진행하고 있는 방향을 점검하고, 이후 진행할 방향성을 확인하기 위함이다.
또한, 스스로 느꼈던 감정, 했던 일을 통해 Action Item에 대한 아이디어를 생각하는 것이다

 

  • 회고에 대한 마음가짐
    • 모두에서 이야기할까 말까? 하던 것을 회고를 통해 이야기를 하면서 개선하기
    • 이전 회고를 참고하여 현재 진행하는 프로젝트에 대한 생각과 감정을 정리하기
      • "특정 상황에 내가 어떤 감정이 들었는가?"라는 본인을 되돌아보고 그 당시 어떤 감정을 느꼈는지
      • 만약, 그 때에는 많이 힘들었다면 어떤 상황이 힘들었는지, 어떻게 했으면 달라졌는지
      • 문제가 되었던 부분을 비판적으로 분석하고, 어떻게 개선할  수 있는지 
    • 제시되었던 아이디어, 내가 가진 아이디어에 대해 열린 시선으로 바라보기
    • 수동적으로(하라고 해서 한다) 하는 것은 좋지 않으니 적극적으로 하기
    • 가장 중요한 것으로 회고를 꾸준히 하기

 


 

SKN Family AI 3기 회고록 1주 차 (5F 회고 방법론)

  • Facts : 사실. 무슨 일이 있었는가?
날짜 Facts 참조
07.08 1. 개발 공부에 관한 마음가짐 (가장 중요한 건 능동적인 학습)
2. 시스템 환경설정하는 방법과 필요한 CMD 명령어를 학습
3. VScode의 프로그램에 대한 설명과 가상환경 생성 방법을 학습
4. Git/Gihub와 Docker의 설치 및 환경 설정을 진행
 
07.09 1. VScode의 가상환경 생성방법의 복습
2. 파이썬 기본 문법과 자료구조에 대해 학습
    (자료형, 이스케이프 코드, 인덱싱, 슬라이싱, 포메팅, 함수)
아침 루틴

1. 가상환경 만들기

2. pip 업그레이드
3. pip로 주피터 다운로드
4. select kernel로 .venv 연결
07.10 1. 이전에 설치한 Git/Github, Docker의 버전 및 설정 재확인
2. 리스트의 생성, 수정, 삭제, 함수를 학습
3. 튜플의 생성 및 리스트와의 공통점과 차이점 학습
4. 딕셔너리의 생성, 수정, 삭제, 조건조회, 함수를 학습
5. 집합의 생성, 수정, 삭제, 연산(함수)을 학습
6. 불리언(boolean)으로 자료형 별 참/거짓 판별 학습
 
07.11 1. if문 / if-else / if문의 comprehension 학습
2. for문 / for-else / for문의 comprehension 학습
3. while문 / while-break문 학습
4. Exception(오류)의 종류 학습
5. assert - except - else 문 학습
6. 연습문제(소수 구분, up&down) 풀이
 
07.12 1. def 함수 정의 방법 학습
2. 07.11에 한 연습문제를 def로 구현하기
3. 변수 사용범위(Scope)을 학습
4. 함수의 입력 변수(가변파라미터)를 학습
5. lambda에 대해 학습 및 간단한 def 함수를 lambda로 변환
 

 

  • Feeling : 느낀 점, 감정. 어떤 느낌이 들었는가?
    • 첫 시간에 여러 프로그램을 설치하는 부분에서 상세하게 알려주신 것이 매우 좋았음
    • 전반적인 학습 방향을 설명하시면서 어떤 언어가 어떤 부분에서 잘 사용되는지 이해하기 쉬웠음
    • 공부도 해야하고 동기들과도 잘 지내야겠지만 나한테도 주변사람들에게도 폐를 끼치지는 말자

 

  • Finding : 배운 점, 인사이트. 어떤 것을 기억하고 싶은가?
    • 너무 복잡하게 생각하니 코드도 복잡해진다
      • 처음엔 단순하게 작성하고 거기서 조금씩 더해가면서 코드를 완성시켜 나가자
    • 코드 패턴이나 알고리즘 퀴즈의 설계가 잘되지 않는다고 스트레스받지 말자
      • 현직자도 코드를 처음 빌드업하는 시간보다 수정하는 시간이 더 오래 걸린다.
      • 알고리즘 퀴즈는 현업에서 사용하지 않는 어려운 패턴이 많다.
      • 코드를 접하는 것도, 퀴즈를 푸는 것도 조금은 여유를 갖고 하고 너무 풀 죽을 필요는 없다.
      • 그렇다고 너무 풀리지는 말자
    • 처음부터 완벽한 코드를 짤 수 없다, 다소 오래 걸리더라도 끝까지 풀어보자

 

  • Future Action : 향후 액션 아이템. 앞으로 무엇을 할 것인지?
    • 공부는 체력이다.
      • 체력이 있어야 집중력도 이어진다. 그러니 가벼운 운동이어도 좋으니 하루에 시간을 내어서 하자
      • 공부는 습관이다. 따라서 운동 100일을 채워서 공부도 하고 체력도 키워보자
    • 향후 진도는 빠르게 진행될 것이다. 따라서 관련 지식을 미리 채워두자
      • 첫 주의 진도 속도는 다소 느슨한 부분이 있었지만, 다음 주부터는 조금 빠르게 달린다고 강사님께서도 강조를 하셨으니, 예습을 통해 빠르게 따라갈 수 있는 길을 미리 만들어 두자
    • 아직 코딩를 잘한다는 느낌이 어떤 건지 알 수 없으니, 경력 있거나 SW전공인 동기들 중에서 잘한 거 같다고 느끼는 코드와 내 코드를 비교하면서 분석해 보자

 

  • Feedback : 피드백. Future Action에서 정한 액션 아이템을 실행하고 어떤 피드백을 받았는가?
    • 오류 노트 따로 만들어서 보관하자
      • 모으다보면 어떤 부분이 부족한지 알 수 있다.
      • 어느순간 실수가 뜸하다가도 똑같은 실수를 하니 작성하는 것이 매우매우 중요
    • 아직 첫 주라 구체적인 피드백은 없으나, 현재까지는 순항 중

 


 

동기들과 코드 비교

내가 가진 문제를 인식하는 것과 잘하는 코드를 보면서 어떤 구조인지 눈에 익히기 위함이지,
절대로 비교하면서 풀죽으면 안됨!! 저 수준을 향해 나아가자는 목표 의식을 가지자.

 

  • 소수 구분하는 문제
    • 내가 짠 코드
value = input()
try:
    int_v = int(value)
except:
    print("Math Error")
    quit()

if int_v > 0:
    pass
elif int_v == 0:
    print("입력한 수는 0으로 자연수가 아닙니다.")
elif int_v <0:
    print("입력한 수는 음수로 소수도 자연수도 아닙니다.")

type_num = []
int_type_num = []

sqrt_v = int_v**0.5
int_sqrt_v = int(sqrt_v)

for i in range(2, int_sqrt_v+1):
    type_num.append(int_v/i)
    int_type_num.append(int(int_v/i))

judge = [bool(type_num[j] == int_type_num[j]) for j in range(len(type_num))]

if True in judge:
    print("입력한 숫자는 합성수입니다.")
else:
    print("입력한 숫자는 소수입니다.")
    

# 너무 복잡하게 생각함 => 단순하게 생각해보자

 

    • 동기들이 짠 코드 중 하나
try: # 강사님 답변(정답은 아님 이런표현이 있구나 정도로 넘어가자)
    answer = input()
    answer = int(answer)
    assert answer >= 2

    for i in range(2, answer):
        if answer%i == 0:
            print("합성수입니다.")
            break
    else:
        print("소수입니다.")

except:
    print("math error")

 

  • up&down 문제
    • 내가 짠 코드
# up&down 숫자 맞추기

import random

PC = int(random.random()*100)

answer = int(input("1~100 중 고르세요"))

assert 0<answer<=100, "범위에서 벗어난 값입니다."

for i in range(100):
    if answer > PC:
        print(answer, "Down")
        answer = int(input("1~100 중 고르세요"))
    elif answer < PC:
        print(answer, "Up")
        answer = int(input("1~100 중 고르세요"))
    elif answer == PC:
        print(answer, "Correct!!")
        break

 

    • 동기들이 짠 코드 중 하나
import random
import time

def start_game():
    for i in range(3, 0, -1):
        print(f"{i}초 후 게임이 시작됩니다.")
        time.sleep(1)

    print("빠라라삐라비라~")
    time.sleep(2)
    print("로봇이 숫자를 지정했습니다. 6회안에 맞추세요")

def do_game():
    randint = random.randint(1, 100)
    count = 1
    # 랜덤값과 입력값이 같을 때까지 반복
    while count < 7:
        print(f"<< {count}회차 >>")
        try:
            input_number = get_number()
        except:
            print("1~100 사이의 숫자를 입력하시라고요.")
            continue
        else:
            if check_number(input_number, randint, count) == True:
                break
            count += 1
    else:
        print("아쉽네요. 6회안에 맞추지 못했습니다. ㅠㅠ")
        print(f"정답은 {randint}이었습니다. z")

def get_number():
    input_number = input("숫자를 입력하세요: ")
    assert input_number.isnumeric() == True and 1 <= int(input_number) <= 100
    input_number = int(input_number)
    return input_number

def check_number(num, randint, count):
    # 입력값이 랜덤값보다 작으면 up
    if num < randint and count < 6:
        switchControl1 = random.randint(1, 3)
        switch = {
            1: "조금 더 올려보세요",
            2: "팍팍 좀 올려보세요",
            3: "저 믿고 5만 올려보세요",
        }
        print(switch[switchControl1])

    # 입력값이 랜덤값보다 크면 down
    elif num > randint and count < 6:  # 7,
        switchControl2 = random.randint(1, 3)
        switch = {
            1: "이거 좀만 내리면 될 거 같은데",
            2: "조금 내려보실래요?",
            3: "이거 좀 내려야 할 듯?",
        }
        print(switch[switchControl2])

    elif num == randint:
        print("정답입니다~~")
        print("\\n게임 종료~")
        return True

start_game()
do_game()

 

  • 의견 교류
    1. 처음부터 잘하는 사람은 없다.
      • 중간 중간 빼먹는 파트나 필요해서 넣는 부분 등 그때그때 넣으면 되니 가벼운 마음으로 코딩하기
      • 코드 실행 시 발생하는 오류는 대부분 문법오류인데 이런 오류를 최소화 하는게 실력이다.
      • 오류 코드 발생하면 오류 노트 달아서 계속 갱신해주자
    2. 자신만의 코드 짜임새에 익숙해지면 실력은 금방 늘어난다.
      • def 함수를 써야할지, 일반 코드로 짜야할지, 다른 import 가지고 올지는 개인의 선택이다.
    3. 계속해서 다른 사람의 코드를 보고, 어떤 구조인지 파악하다 보면 다른 문법도 자연스럽게 사용할 수 있게 된다.
      • 실력 향상은 마치 토익처럼 올라간다
      • 어느 순간 깨닫는 순간이 온다 그렇지만 공부를 꾸준히 하지 않으면 영원히 안온다.
      • 공부도 습관이다
    4. 코딩엔 정답이 없지만 "최소한 이 정도는 해줘야 한다"는 있다.
      • 본인의 실력에 최대와 최소가 있다면 최소는 맞춰야 한다.

 


 

작성자도 비전공자이고 전공에서 뛰는 사람들보단 늦었을지도 모르지만, 지금이라도 포기하지 않고 끝까지 해낸다면 한 사람의 개발자로 성장할 수 있다고 믿고 공부 열심히 하고 있습니다.

 

SKN 부트캠프에서 만난 모든 분들과 함께 멋지게 수료하고 취업에도 성공하는 목표로 오늘도 열공합시다