내게 실용적이었던 프로그래밍 공부 방법들

PlanB·2019년 5월 30일
765
post-thumbnail

나는 보통 재능이나 공부의 양으로 친구들의 성장 속도를 따라가기 힘들었다. 그래서 '무작정 열심히'보단, '의식적인 연습'을 지속해 나가야 했다. 효율이 높은 방향으로 공부를 하다 보니까, 내가 어떤 방식으로 공부를 하는 지 어느 정도 정리가 됐다. velog의 독자들은 '경험기'같은 글에 니즈가 꽤 있는 것 같아서, 부족하지만 내 공부를 위한 매개체들을 쭉 소개하고, 내가 어떻게 공부하는지를 짧게 이야기하고자 한다.

지식을 전달하는 책은 목차를 위주로

나는 취사선택을 좋아한다. 그냥 SQL UNION 쿼리를 주제로 다룬 아티클만 해도, 온/오프라인에 셀 수 없이 많다. 책을 대하는 태도도 비슷한데, 아무리 유명하고 좋은 책이라고 해도 나랑 안 맞으면 그만이다. 그리고 보통 지식을 전달하는 내용이 위주인 책은, 목차만 보고 그대로 구글링해서 공부하는 편이 취사선택에 유리했다. 'SQL 첫걸음'이라는 책을 읽었을 때 효율이 좋았다. 새로운 걸 공부할 때마다 이 방법을 사용한다.

단, 희귀한 주제의 책에는 적용하기 어려운 경우가 조금 있었다. 경험적으로는, '프로그래밍 언어론', '객체지향의 사실과 오해'가 그랬다.

그냥 재밌는 토픽은 밤마다 읽자

리팩토링, SQL Antipatterns, 알고리즘 도감처럼 그냥 재밌어 보이는 주제를 다루는 책은 밤마다 심심풀이로 읽기 좋았다. 엔지니어링 쪽은 보통 제목이 재밌으면 내용도 재밌는 경우가 많아서, 굳이 이리저리 조사하지 않고 그냥 사는 편이다.

온라인

Stackoverflow

주니어 입장에서 stackoverflow는 그냥 '모르는 거 생기면 다 해결할 수 있는 곳'이다. 그만큼 지식이 많은 곳이라, 내가 좋아하는 태그 몇 개 가지고 가끔가다 한 번씩 검색해 본다. 나도 답변할 수 있을만한 질문이 올라오면 종종 답변을 달기도 한다. 영어로 뭔가를 설명하는 것도 정말 좋은 경험이다. 습관적으로 들어가진 않고, 어쩌다 생각날 때 한 번씩 들어가 본다.

Reddit

프로그래밍 서브레딧에 정말 재밌는 글이 많이 올라온다. 프로그래밍이라는 카테고리도 주제가 굉장히 광범위해서, 특별히 어떤 지식을 얻기 위해서 보기보단 이런저런 요즘의 기술 이야기들을 보기 좋다. 출퇴근 길이나 식당에서 밥 기다릴 때 페이스북 대신 하는 느낌으로 들어가 본다.

유튜브

유튜브에는 개발을 주제로 한 유튜브 채널들이 생각보다 꽤 많다. 나는 Engineer ManNomad Coders라는 채널을 구독하고 있다. 유튜브라는 플랫폼의 특성 상 파이썬으로 5분만에 스네이크 게임 만들기같은 재밌는 챌린지들로 영상을 올리곤 한다. 어차피 자기 전이나 일 하다가 쉴 때마다 게임영상 보러 유튜브에 들어가는 거, 이런 것들도 한 번씩 섞어서 본다. 영어 리스닝에 도움이 되기도 하고, 그냥 한 번 보기 시작하면 재밌게 봐진다.

Velog

