프로그래밍 공부를 막 시작하게 되신 분들이나, 자신의 프로그래밍 공부에 확신이 없으신 분들은 이러한 생각을 한번쯤은 하셨을겁니다.
어떻게 하면 효율적으로 공부를 할 수 있을까?
물론 자신만의 공부방법을 찾는게 제일 효율적이지만, 우리는 시간이 없습니다.
재빠르게 공부를 하기에도 벅차는데, 공부방법을 찾을 시간이 없다고 다들 말합니다.
그렇기에 제가 삽질한 방법 중 모두에게 공통적으로 적용시킬 수 있는 방법을 위주로 이야기하고자 합니다.
제가 작성한 글을 읽기 전, 여러분들을 설득하려면 제 소개를 뺄 수 없을 것 같습니다.
저는 회사를 다닌 경험도 전무하며 경력도 없는, 흔히 볼 수 있는 컴퓨터공학과 재학(휴학중인) 대학생중 한명입니다. 또한, 몇몇 실력자처럼 학창시절부터 개발을 해본 경험도 없으며, 그저 게임을 좋아하고 컴퓨터를 좋아한다는 이유만으로 컴퓨터공학과를 들어온 학생입니다.
대학을 들어와서 컴퓨터공학과를 들어왔을때 남들과 다르게 학교공부를 하지않고 모두 독학으로 프로그래밍 공부를 해왔습니다. 현재는 군복무를 포함한 3년반, 오직 3년반만에 스타트업 CTO를 담당하고 있으며 동시에 프리랜서를 진행하면서 월 400~500만원의 급여를 받고 있습니다.
군복무를 제외하면 2년남짓인데, 짧은 기간안에 어떻게 가능할 수 있는지 의문이실껍니다.
하지만 여러분들도 이것만 알면 불가능은 아닐겁니다. 시작하겠습니다.
공부를 안한 상태에서 고민하면 무용지물일뿐입니다.
자신이 열심히 하고있다고 자신하는 상태에서 고민을 해야합니다. 저 또한 퇴근을 하고도 3~5시간은 공부 또는 프로젝트를 진행하고자 하며, 저보다 잘하신 분들은 더더욱 많이 하십니다.
열심히 하는 것은 당연한 것이 되어야 됩니다.
저한테 정말 많이 들어오는 질문 중 하나입니다.
개발을 해보고 싶은데, 어떤 걸 공부해야될까요?
자신이 어떠한 것에 포커스를 두며 개발 공부를 진행할지 고민해봐야합니다.
간단하게 포트폴리오 사이트를 만들고 싶은건지, 쇼핑몰을 만들고 싶은건지, 개발자 되고 싶은데 어떠한 분야를 하고 싶은지 등등 모든 부분에 있어서요.
언어는 결국 도구일 뿐입니다. 언어는 컴퓨팅적 사고를 도와주는 도구일뿐이며, 도구가 안맞으면 다른 언어 배우면서 자신에게 맞는 언어를 찾을때까지 배우면 그만입니다. 여러 언어를 배우고 여러 분야를 한다는 배우는 것이 손해일 수 있다고 생각할 수 있지만, 그만큼 도움이 되지 손해는 절대 안봅니다.
예시)
예시중에 인공지능과 블록체인은 잘못된 정보일 수 있습니다.
제 주변에서 어중간하게 인터넷 강의를 보고 클론코딩으로 프로젝트를 구현한 뒤, 끝났다고 생각하고 진도를 더 나아가거나 다른 공부를 진행하는 경우를 많이 봤습니다. 여행도 친구따라 무작정 따라다니면 추후에 기억에 안남듯이, 프로그래밍도 자신의 것으로 만들어내지 못한다면 머리에 절대 안남습니다.
배운것을 자신의 것으로 만드는 최고의 방법은 프로젝트 입니다.
남의 코드를 최대한 보지 않거나, 남의 코드를 보더라도 자신만의 코드 스타일대로 재구성해서 만들어보시면 됩니다. 그리고 끝까지 최대한 만들어보시면 됩니다.
간단하게 이야기했지만, 처음 시작할때 이거만큼 어려운 것도 없으며 고생도 정말 많이 합니다.
하지만 고생을 해야 실력이 늡니다. 단순히 개발만이 아닌 기획과 디자인 또한 배울 수 있는 기회가 생깁니다.
기초정도만 배운 후, 외주 프로젝트를 받아보는 것도 방법입니다.
외주를 받으면 그에 따른 책임감과 부담도 늘지만, 잘 활용하면 극도로 실력이 느시는 것을 확인하실 수 있습니다.
하지만 꽤나 위험한 방법이기에 적극적으로 추천하는 방향은 아닙니다.
개발을 해본 적 있으신분들은 한번쯤은 공감하실겁니다. 분명히 배웠던 것들이고 쉬운것인데, 모르는 경우입니다.
이럴때는 자신의 무지함을 재빠르게 인정하고 배울점은 더 배우려는 자세가 필요합니다. 흔히 말하는 핑거 프린세스는 개발자에게 용납되지 않습니다.
프로그래밍에 있어 검색은 필수입니다. 다른 분야도 마찬가지만 프로그래머는 모든것을 알 수 없으며 꾸준히 공부해야하는 직업입니다. 그렇기에 우리의 영원한 동반자 "구글"을 적극적으로 이용해야합니다.
사람마다 특성이 다르기에 검색의 방법은 매우 다양합니다.
그렇기에 검색하는 방법은 답안이 없습니다. 다양한 시각으로 접근해서 검색을 시도해봐야하고, 자신만의 검색방법을 확립해야합니다.
저만의 방법 예시)
영어에 익숙하지 않을 때: [js: 언어/프레임워크/라이브러리][object 배열: 데이터 타입] [찾기: 어떤걸 하고 싶은지]
결과
⇒
영어에 익숙할때: [js: 언어/프레임워크/라이브러리][object array: 데이터 타입] [find object: 어떠한 것을 하고 싶은지]
결과
⇒
좀 더 고도화된 기술을 사용하게 될수록 한글자료는 적어지고 영어자료는 많아집니다.
영어 문서를 읽는 것을 습관화해야합니다.
자신의 프로젝트를 마무리 지엇다고 만족해서는 안됩니다.
대기업에서 하나의 어플리케이션을 만들때에도 개발자 수십명이 달라붙어도 오류가 나며, 하물며 우리의 영원한 동반자 구글도 서버가 먹통이 되는 상황이 생깁니다.
배우는 시점에서 진행한 프로젝트에서는 완벽할 수 없기에, 자신의 프로젝트 문제점을 QA해보며 문제점을 발견하며, 해결하려고 노력해야합니다.
꼬리를 물며 문제점을 발견하고 해결하는 자신을 되돌아보면, 어느샌가 실력이 급상승한 모습을 볼 수 있습니다.
자신의 프로젝트, 상황에 안주하지 말고 꾸준히 해결하고자 하는 태도는 개발자의 기본 덕목이자 유일한 발전 방법입니다.
제안)
항상 완벽할 수 없는 것을 인지해야합니다. 해결할 수 없는 부분 하나에만 붙들고 있으면 개발 공부를 진행할 수 없습니다. 어느정도는 포기할 줄 알아야합니다.
전세계에 있는 프로그래머의 좋은 문화인 서로 알려주고 알려주는 문화에 주목해야합니다. 아는 부분은 알려주며, 모르는 부분은 자유롭게 질문하는 문화가 되어야 서로 발전을 할 수 있습니다.
저는 멘토를 진행하면서 미쳐 인지하지 못하고 있던 부분을 알 수 있는 기회가 많이 있었습니다. 그로 인해 많이 성장할 수 있었으며 멘티또한 저의 도움을 받아 기하급수적으로 성장할 수 있는 기회가 있었습니다.
프로젝트를 진행하던, 공부를 하고있던간 다음에 어떤것을 배워야할지 생각해야합니다. 특히 하나의 프로젝트에 온힘을 쏟아 마무리를 지으면 번아웃이 올 확률이 높으며 목표를 잃을 확률이 있습니다. 마무리 짓기전 꾸준히 이어나갈 수 있도록 준비해야합니다.
꾸준히 노력해야하고 공부해야하며, 자신의 공부방법을 확립해야합니다. 부족한 저의 글을 읽으며 여러분들만의 공부방법이 확립되셨으면 좋겠습니다.
다들 효율적으로 고생하는 방법을 찾아 혼자가 아닌 여럿이서 성장할 수 있는 엔지니어가 될 수 있으면 좋겠습니다! 글 읽어주셔서 감사합니다!