[CS50] 1. 컴퓨팅 사고

CS공부 시작

비전공자인 내가 개발자로 성장하려면 기초적인 CS 지식이 필요하다. 때문에 어려울 것 같아 미루고 미루다 오늘 드디어 시작했다. 네이버에서 제공하는 《부스트코스》를 이용해 〈CS50〉강의를 수강 중이다. 첫 강의의 주제인 컴퓨팅 사고를 정리해 본다.

1. 컴퓨팅 사고

컴퓨터는 간단하게 표현하면 3가지 절차로 이루어져 있다. 정보가 들어가는 'input'과 처리 결과인 'output', 그리고 그 사이에 처리 과정인 'CS(Computer Science)'가 그것이다.
즉, CS 공부는 처리 과정을 구현하기 위한 지식을 쌓는 일이라고 할 수 있다.

(1) 이진법(binary)

우리가 커뮤니케이션을 위해서 언어가 필요하듯이, 컴퓨터도 정보를 처리하기 위해 언어가 필요하다. '기계어'는 문자 그대로 기계가 사용하는 언어로, 01만을 사용한다. 1은 true나 on으로, 0은 false나 off로 처리할 수 있다. 단순한 0과 1의 조합을 'bit(비트, binary digit)'라고 부른다. 이러한 조합을 여러 개 사용하여 컴퓨터가 우리의 언어를 표현할 수 있다.

예를 들어, 십진수 123을 기계가 인식하도록 한다고 하자.

123의 십진수와 이진수

123을 이진수로 변환하면 1111011이 된다.

이진수는 1의 자리부터 2n으로 올라간다. 컴퓨터는 0부터 시작하기 때문에 20, 21, 22…… 식으로 자릿수를 표현한다.
DEC \ BIN 27(128) 26(64) 25(32) 24(16) 23(8) 22(4) 21(2) 20(1)
123 0 1 1 1 1 0 1 1
1이 적혀있는 이진수의 값을 모두 더해보자. 64+32+16+8+2+1 = 123이 된다. 정보를 표현할 때마다 이런 식으로 계산할 수 있다. 아래는 비트의 크기마다 표현할 수 있는 정보의 예다.

출처: 부스트코스 강의


(2) 정보의 표현

이진수로 정보를 표현하더라도 저마다 방식이 다르다면 그 의미는 퇴색될 것이다. 이런 점을 방지하기 위해 미국에서는 문자 표현을 표준화했다. 'ASCII(아스키코드, American Standard Code for Information Interchange)'로, 대문자 A는 65, I는 73…… 으로 표현한다.

'HELLO!'를 'ASCII' 코드로 표현

같은 숫자여도 RGB(Red, Green, Blue)값에 대입하면 색을 표현할 수 있고, 음표를 숫자로 치환하면 소리도 가능하다.

최근에는 'Unicode'를 통해 여러 나라의 문자와 다양한 기호, 이모티콘 등등 표현이 가능하다.

(3) 알고리즘

알고리즘의 기본적인 정의는 문제를 해결하는 단계적 방법이다. 어떤 문제가 발생했을 때 정확한 해결책을 도출해내기 위해 알고리즘을 사용한다. 가령 마트에서 케찹을 산다고 해보자. 입구의 진열대부터 하나씩 물건을 확인하며 케찹을 찾는다. 작은 가게라면 금방 찾겠지만, 대형 마트일 경우 엄청난 시간이 소모될 것이다. 운이 나빠서 케찹이 가장 안쪽에 있다면 마트의 모든 진열 상품을 다 훑어야 하는 불상사가 생긴다. 생각을 바꿔서 두 개씩 확인한다면, 처음보다 2배 빨라지겠지만, 여전히 좋은 해결책은 아니다.

즉, 알고리즘은 정확성도 중요하지만, 효율성도 신경 써야 한다. 때문에 우리는 마트에서 처음 진열대부터 훑는 게 아닌 '소스' 코너로 향해 케찹을 찾는다. 효율을 대폭 높인 셈이다.

알고리즘의 자리

컴퓨터는 앞선 자원(이진법, 정보의 표현)을 통해 input과 output 사이에서 알고리즘을 동작한다. 이를 구현한 코드를 '의사코드(Pseudo Code)'라고 한다. 의사코드는 함수, 조건문, 불리언, 반복문 등 다양한 기능을 가지고 있다. 컴퓨터는 이것을 해석해 우리에게 output을 보여준다.

앞선 케찹 구매 과정을 의사코드로 표현해보자.
1. 마트에 들어간다.
2. for 모든 코너를 훑어본다.
3.   if 만약 코너 이름이 '소스'라면
4.     '케찹'을 구매한다.
5.     break 그만 훑어본다.
6. 마트를 나간다.

로직을 이해하기 위해 스크래치 강의도 있었지만, 워낙 기초적인 부분이라 대충 넘겼다. 스크래치를 쓸 일도 없을 것 같고. 다만, 이제 막 코딩에 관심이 생겼거나 아이들에게 코딩 개념을 심어주고 싶다면 스크래치도 괜찮을 듯하다.

다 알고 있다고 생각했는데, 막상 정리하려니 복잡하고 어렵다. 대충 네이버 블로그에 글쓰다가 마크업으로 일일이 편집해가며 적으니 시간도 오래 걸리고. 마크다운은 아직 익숙하지 않아서 차차 적응해야 될 듯하다.

아무튼 이것으로 오늘 정리 끝. 내일도 이어서 공부하고 기록해야지.

좋은 웹페이지 즐겨찾기