velog도 정말 여러 분야의 글이 한 곳에 모이는 플랫폼이며, 아두이노를 이용한 사볼콘 제작기같이 재밌고 말랑말랑한 주제의 글이 트렌딩에 올라 잘 대우받는 곳이라서 reddit처럼 sns 하듯이 읽기 좋다. 좋은 글을 찾는 것에 대해 비용이 정말 적게 소모돼서 좋은 것 같다. 가끔 글 쓰러 들어올 때, 트렌딩에 올라와있는 글 몇 개씩 읽곤 한다.

44bits.io

프로그래밍과 클라우드 관련 글들이 올라온다. 좋은 글을 써낼 수만 있으면 누구나 기고할 수 있는 형태인 것 같다. 백엔드 편향적인 지식을 원하는 내게는 정말 그냥 필독 수준의 블로그다. AWS VPC, Docker, Terraform같이 이미 잘 쓰여진 글이 많은 주제를 가지고, 그들보다 훨씬 더 잘 써낸다. 글 올라오면 그냥 무조건 읽는다.

feedly에 개인 블로그들 rss 모아놓기

feedly는 rss 주소들을 넣어두면 그걸 계속 조회해서 최신 글 같은 것들을 정리해주는 툴이다. 나는 좋은 개인 블로그가 보이면 rss 주소 얻어서 여기다 모아둔다. medium같은 데서 유저 팔로우하는 것과 비슷한 논리다.

면접질문 풀어보기

많은 사람들이 알고리즘 문제풀이를 하듯, 나는 면접질문을 풀어보며 insight를 얻어내곤 한다. 면접질문은 검색하면 정말 많이 나오기 때문에, 좋은 공부 리소스가 될 수 있다.

코드와 관련된 것들

미니 프로젝트

공부하고 싶거나, 만들고 싶은 게 생겼을 때 '해야지'하고 미루면 끝도 없다. 떠오르는 게 있으면 바로 미니 프로젝트를 해보는 편이다. 파이썬으로 스네이크 게임 만들기, Play 스토어 크롤러 만들기, Django로 게시판 서비스 API 만들어보기, Flutter로 조그만 가계부 만들어보기 등이 그 예다. 지식의 범위를 넓히는 데에 도움이 많이 된다. 모든 개체를 판단할 때는 그 개체를 공부해야 하므로, 좀 더 잘 알고 깝치기 위함이다.

클론 코딩

이미 나와 있는 서비스의 기획과 디자인을 베끼고, 구현은 내가 직접 하는 것을 클론 코딩이라고 부른다. 결과물을 알고 있는 상태에서, 어떻게 개발되었는지는 모르니 내가 여태껏 배웠던 스킬들을 점검하기에 정말 좋다. 넷플릭스를 클론코딩하는 과정에서 동영상 스트리밍을 MPEG-DASH로 구현했다고 치면, 내가 찾아낸 방법과 넷플릭스 팀이 찾은 방법은 아마 다르겠지만 나만의 방법을 찾아서 결과물을 만들었다는 걸 매우 보람차할 것이다. 나는 클론 코딩을 할 때, 정말 빡센 서비스 하나 잡아서 나를 많이 힘들게 만드는 편이다.

클론 코딩은 정말 실용적인 프로그래밍 공부 방법이라고 생각한다. 그러나 한 번 시작하고 나면 잘 끝내야 효과가 있고, 그렇게 되기까지 소모되는 자원이 많으므로 6개월에 한 번, 작업 시간 200시간 미만 정도의 서비스를 잡아서 해보는 정도다.

코드 리딩

당장 뭔가를 해결해야 하는 상황에서는, 라이브러리를 아무 생각 없이 가져다 쓸 때가 많다. 그러다가 튜토리얼 몇 번 보고 나서는 '항상 쓰는 라이브러리'로 굳혀지는 경우가 많았는데, 에러를 아무리 검색해도 안 나와서 디버깅을 걸고 라이브러리의 코드를 따라갔던 것을 시작으로 코드 리딩을 하기 시작했다. 보통 star 많은 라이브러리는 좋은 설계와 코드 베이스를 가지고 있어서 배울 점이 정말 많다. 가끔 아무 것도 하기 싫을 때, 에디터 열어 놓고 대충 자주 쓰는 라이브러리 끌어다가 코드 쳐다보는 시간을 가진다.

