저는 CS를 주먹구구식(?)으로 공부했었습니다. 어떤 것이 중요한지, 어디서부터 시작해야 할지 모르니 일단 iOS 개발을 하다 처음 보는 단어가 나오면 검색해 보며 그때그때 공부했었죠. 어찌 보면 필요에 의한 것이었기 때문에 호기심 있게 공부할 수 있었습니다. 그러나 반대로 말하면 필요가 충족되면 깊게 파고드는 것보다는 다음 문제를 찾아 나서곤 했죠.
딥다이브를 하지 않고 넘어가다보니 CS는 얕게만 쌓여갔습니다. 본질을 이해하지 못한 채 쌓여간 지식들은 금세 휘발되기도 했습니다. 그러다 기술 면접에서 그 결과가 그대로 드러났습니다. 분명 알고 있는 키워드임에도 설명하려다 보니 말문이 턱 막히게 되었죠. 이대로는 안 되겠구나 싶었습니다. iOS 개발 지식도 중요하지만, 스스로 개발자라고 불리고 싶다면 기본기부터 차근차근 쌓아나가야 함을 느꼈습니다.
그렇게 모두를 위한 컴퓨터 과학 CS50 2019 강의를 찾았습니다. 네이버 부스트코스에서 제공하는 무료 강의로 하버드 대학교의 David J. Malan 교수의 컴퓨터 과학 입문 강좌를 녹화 + 정리하는 방식이었습니다. CS에 대해 전혀 모르는 수준이었기 때문에 입문 강의로 시작하기에 적격이었던 것 같습니다.
강의 후기
한 마디로 강의 후기를 표현하자면, 'CS를 공부하기 위한 최고의 준비물'이었습니다. OT에 기재된 내용처럼 CS에 대해 전혀 몰라도, 말 그대로 모두를 위한 강의였습니다. 컴퓨터가 돌아가는 방식, 왜 그렇게 동작하는지에 대한 맥락, 점진적으로 올라가는 학습 난이도 등 정말 알차고 재미있게 들을 수 있었습니다.
무엇보다 David J. Malan 교수의 맛깔난 설명과 실제 사물을 활용한 설명은 자칫 재미없어질 수 있는 강의에 활력을 불어넣었습니다.(역시 하버드의 수업은 엄청나다! 라고 느꼈던 것 같습니다) 매 수업마다 준비된 완성도 높은 교육을 집에서 편하게, 그것도 무료로 들을 수 있는 것에 감사했습니다.(번외로 학생들의 참여도, 거리낌 없이 던지는 질문 등은 학습 태도에 대해 반성할 수 있는 계기가 되기도 했습니다)
아직 CS에 대해 배워야 할 것들이 많지만 CS라는 학문이 어떻게 흘러가는지, 어떤 것을 공부해야 할지 명확히 알 수 있었습니다. Swift에서 당연히 사용하던 것들 뒤에 많은 개념들이 있고, 이를 하나씩 이해하고 넘어갈 수 있다면 개발자의 본질인 '문제 해결'에 더 가까워질 수 있음을 믿습니다.
CS에 대한 두려움으로 수강을 고민 중이시라면, 적극 추천드립니다! 😎
키워드 정리
- 알고리즘: 문제를 해결하는 단계적 접근
- ASCII / UNICODE
- 컴퓨터 과학 == 문제 해결 학문(Input -> Output)
- 트랜지스터
- 메모리 RAM(Random Access Memory)
- 1Byte = 8Bit
- 컴파일 단계(Preprocessing-Compiling-Assembling-Linking)
- 디버깅(러버덕 디버깅)
- 프로그래밍은 결국 추상화를 이용해 복잡한 기계어를 간단하게 처리하는 것
- IDE
- 선형 탐색 / 이진 탐색
- Big-O / Omega Ω / Theta Θ (Big-O와 Omega가 같을 때)
- 캡슐화
- 버블 정렬 / 선택 정렬 / 병합 정렬
- 재귀 Recursion
- 알고리즘을 만들 때 중요한 것은 정확하게 만드는 것 뿐 아니라 잘 설계하는 것
- 16진수
- 포인터(컴퓨터의 메모리 주소)
- malloc / free / realloc
- Memory Leak
- Buffer Overflow / Heap Overflow / Stack Overflow
- csv(comma separated value)
- 파일 시그니처
- 배열 / LinkedList
- 이진탐색트리
- 해시테이블
- 트라이
'CS' 카테고리의 다른 글
작지만 빠른 친구 캐시 알아보기 (0) | 2025.02.22 |
---|---|
CPU / RAM / Storage의 미묘한 삼각관계 (0) | 2025.02.21 |
Swift로 적어보는 버블 / 선택 / 병합 정렬 (0) | 2025.02.17 |
음악 플레이리스트에 Array와 List 중 어떤 걸 사용할까? (0) | 2025.02.12 |
책임과 역할, 비슷한 듯 다른 두 개념 (0) | 2025.02.03 |