1000 - 1230: 알고리즘 테스트 + 코드리뷰 및 발표
백준 문제 1110, 1182, 1992번을 풀었다. 문제 1110은 구현문제였다. 1110은 여러번 시도 후에 문제를 맞췄고 1182와 1992는 구현조차 하지 못했다.
깃허브에 푼 문제를 pr했다. 코드 발표 때 다른 사람들과 다르게 풀어서 내 코드가 비효율적인가 생각했는데 나를 담당한 리뷰어님은 접근법이 신선했다고 코멘트를 남겨주셨다.
혼자서 공부를 할 때는 피드백을 받기가 어려워 내 코드는 무조건 부족한 코드다라고 전제하고 다른 사람 코드가 정답이다라는 강박이 조금 있었는데 긍정적인 코멘트를 받으니 걱정이 덜어졌다.
코드를 짤 때 다른 사람들이 알아보기 쉽도록 변수명에 의미를 담아줬으면 좋겠다는 피드백을 받았다. 고쳐야겠다. 나도 내 코드를 다시보면 변수명이 명확하지 않아서 여러번 추적을 했던 기억이 있다. 다른 사람의 시간과 내 시간을 아끼기 위해 변수명들을 명확히하자.
피드백
- 코딩테스트는 시장에 진입하려는 개발자를 평가하기 위한 최소한이 기준이다. 영어의 토익, 토플과 같은 위상이다. 따라서 티켓을 얻기 위해 코테를 잘 봐야한다.
- 다음의 주제를 정리해야한다: 정렬, 선형자료구조의 탐색법(선형검색, 이진탐색, 해시법), 재귀알고리즘, 이진트리
- 알고리즘은 시간복잡도를 통해 평가한다. 입력값과 시간복잡도의 관계를 먼저 파악한 후에 어떤 알고리즘을 설계할 지 평가한다.
- 조합을 직접 구현할 수 있어야 한다.
1350 - 1430: 운영진 티타임(106호)
질문1: 코드리뷰는 어떻게 진행하는 것이 좋은가?
① 문제와 대응해서 입력과 출력형태가 제대로 나오는지 확인한다. ② 가독성이 있는지 확인한다. ③ 로직이 제대로 진행되는 지 확인한다. ④ 로직을 튜닝할 수 있는 지 확인한다.
조언: 개발에서 프로그램의 의미
아무리 설계가 잘 되어 있다고 하더라도 코드가 작동하지 않으면 프로그램이 아니다. 프로그램은 구동이 되어야만 프로그램으로서의 의미가 있다.
프로그램이 구동 되었다면 다른 사람들이 코드를 읽을 수 있는 지를 검토해야한다. 다른 사람이 읽을 수 있다면 미래의 나도 읽을 수 있다. 코드는 나만 보는 것이 아니다.
코드의 가독성을 확보했다면 사실상 일을 다했다. 하지만 실무에서 코드가 돌아갈 때 성능이 떨어지는 경우가 있다. 이때 코드를 튜닝해야한다. 코드를 튜닝한다는 것은 코드를 개선시켜 성능을 올리는 것이다.
즉, 구현 > 가독성 > 성능 순으로 프로그램을 만들고 발전시켜야한다.
질문2: 진로를 어떻게 정하셨는지
1) 하나를 깊게 파기 위해서는 다양한 분야를 경험할 수 밖에 없다. 결국에는 모든 과정을 해야한다. 방향을 정하기 보다는 순서가 달라질 뿐이다.
2) 진로를 정했다고 보기보다는 운명에 맡겼다. 내가 선택하는 것이 아니라 선택을 받는 것이다. 다만, 내가 그동안 어떻게 해왔냐에 따라 나한테 내밀어지는 선택지가 달라질 뿐이다. 결국에는 자기의 성향에 대응되는 길을 가게 된다.
1500 - 1630: 팀빌딩 및 1주일간 학습계획
주차가 바뀌면서 새로운 팀원들을 알아가는 시간을 가졌다. 향후 1주일간 어떻게 학습을 할 지 계획을 세웠다. 첫날에는 csapp 1장 나머지 부분과 연결리스트, 그리고 가능하면 트리까지 공부하기로 계획을 세웠다.
1645 - 1745: 운동
하체운동 중심
1900 - 2000: 채용설명회
팀스파르타에서 채용설명회를 진행하였다. 팀스파르타는 교육과 IT를 접목한 기업이다. 내부적으로는 살아남기 위해 많은 실험 프로덕트를 만들고 AB 테스트를 거치면서 검증을 하고 있다. 현재는 아웃소싱, 글로벌에듀테크와 그외 여러 가지 일을 진행하고 있다.
팀스파르타의 모토는 ‘누구든지 큰일을 할 수 있다’이다. 모토에 따라 교육사업을 진행하고 있다.
팀스파르타는 좋은 개발자란 문제를 풀고 자신의 해답에 대해 명확한 근거를 갖는 사람으로 보는 것 같았다. 직접적으로 명시하지는 않았지만 전달하고자하는 내용이라든지 채용절차에 대한 설명을 들었을 때 그러한 인상을 받았다.
채용절차는 ‘교육과정에 대한 태도’로 표현할 수 있다. 비전공자가 교육과정을 이수하면서 마주쳤던 내용에 대해 정확하고 깊게 이해하고 있는지 여부를 본다.
신입으로 채용되면 2주간의 온보딩 과정이 진행된다. 로그인, 회원가입, 세션 유지 등 프론트단부터 백단까지의 사이클을 경험하게 한다.
회사의 인재상은 ‘밥을 같이 먹고 싶은 사람’이다. 밥을 같이 먹고 싶은 사람이란 ① 성장하는 사람 ② 실패로부터 배우는 사람 ③ 비전이 있는 사람(바꾸려는 세상의 모습이 있는 사람) ④ 유쾌한 사람 이다.
팀스파르타의 기술적 챌린지는 현재 2갈래로 나뉜다. 프론트단의 경우 허드렛일을 많이 해야한다고 한다. 따라서 반복작업을 자동화하고 PM, 디자이너의 독립성을 강화하고 피그마 작업을 자동화 시키는 것이다. 백엔드의 경우 최근에 devOps를 도입했다. 따라서 실서버와 테스트서버, 그리고 내부 이슈를 해결하기 위한 인프라를 구축하는 것이 기술적 챌린지이다.
2200 - 2330: 코어타임
캐시 메모리
csapp의 1장의 나머지 부분을 학습했다. 캐시메모리의 구조에 대해 배웠다. 컴퓨터의 컴포넌트는 크게 cpu, memory, i/o bridge, usb controller, graphics adapter, disk controller 로 구성한다. 컴포넌트의 속도는 모두 다르다. cpu가 가장 빠르고 memory, disk 순으로 빠르다. 따라서 프로그램을 실행하면 가장 느린 컴포넌트에 맞춰서 실행된다. 고속도로에서의 병목현상처럼 말이다. 그동안 cpu와 memory는 빠르게 발전해왔다. 하지만 cpu의 발전속도가 memory의 발전속도보다 빨라서 속도 차를 줄이는 것이 중요했다. memory는 개발하는데 비용이 많이 들어서 중간계층으로 cache 메모리를 두는 방법이 고안이 되었다. cache 메모리는 데이터가 잠깐 머무르다가 가는 장소다. 자주 쓰는 데이터가 임시 저장되기 때문에 cpu는 자주 쓰는 데이터에 빠르게 접근할 수 있다.
프로세스, 쓰레드, 단일코어, 멀티코어
팀원분이 프로세스, 쓰레드, 단일코어, 멀티코어에 대한 개론을 설명해줬다. 프로세스는 메모리에 올려진 프로그램에 따라 실행되고 있는 컴퓨터의 동작이다. 쓰레드는 컴퓨터의 동작에서 실행 단위이다. cpu는 코어의 개수에 따라 단일코어와 멀티코어로 나뉜다. 코어는 cpu에서의 처리장치다.