라벨이 programming인 게시물 표시

[책] 알고리즘 산책: 수학에서 제네릭 프로그래밍까지 - 추상화를 어떻게 해야 하는지에 대한 수학적 설명

이미지
수학을 왜 공부해야 하는가? 수학자들은 세상의 진리를 탐구하기 위해서라고 할 것이고, 변태들은 단순히 재밌어서라고 할 것이다. 하지만 나는 진리 탐구에는 관심이 없다. 그리고 수학이 흥미롭다고 생각하지, 재밌다고 생각하지도 않는다. 그럼에도 수학을 공부하는 이유는 수학이 사고 훈련에 도움되기 때문이다. LLM에게 코드 작성을 시키면 정말 못하는 것이 하나 있다. 바로 추상화다. 다른 부분은 몰라도 추상화만큼은 정말이지 신입 개발자 수준의 모습을 보여준다. LLM이나 신입 개발자들이 하는 추상화는 그저 비슷한 코드 몇 개를 하나의 함수로 합치는 수준에 불과하다. 추상화란 무엇일까? 추상화는 여러 개의 구체적인 대상에서 본질적으로 필요한 성질만 남기고, 나머지 차이를 버려 하나의 일반적인 개념으로 표현하는 것이다. 그렇다면 추상화를 잘하려면 어떻게 해야 할까? 추상화의 첫 번째 단계는 추상화할 대상과 범위를 정하는 것이다. 그리고 그 대상의 필수적인 성질이 무엇인지 깊이 생각해야 한다. 어떤 성질은 주어진 대상의 본질적인 것이고, 어떤 성질은 그 본질적인 성질을 만족하기만 하면 부수적으로 따라오는 것이다. 반대로 지금 눈앞에 있는 코드에 공통점이 있더라도 그것이 우연히 공유하고 있을 뿐이고, 실제로는 추상화 범위에 포함해서는 안 되는 경우도 있다. 좋은 추상화는 이 경계를 잘 찾는 일이다. 이런 구분이 없이 일단 코드가 같기 때문에 같은 클래스나 함수로 추상화하는 경우를 보면 나는 이렇게 묻는다. 이 구조가 정말로 필연적인가? 그리고 이것이 수학에서 사고하는 방식이다. 아니, 수학이라고 하면 범위가 너무 넓을 수도 있다. 최소한 대수학에서는 그렇다. 정수, 행렬, 다항식은 겉보기에는 전혀 다른 대상이다. 하지만 대수학에서는 그 대상 자체가 아니라 그 위에 어떤 연산이 정의되고, 그 연산이 어떤 법칙을 만족하는지를 본다. 그렇게 군, 반군, 모노이드, 환, 체 같은 대수 구조가 만들어진다. 이 책은 역사 속 대수학이 발전한 과정을 따라간다. 고대...

[책] API로 배우는 Windows 구조와 원리

이미지
API로 배우는 Windows 구조와 원리 학부에서 배우는 시스템 프로그래밍과 운영체제 수업은 대부분 리눅스에서 실습한다. 그리고 학생 입장에서 리눅스 커널 소스는 볼 수 있지만, 윈도우 커널 소스를 볼 방법은 없기 때문에 운영체제에 관한 지식은 리눅스로 편향될 수밖에 없다. 그래서 운영체제 수업을 듣고 윈도우는 어떻게 됐는지 궁금해서 구매했던 책이다. 문제는 이 책이 " API로 배우는 Windows 구조와 원리"라는 것이다. API를 통해 배우는 책이기 때문에 이걸 읽어도 내부 구현의 차이는 알 수 없다. 책 내용이 안 좋은 건 아닌데, 운영체제 수업을 이미 들었다면 굳이 볼 필요는 없다. 수업에서 사용되는 Operating System Concepts 를 읽었으면 이 책은 굳이 읽을 필요 없다. 역시 아무리 찾아봐도 교과서로 사용되는 책만큼 좋은 책은 없다. 가능하면 시간을 들여서라도 공룡책을 읽는 것을 추천한다.