CS50 1강 컴퓨터와 컴퓨팅 - 1

📅 TIL #145




🎯 Achievement Goals

Topic1: 컴퓨터를 구입할 때 무엇을 고려해야 할까요?
Topic2: 컴퓨터는 수 많은 정보를 어떻게 기억할까요?
Topic3: 컴퓨터는 자료를 어떻게 처리할까요?
Topic4: 컴퓨터가 숫자를 어떻게 셀까요?
Topic5: 컴퓨터는 문자를 어떻게 표현할까요?
Topic6: 2진수로 표현하기엔 너무 길어요. 좋은 방법이 없을까요?







Intro.


이번 주말에는 CS50이라는 유명한 강의를 들었다. 특히 비전공자에게 정말 좋은 강의라고 널리 알려졌기도 했고, 쉽고 재밌게 CS 기초를 공부할 수 있겠다고 생각이 들어서 듣기 시작했다.


이 강의는 edwith이라는 사이트에서 네이버 커넥트 재단을 통해 무료로 들을 수 있어서 정말 좋았다. 비전공자이면서 CS 공부가 필요하다면 정말 좋은 강의라고 생각이 든다. 내용이 정말 어렵지 않게 구성되어 있기 때문이다.


CS50 강의를 듣고 블로깅을 어떻게 할지 고민을 하다가, 강의 내용을 정리하기 보다는 각 토픽마다 생각해보기 질문과 강의 관련 문제들이 있다. 강의 내용은 사이트에서 언제든 다시 복습할 수 있기 때문에, 문제들을 위주로 나의 생각들을 블로그에 적어보려고 한다.





하드웨어 - Topic1: 컴퓨터를 구입할 때 무엇을 고려해야 할까요?


1.어떻게 USB는 지금처럼 보편화 될 수 있었을까요? 애플이나 다른 회사는 이 표준 포트 사용을 피하고 싶어할까요?

USB는 휴대가 간편하면서 사용하기에도 편리하기 때문에 쉽게 보편화가 되었다고 생각한다.

그리고 애플같은 경우는 C타입 포트만을 기기에 삽입해서 출시를 한다. 범용적으로 사용되는 USB 포트를 사용하지 않는 것이 큰 리스크를 불러 올 수도 있다고 생각했지만, 오히려 타사와 차별화를 두어 애플이 스스로 이윤을 추구하는 것으로 보이며, 애플만의 시장을 확보하기 위함으로 보이기도 한다.


2.SSD가 아닌 HDD를 사용해야하는 이유에는 어떤것들이 있을까요?

SSD는 속도가 빠르고 데이터 처리 효율이 좋지만, HDD에 비해 용량의 한계가 있고 비용이 굉장히 차이가 난다. 그래서 HDD는 많은 용량을 필요로 하는 경우에 쓰인다. 예로 들면, 많은 서버의 운영 작업이 필요한 기업 입장에서는 HDD가 더 유리할 것으로 보인다. HDD는 가격도 SSD에 비해 저렴하며 방대한 양의 데이터를 안전하게 저장하기 위해 쓰인다.


문제: 하드웨어가 아닌 것은?

  1. CPU
  2. 마우스
  3. 운영체제
  4. 기억장치


정답은 3번이다. 2번과 헷갈릴 수도 있지만, 꼭 컴퓨터 내부에 있는 것만이 하드웨어는 아니다.

컴퓨터 자체 부품이 아닌 경우는 컴퓨터와 연결해서 사용하는데, 이러한 것을 주변기기라고 불린다. 마우스도 하드웨어에 속하는 주변기기라고 할 수 있다.





기억장치 - Topic2: 컴퓨터는 수 많은 정보를 어떻게 기억할까요?


1. 여러분이 사용하는 컴퓨터의 기억장치는 얼마나 되나요?

하드디스크 250GB, RAM 8GB


2. 왜 RAM이 하드디스크보다 비싸다고 생각하나요?

같은 저장 공간이라면 RAM이 훨씬 빠르다. 빠른 만큼 기술적인 요인과 비용이 많이 들어가기 때문에 같은 용량에서 봤을 때는, RAM이 더 비쌀 수밖에 없고 생각한다.


3. 왜 이렇게 다른 단계의 기억장치가 있을까요?

장치들을 분업화해서 더 효율적으로 데이터를 처리하기 위함으로 보인다.


문제: 속도가 가장 빠른 기억장치는?

  1. RAM
  2. CPU 캐시 메모리
  3. GPU
  4. HDD


기억장치


기억장치중에서 CPU와 가까울수록 속도가 빠르다고 할 수 있다. 정답은 2번 CPU 캐시 메모리이다. GPU는 기억장치에 속하지 않는다.





비트와 바이트 - Topic3: 컴퓨터는 자료를 어떻게 처리할까요?


1. 실제 주변의 예를 통해서 데이터 단위가 얼마만큼의 공간을 차지하는지 생각해봅시다. 하나의 비트가 한방울의 물이라고 생각했을때, 바이트, 킬로바이트…테라바이트 등은 어떻게 비유할 수 있을까요?

데이터 단위는 1000배씩 늘어난다. 비트가 한방울의 물이라고 생각했을 때 나의 생각은,