정리

글 쓰기

블로그를 처음 시작했을 때는, 1일 1글이고 튜토리얼이고 하며 괜히 진부한 주제에다 글을 더 잘 써보려고 용쓰다가 시간 낭비를 너무 했었다. 예로, 파이썬에서 for문 다루는 건 10분이면 정리할 수 있는데, 그걸 글로 옮기려고 5~6시간을 썼으니 말이다. 게다가 그렇게 시간을 많이 쏟아도, 똑같은 내용을 더 잘 설명한 글은 차고 넘쳤다.

반대로 지금은 정말로 '글로 써야겠다'싶은 주제가 생각났을 때만 글을 쓰고 있다. 예로 얼마 전에는 파이썬으로 URL 가지고 놀기라는 3편짜리 글을 쓰며, URL에 밀접한 관계가 있는 기능을 리팩토링하며 얻게 된 지식들을 정리할 수 있어서 좋았다.

선천적으로 글을 잘 쓰는 사람이 아니고서야, 적은 시간 내에 좋은 글을 쓰는 건 정말 오랜 시간동안 단련이 되어야 한다. 따라서, 글을 쓰는 건 보통 투자한 시간에 비해 공부의 양이 적다고 생각한다. '진짜 이 글은 써보고 싶다'라는 생각이 들기 전에는 굳이 실행에 옮기지 않는 편이다.

삽질 정리

개발과 관련된 작업을 진행하다 보면 필연적으로 삽질을 한다. 그럴 때마다 그 주제들을 따로 어딘가에 적어두고, 자유시간이 있을 때 그들을 정리하는 편이다. 주제에 대해 좋은 글을 찾고, 읽고, 글 링크와 함께 한두 문장으로 내용을 정리한다. 삽질한 게 없으면 그냥 평소에 알고 싶었던 주제들을 공부해서 정리한다. 그렇게 만들어진 게 Let's Study라는 저장소다. 나만의 TIL이라고도 할 수 있겠다.

내가 공부를 지속하는 방법

나는 챌린지 설정 - 공부 - 챌린지 수행 - 피드백 - 휴식 사이클을 짧게는 반년, 길게는 1년 정도마다 반복한다.

  • 챌린지 설정 : 이번 사이클에서 할만한 챌린지를 설정한다. 'React를 공부해서 풀스택으로 인스타그램을 클론코딩 한다.'가 그 예고, 나는 보통 적당히 큼지막한 서비스의 클론 코딩을 챌린지로 잡는다.
  • 공부 : 챌린지를 더 잘 수행하기 위해 위해 필요한 지식 쌓기. 미니 프로젝트 진행, 책, 관련 글, 튜토리얼 읽어보기 등등. 'velog 클론코딩', '미니 인스타그램 만들기'처럼 챌린지와 연관된 미니 프로젝트를 위주로 한다. 메인퀘스트 진행하기 전에 서브퀘스트로 경험치 채우는 느낌?
  • 챌린지 수행 : 설정해 둔 챌린지 수행. 마음에 들 때까지 이 단계에서 계속 머물러 있는다.
  • 피드백 : 프로젝트를 진행하며 새롭게 알게 된 것을 GitHub이나 블로그에 글로 정리하고, 내 구현을 리뷰받기
  • 휴식 : 회사 밖에서는 마치 코딩이 단지 취미인 사람인 것처럼 살기. 길면 2~3달 씩도 쉬어준다. 지치지 않기 위한 번아웃 조절이고, 뒤처지면 안 되니 reddit과 44bits.io에 올라오는 건 계속 읽어준다.

