12월 26일 KT 에이블 스쿨 최종 합격을 하고 어느덧 한 달이 지난 1월 31일 KT 에이블스쿨 3기 Opening Day 행사로 교육 시작의 서막을 열었다. AI, DX 트랙을 모두 합쳐 700명이 넘는 합격자들 중 약 350명이 나와 같은 AI트랙 동기들이었다.
나와 같은 목적을 가진 사람들을 만나 설레이기도 하면서 한편으로는 350명 중 순위 안에 들어야 취업을 할 수 있겠다는 생각에 걱정이 앞섰다. 하지만 모두 교육을 들으러 온 에이블러들 이었기 때문에 경쟁보단 모두가 으쌰으쌰해서 서로 도우고 성공적으로 수료하자는 분위기가 강했다.
Opening Day, 1주차 강의부터 수료할 때 까지 블로그 글을 꾸준하게 적어볼까 한다.
자세한 내용은 접어두기 글을 확인하길 바란다.
Opening Day
Opening Day에는 KT 에이블 스쿨 관련 영상과, 1, 2기 선배 기수의 경험 공유 영상을 시청했다.
KT 에이블 스쿨 관련 영상에는 진행되는 커리큘럼 소개, 에이블 스쿨 코치들의 이야기, 에이블러들이 가장 관심 있어하는 것들 중 하나인 채용연계/취업지원 프로그램 소개로 구성되어 있었다. 영상의 결론은 '비전공자, 전공자 상관없이 배우는 교육 과정을 제대로 따라오면서 꺾이지 않는 마음으로 열심히하면 취업할 수 있다' 였다. 1, 2기 선배 기수들의 인터뷰 또한 '교육이 끝나고도 개인 학습시간을 가졌다', '중꺾마', 'KT 에이블 스쿨이 많은 도움이 되었다'가 주로 내용을 이루었다.
이후 반별 오리엔테이션을 진행했다. 반 마다 매니저님이 계시는데 교육 시작 전과 교육 끝나고 난 뒤 출석체크와 공지사항을 전달해주신다. 1주차 교육 안내와 AIVLE-EUD 홈페이지 이용 방법에 대해 설명해주셨다.
마지막으로 전문가님들의 특강이 있었는데 나름 들을만 했다.. 식곤증으로 조금 졸리긴 했지만 분명 도움이 되는 특강이었다.
1주차
GIT
GIT은 간단히 말해 버전관리 도구이다. 교육에 앞서 나는 대학교에서 진행했던 프로젝트에서 GIT으로 형상관리를 해본 적이 있어 친숙했다. 하지만 남에게 사용 설명법을 말할 정도의 지식은 가지고 있지 않아서 강의가 흥미로웠다. 강의를 들으면서 실습을 따라하기 바빠 기억나는대로 작성해보겠다..(못 알아봐도 이해부탁..)
실습으로 GIT에 로그인하고 Github에서 새로운 원격 저장소(new repository)를 만들고 원격 저장소 안에 새로운 텍스트 파일을 만들어 보았다. issue 탭에서는 버그, 오류, 개선 등 특정 인물에게 태그해서 글을 작성할 수 있는 기능이 있었다. 흡사 게시판과 같은 기능 같았다. 이후 vs code와 인증을 했다. vs code 인증 도중 id_rsa(비밀키)는 절대 아무에게도 공유해서는 안되고 id_rsa.pub(공개키)는 어디든 공유해도 된다고 한다.
수업 도중에 간간이 필기해둔 GIT기본 용어를 나만 알아 볼 수 있게 기록이니 무시해도된다..
- Head
1. Main -> 로컬 저장소의 위치
2. origin -> 깃허브(원격 저장소 즉, 서버)에 마지막으로 업로드 되어 있는 위치
- git graph 없이 head 위치 아는 방법
// vs code 터미널 창에서 (빠져나오기 q)
git log
- add
: 부분적인 파일만 commit하고 싶을 때 사용 (Stage Area에 저장되어 Stage Area 안에 파일만 commit함)
- GIT 버전 관리 장점
: head를 전 단계로 돌려보면서(이분탐색) 버그를 쉽고 빠르게 찾아낼 수 있음
- 마스터는 마지막으로 작업한 버전이 누구인지를 가리킨다
- 헤드는 working dir가 어떤 버전에서 유래 했는지를 가리킨다.
- 특정 버전으로 체크아웃한 상태로 push하면 그 버전으로 push가 되는가?
-> 안된다. 강제로 하는 방법이 있지만 제대로 알지 못한 상태로 하면 위험하다.
- pull = fetch + merge
- fetch
: 원격 저장소에서의 최근 작업물을 새로운 branch로 만들어 냄
- A, B 두 사람 중 A가 먼저 자신의 작업물을 push 하면 B는 바로 push 하지말고 pull을 먼저하고 push를 해야한다. 이후 A가 다시 작업을 시작하려면 시작 전에 pull을 먼저하고 작업을 해야한다.
- merge를 하면서 conflict가 발생하면 병합 편집기로 conflict가 발생한 부분을 직접 수정하고 merge해주면 해결된다.
Python 프로그래밍
본 강의에선 2일 동안 파이썬 아주 기초적인 문법을 다루었다. 주로 JAVA를 사용해왔던터라 정말 집중해서 강의에 임했다. 하지만 문법 형태만 조금 다를 뿐이지 JAVA랑 다를게 없어서 조금 지루했다. 오전에 이론 수업과 미니실습 몇 문제를 풀고 오후에는 백준 브론즈, 프로그래머스 1레벨 정도의 기초 문제를 풀었다. 둘째날에는 프로그래머스 2레벨 문제들도 있었다.
JAVA에서도 매번 헷갈리고 자신 없는 부분이 있다. 되돌아보면 아는 내용이라 대충 훑어보고 지나간 부분이 바로 그 부분이라는 걸 잘 알고 있었기 때문에 이번 강의에서는 그런 일이 없도록 처음부터 하나씩 짚어가며 수업을 들었다.
아래는 수업시간에 필기한 내용이다.
- 알고리즘
: 어떠한 문제를 해결하기 위해 정해 놓은 일련의 절차
- input
: 문자열 입력 받기
name = input(‘이름을 입력하시오: ’) ## 기본적으로 문자열 타입
print(f’안녕하세요? {name}님.‘) ## 문자열
print(f’안녕하세요? {int(num)}님.‘) ## 숫자(정수) / 형 변환 시켜야함
->또는 num = int(input(정수 입력: ))로 입력 받아 num 출력도 가능
name = input('이름을 입력하시오: ') ## 기본적으로 문자열 타입
num = intput('숫자를 입력하시오.: ')
print(f’안녕하세요? {name}님.‘) ## 문자열
print(f’안녕하세요? {int(num)}님.‘) ## 숫자(정수) / 형 변환 시켜야함
# ->또는 num = int(input(정수 입력: ))로 입력 받아 num 출력도 가능
print(f’안녕하세요? {name}님.‘)
print('안녕하세요? {}님.'.format(name))
print('안녕하세요?', name, '님.') ## 문자열 간 띄어쓰기 존재
print('안녕하세요?'+ name + '님.') ## 문자열 간 띄어쓰기 존재x
-------------------------------------------------------------
print(f’{i} +’, end=‘’)
# , end=‘’ -> 줄 바꿈이 안됨
-------------------------------------------------------------
print(f'{i * j:3}', end='') ## i*j를 3자리로 출력
print('{:3}'.format(i * j)) ## 위랑 같음
- 함수 만들기
def max(a, b, c):
메소드
return max_num
# 출력
# print(f’max3(3,2,1) = {max3(3,2,1)}’)
- 조건문과 분기
분기 : 프로그램의 실행 흐름을 다른 곳으로 변경하는 명령
if 조건문:
elif 조건문:
else:
- 반복문
# (1) while
while 조건문:
# (2) for
for i in range(1, n+1):
- range(5)
: 0 1 2 3 4
- range(1,5)
: 1 2 3 4
- for _ in range(5)
: for문을 5번 반복
while True:
: 무한 루프 (break 조건 필수)
- 자료구조
: 논리적인 관계로 이루어진 데이터 구성 / 데이터가 모여있는 구조
- List
: a = [1,2,3]
x = [None]*5 -> 크기가 5인 리스트 만들기
x.append(5) -> x 리스트에 5 추가
for i,name in enumerate(x): -> i에 인덱스 name에 값
for i in x: -> 리스트 값을 가져옴
- Tuple
: a = (1,2,3)
a = 1,2,3 의 형태
원소의 값을 변경할 수 없는 리스트 -> a[0] = 5 error
리스트가 쓸 수 있는 함수와 튜플이 쓸 수 있는 함수가 차이가 있음
- 검색 알고리즘
: 원하는 값을 가진 워소를 찾아내는 알고리즘
- 선형 검색(linear search)
: 맨 앞 인덱스부터 해당 값을 탐색
-보초법 (sentinel method) -> 선형검색 보완
: 리스트의 길이가 긴 경우 while문 안에 리스트 길이를 확인하여 break을 하는 if문을 하나 줄임으로써 더 효율적임
- 이진 검색(Binary search)
: 이진 검색은 리스트의 데이터가 오름차순이나 내림차순으로 정렬되어 있어야 적용 가능