본문 바로가기
중간 회고/책

<코딩을 지탱하는 기술>

by Chaedie 2022. 8. 10.
728x90

<코딩을 지탱하는 기술>

개발 입문자 필독서라는 말이 있어서 읽어보았다.

이 책을 한마디로 표현하면 “편견 없는 프로그래머가 되기 위한 컴퓨터 언어 책”이다.

편견 없는

이 책은 다양한 언어를 통해 개념을 소개한다. 예를 들자면 if문 부분에선 C언어로 if문을 소개하고, for문에선 python코드로 개념을 설명한다. 에러 처리 챕터에선 c언어 로 먼저 설명을 하고, 들어본 적도 없는 PL/I라는 언어로 설명을 추가한다. 이후 CLU, JAVA, Ruby, Python 에서는 어떻게 하는지 보여준다.

처음엔 조금 혼란스럽기도 했다. 하지만 저자가 이런식으로 다양한 언어를 보여주는것은 독자를 혼란스럽게 하기 위해서도, 다양한 언어를 사용할 줄 안다고 자랑하기 위함도 아니다.

오히려 프로그래밍 언어라는것은 개발을 하기 위한 일종의 도구일 뿐이고 각 언어마다 특정한 “문제를 해결하기 위해” 다른 방식을 채용했을 뿐이라는 걸 보여주기 위함이라고 보여진다.

이 책을 읽고 나면 나는 “Javascript 개발자야!” 라는 식의 정체성보다는 나는 “개발자야!” 라는 정체성이 더 어울린다는 것을 느낄수 있었다.

(편견 없는) 프로그래머가 되기 위한

프로그래밍 언어를 배울 때 처음 접하는 것들이 “변수, if, for” 등일것이다. 이후에 각 언어마다 Class, 함수형 언어, 스코프, 클로져 등 각자가 지닌 특징을 추가적으로 공부하게 된다. 이 때 하나의 언어만을 배우게 되면 해당 언어가 프로그래밍 언어의 전부인줄 알고 좁은 세계에 갖히게 되는 경향이 있다.

이는 마치 한국에서만 살고 한국어만 사용하는 (나 같은) 사람들은 한국 문화를 세계의 틀인것 처럼 생각하고 살아가는 경향이 있는것과 유사하다고 보여진다. 예를 들면 JAVA만 사용해보거나 프로그래밍 언어 == JAVA 라는 식의 사고방식이 있다면 JAVA스러운 해결책이외의 다른 모든 해결책은 틀린것으로 생각하는 실수를 범할지도 모른다. 반대로 Javascript만을 사용하면 JAVA의 Class 없이 시작할 수 없는 객체지향적인 느낌을 “장황하고 쓸데없는 부가적인 코드가 많아서 별로다”라는 느낌만 가지고 평생을 지낼지도 모른다.

이 책은 초보개발자가 흔하게 가질 수 있는 이러한 편견 또는 좁은 세계관을 넓혀 줄 수 있는 책이 아닐까 싶다. 또한 모든 언어나 개발론 방법론들은 특정한 “문제를 해결하기 위해” “사람이 고안해낸 방법”이라는 걸 알게 되고, 각각의 방법이 주어진 문제 상황마다, 프로그램마다 최적의 방법인지 좋지 않은 방법인지 항상 바뀔 수 있다는걸 어렴풋하게나마 알게 해준다.

문법적인 내용이 대부분이라…

이 책은 문법적인 내용이 대부분이라 클리핑할 내용은 사실 별로 없었다. 현재는 Javascript를 배우고 사용하는 중이라 책 중 “클로져”에 대한 내용이 가장 흥미도 있게 읽었는데, 5Page내외로 해당 내용이 끝나버려 아쉽기도 했다. 아무튼… 클리핑할 내용은 많이 없었지만 좋은 책임은 분명하다.

특히 나처럼 이제 개발에 문턱에 들어서는 개발자들에겐 꼭 읽어보면 좋을 책이 아닐까 싶다.

글을 쓰고 보니 다른 분들도 이 책을 추천할때 그냥 “꼭 읽으면 좋을 책” 정도의 멘트로 추천하고 별 이야기를 안하던 이유가 있는것 같다. 읽으면 정말 좋은 책이지만, 장황하게 설명할 만한 내용은 아닌 느낌… ㅎㅎ 🤣


아래는 클리핑입니다.

언어 설계자의 의도를 이해하자

프로그래밍 언어도 사람이 만든 것이다. 언어 설계자는 어떤 문제를 해결하기 위해 그 언어를 만든 것일까? 그 언어가 어떤 흐름을 따라 만들어졌는지 알게 되면 그 기능이 왜 필요한지 납득할 수 있게 된다.

