효율적으로 공부하는 방법

AlpoxDev·2020년 12월 25일
6
post-thumbnail

프로그래밍 공부를 막 시작하게 되신 분들이나, 자신의 프로그래밍 공부에 확신이 없으신 분들은 이러한 생각을 한번쯤은 하셨을겁니다.

어떻게 하면 효율적으로 공부를 할 수 있을까?

물론 자신만의 공부방법을 찾는게 제일 효율적이지만, 우리는 시간이 없습니다.

재빠르게 공부를 하기에도 벅차는데, 공부방법을 찾을 시간이 없다고 다들 말합니다.

그렇기에 제가 삽질한 방법 중 모두에게 공통적으로 적용시킬 수 있는 방법을 위주로 이야기하고자 합니다.

시작하기전 - 자기소개

제가 작성한 글을 읽기 전, 여러분들을 설득하려면 제 소개를 뺄 수 없을 것 같습니다.

저는 회사를 다닌 경험도 전무하며 경력도 없는, 흔히 볼 수 있는 컴퓨터공학과 재학(휴학중인) 대학생중 한명입니다. 또한, 몇몇 실력자처럼 학창시절부터 개발을 해본 경험도 없으며, 그저 게임을 좋아하고 컴퓨터를 좋아한다는 이유만으로 컴퓨터공학과를 들어온 학생입니다.

대학을 들어와서 컴퓨터공학과를 들어왔을때 남들과 다르게 학교공부를 하지않고 모두 독학으로 프로그래밍 공부를 해왔습니다. 현재는 군복무를 포함한 3년반, 오직 3년반만에 스타트업 CTO를 담당하고 있으며 동시에 프리랜서를 진행하면서 월 400~500만원의 급여를 받고 있습니다.

군복무를 제외하면 2년남짓인데, 짧은 기간안에 어떻게 가능할 수 있는지 의문이실껍니다.

하지만 여러분들도 이것만 알면 불가능은 아닐겁니다. 시작하겠습니다.

1. 일단 공부를 시작하고나서 고민해라

공부를 안한 상태에서 고민하면 무용지물일뿐입니다.

자신이 열심히 하고있다고 자신하는 상태에서 고민을 해야합니다. 저 또한 퇴근을 하고도 3~5시간은 공부 또는 프로젝트를 진행하고자 하며, 저보다 잘하신 분들은 더더욱 많이 하십니다.

열심히 하는 것은 당연한 것이 되어야 됩니다.

2. 하고 싶은 일을 찾아라, 못 찾겠으면 다 해봐라

저한테 정말 많이 들어오는 질문 중 하나입니다.

개발을 해보고 싶은데, 어떤 걸 공부해야될까요?

자신이 어떠한 것에 포커스를 두며 개발 공부를 진행할지 고민해봐야합니다.

간단하게 포트폴리오 사이트를 만들고 싶은건지, 쇼핑몰을 만들고 싶은건지, 개발자 되고 싶은데 어떠한 분야를 하고 싶은지 등등 모든 부분에 있어서요.

  • 어떠한 프로젝트를 진행하고 싶은지 먼저 파악하면 고민은 일차적으로 모두 해결이 됩니다. 포트폴리오 사이트를 만들고 싶으면 정적사이트로 진행할 경우 HTML, CSS 만 배워도 충분히 할 수 있으며, 쇼핑몰을 혼자 모두 만들고 싶으면 전반적인 프론트엔드, 백엔드와 인프라에 대해서 공부하면 됩니다. 프로젝트에 중점을 두면 어떤 언어 또는 프레임워크, 더 나아가서 CS까지 자연스럽게 알게 됩니다.
  • 개발자 중 어떠한 분야를 전문적으로 나아가야 할지 모른다면 다 해보시면 됩니다. 나중에 백엔드 개발자가 될 수 있는데 프론트엔드를 공부해야 되는 것에 대해서 거부감이 들 수 있고, 프론트엔드 개발자가 되고 싶은데 백엔드를 배우는 것에 대해 거부감이 들 수 있습니다. 하지만 프로그래밍의 세계는 다 연결이 되어있기 때문에 추후에 분명히 도움이 됩니다.

