한국의 Programming Bootcamp - 1/12주차
드디어 시작되었다. (능력있는) 좋은 개발자가 되겠다는 목표를 갖은 12명의 동기들이 Immersive-course 1기라는 이름으로 모였다. 서로의 어색함을 풀기 위한 간단한 Welcome-orientation을 시작으로 12주를 함께 할 Immersive가 시작되었다. 우리의 스케줄은 아래와 같다.
09:00 ~ 10:00 / Toy Problem / Data Structures, Algorithms 문제 풀기
10:00 ~ 12:30 / Lecture & Follow-up / Lecture Time & Pair Programming
12:30 ~ 13:30 / Lunch / 행복한 점심시간
13:30 ~ 17:30 / Lecture & Follow-up / Lecture Time & Pair Programming
17:30 ~ 18:30 / Dinner / 점심 먹은 지 얼마 안 되어 저녁
18:30 ~ 19:00 / Student Presentation / 학생의 개인주제 프레젠테이션
19:00 ~ 20:00 / Lecture & Follow-up / Lecture Time & Pair Programming
20:00 ~ …….. / ‘Time to go home’ or ‘Shut up and Keep Code’
그날그날에 따라서 Instructure의 Lecture, Feed-back Time, Programing 결과물에 대한 Show Case와 Code Review 등이 이루어진다. 하지만 대부분의 시작은 Pair Programming으로 2인 1조가 되어 학습과 코딩을 하는 시간이 이루어진다. 이러한 Pair Programming을 하다 보면 하루의 시간이 너무도 빨리 지나간다.
(누군가는 잘하면 효율적인, 못하면 가문의 원수가 되는 짝 프로그래밍이라고 이야기하지만) Pair Programming으로 서로 함께 하다 보면 생각보다 재미있는 것들이 많다. 한 사람은 내비게이터가 되어 솔루션이 나아갈 방향을 제시하고, 한 사람은 드라이버가 되어 네비게이터의 아이디어를 코드로 구현하게 된다. 내비게이터는 머리, 드라이버는 손이 되어 한 사람이 되어 그렇게 최적의 솔루션을 찾아간다. 그렇게 솔루션을 찾아가면서 서로의 아이디어를 주고받으며 더 나은 방향의 코딩을 하게 된다. 특히 새로운 것들을 배우다 보면 누군가는 이해를 빠르게 하기도 하고, 누군가는 이해를 천천히 하기도 한다. 이때 서로 질문과 답변, 그리고 그것들을 모색하는 과정에서 학습에 대한 이해도가 훨씬 높아진다. 특히 디버깅 시에는 Pair programming의 장점이 잘 드러난다. 학창 시절 수학문제를 풀면서 계산실수를 해본 적이 있는가? 나는 분명 제대로 풀었다고 생각을 했고, 검산까지 해보았지만 내 답은 어김없이 틀린적이 있을 것이다. 내가 타이핑한 코드를 보다 보면 어디를 실수했는지, 어떤 문법을 잘못 적었는지 잘 보이지 않는다. 하지만 옆에 있던 짝꿍이 ‘어!? 여기…’라는 말과 함께 손가락으로 가리킨 모니터 화면을 보면 어김없이 나의 실수가 드러난다.
나 혼자 하면 코딩을 했다면 나의 짝을 이해시킬 필요도 없을 것이고, 생각을 바로 타이핑할 수 있기 때문에 속도가 더 빠를지도 모른다. 하지만 우리가 이곳 프로그래밍 부트캠프에 와 있는 이유는 빨리가기 위해서가 아니라 멀리가기 위해서 이기 때문에, 우리는 Pair Programming을 통해 멀리 가는 법을 배우고 있다.
1주차에는 Immersive-Course 이전에 했던, Pre-Course에서 했었던 Underscore와 Recursion에 대해서 복습을 하고 Data Structure Sprint를 통해 Data Structure와 친해지는 시간을 가졌다. 코딩만 잘하면 되지, 무슨 이런 게 필요해라고 생각을 했었다. 하지만 이제 3주차가 막 지난 지금은 그 자료구조를 잘 이용하면 조금이라도 최적화된, 그리고 Time Complexity를 개선하기 위해 그 자료구조를 잘 이용하여 코드에 적용하면 훨씬 좋다는 것을 깨닫고 있다. 자료구조를 잘 몰라도 코딩을 할 수 있고, 솔루션을 찾을 수 있는 것은 분명하다. 내비게이션이 없어도 우리는 목적지를 잘 찾아갈 수 있다. 하지만 Data Structure라는 내비게이션을 통해 좀 더 최적화된 길을 찾아가면 더 좋지 않을까?
1. Linear Structure : 데이터가 연속적으로 연결되어 있는 구조
(1)리스트 : 노드의 포인터 부분을 이용하여 연결 구조. 데이터의 뒤 또는 앞뒤로 뒤 또는 앞뒤 노드의 위치정보를 갖고 있다. 줄줄이 묶인 영광굴비를 생각하면 쉬울 것이다. 변수에 정적영역을 할당하는 언어에서는 필요한 만큼 메모리를 확보하기 때문에 효율적인 메모리 관리가 가능하다. 하지만 자료의 탐색 등에 대해서 앞의 Node를 알아야 뒤의 Node를 찾을 수 있기 때문에 그만큼 비용이 발생한다.
(2)스택 : (입력)위에서 쌓고, (출력)위에서 꺼내어 쓰는 구조로 Last In, First Out이라고도 불린다.
(3)큐 : (입력)뒤로 넣고, (출력)앞에서 꺼내어 쓰는 구조로 Last In, Last Out으로 불린다. 은행 창구와 같이 먼저 온 사람(데이터)의 업무를 먼저 처리하고, 나중에 온 사람(데이터)의 업무를 순차적으로 처리하는 구조이다.
2. Nonlinear Structure : 데이터가 비연속적으로 연결되어 있는 구조
(1) 트리 : Node와 Branch를 이용하여 사이클을 이루지 않도록 구성
(2)그래프 : Node와 Branch를 이용하여 사이클을 이루도록 구성
3. Etc
(1)Hash Table : 키를 특정한 함수에 넣어 나온 인덱스 값에 데이터를 저장하는 방식이다.
자료구조에 대해서는 앞으로 프로그래밍을 하면서 계속 적용해보는 노력이 필요할 것 같다. 그리고 그 내용에 대해서도 확실히 알아야 할 것이다. (왜냐하면 나는 인터뷰도 보아야 하니깐!) 이제 막 12주 중 3주가 지났고, 앞으로도 9주가 남았다. 우리 코드스테이츠의 1기들이 무엇을 배울지, 그리고 어떻게 성장하게 될지 기대하시라. : )