또한 이 사이클은 평소의 생활과 완전히 단절되어야 한다는 규칙을 만들어서 지키고 있다. '학교 다니느라, 프로젝트 하느라 못 한다'라는 핑계를 대지 않기 위함이다. 학교 다니면서 프로젝트 하느라 바쁠 때는 그 만큼 사이클의 유지 시간을 길게 뒀고, 반대로 방학 기간이어서 쉴 때는 투자할 수 있는 시간이 많으므로 그 동안 사이클 하나를 돌리기도 했었다. 지금 나는 저 사이클 중 휴식 단계에 있다.

profile
백엔드를 주로 다룹니다. 최고가 될 수 없는 주제로는 글을 쓰지 않습니다.

38개의 댓글

comment-user-thumbnail
2019년 5월 31일

잘 읽었습니다~ 배울 점이 많네요 :)

1개의 답글
comment-user-thumbnail
2019년 5월 31일

정말 좋은 글이군요 :)

1개의 답글
comment-user-thumbnail
2019년 6월 1일

정말 잘 읽었습니다.

"~ 하느라 못한다" 라는 핑계를 없애기 위해서 제가 했던 방법은 이미 아시겠지만, 하루에 한시간씩만 꾸준히 개발하고 있습니다.

그런데, 저렇게 싸이클을 거치는것도 정말 좋은 방법인것같기도 해요! 주변 주니어 개발자들에게도 꼭 추천하고 싶은 글이네요!!

감사합니다.

1개의 답글
comment-user-thumbnail
2019년 6월 2일

PlanB님꺼 페북에 올라온글 몇 번봤었는데 여기에서도 활동하시는군요! 리스펙!!

1개의 답글
comment-user-thumbnail
2019년 6월 6일

대단하십니다~ Flask Large Application 많이 참고 했었는데, 항상 좋은 자료(정보) 감사드립니다!

1개의 답글
comment-user-thumbnail
2019년 6월 7일

제가 필요로 했던 대부분의 정보가 들어 있어서 정말 잘 활용하고 있습니다.
많이 배워갑니다 :)

답글 달기
comment-user-thumbnail
2019년 6월 25일

좋은글 감사합니다

답글 달기
comment-user-thumbnail
2019년 7월 2일

이제 막 시작하는 개발자로서 참고하기 정말 좋은 글이네요!

답글 달기
comment-user-thumbnail
2019년 7월 4일

평소의 생활과 완전히 단절되어야 한다! 는 규칙이 엄청 좋은것같아요 잘 읽었습니다!

답글 달기
comment-user-thumbnail
2019년 7월 15일

배울점이 정말 많은거 같아요!!
좋은 정보 공유감사합니다!

앞으로 지속적인 소통하고 싶어요~~

답글 달기
comment-user-thumbnail
2019년 7월 26일

배우고 갑니다!

답글 달기
comment-user-thumbnail
2019년 7월 27일

정말 좋은 글이네요~ 감사합니다! :)

답글 달기
comment-user-thumbnail
2019년 8월 9일

잘 읽었습니다. 사이클을 가지고 스스로를 관리한다는 게 정말 좋은 것 같습니다 :)

답글 달기
comment-user-thumbnail
2019년 8월 28일

좋은 글 감사합니다 ^^

답글 달기
comment-user-thumbnail
2019년 10월 31일

정말 좋은 글이네요. 감사합니다 :)

답글 달기
comment-user-thumbnail
2019년 11월 8일

감사합니다. 배우고 갑니다.

답글 달기
comment-user-thumbnail
2019년 11월 8일

배울 점이 많은 글이고, '글' 자체로도 좋습니다 :)

1개의 답글
comment-user-thumbnail
2019년 11월 29일

댓글달고 싶어서 가입했어요
클론코딩 꼭 해보고 다시 댓글 달러 올게요

1개의 답글
comment-user-thumbnail
2020년 1월 10일

