부스트코스 '모두를 위한 컴퓨터과학 (CS50 2019)'을 매주 수강하고, 팀원과 함께 미션을 수행하며 코치의 섬세한 피드백과 현업 개발자의 라이브강의를 시청하는 언택트 스터디 ✍
학교다닐 때 이미 배웠던 내용이기에 스터디를 신청할까 고민했지만 다시 한 번 컴퓨터과학을 제대로 공부하기 위해 신청해보았다. 모집인원이 0000명 정도라 당연히(?) 합격 할 수 있었다. 총 6주 동안 스터디를 통해 컴퓨팅 사고능력을 키워보겠다.💪🏻
컴퓨터 과학은 문제 해결에 대한 학문. 문제 해결은 입력(input)을 전달받아 출력(output)을 만들어내는 과정. 그 중간에 있는 과정이 바로 컴퓨터 과학
input -> << 컴퓨터 과학 >> -> output
정보를 저장하고 연산을 수행하기 위해 컴퓨터가 사용하는 단위. 0과 1, 두 가지 값만 가질 수 있는 측정 단위. 디지털 데이터를 여러 비트들로 나타냄으로써 두 가지 값만을 가지고도 많은 양의 정보를 저장 할 수 있음. 또한 컴퓨터는 저장되어 있는 데이터를 수정하기 위해 비트에 수학적 연산을 수행할 수 있다.
문자를 숫자로 표현 할 수 있도록 정해진 약속.
현재는 Unicode를 사용해 이모티콘까지 표현할 수 있음.
입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열. 정확성과 효율성을 중요시함.
컴퓨터가 계산을 이용해 문제를 분해하고 어떻게 해결할 것인지를 파악하는 것. 컴퓨팅 사고는 크게 4가지의 주요한 과정으로 나누어 볼 수 있다.
1. 분해(Decomposition)
문제를 나누어 각각의 조각을 확인하거나, 어떻게 문제를 나누면 될 지 생각해내는 과정
2. 패턴 파악(Pattern Recognition)
어떠한 예측(통찰)을 위해 각각의 조각의 유사한 점과 차이점을 찾아내는 과정
3. 일반화(Pattern Generalization), 추상화(abstraction)
앞에서 찾아낸 패턴들을 만들어낸 원리를 찾아내는 과정
4. 알고리즘 설계(Algorithm Design)
유사한 문제들을 해결하기 위한 절차적인 명령(과정)을 만드는 것
2진수를 사용하게 된 이유
컴퓨터가 진공관이라는 전기 장치의 발달로 인해 탄생하게 되면서 진공관이 전기가 흐르거나 흐르지 않는, 2가지의 상태만을 가짐에 따라 자연스레 컴퓨터도 그에 따라 신호를 처리하게 되었다고 생각합니다. 최초에 가산기는 전원 ON/OFF 버튼으로 이루어져 있었는데, 이를 여러 겹으로 연결하다보니 NOT, AND 등등의 논리적인 회로로서 작동할 수 있다는 걸 알게되었습니다. 따라서 우리의 전자 회로들은 ON/OFF(즉 1 과 0)의 두가지 방법으로 표현될 수 있었고, 전자회로 기기들은 해당 신호를 바탕으로 2진법으로 설계됩니다. 우리의 컴퓨터도 가산기에서 발전한 트랜지스터를 이용하고 있으므로, 아직도 전자기기의 상태는 ON/OFF (1과 0) 으로 나타내는 것입니다.
지금까지도 2진수를 사용하고 있는 이유
극초기 컴퓨터인 전자식 숫자 적분 및 계산기(ENIAC, 에니악)는 10진수를 사용하였지만 전기회로의 전압이 불안정해 전압을 10단계로 나누어 처리하는데 한계가 있었다고합니다. 10진수를 사용하여 전압의 세기에 따라 수의 값이 복잡해진다면, 내외부 잡음에 따라 산출값이 쉽게 달라져 정보 표현에 있어 정확하지 않은 결과를 산출해 낼 위험성이 생기기 때문입니다. 예를 들어 10진수 사용 시 전기 신호의 크기가0V(Volt)에서 5V라고 가정한다면 각 단계 별로 0.5V의 차이가 존재합니다. 그런데 기계적인 결함으로 인해 2.3V가 전달된다면 2.0V보다 가까운 2.5V 단계로 판단될 수 있기 때문에 정확하지 않은 결과를 얻을 확률이 높습니다. 반면 2진수 사용 시 2.3V가 전달된다면 5V보다 가까운 0V로 판단되고 3V면 5V로 확실히 판단할 수 있기 때문에 상대적으로 오류가 적은 2진수를 사용합니다.
데이터 통신시 송신자가 보낸 데이터의 유무, 데이터의 순서 등을 수신자가 확인해야 하는데 그 과정에서 2진법은 0 과 1만 비교하면 되지만 2진법 이상의 수들은 0과 1외의 더 많은 수들을 비교해야 되기 때문에 데이터의 양이 많아 질수록 오류검출 비용증가로 인해 오류검출 측면에 있어 2진법이 보다 더 효율적이라고 생각합니다. 또한 데이터 저장, 연산시 10진법은 0 ~ 9까지의 수를 기억하는 체계를 만들기 위해 더 높은 사양을 요구하는 반면 2진법은 0과 1만 기억하면 되니 저장, 연산 측면에서도 2진법이 10진법 보다 유리하다고 생각합니다.
최근에는 양자 컴퓨터 라는게 나왔다는데, 양자 컴퓨터는 얽힘 / 중첩 등의 이론으로 인해서 0과 1이라는 비트 대신에, 0이라는 상태와 1이라는 상태의 임의의 선형 결합인 00, 01, 10, 11 의 상태를 가질 수 있다고 합니다. 우리의 컴퓨터는 ON/OFF 이지만, 양자 컴퓨터는 상태 값이 4개이기때문에 양자 컴퓨터가 보급된다면, 과연 지금의 2진수 체계를 부술 수 있을지 궁금합니다!
아날로그 신호 -> 표본화 -> 양자화 -> 부호화 -> 디지털 신호
(1초에 사용하는 bit의 수) = (해상도) x (주사율) x (픽셀 해상도)
(1초에 CPU가 처리하는 bit의 수) = 클럭 속도(GHz) x 10억
팀미션을 하면서 평소에 생각해보지 않았던 문제를 풀어볼 수 있어 좋았다. 특히 좋았던 문제는 1번 문제였다. 1번 문제를 풀면서 극초기 컴퓨터인 에니악이 10진법을 사용했다는 사실을 알 수 있었고 2진법 이상의 진법들을 사용시 하드웨어적 한계와 소프트웨어적 비효율성에 대해 조사해보면서 컴퓨터가 2진법을 사용하는 이유를 확실히 알 수 있었다.
라이브 방송이 끝나면 우수 팀원들 미션을 보여 주는데 다른 팀원들의 풀이를 보면서 몰랐던 부분 또한 배울 수 있었다.