책을 읽게 된 계기
대학교 2학년 시작 즈음이었다. c++을 배우고 python도 배우고 나서 무언가 이 사이의 괴리감과 헷갈리는 부분이 늘어나기 시작했다. 찾아서 사용은 하는데 왜 그런지 모르는 것 같은 답답함이 이 두 언어 사이 어딘가에 끼어 있었던 것 같다. 동시에 다른 언어도 배워야 좋다는 말을 듣고 나니 또 다른 언어를 배울 때도 헷갈리거나 뭔가 모를 이해되지 않음이 누적되면 좋지 않을 것이라는 생각을 했다. 그렇게 서점을 가서 샀었던 책이 오늘 리뷰를 작성할 '코딩을 지탱하는 기술'이다. 이때는 실력이 부족했는지, 책을 대충 읽었는지, 하나하나 읽을수록 더 이해가 되지 않았다. 심지어 3번째 장 정도 읽고 책을 분실했었다.
이후 연구, 개발을 하면서 뭔가 다시 기본을 보아야 하는 건 아닌가라는 생각이 들 때, 이 책의 제목이 떠올랐다. 그렇게 약 6년(?)이 지난 내가 다시 같은 책을 읽게 되었다. 시간이 지난 만큼 많이 늘었는지 재미있게 책을 읽었다. 사실 '기본을 다시 본다'는 매우 구체적이지 않은 목적이다. 그럼에도 이러한 불분명한(?) 목적의 일부를 만족시켜준 게 이 책이라고 생각한다.
이 책 내용의 용도(?)
이 책을 추천한다면 새로운 프로그래밍 언어를 배우게 될 때, 어떤 프로그래밍 언어가 왜 이런 식의 syntax를 가질까에 대한 궁금한 점이 생길 때 찾아보면 좋은 책이다. 각 프로그래밍 언어마다 고유의 여러 기법과 특징이 있다. 그 이유는 그 프로그래밍 언어가 만들어진 배경에 따라 주로 사용되는 용도가 조금씩 다르기 때문이다. 그럼에도 불구하고 공통적인 면들이 항상 있기 마련이다. 예를 들면 변수의 자료형, 메모리에 저장하여 사용하는 방식, 여러 조건문, 객체 지향, 클래스, 함수, 쓰레드 등등이 있을 것이다. 이러한 예시들은 컴퓨터라는 기계를 다루기 위한 필수 불가결한 부분들 혹은 프로그래밍 언어가 발전함에 따라 효율적으로 프로그래밍을 하기 위한 부분들이라고 볼 수 있다. 이러한 공통적인 부분들이 왜 생겨났고 어떻게 동작되는지 몇몇 언어들이 가지는 차이점들을 쉽게 설명해준다.
내가 책을 읽고 이해한 코딩을 지탱하는 기본기(?) 예시
나의 상황을 바탕으로 이 책을 읽고 배운 간단한 예시들을 들어보자. 나는 프로그래밍을 할 때 사용할 수 있는 여러 container가 있는데 왜 여러 가지의 container가 있는지 궁금했었다. 하나의 문제를 해결할 때 여러 container 중 선택하여 다양한 방법으로 해결할 수 있다. 그럼 많이 사용되는, 사용하기 쉽고 편한 container만 있으면 될 것을 왜 여러 container를 기본적으로 지원하는 것일까? 처음에는 특정 상황과 용도를 위한 최소한의 구분이라고만 생각했다. 결과적으로는 틀린 말은 아니었다. 하지만 더 내부적으로는 container가 memory에 저장되는 방식의 차이로 인한 속도의 문제와 이어지는 효율적인 측면 등이 있다는 것을 이 책을 통해 알게 되었다.
또 하나의 예시를 들어보자면 객체 지향에 대한 부분이다. 나는 객체 지향에 대해 생각할 때 어떤 것을 모델링하여 특징과 특성을 만들어두고 사용하는 방식으로 이해하고 있다. 하지만 생각보다 여러 언어와 상황에 따라 다양한 객체 지향의 개념이 있다는 것을 알지못했다. 적절한 설명인지는 모르겠지만 설명을 해보겠다. 고양이를 모델링하여 클래스로 두고 이를 기반으로 여러 고양이를 만드는 것(생성자)은 내가 일반적이라고 생각하는 객체 지향의 개념이다. 하지만 고양이가 사냥하는 것이 아닌 '밥을 준다'는 행위를 위해서 사람을 모델링하여 클래스를 만들어야 할까? 곰이나 사자가 밥을 줄 수는 없을까? 외계인은? 이러한 등등의 생각을 하면 고양이에게 '밥을 준다'는 보편적인 행위라는 개념으로 따로 묶어서 두고 사용해야 하는 게 맞을지도 모르겠다. 이런 경우 보편적인 행위는 package 개념으로 정의해두고 사용할 수도 있을 것이다. 상황에 따라 이런 방식이 적절할 수도 있다. 혹은 이전에 언급한 것처럼 사람이라는 모델을 만들어 그 내의 함수로 '밥을 준다'를 만드는 것이 적절할 수도 있다.
프로그래밍이란 무림에서의 기본기
새로운 프로그래밍 언어를 배울 때 왜라는 생각은 언어를 이해하는데 있어서 중요하다. 동시여 몇몇 문법을 기억함에도 중요할 것이다. 이때 다른 언어와의 공통점을 기본으로 익히고 차이점을 다음으로 익히는 것이 빠를 것 같다. 이때 왜라는 부분에 친절한 설명이 필요하다면 이 책을 읽어보는 것이 도움이 될 것 같다. 조금 유의(?) 해야 할 점은 이 책의 몇몇 부분이 하드웨어에 가까운 언어를 얕게나마 알고 있어야 이해가 가능하다는 부분일 것이다. 그만큼 낮은 위치에서 프로그래밍 언어의 원리를 친절하게 설명해주는 것 같다고 이야기할 수 있다.
'Life > Book' 카테고리의 다른 글
참된 삶 (la vraie vie) (0) | 2020.08.11 |
---|---|
세기의 쏘울 메이트 (0) | 2020.07.14 |
프로그래머로 사는 법 (0) | 2020.06.09 |
IT에 몸담은 이들을 위한 지적생산기술 (2) | 2020.05.05 |
기계비평들 (0) | 2020.03.26 |