Now Loading ...
-
🏛️ [CS50] Lecture 0 요약: 컴퓨터 과학과 프로그래밍의 예술
🏛️ [CS50] Lecture 0 요약: 컴퓨터 과학과 프로그래밍의 예술.
📋 강의 개요.
CS50이란?
하버드 대학교의 컴퓨터 과학 입문 강의.
컴퓨터 과학의 지적 기업과 프로그래밍의 예술을 다루는 수업
컴퓨터 과학의 지적 기업의 의미:
컴퓨터 과학은 인류가 함께 수행하는 거대한 지적 탐구이자, 학문적 모험이다.
수강생의 2/3가 컴퓨터 과학 경험이 전혀 없는 초보자들
핵심 철학
상대적 성장이 중요 :
다른 학생들과의 비교가 아닌, 자신의 시작점 대비 얼마나 성장했는지가 중요
불편함에 익숙해지기 :
새로운 것을 배울 때 불편함을 느끼는 것은 당연하며, 이를 받아들여야 함
일반적 사고 방식 :
컴퓨터 과학은 문제를 해결하는 범용적 사고 방식
🔢 정보의 표현.
이진법(Binary)의 이해
단진법(Unary)에서 이진법(Binary)으로
단진법(Unary) :
손가락으로 1, 2, 3, 4, 5까지 세는 방식
이진법(Binary) :
손가락의 위치(올림/내림)를 활용하면 최대 31까지 표현 가능
비트(Bit) :
Binary Digit의 줄임말
0 또는 1의 값을 가짐
이진법의 원리
10진법 기준:
- 123 = 100x1 + 10x2 + 1x3
- 각 자리는 10의 거듭제곱 (10⁰, 10¹, 10²)
이진법 기준:
- 101 = 4x1 + 2x0 + 1x1 = 5
- 각 자리는 2의 거듭제곱 (2⁰, 2¹, 2²)
바이트(Byte)와 정보량
1 바이트 = 8 비트
8비트로 표현 가능한 수: 0~255 (총 256가지)
컴퓨터는 전기의 유무(켜짐/꺼짐)로 이진법을 구현
📝 문자와 텍스트 표현
ASCII 코드 시스템
A = 65: 대문자 A는 이진법으로 65에 해당
ASCII: American Standard Code for Information Interchange
영어 알파벳과 기본 문자들을 숫자로 매핑
유니코드(Unicode)
ASCII의 한계: 8비트로는 영어 외 언어 표현에 부족
유니코드: 16, 24, 32비트까지 사용하여 전 세계 언어 지원
이모지: 유니코드 문자의 한 종류, 최대 40억 개 문자 표현 가능
이모지의 조합 원리
기본 이모지 + 수정자로 다양한 표현 생성
예: 👍 (기본) + 피부톤 수정자 = 다양한 피부톤의 엄지척
Zero-Width Joiner를 통해 여러 이모지 결합
🎨 멀티미디어 표현
색상 표현 (RGB)
RGB: Red, Green, Blue 값으로 색상 표현
각 색상은 0~255 값을 가짐 (1바이트)
예: (72, 73, 33) = 노란색 계열
이미지와 픽셀
픽셀: 화면의 각 점, 3바이트(RGB)로 색상 정보 저장
이미지 크기가 클수록 더 많은 픽셀과 용량 필요
음악과 비디오
음악: 음높이, 지속시간, 음량을 숫자로 표현
비디오: 초당 30프레임의 이미지를 빠르게 재생하여 동작 착시 효과
🔍 알고리즘과 문제 해결
문제 해결의 구조
입력(Input) → 알고리즘(Algorithm) → 출력(Output)
전화번호부 검색 알고리즘 비교
1. 선형 검색 (Linear Search)
첫 페이지부터 순차적으로 검색
최악의 경우: 1,000번의 시도 필요
시간복잡도: O(n)
2. 2페이지씩 검색
2페이지씩 넘기며 검색
최악의 경우: 500 + 1번의 시도
여전히 O(n)이지만 2배 빠름
3. 이분 탐색 (Binary Search)
중간을 찾아 반씩 제거하며 검색
최악의 경우: 약 10번의 시도 (log₂ 1000)
시간복잡도: O(log n) - 획기적 개선
효율성의 중요성
데이터가 2배 증가할 때:
선형 검색: 2배 더 오래 걸림
이분 탐색: 단 1번만 더 필요
💭 의사코드(Pseudocode)
전화번호부 검색 의사코드
1. 전화번호부를 집는다
2. 중간 페이지를 연다
3. 페이지를 본다
4. 만약 찾는 사람이 페이지에 있다면
5. 전화를 건다
6. 아니면 만약 찾는 사람이 앞쪽에 있다면
7. 왼쪽 절반의 중간을 연다
8. 3번으로 돌아간다
9. 아니면 만약 찾는 사람이 뒤쪽에 있다면
10. 오른쪽 절반의 중간을 연다
11. 3번으로 돌아간다
12. 아니면
13. 포기한다
프로그래밍의 기본 구성 요소
함수(Functions): 동작을 수행하는 기능
조건문(Conditionals): 분기를 만드는 if-else
불린 표현식(Boolean Expressions): 참/거짓 질문
루프(Loops): 반복 실행
🤖 인공지능 소개
전통적 프로그래밍의 한계
if student says "hello":
chatbot says "hello"
elif student says "goodbye":
chatbot says "goodbye"
elif student says "how are you":
chatbot says "I'm well"
# 모든 경우를 미리 프로그래밍해야 함
대규모 언어 모델(LLM)
입력: 인터넷의 모든 텍스트 데이터
학습: 언어 패턴을 통계적으로 학습
출력: 확률적으로 가장 적절한 응답 생성
CS50 AI (CS50 Duck)
CS50 전용 AI 튜터
답을 직접 주지 않고 학습을 유도
24시간 이용 가능한 개인 튜터 역할
🎮 Scratch 프로그래밍
Scratch 소개
MIT에서 개발한 시각적 프로그래밍 언어
드래그 앤 드롭으로 코드 작성
복잡한 문법 없이 프로그래밍 개념 학습
기본 프로그램: “Hello, World”
when green flag clicked
say [Hello, World]
상호작용 프로그램
when green flag clicked
ask [What's your name?] and wait
say (join [Hello, ] (answer))
함수와 추상화
추상화: 복잡한 구현을 숨기고 간단한 인터페이스 제공
사용자 정의 함수: 반복되는 코드를 함수로 만들어 재사용
예: 고양이 울음소리 함수
define meow (n) times
repeat (n)
play sound [meow]
wait (1) seconds
이벤트와 조건문
when green flag clicked
forever
if <touching [mouse-pointer]> then
play sound [meow]
🎯 핵심 개념 정리
프로그래밍의 4가지 기본 요소
함수(Functions): 특정 작업을 수행하는 코드 블록
조건문(Conditionals): 상황에 따른 분기 처리
루프(Loops): 반복 작업 수행
변수(Variables): 데이터 저장 및 관리
좋은 프로그램의 특징
정확성(Correctness): 의도한 대로 작동
효율성(Efficiency): 빠르고 자원을 적게 사용
가독성(Readability): 이해하기 쉬운 코드
프로그래밍 학습 접근법
점진적 개발: 한 번에 완성하지 말고 단계별로 구현
추상화 활용: 복잡한 부분을 함수로 분리
반복 개선: 동작하는 버전을 만든 후 개선
🚀 다음 단계
앞으로 배울 언어들
C: 저수준 프로그래밍 언어, 컴퓨터 구조 이해
Python: 데이터 과학, 웹 개발에 널리 사용
SQL: 데이터베이스 관리 언어
JavaScript: 웹 개발의 핵심 언어
학습 목표
특정 언어에 국한되지 않은 프로그래밍 사고력 배양
새로운 언어를 스스로 학습할 수 있는 능력 개발
문제 해결 능력과 논리적 사고력 향상
💡 마무리 메시지
컴퓨터 과학은 단순히 코딩을 배우는 것이 아니라, 체계적이고 논리적으로 문제를 해결하는 사고 방식을 기르는 것입니다. 이러한 사고력은 기술 분야뿐만 아니라 인문학, 사회과학, 자연과학 등 모든 분야에 적용될 수 있는 범용적 도구입니다.
불편함을 느끼는 것은 성장의 신호이며, 실수와 시행착오를 통해 배우는 과정이 바로 진정한 학습입니다.
Touch background to close