언어는 결국 도구일 뿐입니다. 언어는 컴퓨팅적 사고를 도와주는 도구일뿐이며, 도구가 안맞으면 다른 언어 배우면서 자신에게 맞는 언어를 찾을때까지 배우면 그만입니다. 여러 언어를 배우고 여러 분야를 한다는 배우는 것이 손해일 수 있다고 생각할 수 있지만, 그만큼 도움이 되지 손해는 절대 안봅니다.

예시)

  • 프론트엔드 엔지니어:
    • 백엔드 엔지니어에게 요청하는 커뮤니케이션을 효율적으로 할 수 있습니다.
    • 검색엔진 최적화 - SEO를 구현하기 위해서 SSR을 도입해야 하는데, 최소한의 백엔드 지식과 인프라의 지식이 필요합니다.
  • 백엔드 엔지니어
    • Request에 따른 Response를 클라이언트에게 어떻게 전달할지 프론트엔드 엔지니어와의 커뮤니케이션을 효율적으로 할 수 있습니다.
    • UI에 따른 API를 프론트엔드 엔지니어가 편할 수 있도록 개발해 전달을 해줄 수 있습니다.
  • 어플리케이션 엔지니어
    • 백엔드 엔지니어와의 소통(프론트와 동일)
  • 인공지능 엔지니어
    • 결국 서비스를 도입하려면 서버에 배포를 해야하는데, 그 부분까지 고려하면서 설계를 진행할 수 있습니다.
    • 데이터베이스의 구조를 좀 더 효율적으로 백엔드 엔지니어에게 전달할 수 있습니다.
  • 블록체인 엔지니어
    • 블록체인 그 자체만의 개발만이 아닌 프론트, 어플리케이션, 백엔드 엔지니어가 좀 더 효율적으로 블록체인의 정보를 가져오고 요청할 수 있도록 설계할 수 있습니다.

예시중에 인공지능과 블록체인은 잘못된 정보일 수 있습니다.

3. 하나를 배울때 프로젝트 하나는 제대로 구현하자

제 주변에서 어중간하게 인터넷 강의를 보고 클론코딩으로 프로젝트를 구현한 뒤, 끝났다고 생각하고 진도를 더 나아가거나 다른 공부를 진행하는 경우를 많이 봤습니다. 여행도 친구따라 무작정 따라다니면 추후에 기억에 안남듯이, 프로그래밍도 자신의 것으로 만들어내지 못한다면 머리에 절대 안남습니다.

배운것을 자신의 것으로 만드는 최고의 방법은 프로젝트 입니다.

남의 코드를 최대한 보지 않거나, 남의 코드를 보더라도 자신만의 코드 스타일대로 재구성해서 만들어보시면 됩니다. 그리고 끝까지 최대한 만들어보시면 됩니다.

간단하게 이야기했지만, 처음 시작할때 이거만큼 어려운 것도 없으며 고생도 정말 많이 합니다.

하지만 고생을 해야 실력이 늡니다. 단순히 개발만이 아닌 기획과 디자인 또한 배울 수 있는 기회가 생깁니다.

번외) 극단적으로 실력이 느는법

기초정도만 배운 후, 외주 프로젝트를 받아보는 것도 방법입니다.

외주를 받으면 그에 따른 책임감과 부담도 늘지만, 잘 활용하면 극도로 실력이 느시는 것을 확인하실 수 있습니다.

하지만 꽤나 위험한 방법이기에 적극적으로 추천하는 방향은 아닙니다.

4. 자신의 무지함을 인정해라, 그리고 검색을 해라

개발을 해본 적 있으신분들은 한번쯤은 공감하실겁니다. 분명히 배웠던 것들이고 쉬운것인데, 모르는 경우입니다.

이럴때는 자신의 무지함을 재빠르게 인정하고 배울점은 더 배우려는 자세가 필요합니다. 흔히 말하는 핑거 프린세스는 개발자에게 용납되지 않습니다.

5. 자신만의 검색방법을 고안해내라