언어에 의존하지 않는 보편적인 지식의 습득

그러나 개별 언어 지식이 5년 후, 10년 후에도 도움이 될지는 아무도 모른다. 몇 가지 언어를 비교하거나 언어의 역사나 이유를 조사함으로, 언어가 바뀌어도 통용할 수 있는 이해력을 기를 필요가 있다.

프로그래밍 언어 탄생의 목적

1979년에 FORTRAN 설계자인 John Backus는 다음과 같이 말했다. ‘내가 이룬 성과의 대부분은 나태함에서 오고있다. 나는 프로그램을 짜는 것을 좋아하지 않았다. 그래서 프로그램을 쉽게 짤 수 있는 시스템을 만들었다.

나태 - 프로그래머의 삼대 미덕

Perl의 설계자인 Larry Wall은 저서 에서 프로그래머가 가져야 할 3 가지 자질로서 ‘나태, 조바심, 자만심’을 제안했다. 이것이 프로그래머의 삼대 미덕이라고 불린다. 그 중 가장 중요한 자질 ‘나태’를 여기서 소개한다.

나태

전체 에너지 소비를 줄이기 위해 대부분의 능력을 집중하는 기질, 이렇게 노동력을 줄이기 위해 만든 프로그램은 다른 사람들도 사용하게 되며, 그 프로그램에 관한 질문에 일일이 답하는 수고를 덜기 위해 문서를 만들게 된다.

(제 2 미덕 : 조바심 - 프로그램이 느린것을 용납하지 않는 것.)

(제 3 미덕 : 자만심 - 틀린 것을 방치하지 않는 것.)

… 즉, 같은 성과를 달성하는 다수의 방법 중 가장 생산성이 높은 것을 선택함을 의미한다.

컬럼 1) 필요한 부분부터 흡수한다.

방대한 정보 앞에서 좌절하고 있을 때 어떻게 하면 좋을까?

책이나 자료 전체가 동일한 정도로 중요하다고 말할 수 없다. 목적이 명확하고, 목적 달성을 위해서 어디를 읽어야 할지 알고 있다면 다른 페이지는 신경 쓰지 말고 바로 그곳을 읽도록 한다.

전체 모두 읽지 않은 것이 께름칙한가? 하지만 좌절하고 전혀 읽지 않는 것보다는 낫다. ‘전부 읽지 않으면’이라는 완벽 주의가 배우고자 하는 동기를 짓누르고 있다면, 버려버리는 것이 낫다. 동기는 매우 중요하다.

이 전략을 사용하기 위해서는 읽고 싶은 부분이 어디인지 대략적으로 전체적인 구조를 파악하고 있어야 한다. 만약 그게 어려우면 다음 전략인 ;대략적인 부분을 잡아서 조금씩 상세화한다.’를 시험해보도록 하자.

컬럼 2) 대략적인 부분을 잡아서 조금씩 상세화한다

… 책이나 문서에는 목차가 있다. 목차를 보면 전체 구조를 대략적으로 알 수 있다. 그리고 나서 본문을 속독으로 읽어나간다. 자세히 보지 않고 우선은 소제목이나 강조 부분, 그림과 그림 제목 등을 본다.

소스 코드를 읽을 때는 우선 디렉터리 구조와 파일명을 본다. 그리고 파일을 속독으로 읽고 거기서 정의하고 있는 함수나 클래스 이름, 자주 호출되는 함수명 등을 몬다.

이 방법들에는 ‘우선 대략적인 구조를 잡고, 조금씩 상세한 정보로 접근한다.’는 공통점이 있다. 이것이 기본 원칙이다.

컬럼 3) 끝에서부터 차례대로 베껴간다.

… 최후의 수단은 “끝에서부터 차례대로 베껴간다.’가 있다.

지식의 밑바탕을 만들기 위해서 교과서를 그대로 베껴 쓴다. 이것이 ‘베끼기’라 불리는 기술이다. 지식이 없는 상태에서 고민하는 것은 무익하기 때문에 우선 아무것도 생각하지 않고 지식을 복사하는 것이다. 이 이상의 방법은 없다.

병행 처리 챕터에서…

… 역사를 따라가 보면 공유 ⇒ 비공유 ⇒ 공유, 협력 ⇒ 비협력 ⇒ 협력, 하드웨어 ⇒ 소프트웨어 ⇒ 하드웨어 같이 , 마치 결정하지 못하고 2가지 방법 사이에서 방황하고 있는 듯 보인다. 한쪽만 배우지 말고 양쪽 모두 익혀서 균형 있게 사용하는 것이 바람직하다.

댓글