길잡이

CS쌓는 법 길잡이
이 글은 예전에 CS공부에 대해 찾아보았을 때에는 못봤던 글인데 당시 내가 찾아봤던 여러 글 속에 담긴 내용이 한 곳에 모아져있다.
나처럼 주변에 전공자가 전혀 없는 환경이라면 저분 글을 읽고 공부계획을 봐도 좋을 것 같고, 나는 온라인 서점 사이트들에 나와있는 판매량 순위도 자주 봤었다.

책 읽는법이 뭐라고

사실 이 글을 쓸까 말까 굉장히 많이 고민했다.
근데 우리 알고리즘 스터디(초중급자 모임)원중 한분이 OO님은 비전공인데 그 책 어렵지 않으셨어요?라는 스몰토킹을 해주셔서 쓰게 되었다.
아마 그분과 나만 비전공자여서 어떻게 읽어냈냐는 의도로 질문하셨던 것 같은데 생각해보니 책을 추천해주는 사람은 많았어도 그것들을 어떻게 읽어낼지에 대해 알려주는 사람은 아무도 없었다.

글자 그대로만 읽지 않기

일단 내가 추천받았던 개발 관련 도서들(종만북,코인액 등등)은 대부분 자상하지만 자상하지 않다.
2000년대 이후 미래파 시인들이 자신만의 언어와 세계를 구축해나가며 정서 위주의 글들과 멀어졌듯 개발 관련 도서들 역시 그들만의 언어가 있는 것 같다.
그런데 나는 그것을 늦게 깨닫는 바람에 대충 개발도서 읽는 법을 익히는 데에만 1년 반정도는 삽질을 했던 것 같다.

생각의 방향을 바꾸자

전공에 따라 다르겠지만, 컴퓨터 혹은 수학과 정말 1도 관계가 없는 전공이라면 여태까지 자신이 읽어온 책과 이쪽 책을 읽는 방식을 다를 수 있다.
조금 뒤에서 더 이야기하겠지만 시선자체를 바꾸자.

계속해서 질문하고 생각하자

내가 디아프 수업떄 교수님께 자주 들었던 이야기가 구현보다 내부 자체 원리에 집중하기 기술/철학적 개념이라는 말이었다.
이를테면 Git은 철학일까 기술일까와 같은 것들인데 어떠한 기술이 탄생하는 데에는 그것을 필요로 하는 자들의 철학이 있다.
그것을 쫓아가면 좀 더 쉽게 된다.
이것이 어렵다면 단순하게 해석하면 된다.
예를 들어 책에서는 버스 인터페이스의 역할에 대해 서술했다고 가정해보자
그렇다면 우리는 버스 인터페이스가 없다면 어떤 일이 생길지에 대해 상상해보는 것이다.
이렇게 예시를 보면 별 거 아닌 거 같지만 의외로 대답 못할 사안들이 많다.
그러면 모르는 것이다.
의외로 초심자 수준의 공부에서 모르는 것들은 구글링하면 거의 다 나오고, 애매한 것들은 GPT에게 물어보면 된다.
여기서 주의할 것은 내가 GPT에게 물어보니, 가끔 이상한 소리 할 때도 있어서 GPT의 대답을 구글링 해보면 내가 뭘 더 찾아봐야할지도 명확하게 알 수 있게 된다.

모두 수용하지는 말자

혹시나 내 말을 듣고 이상한 고집 같은 것을 부리라는 뜻으로 받아들이면 곤란하다.
그러나 내가 어떤 상황에서 이것을 사용한 특별한 이유가 있다면 설득하고 질문하고 맞받아쳐보는 것도 필요하다.
나같은 경우 정중하게 저는 oo하게 생각해서 xx를 사용했는데 혹시 다른 방법은 뭐가 있을까요라고 대부분 친절하게 의견을 나눌 수 있었다.
(물론 우리는 애초에 스터디여서 저리 안해도 대답해주지만 질문이라는 걸 할 때에는 생각을 하고 해야한다고 생각한다.)
저렇게 이야기했을 때 상대방도 xx에 그런 장점이 있는지는 몰랐다와 같은 답변이 돌아오기도 한다.
그리고 내가 설사 정말 비효율적으로 짜는 실수를 했더라도 이쪽에서 좋은 태도로 말하면 상대방도 친절하게 알려주는 경우가 훨씬 많았다.
만약 상대가 대답을 안해주면 뭐 어떤가? 어차피 저렇게 생각을 정리하는 과정에서 나도 몰랐던 내 실수를 스스로 깨닫기도 한다.

사람을 만나자

나는 예술 고등학교와 예술대학을 졸업했다.
그렇게 예고 입시 1년, 예술고등학교 3년, 예술대학까지 거치고나니 내 주변 지인의 80%는 예술하는 친구들이었고 다들 비슷한 목표로 이야기를 나누는 사람들이었다.
그래서 나는 남들 다 해본다는 알고리즘 스터디 같은 것도 우테코 프리코스가 아니었다면 기회가 없었다.
다른 사람의 코드를 통해서 배우는 것이 정말 많다.
나는 개인적으로 누군가의 코드를 처음 읽을 때에는 말 그대로 감탄했고, 2회독 때에는 구조를 봤고 3회차부터 인상이나 궁금증 등을 찾아보며 코드리뷰를 작성했었다.
물론 시간은 더럽게 오래 걸려서 우리 스터디원 중에 내가 제일 리뷰를 늦게 올렸던 기억이 난다.
결과적으로 내가 코딩을 시작 한 뒤 2년간 배운 것보다 프리코스 4주간 배운 것들이 양도 많고 질도 우수했다.

별거 아닌 팁을 투척하자면

백준을 풀 때에도 구조에 대해 고민하는 시간도 필요한 것 같다.
나는 코딩을 늦게 시작했다는 생각때문에 각 알고리즘의 코드 기본 틀(?)을 외우는 데에 급급했다.
물론 코딩테스트를 치르기 위해서는 문제를 시간 내에 빠르게 푸는 것도 중요하다.
자주 출제되는 알고리즘은 타닥타닥 칠 수 있어야하지만, 우리가 지금 문제를 푸는 이유 중 하나는 내 것으로 만들기 위해서다.
내 것이 되기 위해서는 고민하는 시간이 필요했는데, 나는 너무 마음이 급해서 그걸 아예 외면했고 이제야 그 부분들을 채우고 있다.
혹시 처음 시작하는 분이 이 글을 본다면 삽질을 해도 괜찮지만, 나만큼은 하지 마셨으면 한다.
시선이 한번 생기면 탄력이 붙는다. 정말이다. 거짓말 아니다.
비전공이라면 그 관점을 만드는 시간을 아까워 할 필요가 없다.
이 관점은 가성비가 정말 좋으니까 말이다.
참고로 나는 이런 사고의 전환이 된 다음 기초 공부를 하는 속도가 4배는 빨라졌다.

태그:

카테고리:

업데이트:

댓글남기기