프로그래밍에 있어 검색은 필수입니다. 다른 분야도 마찬가지만 프로그래머는 모든것을 알 수 없으며 꾸준히 공부해야하는 직업입니다. 그렇기에 우리의 영원한 동반자 "구글"을 적극적으로 이용해야합니다.

사람마다 특성이 다르기에 검색의 방법은 매우 다양합니다.

그렇기에 검색하는 방법은 답안이 없습니다. 다양한 시각으로 접근해서 검색을 시도해봐야하고, 자신만의 검색방법을 확립해야합니다.

저만의 방법 예시)

  • 언어 : JavaScript
  • 검색 내용: object로 이루어진 array에서 하나의 object를 찾을 때
  1. 영어에 익숙하지 않을 때: [js: 언어/프레임워크/라이브러리][object 배열: 데이터 타입] [찾기: 어떤걸 하고 싶은지]

    결과

  2. 영어에 익숙할때: [js: 언어/프레임워크/라이브러리][object array: 데이터 타입] [find object: 어떠한 것을 하고 싶은지]

    결과

좀 더 고도화된 기술을 사용하게 될수록 한글자료는 적어지고 영어자료는 많아집니다.

영어 문서를 읽는 것을 습관화해야합니다.

6. 만족하지 말고 문제점을 항상 발견하려고 해라.

자신의 프로젝트를 마무리 지엇다고 만족해서는 안됩니다.

대기업에서 하나의 어플리케이션을 만들때에도 개발자 수십명이 달라붙어도 오류가 나며, 하물며 우리의 영원한 동반자 구글도 서버가 먹통이 되는 상황이 생깁니다.

배우는 시점에서 진행한 프로젝트에서는 완벽할 수 없기에, 자신의 프로젝트 문제점을 QA해보며 문제점을 발견하며, 해결하려고 노력해야합니다.

꼬리를 물며 문제점을 발견하고 해결하는 자신을 되돌아보면, 어느샌가 실력이 급상승한 모습을 볼 수 있습니다.

자신의 프로젝트, 상황에 안주하지 말고 꾸준히 해결하고자 하는 태도는 개발자의 기본 덕목이자 유일한 발전 방법입니다.

제안)

항상 완벽할 수 없는 것을 인지해야합니다. 해결할 수 없는 부분 하나에만 붙들고 있으면 개발 공부를 진행할 수 없습니다. 어느정도는 포기할 줄 알아야합니다.

7. 서로에게 좋은 멘토, 멘티가 되려고 노력해라

전세계에 있는 프로그래머의 좋은 문화인 서로 알려주고 알려주는 문화에 주목해야합니다. 아는 부분은 알려주며, 모르는 부분은 자유롭게 질문하는 문화가 되어야 서로 발전을 할 수 있습니다.

저는 멘토를 진행하면서 미쳐 인지하지 못하고 있던 부분을 알 수 있는 기회가 많이 있었습니다. 그로 인해 많이 성장할 수 있었으며 멘티또한 저의 도움을 받아 기하급수적으로 성장할 수 있는 기회가 있었습니다.

8. 항상 다음에 어떤것을 배워야할지 계획해라

프로젝트를 진행하던, 공부를 하고있던간 다음에 어떤것을 배워야할지 생각해야합니다. 특히 하나의 프로젝트에 온힘을 쏟아 마무리를 지으면 번아웃이 올 확률이 높으며 목표를 잃을 확률이 있습니다. 마무리 짓기전 꾸준히 이어나갈 수 있도록 준비해야합니다.

결론

꾸준히 노력해야하고 공부해야하며, 자신의 공부방법을 확립해야합니다. 부족한 저의 글을 읽으며 여러분들만의 공부방법이 확립되셨으면 좋겠습니다.

다들 효율적으로 고생하는 방법을 찾아 혼자가 아닌 여럿이서 성장할 수 있는 엔지니어가 될 수 있으면 좋겠습니다! 글 읽어주셔서 감사합니다!

profile
FrontEnd & Application Engineer, 소통을 위해 노력하는 엔지니어가 꿈입니다.

0개의 댓글