나는 왜 CS를 공부하는가
•
컴퓨터와 관련된 얘기를 주고받는데 개발자들이 쓰는 말이 잘 이해가 되지 않았음.
•
구글링을 하며 블로그나 스택오버플로우를 찾아보는데, 거기 있는 말도 너무 어려움. 어떻게 접근해야하지..?
•
어떻게든 뭔가 만들긴 했는데, 이게 어떻게 동작하고, 어떻게 더 효율적으로 개선할 수 있을지에 대해 궁금하지만 기초 지식이 없어서 방법을 몰랐음…
추상화의 계층
•
이론 분야
◦
코드
◦
알고리즘
◦
문제, 계산 가능성
•
시스템 분야
◦
응용
◦
시스템 소프트웨어
◦
하드웨어, 디지털 논리
CS의 필요성
•
순수론
◦
상대적으로 짧은 시간 내에 놀랍도록 많은 것을 가능하게 한 사고의 체계를 쫓아가 봄으로써 나 자신도 논리적/체계적으로 사고하는 방식을 익히고 문제 해결 위주의 접근법을 체득할 수 있다.
◦
이후 컴퓨터 시스템 응용(웹 개발, 인공지능 활용, 데이터 모델링, …)에 있어 보다 깊이 있는 이해를 도모할 수 있는 체계적 바탕을 구성할 수 있다.
•
실용론
◦
컴퓨터 공학 기술적 토대 위에서 대화하고 이해하고 나의 생각을 표현할 수 있다.
◦
SW엔지니어라는 진로를 목표로 한다면, 이에 대한 어느 정도의 틀을 갖춰서 지식을 쌓아갈 수 있다.
구성
•
컴퓨터 구조 (아키텍처)
◦
하드웨어-소프트웨어 사이의 인터페이스 정의
◦
고수준 프로그래밍 언어 → 어셈블리 → 기계어의 번역 과정과 실행 모델
•
운영 체제 (OS)
◦
가상화의 시작 : 컴퓨터 하드웨어 자원의 효율적 활용
◦
정책 : 공평성, 효율석, 격리와 보호
•
데이터베이스 (DB)
◦
RDBMS의 원칙과 연산
◦
데이터 공유에 따른 문제와 해결책
◦
ORM의 이해와 DB 프로그래밍
◦
고차원 데이터베이스와 유사도 검색
•
네트워크
◦
물리적 연결부터 데이터의 표현까지
◦
OSI 7계층 모델과 프로토콜
◦
TCP/IP 네트워크의 운용
•
소프트웨어 공학
◦
소프트웨어는 개발이 곧 생산
◦
보다 좋은 소프트웨어를 생산하기 위한 프로세스, 마인드 셋
◦
코드 리뷰, 리팩토링과 클린 코드
◦
절차와 규정 vs 좋은 SW엔지니어
•
클라우드 컴퓨팅
◦
가상화와 자원 공유
◦
민첩성과 안정성의 동시 확보