이 책은 개발을 배우면서 어느 정도 컴퓨터 공학을 알아야겠다는 생각이 들어 빌려 봤던 책이다. 솔직히 재미있게 읽은 책은 아니고, 공부하듯이 본 책이다. 뭐랄까 교양 수업의 교과서 같은 느낌? 방대한 내용이 축약되어 있어 어떤 부분은 '이게 대체 뭐야?' 싶기도 했다. 이제 막 컴퓨터 과학을 공부하는 사람이 입문용 개론서처럼 읽거나, 많은 것을 배웠지만 정리가 잘 안되어 있는 사람이 가지고 있는 지식을 정리하며 보기 좋은 책인 것 같다.
기억에 남는 부분은 먼저, 논리학 부분. 논리 퀴즈를 공부하며 봤던 드 모르간의 법칙이나 진리표와 같은 것들이 나와 괜히 반가웠다. 컴퓨터는 문제를 해결하는 도구이다. 그러므로 컴퓨터 과학을 공부한다는 것은 결국 문제를 해결하는 방법을 배우는 것이라고 한다. 이산 수학, 확률론, 알고리즘 그리고 논리학도 문제를 해결하는 데 도움을 주는 것들이다. 이렇게 생각하니 컴퓨터 과학이 그저 어렵기만 한 것은 아닌 것 같았다.
그리고 pop(), push()와 같은 내가 사용했던 메서드들이 잘 분류되어 정리되어 있었다. 한 가지 프로그래밍 언어를 마스터하면 다른 언어도 쉽게 배울 수 있다던데 이런 메서드나 언어구조 같은 게 비슷해서 그런가 보다. 배열과 같은 것들이 실제로 안에서 (메모리 속 데이터가) 어떻게 처리되고 있는 건지도 조금이나마 살펴볼 수 있었다.
다음으로 알고리즘. 문제를 해결하고자 할 때에는 이미 만들어진 알고리즘이 없는지 먼저 찾아보고 시작하자. 이 책에서는 유명한 핵심 알고리즘을 몇 가지 소개하고 있는데, 예를 들어 다익스트라 알고리즘, 최단 경로탐색 알고리즘 등이 있다. 그중 가장 흥미롭게 읽은 부분은 구글의 페이지랭크 알고리즘이었다. 검색 시 나오는 정보들이 어떤 기준으로 정렬되는 건지 궁금했는데, 링크가 많이 될수록 중요한 페이지로 취급되어 위에 노출된다고 한다.
아, 그리고 많이 들어봤던 관계형 데이터베이스에 대해서도 간단히 나와있었다. 관계형 데이터베이스란 여러 개의 표를 만들어 데이터를 연결시켜 관리하는 것이며, 이때 사용하는 것이 바로 SQL이다. 이 방식은 많은 장점이 있지만, 데이터가 복잡해질수록 연산 비용이 늘어나고 병목현상이 발생하기 쉽다는 단점도 있다.
마지막으로 패러다임에 대해서도 나와 있었는데, 함수형 프로그래밍에 대한 설명을 읽으며 다른 함수를 인자로 전달받을 수도 있고 결과로 함수를 반환받을 수도 있는, 저번에 배운 고차 함수에 대한 개념을 발견할 수 있었다.
< 그 밖에 책을 읽으며 메모한 것 >
- 추천 사이트 : 코드카데미, 울프럼 알파
- XOR : AND도 OR도 아닌 배타적 OR
- 과거에 일어난 사건은 독립 사건의 결과에 영향을 미치지 않는다. 도박사의 오류!
→ 매몰비용이 생각났다.
- 최선의 경우를 바라되, 최악의 경우를 대비하라.
- 다양성 측면에서의 빅데이터란 데이터에 일관된 구조가 존재하지 않아 기존의 관계형 데이터베이스로는 다루기 어려운 데이터를 의미한다. 그냥 양 많은 데이터가 아님.
- 내가 배우고 있는 자바스크립트는 스크립트 언어라고 해서 컴파일이 필요하지 않은 언어라고 한다. 파이썬, 루비도 마찬가지. 컴파일이란 프로그래밍 언어를 컴파일러라는 프로그램을 통해 CPU가 실행할 수 있는 기계어 명령어로 변환하는 것이다. 스크립트 언어는 코드를 CPU가 직접 실행하는 것이 아니라 인터프리터라는 해석기를 통해 실행되기 때문에 컴파일이 필요하지 않다. 관련해서 go라는 언어는 컴파일 속도가 빠른 언어를 구글이 개발하여 사용하고 있는 것이라고 한다.
- [ 컴퓨터의 동작원리 ]
메모리는 수많은 셀로 나뉘어 있고, 각 셀은 저마다 미세한 양의 데이터를 저장한다. 그리고 여러 가닥의 전선을 통해 이진수의 신호로 전송한다. 높은 전압이 걸린 전선은 1이고, 낮은 전압이 걸린 전선은 0이다.
일반적으로 메모리 셀 하나에는 여덟 자리의 이진수를 저장할 수 있다. 이 여덟 자리의 이진수를 바이트(byte)라고 한다.
메모리가 읽기 모드일 때는 셀에 저장된 바이트를 여덟 가닥의 데이터 전선으로 출력하고, 쓰기 모드일 때는 그 전선들을 통해 바이트를 읽어와 지시된 셀에 써넣는다. 한 덩어리의 데이터를 전송하는 전선의 모음을 버스라고 한다.
CPU의 내부에는 레지스터라 불리는 CPU 자체 메모리 셀들이 있다. CPU는 레지스터에 저장된 수를 대상으로 간단한 수학 연산을 수행할 수 있다. CPU의 동작은 메모리의 명령어를 끊임없이 가져와 수행하는 무한 루프로 이루어진다.
CPU의 클락이란 CPU가 1초 동안 실행하는 기본 연산이 몇 개인지를 나타내는 단위이다. 2메가 헤르츠의 클락이면 CPU가 1초에 약 2백만 개의 기본 연산을 수행한다는 뜻이다.
최초의 CPU(인텔 4004)는 4비트짜리 아키텍처로 설계되었다. 즉, 명령어 하나당 네 자리까지의 이진수를 연산할 수 있었다. 현재는 32비트, 64비트가 널리 사용되고 있다.
프로세서가 메모리에 효율적으로 접근할 수 있게 돕는 것이 바로 캐시이다. 1차 캐시를 이용하여 접근 가능성이 높은 메모리 주소의 내용을 CPU 레지스터 가까이에 복사해 둘 수 있다. 그다음으로 접근 가능성이 높은 메모리 공간은 2차 캐시에 저장한다. 2차 캐시는 1차 캐시보다 속도는 느리지만 훨씬 더 큰 용량을 저장할 수 있다. CPU 제조사 중 상당수가 3차 캐시를 탑재한 프로세서를 출시하고 있다. 이를 통해 캐시에 데이터가 없을 때만 램에 직접 접근하게 하여 컴퓨터의 성능을 좋게 만든다.
댓글