정말 좋은내용이었습니다 좋은 글 잘 읽고갑니다 :)

답글 달기
comment-user-thumbnail
2020년 1월 14일

재밌게 읽었습니다;

답글 달기
comment-user-thumbnail
2020년 2월 8일

굿굿

답글 달기
comment-user-thumbnail
2020년 10월 20일

좋은 글 잘 읽었습니다 :)

답글 달기
comment-user-thumbnail
2021년 3월 18일

진정성이 뭍어나 금새 읽엇습니다
혹시 업무이외의 자기계발/공부하실 때 혼자서 전부 하시나요?
아니면 스터디를 구성해서 진행하시는 편인가요 ?
공부할껀 많은데, 혼자서도 할 수 있는게 가능한건지, 아님 장기전으로 스터디원을 구성해서 가는게 맞는건지.. 먼저 공부하신 경험으로 답변부탁드려봅니다

답글 달기
comment-user-thumbnail
2021년 3월 25일

글을 쓴다는 것이 투자시간대비효용이 적다는 데에 엄청 공감합니다...

답글 달기
comment-user-thumbnail
2021년 9월 8일

배울 점이 많은 글이었습니다

답글 달기
comment-user-thumbnail
2022년 1월 7일

감사합니다 !

답글 달기
comment-user-thumbnail
2022년 3월 8일

좋은 글 읽고 가요.

답글 달기
comment-user-thumbnail
2022년 11월 16일

좋은 글 잘 읽고 갑니다~ 공부 학습법에 대해 고민하게 되는 글 이였습니다

답글 달기
comment-user-thumbnail
2023년 3월 21일

공부를 지속하는 방법에 특히나 관심이 가네요.
좋은 글 감사합니다 ^^

답글 달기
comment-user-thumbnail
2023년 12월 25일

얼마 전부터 프로그래밍을 배우고 있는데 복습하면서 '도대체 이 분야는 어떻게 복습을 해야되나' 궁금증을 해결하려다 이 글을 보게 됐습니다.
원래 전공이 영상이었는데 어떠한 계기로 그만두고 예전에 찍먹해봤던 프로그래밍에 다시 파고들게 됐는데, 이제 겨우 1주차지만 교육과정이 재밌습니다.
복습할 때 내용을 암기하기보다 '어떻게 그 문제를 접근해야하는지' 에 대한 방법을 알고 싶었는데 주인장님께서 저 같은 입문자들에게 매우 유용할 정보들을 많이 정리해주신 거 같아 감사합니다(특히 커뮤니티 사이트 종류들)
싸이클에 대해서 굉장히 공감되는데 저도 일상과는 단절시키는게 중요하다고 생각합니다
이걸 얼마나 잘 하느냐에 따라 번아웃과 자신이 가고 있는 길을 얼마나 오래 갈 수 있는지 중요하다고 느끼거든요
아무리 유용해도 댓글은 진짜 안다는데(식당 리뷰도 절대 안씀 ㅋㅋ)
정말 너무 감사한 내용이라서요
오늘 크리스마스인데 메리 크리스마스되세요

답글 달기
comment-user-thumbnail
2024년 1월 23일

Impressive programming study approach! Your mix of books, online platforms, and hands-on projects showcases a well-rounded learning strategy. Setting challenges, mini projects, and code reading contribute to a holistic understanding. Kudos for the structured learning cycle – it's a roadmap for success! 🌟💻 #CodingJourney #ContinuousLearning

For programming beginners, W3Schools, IQRA Technology, and JavaTpoint offer diverse learning styles. W3Schools for tutorials, IQRA for interactive courses, and JavaTpoint for Java tech. Choose based on your preferences and dive into coding! 🚀📚 #ProgrammingEducation
Here are finest links to learn: https://www.w3schools.com/, https://iqratechnology.com/academy/ ], https://www.javatpoint.com/ .

답글 달기