독학으로 개발자가 될 수 있는 공부 방법
취미, 창업, 자기계발을 위해 코딩을 배우는 사람이 늘어나고 있다. 하지만 전문 분야다 보니 비전공자의 경우 아무리 수업을 들어도 기본적인 용어조차 어려운 경우가 있다.
나 역시 비전공자이지만 국비지원 학원이나 부트캠프를 다니지 않고 6개월 간의 독학으로 지금은 3년 차 개발자가 되었다. 이 글에서는 당시 내가 직장과 학교를 다니면서 어떻게 개발을 공부했는지 얘기해보려고 한다.
모든 공부가 그렇듯 코딩 공부도 목표를 설정해야 한다. 나는 코딩을 배울 때마다 특정한 목표가 있었다. 창업 동아리를 했을 때는 직접 앱을 개발하고 싶어서 Java를 배웠고, 마케팅 인턴을 할 때는 데이터 분석과 업무 자동화가 하고 싶어서 SQL, Python을 배웠다.
무엇을 개발하고 싶은지, 코딩으로 뭘 하고 싶은지에 따라 배워야 할 프로그래밍 언어나 기술이 달라진다. 프로그래밍 언어도 Java, Python 뿐만 아니라 SQL과 같이 특정 분야에서 쓰이는 도메인 특정 언어(DSL, Domain Specific Language)도 있다. 따라서, 자신이 무엇을 개발하고 싶은지 정해야 한다.
게임 개발? 데이터 분석? 머신러닝? 업무 자동화를 위한 크롤링? 창업을 위한 웹 사이트, 모바일 어플리케이션 개발? 무엇을 개발하고 싶은지 정하면 무엇을 배워야 할지 명확해진다.
지금부터 말하는 기술들은 모두 오픈소스이며 무료로 사용할 수 있다. GPL 라이선스의 오픈소스 같은 경우는 코드를 공개해야 할 수 있으니 창업하는 경우는 그런 오픈소스를 사용하기 어려울 수 있다. (라이선스는 코드 저장소 Github에서 보통 확인 가능하다)
만약 만들고 싶은 게 없다면 활용 범위가 넓고 가장 배우기 쉬운 Python을 공부하는 것을 추천한다.
1. 데이터 추출
자신이 기획자, 마케터인 경우 필요한 데이터를 추출하기 위해 SQL을 배울 수 있다. 대신 SQL만 배운다고 해서 끝이 아니다. 사내 개발자, 특히 데이터 엔지니어에게 허락을 맡아야 한다. DB를 잘못 건드릴 경우 서비스에 영향이 갈 수 있기 때문에 데이터 엔지니어로부터 DB 복사본을 만들어달라고 하여 안전하게 조회할 수 있는 환경 구축을 부탁해야 한다.
2. 업무를 위한 크롤링 / 데이터 마이닝, 머신러닝
데이터 통계 및 분석, 머신러닝을 배우고 싶다면 R이나 Python을 배울 수 있다. R은 데이터 통계와 분석에 특화된 언어이다. R보다는 Python이 머신러닝, 웹 개발 등 활용 영역이 넓기 때문에 Python을 추천한다. 난이도는 둘 다 비슷한 수준이다. 프로그래밍 언어 중 가장 쉽다고 봐도 무방하다.
3. 웹 사이트 개발
Javascript, Python, Java로 배울 수 있다. 빠르게 개발하고 싶다면 Javascript와 Python을 추천한다.
그러나 웹 사이트 개발은 순수하게 언어만 배운다고 해서 개발할 수 있는 것은 아니다. (하려면 하지만 쉽지 않다) 똑똑한 개발자들이 미리 설계한 구조 내에서 개발하고, 그들이 만든 코드 조각을 가져다 쓰면 더 빠르게 개발할 수 있다. 전자를 프레임워크, 후자를 라이브러리라고 부른다. Python의 프레임워크로는 Django, Flask가 있고 Javascript는 Nodejs의 express, fastify, Nestjs가 있다(화면 개발은 React, Vuejs 등. 이들은 라이브러리에 가깝다).
웹 사이트 개발은 사용자에게 화면을 보여주고 사용자의 요청을 서버에 전달해주는 '클라이언트'와 클라이언트의 요청에 따라 DB에 접근하여 클라이언트가 원하는 데이터로 응답하는 '서버'가 있다.
Javascript는 서버와 클라이언트 양쪽을 넘나들며 개발할 수 있기 때문에 웹 사이트 개발에는 Javascript가 더 쉬울 수 있다. 언어 자체는 깊게 들어가면 클로저, 이벤트 루프 등 지레 겁먹기 쉬운 용어들이 나오지만 이를 몰라도 코딩은 가능하다.
4. 게임 개발
게임 개발을 배우고 싶다면 Unity나 Unreal Engine과 같은 게임 엔진을 다루는 방법과 프로그래밍 언어 C나 C++을 배워야 한다. 이들은 저수준에 가까운 언어기 때문에 배우기 쉽지는 않다. 하지만 간단한 웹, 데스크탑 게임 정도라면 Python, Javascript로도 가능하다. 퀄리티는 기대하지 말 것.
5. 데스크탑 앱 개발
데스크탑 앱 개발은 운영체제에 따라 다르다. 윈도우의 경우 C#나 C++, MacOS의 경우 Object-C나 Swift를 사용한다. 하지만 Javascript의 Electron이라는 프레임워크를 사용하면 쉽게 개발할 수 있다.
6. 모바일 어플리케이션 개발
모바일의 경우 보통 안드로이드는 Kotlin과 Java, iOS는 Swift나 Object-C로 개발하지만 Dart의 Flutter 또는 Javascript의 React-Native를 사용하면 두 운영체제를 동시에 개발할 수 있다. 이를 크로스 플랫폼 개발이라고 한다. Dart의 경우 초반에 인기는 없었지만 구글이 개발한 언어이고 프레임워크 Flutter 자체도 어렵지 않아 요새는 인기가 많아졌다.
1. 직접 코드를 작성해보기
프로그래밍 공부에서 가장 중요한 것은 코드를 직접 작성해보는 것이다. 아무리 책을 보거나 강의를 봐도 코드를 한 줄도 작성하지 않으면 아무 소용없다.
우리가 그림에서 배울 수 있는 것은 해킹을 어떻게 할 것인가 하는 점이다. 그림을 그리는 기술은 무엇인가를 그림으로써 학습한다. 해킹도 마찬가지다. 대부분의 해커는 13살이었을 때 직접 프로그램을 만들면서 해킹을 배웠다. - 폴 그레이엄의 <해커와 화가> p.51
개발은 분야도 다양하고 배워야 할 것도 많아서 처음 배울 때는 뭐부터 시작해야 할지 막막하다. 그래서 나는 처음에 무식하게 공부했다. 책이나 강의에 나오는 코드를 잘 알지 못해도 필사하듯이 따라 하며 프로그래밍했다. 같이 코딩을 공부하던 학교 선배가 그게 무슨 의미가 있냐고 물어볼 정도였다.
하지만 프로그래밍 분야는 같은 단어라도 다른 개념으로 사용하는 완전히 다른 세계이다. 예를 들어 libarary는 일반적으로 도서관이라는 의미이지만 프로그래밍에서는 다른 개발자가 만들어 놓은 코드를 모아놓은 파일 묶음을 의미한다. 아예 다른 개념이 등장하기도 한다. 낯선 세계에 적응하기 위해서는 처음에는 많이 보고 많이 쓰는 경험으로 익히는 수밖에 없다.
2. 인터넷 강의
나는 마케팅 인턴을 했을 때 개발 공부를 본격적으로 시작했는데, 인턴이라 시간이 많았던 것은 아니었다. 그때 나는 회사가 너무 좋아서 대부분의 날을 막차 시간까지 야근을 했었기 때문이다. 그래서 언제든 들을 수 있는 인터넷 강의가 나에게 잘 맞았다.
많은 시간을 쏟을 수 없거나 일정을 조절할 수 없는 상황에 놓인 사람들에게는 인터넷 강의를 추천한다. 국비지원 학원이나 코딩 부트캠프는 취업을 목적으로 하기 때문에 많은 시간을 쏟아야 한다. 본업이 있는 직장인과 학생에게는 맞지 않을 수도 있다.
인터넷 강의를 생각하면 보통 1시간짜리 통 영상을 생각할 수 있는데, 개발 분야는 영상 하나당 5분에서 10분이다. 아무리 시간이 없는 사람이라 한들 5분에서 10분짜리 영상이면 하루에 조금씩이라도 볼 수 있다.
그럼 어떤 강의를 듣는 게 좋을까? 코딩은 인터넷 강의 플랫폼이 정말 많다. 국내에서는 인프런, 패스트캠퍼스, 클래스 101, elice 등이 있다. 플랫폼마다 장단점이 있는데 개인적으로 인프런과 유튜브에서 듣는 걸 선호한다. 특히 유튜브의 생활코딩 강의를 추천한다. 기술이 등장한 배경이나 그 기술을 써야 하는 이유부터 설명해주고, 어려운 개념도 쉽게 알려준다. 만약 개발 환경 구축에 어려움을 느낀다면 elice 플랫폼을 사용하면 좋다. 실습 강의와 같은 코딩 환경을 제공해서 내 컴퓨터에 직접 개발 환경을 구축할 필요가 없다.
해외에서는 Udemy나 Coursera 등이 있다. Udemy도 종종 이용하는 편인데 가격이나 강의 질이 나쁘지 않았다. Coursera도 간혹 유료 강의가 있지만 커리큘럼이 괜찮은 편이다.
2. 개발 스터디
지금은 스터디를 별로 좋아하는 편은 아니다. 많이 해봤는데 정말 잘하는 사람이 이끌어가는 형태가 아니면 실력 비슷한 사람들끼리 모여 흐지부지되기 십상이다. 그러나 처음에는 다른 개발자를 만나거나 함께 협업할 수 있는 기회가 적기 때문에 스터디를 하는 게 좋다고 생각한다.
나 같은 경우는 인턴을 했던 회사에서 사내 스터디로 SQL, Python을 했기 때문에 실무자에게 코딩을 배울 수 있었다. 만약 사내 스터디가 없다면 본인이 개발자를 섭외하여 개발자 주도 하에 스터디를 진행할 수 있다. 대신 회사 업무에 도움이 되는 방향이어야 개발자와 회사도 개발자의 리소스를 사용하는 데 동의할 것이다.
회사를 다니지 않는 학생이라도 스터디를 할 수 있다. 인턴이 끝나고 나는 개발 공부가 더 하고 싶어서 학교 커뮤니티 에브리타임이나 개발자 커뮤니티 사이트인 OKKY, 남궁성 네이버 개발 카페에서 사람을 구해서 스터디를 했었다. 라떼는 OKKY나 남궁성 네이버 개발 카페에서 구하곤 했는데 요즘은 아마 OKKY나 페이스북 개발자 그룹 페이지를 많이 이용할 듯하다.
마지막으로 첨언하자면, 나와 비슷한 실력을 가진 사람들이 모인 스터디가 아니라 실무자 혹은 잘하는 사람이 운영하는, 혹은 그런 사람이 있는 스터디에 가는 게 좋다. 같이 프로젝트를 하는 것만으로도 많은 걸 배울 수 있다. 누가 잘하는지 감이 안 온다면 github(코드 저장소) 활동을 보고 평소에 열심히 하는 사람인지, 앞서 말한 개발자 커뮤니티에서 어떤 글들을 써왔는지 보면 도움이 될 것 같다(이것만으로는 전부 판단하기 힘들겠지만).
잘하는 사람과 함께 하는 스터디에 묻어간다는 생각보다는 최대한 같은 팀원들로부터 배우고, 질문하고, 많이 공부해와서 다른 사람에게도 알려주자는 마음으로 임하면 더 빨리 성장할 수 있을 것이다.
3. 독서
해당 기술에 대해 제일 잘 알려면 공식문서와 코드를 읽어보는 게 제일 좋다. 하지만 초보자가 처음부터 낯선 개념들을, 그것도 영어로 된 문서를 읽기는 쉽지 않다. 남이 짠 코드는 말할 것도 없다. 그래서 공식문서, 온라인 강의, 책과 병행해서 보는 것이 좋다. 공식문서는 보통 오픈소스의 이름과 document를 함께 검색하면 나온다. ex) 'django document'
일단 언어를 먼저 공부해야 하니 언어 관련된 책을 먼저 보는 게 좋다. Python을 공부하는 경우 연오의 파이썬을, Javascript의 경우 모던 자바스크립트 딥다이브를 추천한다. 자바스크립트 같은 경우 어려운 개념들이 많이 등장하니 생활코딩 강의 같이 쉽게 설명한 것을 먼저 보고 책을 읽으면서 더 깊게 공부하는 것이 좋다. 그 외에 다른 프레임워크나 라이브러리는 '책 추천'으로 검색해보면 좋은 것들이 많이 나올 것이다.
4. 구글링
용어나 개념이 어려운 경우, 버그가 발생하는 경우 검색을 할 수밖에 없다. 지금까지 네이버로 검색했다면 이제 네이버는 버려라. 네이버는 광고 사이트고 구글은 검색 엔진이다(네이버 사랑합니다). 프로그래밍에서 원하는 답을 찾으려면 구글에서 검색해야 한다.
구글에서 검색하면 여러 사이트가 나온다. 이 중 프로그래머가 신뢰할 수 있는 사이트를 나열해보면
해당 오픈소스의 *Github issues > 공식문서(문서 관리가 잘 안된 경우도 있음) > **스택오버플로우 > 개인 블로그(미디엄 > 티스토리 > 네이버 블로그 (개인적으로)). 참고로 프로그래밍 분야는 빨리 바뀌기 때문에 너무 오래된 게시글은 신뢰하지 않는 게 좋다.
*Github: 코드 저장소. 해당 오픈소스로 인한 이슈는 모두 깃허브 issues에 등록된다.
**스택오버플로우(StackOverFlow): 개발자들의 지식 IN 같은 곳. 코딩과 관련된 질문들이 올라온다. 간혹 오픈소스 개발자가 직접 답해주는 영광스러운 경우도 있다.
많은 사람들이 개발에 흥미를 느끼길 바라며..