시험 공부하다가 잠깐 쉬고 싶을 때, 용어가 왜 그렇게 불리는지·프로그래머들이 하는 농담을 읽어 보세요. 중학생도 이해할 수 있게 썼어요.
이 강의에서는 Human(주인공)과 Sands(샌즈)가 번갈아 화자가 되어 어원과 조크를 설명해요.
📖 용어 어원·유래
Bit (비트)
Binary(2진의) + digit(숫자 한 자리)를 줄여서 bit라고 불러요. 0과 1처럼 "이진수 한 칸"이란 뜻이에요.
Byte (바이트)
"한 입 베어 문 양"이란 뜻의 bite에서 왔어요. 나중에 bit와 철자가 비슷해서 헷갈리지 않도록 y를 써서 byte로 바꿨대요. "작은 단위의 데이터 한 덩어리"라는 느낌이에요.
Algorithm (알고리즘)
9세기 페르시아 수학자 알콰리즈미(Al-Khwarizmi) 이름에서 유래했어요. 그가 쓴 책에서 "단계별로 푸는 방법"이 유럽에 전해지면서, 그의 이름이 "알고리즘"이라는 말로 붙었대요.
Bug (버그)
원래 "벌레"라는 뜻이에요. 옛날 컴퓨터 안에 나방(moth)이 들어가서 고장이 났다는 이야기가 전해져요. 그레이스 호퍼라는 과학자가 그 나방을 테이프에 붙여 두었다는 기록이 있어서, "프로그램 오류 = 버그"라는 말이 퍼졌어요. (그 전에도 "bug"를 "결함"이라는 뜻으로 쓰던 적은 있어요.)
Stack (스택)
영어로 "stack"은 "쌓다, 더미"라는 뜻이에요. 접시를 쌓거나, 밀짚을 쌓아 둔 더미처럼 "맨 위에서만 넣고 뺄 수 있는 구조"라서 스택이라고 부르는 거예요.
Queue (큐)
영어 "queue"는 "줄, 꼬리"라는 뜻이에요. 프랑스어 "queue"(꼬리)에서 온 말이에요. 줄을 서면 맨 뒤가 "꼬리"가 되죠. 그래서 "줄 서기" 구조를 큐라고 해요.
Deque (덱)
Double-Ended Queue의 줄임말이에요. "양쪽 끝이 있는 큐" = 앞뒤로 넣고 뺄 수 있는 큐라는 뜻이에요.
Tree / Root (트리, 루트)
Tree는 "나무"예요. 맨 위에서 가지가 뻗어 내려가는 모양이 나무처럼 보여서 트리라고 부르고, 맨 위 시작점은 나무의 뿌리(root)라서 루트라고 해요.
Hash (해시)
영어 "hash"는 음식을 "잘게 썬다"는 뜻이에요(해시 브라운처럼). 데이터를 어떤 식으로 "잘게 잘라서" 고유한 번호처럼 만드는 함수라서 해시 함수, 그렇게 만든 값을 해시값이라고 부르는 거예요.
Cache (캐시)
프랑스어 "cacher"(카셰)는 "숨기다"라는 뜻이에요. 자주 쓰는 데이터를 "숨겨 둔 곳"에 두고 빨리 꺼내 쓰기 때문에 캐시라고 해요.
Graph (그래프)
그리스어 "graphein"(그라펜)은 "쓰다, 그리다"라는 뜻이에요. 수학에서는 점과 선으로 관계를 "그려서" 나타내니까 그래프라고 부르는 거예요. 차트 그래프와 자료구조 그래프는 "그린 그림"이라는 뜻에서 같아요.
List (리스트)
영어 "list"는 원래 "가장자리, 테두리"라는 뜻이에요. 옛날에는 이름을 "한 줄로 나열한 목록"처럼 테두리 안에 썼대요. 그래서 "순서 있는 나열"을 리스트라고 해요.
😄 프로그래밍 조크
한번 읽어 보시고, 이해되면 이미 프로그래머 마인드예요. Human과 Sands가 번갈아 말 걸 듯 읽어 보세요.
Q. 세상에는 10가지 종류의 사람이 있어요.
2진수를 아는 사람이랑, 모르는 사람. (10 in binary = 2 in decimal)
2진수를 아는 사람이랑, 모르는 사람. (10 in binary = 2 in decimal)
Q. 프로그래머들이 다크 모드를 좋아하는 이유는?
빛이 버그를 끌어당기거든요. (Light attracts bugs.)
빛이 버그를 끌어당기거든요. (Light attracts bugs.)
Q. 전구 하나 갈려면 프로그래머가 몇 명 필요해요?
영 명. 그건 하드웨어 문제예요.
영 명. 그건 하드웨어 문제예요.
Q. 디버깅이란?
n번째 버그를 잡으면 (n+1)번째 버그가 보이는 과정의 반복.
n번째 버그를 잡으면 (n+1)번째 버그가 보이는 과정의 반복.
Q. 왜 프로그래머는 raise(급여 인상)를 못 받을까요?
배열(arrays)만 받거든요. (a raise ↔ arrays 발음 비슷한 말장난)
배열(arrays)만 받거든요. (a raise ↔ arrays 발음 비슷한 말장난)
Q. 스택 오버플로우(Stack Overflow)가 뭐예요?
스택에 너무 많이 쌓아서 "넘쳤어요!" 하는 상태. 그 이름을 딴 질문·답변 사이트도 있어요.
스택에 너무 많이 쌓아서 "넘쳤어요!" 하는 상태. 그 이름을 딴 질문·답변 사이트도 있어요.
Q. 복사·붙여넣기는 다른 과목에서는 표절인데, 프로그래밍에서는?
"코드 재사용"이라고 부릅니다.
"코드 재사용"이라고 부릅니다.
Q. Boolean에서 "버그가 0개"면?
어떤 언어에서는 0 = false라서… "버그가 없다"가 false가 됩니다. 즉, 버그가 있다는 뜻. 프로그래머는 영원히 버그에서 자유로울 수 없대요.
어떤 언어에서는 0 = false라서… "버그가 없다"가 false가 됩니다. 즉, 버그가 있다는 뜻. 프로그래머는 영원히 버그에서 자유로울 수 없대요.
Q. 큐에 줄 서 있는 사람한테 "뒤로 가세요" 하면?
그게 바로 dequeue예요. (맨 앞에서 꺼내는 거니까요.)
그게 바로 dequeue예요. (맨 앞에서 꺼내는 거니까요.)
Q. 리스트와 배열의 차이?
면접관이 물어보면 "동적이냐 고정이냐, 언어마다 다르다"고 하면 되고, 시험에서는 "순서 있는 나열, 인덱스로 접근"만 말하면 돼요.
면접관이 물어보면 "동적이냐 고정이냐, 언어마다 다르다"고 하면 되고, 시험에서는 "순서 있는 나열, 인덱스로 접근"만 말하면 돼요.
Q. DFS와 BFS 중 맵에서 "최단 거리" 구할 때 뭘 쓰나요?
간선 길이가 같을 때는 BFS. "가까운 것부터" 퍼지니까 처음 도달한 순간이 최단이에요. (다익스트라는 길이가 다를 때.)
간선 길이가 같을 때는 BFS. "가까운 것부터" 퍼지니까 처음 도달한 순간이 최단이에요. (다익스트라는 길이가 다를 때.)
Q. 스택 두 개로 큐를 만들 수 있나요?
할 수 있어요. 한 스택에 넣고, 꺼낼 때 다른 스택으로 옮기면 순서가 뒤집혀서 FIFO처럼 나와요. 면접에 나올 수 있는 유명한 문제예요.
할 수 있어요. 한 스택에 넣고, 꺼낼 때 다른 스택으로 옮기면 순서가 뒤집혀서 FIFO처럼 나와요. 면접에 나올 수 있는 유명한 문제예요.