바이트: 소주 반 잔
킬로바이트: 머그 컵
메가바이트: 빨간 고무대야
기가바이트: 수영장
테라바이트: 바다

한 번 생각나는대로 적어봤는데 이렇게 생각하니 엄청난 양이라는게 느껴진다..


2. 집에서 오래된 IT장비를 찾아봅시다. 3.5 인치 플로피 디스크는 쉽게 분리되어 디스크만 빼낼 수 있습니다. 그리고 이것은 1.44MB 용량의 데이터만 저장할 수 있습니다. 그렇다면 현재 우리가 사용하는 장치들은 용량 대비 얼마나 공간(실제 크기)을 절약하는지 생각해 봅시다.

현재는 플로피 디스크에 비해 훨씬 작은 크기 안에 테라바이트 용량의 데이터도 저장이 가능하다. 미래에는 새끼 손톱만한 칩에 테라바이트 용량 이상의 데이터 저장이 충분히 가능하다고 생각이 된다.


문제: 2비트로 몇 가지 정보를 표현할 수 있을까요?

  1. 2가지 2. 4가지 3. 6가지 4. 8가지


4가지를 표현할 수 있다. 이유는 1비트는 0과 1로만 이루어졌기 때문에, 2가지를 표현할 수 있다. 즉, 2비트는 4가지를 표현할 수 있다.





2진수 - Topic4: 컴퓨터가 숫자를 어떻게 셀까요?


1. 4개의 Binary Bulb가 있다면, 0, 6, 11 은 어떻게 표현할 수 있을까요? 어떻게 표현하나요?

0000, 0110, 1011


2. 2진법과 10진법 만이 숫자를 표현할 수 있는 유일한 방법일까요? 3진법이 있다면 어떤 모습일까요? 3진법으로 50을 표현할 수 있나요? 그리고 8진법, 16진법에서는 어떠한가요?

3진법은 0, 1, 2를 통해 총 3개로 표현하는 방법이다.

3진법: 1212 (127 + 29 + 13 + 12)
8진법: 0062 (648 + 12)
16진법: 0032 (316 + 12)


문제: 1101을 십진수로 바꾼다면?


정답은 13이다. 81 + 41 + 1*1 = 13이기 때문이다.





ASCII 코드 - Topic5: 컴퓨터는 문자를 어떻게 표현할까요?


1. 우리는 왜 ASCII 코드가 필요할까요? ASCII 코드가 없다면 어떤 문제가 생길까요?

그동안 수업에서 2진수로 표현하는 방법을 배워왔다. 하지만 우리는 주로 문자를 사용한다. 그래서 2진수를 문자로 변환해서 쉽게 이해하고 사용할 수 있도록 표준 코드가 나왔는데, 이것이 ASCII 코드이다.


2. ASCII 코드를 이용해서 여러분들의 이름을 이진수나 십진수로 적을 수 있나요?

Useong Lee 내 이름을 십진수로 표현하면, 85 115 101 111 110 103 76 101 101 이 된다.





16진수 - Topic6: 2진수로 표현하기엔 너무 길어요. 좋은 방법이 없을까요?


1. 숫자 50, 128, 256을 16진수로 표현한다면 어떻게 하면 될까요?

2진법과 비슷하게 각 자리수에 1과 16을 가진다. 그리고 16진법은 16진법을 표현하기 위해 앞에 0x를 붙여서 나타낸다. 50은 (163 + 12 = 50) 을 통해 0x32라는 것을 알 수 있다.

128은 2진법으로 나타내면 10000000이 된다. 이것을 4비트씩 쪼개면 1000/000이 된다. 이것을 다시 10진법으로 표현하면 8/0 으로 바꿀 수 있다. 그러면 128은 0x80이 된다.

256은 1000/0000 ⇒ 10/0 ⇒ 0x100으로 표현할 수 있다.


2. 왜 여러 가지 수 체계가 있을까요? 10진수만으로는 부족한가요?

직관적으로 이해하기에는 10진수가 가장 편하다. 하지만 메모리 주소나 방대한 데이터의 양을 읽기에는 한없이 부족할 것이다. 그래서 일관성있게 작성할 수 있고, 조금 더 편리하게 표현하기 위해 만들어진 것이 16진법이다. 16진법은 덜 복잡하고 일관성을 위해 사용된다.


문제: LOVE를 16진수로 표현하면?


답 4C 4F 56 45

4C를 예시로 들면, L은 ASCII 코드에서 10진수로 표현하면 76을 나타낸다. 76을 다시 2진수로 표현해서 4bit씩 나누면, 100 1100이 된다. 100은 4이고, 1100은 16진수로 표현했을 때 C가 된다.







마무리.


CS50 1강은 1강 답게 정말 기초적인 부분을 공부했다. 그래도 강의 내용이 좋아서 기초를 재밌게 공부할 수 있었다. 4강부터가 심화 과정이라는데, CS50을 통해 CS 기초 지식을 많이 배울 수 있으면 좋겠다. 내일은 CS50 1강 남은 강의들을 다 듣고 블로깅할 예정이다.




edwith X 커넥트재단: CS50 강의 들으러 가기