CS 스터디에 참여하게 됐다. 스터디 팀장이 진행 중인 다른 스터디를 구경했는데, 팀장의 강의가 아주 마음에 들었다. 귀에 쏙쏙 들어왔다.
스터디는 모든 팀원이 한 주에 정해진 진도까지 공부를 한 뒤 발표 준비까지 해오고 사다리 타기를 해서 당첨된 사람이 발표하는 룰이다.

인생에 발표란 없는 사람으로서 심장이 두근두근한다.🤢🤢

1회차 Chapter 1

~34p

기술 면접과 실무를 위한 컴퓨터 과학

컴퓨터 과학이란 연산, 정보, 자동화에 대한 학문이다.
연산의 대상, 정보의 대상, 자동화의 대상은 곧 프로그램이다.

따라서 프로그램의 관점에서 볼 때 컴퓨터 과학은 프로그램 작동의 근거를 설명하는 학문이라고도 정의할 수 있다.

프로그램이 어떻게 연산 되는지, 프로그램을 이루는 정보는 어떻게 구성되고 또 어떻게 관리 되는지, 그리고 특정 프로그램의 기능은 어떻게 자동화할 수 있는지를 컴퓨터 과학을 통해 알 수 있다.

AI가 사람의 생산성을 이미 능가한 시대가 되었고, 프로그래밍 언어의 문법만 맞추거나 프레임워크나 라이브러리의 기초 사용법만 익히고 끝내기에는 사람보다 훨씬 더 빠르게 코드를 작성해 주기 때문이다.

물론 생성형 AI 업체에서는 생성형 AI가 언제나 정확성이 보장된, 일관된 책임질 수 있는 답변을 할 수 있는 것은 아니라고 약관에 명시해 두었다.

우리가 코드를 짜다 막히는 부분이 있을 때 AI 도움을 받으면 자꾸 오류가 나는 것이 그 때문이기도 하다.

그래서 우리는 프로그램 작동의 근거를 설명하고, 문제를 진단할 수 있는 역량이 최근에는 그 무엇보다 중요해지게 됐다고 생각한다.

단순히 연산, 정보, 자동화의 학문을 넘어서 오늘날 살아 남는 개발자가 되기 위한 키라고도 생각한다.

  1. 원리를 모르는 개발자는 뛰어난 개발자가 아니다.

프로그램 개발의 목적은 '일단 작동하게 만드는 것'이 아니라 '제대로 작동하게 만드는 것'이다.

일단 작동만 하는 코드는 처음엔 쉬워 보일 수 있지만 나중에 프로그램을 사용하는 유저들이 생기고 프로그램의 유지보수까지 고려해야 할 시기가 되면 겉보기에만 작동하는 것처럼 보였을 뿐이었다는 것을 깨닫게 된다.

언제든 개발자가 간과했던 지점이 발견될 수 있고, 버그도 생길 수 있다.

예를 들어 프로그래밍 언어의 기초 문법이나 프레임워크, 라이브러리의 기초 사용법만을 학습한 개발자 지망생을 예로 들어보자.

강의나 책에서 제시하는 코드를 무작정 따라 해 일단 작동만 하는 프로그램을 만들기에 성공했지만
누구나 한 번에 완벽한 프로그램을 개발하기는 어렵고, 예상했던 것보다 많은 버그를 만나게 된다.

문제의 원인이 무엇인지도 특정하기 어렵고 강의나 블로그에서 접하지 못하는 버그도 있다.

AI의 도움을 받아봤지만, 복사 붙여넣기를 통해 변경한 코드들은 또 다른 문제를 낳게 된다.

시간이 갈수록 점점 복잡해지고 디버깅 시간이 길어지다가 뒤늦게 프로그램의 실행 원리를 파악하고 싶어도 어디서부터 손을 대야 할지 모르는 지경에 이르게 된다.

이렇게 만들어진 코드는 스파게티 코드(spaghetti code)라고도 부른다.

뛰어난 개발자는 일단 작동만 하는 프로그램이 아니라 제대로 작동하는 프로그램을 만든다.
이들은 자신이 작성한 코드가 어떤 과정을 거쳐 실행되는지 명확하고 자세하게 설명할 수 있다.
자신이 개발하고 실행하는 프로그램의 원리를 이해하고 있기 때문에 문제를 맞닥뜨리더라도 어디가 문제인지, 어떻게 해결해야 하는지 빠르게 판단할 수 있다.

개발자는 본인이 작성한 코드에 책임을 져야 하고,
잘못된 코드로 인해 프로그램에 큰 문제가 발생하거나 사용자가 불편을 겪는다면
그것은 코드를 작성한 개발자의 책임이다.

프로그램의 실행 원리를 자세히 설명하기 위해서는 컴퓨터 과학(computer science)을 이해해야 한다.
흔히 앞 글자를 따서 CS라고 줄여 부른다.

단순 프로그래밍 언어의 기초 문법, 프레임워크/라이브러리의 사용법을 넘어 프로그램의 작동 원리를 이해하고 설명하기 위해서는 CS에 대한 학습이 필요하다.

컴퓨터 과학적 지식의 학습 목적은 이해와 적용에 가깝지, 단순히 키워드를 암기하는 것과는 거리가 있다.
마찬가지로 기술 면접의 목적 또한 지원자의 암기력을 테스트하기 위함이 아니라, 실무를 위한 개발의 재료를 얼마나 가졌는지를 확인하기 위함이다.

예를 들어, 트리의 모든 노드를 순회하는 방법을 설명해 보세요. 이 기능을 멀티스레드로 구현한 것과 멀티프로세스로 구현하는 것에는 어떤 차이가 있나요?

라는 질문을 한다면 단순 암기만으로 지식을 습득했다면 이런 변형 질문들에 제대로 답하기가 어려울 것이다.

책에서는 공통 지식으로 컴퓨터 구조, 운영체제, 자료구조, 네트워크, 데이터베이스에 대해 배울 예정이다.

앞으로 스터디에 참여 하게 됐으니, 해보자고.

0개의 댓글

관련 채용 정보