✅ 이 서평은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
AI의 코드 생산성이 이미 인간을 능가하는 시대가 왔다. 이러한 환경에서 필자는 개발자에게 필요한 핵심 역량이 '근거를 설명하는 능력'이라고 주장한다. 특정 코드나 프로그램의 작동 원리와 성능에 대한 근거를 제시하고 설명하는 능력이야말로 AI 도구에 종속되지 않는 진정한 역량이라고 강조한다.
저자는 코드와 프로그램의 근거를 설명하는 능력의 상당 부분을 컴퓨터 과학에서 찾을 수 있다고 본다. 이 책의 목적은 독자들이 컴퓨터 과학에 대한 이해를 깊이 해 코드와 프로그램의 작동 원리를 설명할 수 있는 능력을 기르는 데 있다.
특정 코드 혹은 프로그램이 어떻게 작동하고, 왜 특정 성능을 내는지에 대한 근거를 제시하고 설명하는 능력이야말로 AI 도구에 종속되지 않는 진짜 역량이다라는 말이 이 책의 핵심 메시지이다.
본문에서 설명하는 모든 소스 코드와 참고 자료는 필자의 깃허브에서 확인할 수 있다. 책과 관련된 모든 질문과 제안은 깃허브에 남기면 된다. 아래 CSnote 페이지는 개발자를 위한 컴퓨터 과학 용어집이고 1000개 이상의 컴퓨터 과학 관련 용어를 한 눈에 파악할 수 있다.
https://github.com/kangtegong/cs
이 책의 집필 의도를 알고 싶으면, 아래 저자의 유튜브 채널에 가서 보면 더욱 좋을 것 같다.
https://www.youtube.com/watch?v=PHpELusI-pg
책 구성
컴퓨터 과학 지도 그리기
에서는 관련 주제가 무엇인지, 어떤 원리로 실행되는지 주제의 흐름을 파악해 학습의 방향을 설계한다.
여기서 잠깐
을 통해 보충 설명, 참고 사항, 관련 용어 등으로 학습을 보완하고 NOTE
를 통해 혼동하기 쉬운 내용이나 알아두어야 할 사
항 등을 정리한다.
기술 면접과 실무를 위한 컴퓨터 과학
원리를 모르는 개발자는 뛰어난 개발자가 아니다
프로그램 개발은 작동하는 프로그램을 만드는 작업이다. 그러나 프로그램이 단순히 작동하는 것만으로는 개발의 목적을 완전히 이룬 것이라 할 수 없다. 프로그램 개발의 진정한 목적은 '제대로 작동하게 만드는 것'이기 때문이다.
프로그래밍 언어의 기초 문법이나 프레임워크, 라이브러리의 기초 사용법만을 학습한 개발자 지망생의 경우를 생각해보자. 이들은 '일단 작동만 하는 프로그램 만들기'를 목적으로 프로그래밍 강의나 책에서 제시하는 소스 코드를 무작정 따라 하며 어느 정도 작동하는 웹 사이트를 만들 수 있다. 하지만 실행 원리를 제대로 이해하지 못한 채 만든 프로그램은 곧 많은 버그에 직면하게 된다.
이런 상황에서 개발자 지망생들은 당황할 수밖에 없다. 본인이 작성한 코드가 어떤 과정을 거쳐 실행되는지 설명할 수 없기 때문이다. 기초적인 지식은 단순한 프로그램 개발에는 충분할 수 있으나 확장이나 유지보수, 실행 과정의 전반적인 이해에는 부족한 경우가 많다.
…
이러한 지식 수준의 불일치로 많은 개발자 지망생들이 어려움을 겪는다. 이때 흔히 사용되는 방법이 예제 소스 코드를 찾아 복사-붙여넣기 하는 것이다. 이렇게 급하게 붙여 넣은 코드는 시간이 지날수록 복잡해지고 이해하기 어려워진다. 결국 프로그램의 실행 원리를 파악하고 싶어도 어디서부터 손을 대야 할지 모르는 지경에 이르게 되며, 이렇게 만들어진 코드를 '스파게티 코드'라고 부른다.
이는 ChatGPT를 사용할 때도 마찬가지다. 코드의 실행 과정을 이해하지 못한 채 개발을 지속하는 것은 결국 프로그램 개발을 점점 더 어렵게 만든다.
뛰어난 개발자는 자신이 작성한 코드의 실행 과정을 명확하고 자세하게 설명할 수 있다. 여러 개발자가 협업해 만든 프로그램을 유지보수하고 문제를 진단하고 해결하는 데 필수적인 능력이다. 따라서 뛰어난 개발자일수록 문제를 정의하고 해결할 수 있어야 하며, 프로그램의 실행을 제대로 이해하고 그 과정을 설명할 수 있는 능력에서 시작된다.
프로그램의 실행 원리를 자세히 설명하기 위해서는 컴퓨터 과학에 대한 이해가 필수적이다. 사과가 떨어지는 현상을 물리학으로 설명하듯, 프로그램의 작동 역시 컴퓨터 과학을 통해 이해할 수 있다. 단순히 프로그래밍 언어의 기초 문법이나 프레임워크/라이브러리 사용법, 메서드의 종류를 암기하는 것만으로는 뛰어난 개발자가 되는 데 한계가 있다.
따라서 프로그램의 작동 원리를 깊이 이해하고 설명하기 위해서는 컴퓨터 과학(CS)에 대한 학습이 반드시 필요하다. 이는 많은 기업들이 기술 면접 등을 통해 입사 지원자의 컴퓨터 과학적 지식을 검증하는 이유이기도 하다.
기술 면접에 대비하는 컴퓨터 과학 지도 그리기
기술 면접에서 가장 강조하고 싶은 점은 컴퓨터 과학이 단순 키워드 암기 과목이 아니라는 것이다. 컴퓨터 과학적 지식의 학습 목적은 '이해와 적용'에 가깝지 단순히 키워드를 암기하는 것과는 거리가 멀다. 마찬가지로 기술 면접의 목적 또한 지원자의 암기력을 테스트하기 위함이 아니라 심층적 개발을 위한 재료를 얼마나 갖고 있는지 확인하기 위함이다.
예를 들어, 컴퓨터 과학 관련 키워드를 그대로 달달 외워 갔다고 가정해보자. 막상 기술 면접에서는 다음과 같이 출제될 수 있다.
Q. 웹 브라우저에 https://www.google.com 을 입력하고 웹 페이지가 구현되기까지의 과정을 설명해보세요.
Q. 멀티 프로세스와 멀티 스레드로 구현한 것에는 어떤 차이가 있나요?
출제 키워드나 예상 답변을 단순 암기했다면 이런 변형 질문들에 적절히 답변하기 어렵다. 실무에서 발생하는 문제 해결 시에도 마찬가지다. 문제를 명확히 정의하고 해결에 필요한 컴퓨터 과학적 지식을 떠올려 활용할 수 있다면 차근차근 해결해 나갈 수 있다. 프로그램 실행 원리의 이해가 실무 문제 해결에도 도움이 된다는 점을 고려하면, 개발 실무를 위한 컴퓨터 과학과 기술 면접을 위한 컴퓨터 과학이 다르지 않음을 알 수 있다.
이 책은 기술 면접에 자주 출제되는 컴퓨터 과학적 지식 대부분이 개발자가 반드시 알아야 할 지식이라는 전제하에 집필되었다. 국내외 다수의 개발자 채용 과정에서 출제되는 기술 면접 문항들을 카테고리별로 살펴보면, 주요 기술 면접 분야와 대부분의 기술 면접에서 강조하는 컴퓨터 과학적 지식이 무엇인지 파악할 수 있다.
총평
요즘과 같이 생성형 AI가 대부분의 코드를 작성해주는 시대에 가져야 할 기본적인 자세가 아닐까 싶다. 이 서평을 쓰고 있는 필자 역시 컴퓨터 전공을 이수하면서도 컴퓨터 과학에 소홀했던 경험이 있다. 라이브러리 사용법을 익히고 빠르게 결과물을 내는 데 급급해 책에서 언급한 '스파게티 코드'를 많이 만들어냈다. 당시에는 이를 불가피한 현상으로 여기며 새로운 프로젝트 개발에만 집중했다.
하지만 최근 부스트캠프 경험을 통해 학교에서 배운 지식이 구시대적인 것이 아니라 현재의 웹 개발과 매우 밀접한 관련이 있음을 깨달았다. ‘A는 B이다’와 같은 단순 암기식 학습이 아닌, 기반이 되는 컴퓨터 과학 지식을 응용해 웹 기술이 발전했고, 이를 이해해야 제대로 된 코드를 작성할 수 있다는 점을 깨달았다. 이 깨달음이 현 책의 서평을 작성하게 된 결정적 계기가 되었다.
그저 공장처럼 서비스들을 찍어내기 위한 사람들에게는 이 책이 필요 없을 수 있다. 또한 전공 지식을 이미 깊이 있게 잘 이해하고 있는 사람들에게도 다소 깊이가 부족할 수 있다. 하지만 평소에 전공 지식의 중요성을 간과했거나 컴퓨터 과학 지식 간에 연관성에 대해 알아가고 싶은 사람들에게는 최고의 책이 될 것이다.
'Life > 독서 기록' 카테고리의 다른 글
[서평] 효과적인 활용을 위해 - 이펙티브 러스트 (1) | 2024.10.25 |
---|---|
[서평] 중요한 내용만 빠르게 - 컴퓨터 구조와 운영체제 핵심 노트 (2) | 2024.09.29 |
[서평] 모던 자바 기능으로 전문가 되기 - 기본기가 탄탄한 자바 개발자 (9) | 2024.09.04 |
[서평] 인공지능 시대의 경제 - 금융 AI의 이해 (3) | 2024.09.04 |
[서평] 실무로 통하는 타입스크립트 (1) | 2024.07.28 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!