글이 생각보다 많이 있습니다. 천천히 다 읽어봐주시면 무조건 도움되리라고 장담합니다.
저는 항상 당신의 개발자로서의 앞날을 응원합니다.
개요
개발 관련 멘토링 활동을하거나 여러 개발자들을 만나보면서 네트워킹을 해볼때, 저는 항상 이 질문을 들어보거나 이 질문을 하는 것을 보는 것 같습니다. 그 질문은 바로
개발 공부 어떻게 해야 하나요..?
참고할만한 공부 자료 있나요?
좋은 인강! 좋은 책!
네 보통 개발 공부를 시작한지 얼마 안된 여러분들이 공통적으로 가지고있는 궁금증일 것이라고 생각해요 😢 저 또한 개발 공부를 시작한지 얼마 안되었을때(물론 지금도 햇병아리지만) 최대한 효율적으로 공부 효율을 내려고 모든 선배 개발자분들께 정말 짜증이 나실 정도로 많이 물어보고 그랬던 것 같습니다. (지금 생각해보면 좀 많이 죄송하네요..하하..)
그래서 오늘 저는 이 주제에 관해서 한번 글을 작성해보려고합니다. 개발자는 여러 분야로 나누어져있으며 공부하는 방법은 각각 다를 수 있겠지만, 모든 개발자 공통 90퍼센트의 관점과 백엔드 개발자 10퍼센트의 관점으로 여러 삽질을 해왔던 저의 과거를 회고하면서 좋았던 방법과 안좋았던 방법에 대해서 말씀을 드리려고합니다. (자신만에 꿀팁같은 것도 댓글로 달아주시면 감사하겠습니다.)
글의 목차는 다음과 같이 진행됩니다.
-> 개념과 실전 뭐가 중요할까? - 개념 공부를 하며 좋았던 방법, 하면 안되는 방법 - 실전 공부를 하며 좋았던 방법, 하면 안되는 방법 - 진짜 공부 할 거 없을때 주제 찾는 방법 - 마무리
개념과 실전 뭐가 더 중요할까?
개념 중요할까..?
저희 개발자가 끊임없이 공부해야할 주제 개념(컴퓨터 공학, CS: Network, OS 등등등..)이 있습니다. 이러한 여러 전산학 지식들은 초반에는 이게 왜 필요한거? 코드만 잘 짜면 되는거 아니야? 라는 생각을 하실 수 있습니다. 뭐.. 틀린말은 아니죠 LAN, ARP Request 이런 지식들 모른다고 백엔드 CRUD REST API 개발을 못하는건 아니니까요. 그러나, 저희는 개발자가 되는 것이지 코더가 되는 것이 아닙니다.
소프트웨어의 본질적인 가치는 고객의 만족을 위해 실제로 존재하지 않는 무언가를 개발하는 것입니다. 실제로 존재하지 않는 무언가를 개발하는 것은 코더도 할 수 있습니다. 그러나 고객의 만족을 위해 라는 것을 해내기 위해서는 저희는 개발자가 되어야합니다.
게시판을 만들었지만 게시판 글을 읽기위해서 15초의 로딩시간을 기다려야하는 성능이라면 이 게시판을 사용하는 유저는 없을 것입니다. 그렇기에 항상 저희는 성능 개선에 힘써야하며, 성능 개선 뿐만 아니라 UI/UX적으로 사용자의 니즈를 챙기기위한 방법을 끊임없이 생각해야합니다. 그렇기에 진정한 소프트웨어를 개발하기 위해서는 이 여러 개념에 대한 이해도가 매우 높아야한다고 생각합니다. 😃
실전 중요하겠지..?
네 중요합니다. 당연히 중요하죠, 배드민턴 선수를 하려고 하는데 배드민턴 라켓으로 셔틀콕을 못맞춘다면 아무리 체력이 좋고 100m 달리기가 11초대가 나올정도로 기초 베이스와 피지컬이 좋아도 배드민턴 선수가 될 수 없습니다. 그렇기에 실전은 저희가 당연시하게 갖추어 나가야하는 역량이라고 생각합니다.
회사에서도 괜히 경력직들을 많이 뽑는 것이 아닙니다. 이 실전 능력이 신입들과는 말도안되게 차이나기때문에 경력직들을 많이 뽑는 것 입니다. (신입은 어디서 경력을 쌓나 😭) 그렇기에 경력없는 신입들은 최대한 이 실전경험을 쌓기 위해서 여러가지 노력을 해야 될 것입니다.
여기서 생각해보면 저는 이런 결론을 내어보았는데요 결국 실전을 잘하기 위해서는 실전 연습을 해야하지만 그 연습의 효율을 극대화 시켜주는 것은 개념이라고 생각합니다. 결론적으로 어느 무언가가 더 중요하다는 것은 살짝 잘못된 말이긴 합니다. 클릭 한번으로 1원씩 벌 수 있는 버튼이 있습니다. 그리고 옆에 A4용지에 글들이 써있습니다. 그 글들을 한번 완독할때마다 버튼을 누를때마다 벌리는 돈이 1원씩 증가한다고 해보겠습니다. 그렇다면 여러분들은 처음에 A4용지를 많이 읽으시겠죠? 처음 뿐만 아니라 돈을 벌다가도 시간날때 A4를 한번 씩 읽으실 것입니다. 그러면서 돈도 더 많이 벌 수 있으니 1석 2조겠죠? 개념과 실전의 관계도 마찬가지입니다!
네 그렇습니다. 중요하지 않은 것은 없습니다. 여러분들! 모두 빨리 노트북과 책을 펴시고 공부를 하시기 바랍니다. 절망적이죠? 그렇지만 이러한 절망들을 최소화 또 최적화 시켜주기 위해서 제가 정말 힘들었고 재밌었던 저의 공부 방법 히스토리를 되짚어보며 여러분들의 앞날에 도움이 되기를 바라며 한번 좋았던, 최악이였던 공부 방법에 대해서 설명해보도록 하겠습니다.
개념 공부를 하면서 좋았던 방법과 최악의 방법
개념 공부를 하는 방법은 여러가지가 있을 것 입니다. 책을 읽거나 블로그를 읽거나 노트에 정리를 하거나 인강을 듣거나 등등등.. 여기서 공통적으로 나타나는 것이 있습니다. 바로 머리에 그 개념(글)들을 주입시키는 것입니다. 그 글을 주입하는 방법은 암기가 될 수도 있고 이해가 될 수도 있으며 어떤 수단을 사용해서든 저희는 그 개념들을 머리에 주입시킵니다. 즉, 학교 공부와 비슷하죠
좋았던 방법
저는 개념공부를 글로 많이 했습니다. 그리고 정리를 했죠.. 정리를 매우 많이 했습니다.
https://github.com/esperar/estudy estudy라는 깃허브 리퍼지토리인데 제가 공부한 내용을 마크다운으로 정리한 학습 노트입니다. 보시면 알겠지만 나름 주제도 분류하고 매우 많이 적었습니다. 매우 많이 적었기에 글을 작성했던 방법이 재각각이고 얼마나 내가 작성한 글을 이해했는지 이해도도 재각각이죠. 제 생각에는 기록하는 습관은 정말 좋습니다. 그러나 제가 강조드리고 싶은 점은 느리게 천천히 읽으시면서 기록하세요 ,그리고 읽기, 쓰기, 듣기 각각 개별적으로 진행하세요 별거 아닌 것 같지만 정말 중요합니다.
느리게 천천히 읽기를 진행하게 된다면 작성자가 이렇게 작성한 의도가 보이게 됩니다. 작성자가 짚어준 포인트는 빠르게 읽는다면 절대로 찾아낼 수 없으며 진정한 글이 전달하는 메시지를 얻기 위해서는 천천히 읽으셔야합니다. 천천히 읽는 것은 글의 이해를 높이는 것 뿐만 아니라 읽기 능력, 집중력 향상, 속독 능력 향상에도 도움이 될 수 있습니다. 그렇기에 천천히 읽기를 반복하다보면 점점 성장하여 더욱 폭발적인 읽기 능력과 개념 이해도를 얻을 수 있으니 일석 이조겠죠? 이 글을 읽고있는 여러분? 혹시 빠르게 내리고 있지 않나요? 한번 다시 천천히 읽어보세요.
읽기, 쓰기, 듣기와 같은 작업들을 개별적으로 진행하게 되면, 당연하게도 각각의 행위들에서 얻을 수 있는 베네핏의 최고의 효율을 얻을 수 있을 것입니다. 읽기와 쓰기를 같이 작업한다면(예를 들어 글을 쓰는데 개념 이해를 하지않고 쓰면서 이해하는 행위를 뜻함) 멀티태스킹을 함으로써 당연히 각각의 작업 효율이 줄어들 것이며, 당연하게도 머리에 잘 안들어오겠죠? 처음에는 읽기와 듣기로 개념을 잘 습득한 후 쓰기와 같은 작업을 진행해보세요.
자신만의 설명을 만들어보세요. 이 방법은 개념 이해의 마지막 단계라고 볼 수 있습니다. 자신만의 설명, 예시 상황을 재밌게 만든다면 아무리 개념이 기억안나 어려운 상황에서라도 예시를 설명하다보면 기억이 날거에요 (기술 면접 볼때 개념이 생각이 안나면 일단 예시 상황을 던져놓고 고민해보세요 생각이 날겁니다.) 처음에는 어렵게 할 필요 없습니다. 객체지향 설명으로 붕어빵이 있죠? 붕어빵대신 쿠키로 설명해보는 것 입니다. 그런식으로 유명한 예를 살짝 변형에서 생각해보다가 나중에서는 자신만에 설명을 만들어보는 것 입니다. 그리고 다른 친구께 설명 해보세요! 그 개념을 잘 모르는 친구도 쉽게 이해를 한다면 당신은 성공한 것입니다.
최악의 방법
"오늘부터 나도 기록장을 만들어야지?" 하고 대충 아무 키워드나 구글에서 검색해서 블로그에 있는 글들을 옮겨적는 분들이 있을 것입니다. 저도 그랬었고요.. 그리고 그것은 공부가 아니라 노동입니다. 그렇게 작성한 노트의 내용은 2~3일만 지나면 머릿속에서 하얗게 지워질 것입니다. 저도 그랬어요 그리고 이미 작성한 기록장이 있으니 어차피 공부했던 내용이야하고 간과하게됩니다. 그렇게 기초 개념이 머릿속에서 없어지게 됩니다. 저는 이러한 기록장들을 보여주기식 기록장이라고 부릅니다. 뭔가를 하긴 했다! 하는 그러한 내용들이 글로 남겨져있으니 자신은 열심히 공부를 했다고 착각하게 되는 것이지요.
글을 대충 읽지도 않고 옮겨적게되면 쓰기와 읽기라는 작업을 동시에 즉 멀티태스킹을 진행하게 됩니다. 그렇기에 글에 집중을 제대로 하기가 힘드며 읽어지는 것 같아도 단기적으로만 기억될 뿐 장기적으로 머리에 입력이 되지않고 소멸되게 됩니다. ㅠㅠ 매우 슬프죠 그렇기에 한가지만 집중해서 작업을 처리하세요 천천히 읽기를 진행한 후 글을 작성해도 늦지 않습니다. 처음부터 속독을 하게 되면 쉽지 않습니다. 핵심적인 내용만 뽑아가야지 하고 블로그 글을 읽지도 않고 빠르게 스크롤해서 읽으면 머리에 들어오지 않기 때문입니다.
결국엔 제가 강조드리고 싶은 점은 멀티 태스킹을 줄여라, 빠르게 하는 것을 줄여라 입니다. 헬스를 하면서 근육을 키우기 위해서는 무게, 횟수보다 더욱 중요한 것은 근육의 고립, 과부화입니다. 천천히 자극을 느끼며 운동을 진행해야 근육들에게 자극이 때려박히면서 근성장이 되는 것이죠 공부도 마찬가지입니다. 급하게 할 필요 없습니다. 천천히 지식들을 느끼며 습득해보세요 처음에는 머리아프고 집중도 안될 것 같지만 2주만 지켜보세요 당신은 괴물이 되어갈 것입니다.
요약
- 천천히 한가지의 작업(읽기, 쓰기, 듣기)만 진행하자
- 멀티 태스킹을 하지 말자
- 자신만의 설명을 만들어보자
- 보여주기식 기록장을 작성하지 말자
실전 공부를 하면서 좋았던 방법과 최악의 방법
실전 공부 이게 정말 할말이 많죠.. 프레임워크 하나를 배우기위해서는 프레임워크에 대한 이해도가 있는 상태로 무언가를 만들 수 있고 아무것도 모르는 상태 만들기는 내가 알고있는 것이 없어 실패할 것 같아 두렵고 결국 난 다시 책을 피고 포트폴리오에 넣을 것은 없고..
좋았던 방법
아는 게 없다는 두려움을 부수세요! 일단 당장 레포 하나 만드십시오. 저는 현재 깃허브에 개인 리퍼지토리만 84개가 있습니다.
이중에 대부분은 개인 프로젝트, 실습 코드들이 들어있습니다.
저는 새로운 프레임워크나 뭔가 토이프로젝트를 하고싶을 때마다 일단 리퍼지토리를 하나 만들고 생각합니다. 그리고 대충 이 기술을 사용하여 무엇을 만드는지 간단하게 알아봅니다. (ChatGPT가 대부분 친절하게 알려줍니다.)
그리고 머릿속으로 구상하고 블로그와 문서를 뒤져가며 코드를 작성합니다. 그렇게 동작시키고 성공시키면 결국 그것은 당신의 실전 경험이 될 것입니다. 그리고 메인 프로젝트를 진행했을 때 관련 기술들을 사용한다면 이 개인 리퍼지토리를 확인하고 코드들을 조금 더 개선해서 실제 메인 프로젝트에 적용시킵니다.
정말 사용해보지 않았고 아무것도 몰랐던 프레임워크들도(물론 이 프레임워크가 구동되는 환경, 개념에 대해선 알고있어야합니다. 예시: armeria - grpc) 그냥 리퍼지토리 만들고 일단 해보면 됩니다.
그리고 여기서 2주의 법칙이라는 것이 있는데 (이것은 저한테만 포함될 수도 있습니다.) 처음 이렇게 무작정 레포를 파고 개발을 진행하려면 정말 이해되지 않는 부분도 있고 익숙하지 않은 프레임워크, 라이브러리 환경이라 구글 없이는 코드를 못짜고 짜더라도 이게 무슨 코드인지 이해하기 힘듭니다. 그러나 2주만 참고 일단 해보십시오 정말로 개념이 잡히면서 이해안되었던 코드들이 이해가되기 시작 될 것입니다. 아무리 어려워도요! 이것이 제가 믿고있는 2주 법칙입니다.
사실 실전 연습은 이렇게 혼자 하는 것도 도움이 되지만 실전은 유감스럽게도 여러 사람들과 협업을 하는 것이 중요한게 사실이긴 합니다. 그래서 여러 네트워킹 활동, 해커톤, 단톡, 학교 동아리등에서 인맥을 쌓아보고 꽤나 규모있는 프로젝트를 해보는 것이 중요합니다. 이건 사실 뭐 포트폴리오를 만들기 위해선 당연한 내용이긴합니다.
여기서 인맥이 정말! 없어서 혼자서 프로젝트를 해야한다면 저는 일단 추천드리는게 클론코딩인데 조금 메인 포폴에 넣기 식상하긴하죠 그래서 제가 조금 더 생각한 것이 두 가지 앱을 섞은 혼합 클론 코딩입니다. 예를들면 배달의 민족 배달 시스템과 당근마켓의 채팅 시스템을 합친 프로젝트를 해보는 것이죠 프론트라면 페이지를 만들어보고 백엔드라면 도메인을 분석하고 설계해보고 API를 만들어보고 성능 최적화도 해보고 Batch도 사용해보고 등등등 해보시면 좋을 것 같아요
최악의 방법
일단 여러 프로젝트를 진행하면서 제가 생각한 최악의 방법은 바로 복붙입니다. 항상 느끼는 것이지만, 서비스하지 않고 연습, 포폴에 넣기 위한 프로젝트라면 다양한 환경에서 새로운 코드들을 경험했으면 좋겠습니다. "나는 Spring Boot에서 MySQL, Jwt만 사용해서 인증 인가 서비스를 개발할거야!" 이런식으로 매 프로젝트마다 같은 코드들을 반복하는 것 입니다. 이런식으로 하지말고 세션 쿠키를 사용해보던지 OAuth를 시용해보던지 여러 방법을 시도해보셔야합니다.
그리고 완성한 프로젝트를 버리는 것도 안좋은 방법이라기보단 안좋은 행위입니다. 완성했다고 그대로 냅두지마시고 계속해서 클래스다이어그램을 그려 클래스간에 의존성을 확인해보거나 성능 측정, 개선을 계속해서 생각해보면서 주기적으로 리팩터링을 해보시면 좋을 것 같습니다. 프로젝트를 완성하고 다른 프로젝트를 진행하면서 습득한 지식으로 다시 이전에 진행했던 프로젝트의 코드들을 살펴보시면 분명 개선할 점이 보일 것 입니다.
결국 실전을 공부하는 것은 두려움을 부수는 것이 90퍼센트를 차지하는 것 같습니다.
요약
- 일단 리퍼지토리 하나 만들고 생각하자
- 2주 법칙을 믿어라
- 메인 프로젝트에 맨날 같은 기술만 사용하지 말자 새로운 도전을 해보자
- 완성한 프로젝트 버리지말고 나중에라도 다시 봐주자
진짜 공부 할 거 없을때 주제 찾는 방법
여러분들 가끔 책상에 앉아서 이런 생각을 할 때가 꽤 많을 것입니다.
"아 뭐 공부하지.."
일단 이번에 공부할 내용 다 끝마치고 책 다 읽었고.. 그 다음은 뭐하지? 네 이런 고민 진짜 많은 사람들이 해봤을 거 같아요. 그래서 블로그 둘러보거나 ChatGPT한테 물어보거나 채용공고에서 요구하는 스택들을 보거나. 강의나 책을 또 살까.. 아 돈 아까워.. 라고 생각하실 수 있어요 😭 그래서 저는 이런 방법을 사용합니다.
일단 공부하고 싶은 프레임워크를 하나 선정했다고 치겠습니다. 예시로 Netty에 대해서 공부하고 싶은데 책이랑 강의를 사진 않고 공부하려고 합니다. 그럼 일단 관련 서적을 검색합니다. Netty니까 네티 인 액션이 있겠죠? 그리고 그 책을 구입하지 말고 목차를 확인해보는 것입니다. 네! 목차에 공부할 주제들이 리스트로 여러개 나와있네요? 그 키워드를 토대로 구글링하면서 공부해보세요
그 책을 구입하시고 글을 작성하신 분들도 있고 관련 예제 코드들을 깃허브에 올리신 분들도 있으니 돈도 아끼고 공부할 주제들도 무한대로 생기고 정말 1석 2조! 제가 자주 사용하는 방법 중 하나입니다. 일단 장점은 책을 읽으면서 노트북을 보지않아도 되니 목이 아프지 않습니다. 그리고 돈이 들지 않습니다 ㅎㅎ..
두번째로는 ChatGPT한테 커리큘럼 부탁하기입니다. 그냥 ChatGPT한테
한거 공부 커리큘럼 4주치로 짜줘
하면 정말 짜줍니다.
이런식으로 여러 공부주제들을 얻어 구글링해보면서 또 관련 서적을 찾아보면서(관련 서적 목차 빼오기 스킬 사용하면 좋겠죠?) 공부하시면 좋을 것 입니다. 제가 이런식으로 여러 개념들을 공부했습니다. 실제로 또 도움이 되었습니다. 👍
마무리
마지막으로 제가 해드리고 싶은 말은 천천히 또 꾸준히 (Slow and Steady)를 강조드리고 싶습니다. 제가 이 지식을 빨리 습득해서 넘어가야한다는 강박을 가지고 공부했던 시기가 있었습니다. 그렇기에 그 기간동안에는 성장을 전혀 하지 못했고 오히려 스트레스만 쌓아서 힘들었습니다 😢 내가 지금 공부하고 있는 것 내가 지금 가고 있는 길이 과연 맞는 길일까? 이걸 내가 지금 공부하는게 맞을까?
네 맞습니다. 당신이 가는 길은 정답이며 모두 당신의 역량을 키워줄 코어가 되어줍니다. 자신을 믿으시고 여러가지를 한번에 해치우자는 생각을 버리시고 지금 당신이 하고있는 것에 집중해주셨으면 좋겠습니다.
그리고 꾸준히를 강조드리고싶습니다. 그리고 꾸준함을 증명할 무언가를 만들어보세요 깃허브 잔디 관리를 한다거나. 매일 공부 기록장을 쓴다거나, 기술 블로그 포스팅을 자주 올린다거나 꾸준함을 증명할 무언가를 반드시 만드셨으면 좋겠습니다. 눈에 보이는 성과를 만들어야 당신의 뇌에서 도파민이 분비되어 당신의 꾸준함을 유지할 수 있게 도와줄 것입니다. 기분도 좋고요? 눈에 보이니 다른 사람들이 당신의 실력을 빠르게 인정해 줄 수 있을 수도 있습니다.
긴 글 읽어주셔서 감사하며, 다들 즐거운 개발생활 보내셨으면 좋겠습니다. 모두 화이팅입니다. 👍
'in khope.' 카테고리의 다른 글
궁극적인 나의 꿈, 2024 목표 (17) | 2023.12.23 |
---|---|
안녕, 나의 __ 했던 2023 (18) | 2023.12.16 |
☁ goormcamp 하이스쿨 알고리즘 캠프 수료 후기 (0) | 2023.02.12 |
😭 생일날 오타 하나때문에 10시간을 삽질한 개발자가 있다? (1) | 2023.02.06 |
✨ GSM 신입생들에게 해주고픈 이야기와 나의 1학년 (0) | 2023.01.19 |