python을 초등 수준 이상으로는 다룰 수 있게 되었지만, python은 너무 많은 것을 알아서 척척 해 준다.
예를 들어, 정렬을 할 때 엑셀에서 오름차순/내림차순 정렬을 할 때 이상의 지식을 요구하지 않는다. 언어에서 알아서 자동으로 적당한 알고리즘 방식으로 정렬해 주기 때문이다. 그렇기 때문에 merge sort, quick sort 이런 방법을 전혀 몰라도 프로그래밍을 하는 데에는 지장이 없다. 그런데 이렇게 '자료구조'에 대해 전혀 모르고 프로그래밍을 하다보니 비효율적인 코드가 발생한다.
예를 들어 간단한 피보나치 수를 구하는 함수를 작성할 때, 초보자인 나는 아무 거리낌 없이 리스트에 이전 두 개의 인수를 더한 값을 append하는 방법으로 수를 구했다. 그런데 다른 사람의 코드에 비해 내 코드는 수백배가 느리다. 알고 보니 yield를 이용해 generator로 피보나치 수를 구하면 훨씬 훨씬 속도가 빨라진다. 파이썬 책에서는 generator 기법에 대해서는 알려주지만, 왜 그것이 빠른 것인지는 책을 보고 잘 이해가 되지 않았다.
때문에 자료구조와 알고리즘을 학습하기 전에 low-level언어를 학습해야 한다는 생각이 들어 C를 공부하게 되었다. 파이썬을 하다 C를 접하니 파이썬은 천국이었다. string이라는 type 자체가 없는 것, 배열을 선언할 때 크기를 지정하는 것 등은 처음 접할 때는 충격적이었다. 문자열과 포인터는 또 왜 이리 복잡한지.. 이런저런 책을 찾다가 C Programming A Modern Approach라는 책을 알게 되었다. 딱딱한 구성으로 되어 있지만 그림이 많은 책보다 오히려 읽기가 편하다. C에 대한 지식을 벽돌 쌓듯 차근차근 세워줄 수 있을것 같다. 그래서 이 책을 읽으면서 나중에 분명히 다시 찾게 될 내용들을 여기에 기록해놓을 것이다.
적히는 내용은 전부 내 머리의 외장 하드 같은 것이다. 나중에 문법이나 개념 등을 빠르게 다시 찾아가면서 쓰기 위한 목적이고 C를 공부하는 다른 사람을 위한 요약 정리 자료가 절대 아니다.