조영휘 Bark 공동창업자가 브런치에 게재한 글을 편집한 뒤 모비인사이드에서 한번 더 소개합니다.
나는 대기업(스러운 곳)의 경영기획팀에서 기획자로 5년간 일하다가 스타트업을 하겠다고 나온 사실을 이전 글에서 밝혔다. (이전 글: 이거 뭐 써먹을 데가 있어야지) 흔히 스타트업에서 ‘기획’한다고 하면 그건 대부분 ‘모바일/웹 서비스 기획자’를 의미한다.
이들은 개발자, 디자이너, 마케터들 사이에 새우 등 터지듯 일하는 경우가 많기 때문에 프로그래밍 배경지식이 없으면 특히 개발자들에게 무시 당하기 쉽다. 이 글에서는 나같은 문돌이가 개발자랑 어느 정도 대화가 되는 프로젝트 매니저(이하 PM)가 되는 법에 대해 논하고자 한다. 약 3~4개월의 시간동안 짜투리 시간을 이용한다면 초보 수준의 웹사이트는 개발 가능할 정도의 프로그래밍 스킬을 익힐 수 있다. 참고로, 책보고 공부하는거 질색인 사람들에게 강추한다.
지금부터 내가 설명하려는 ‘문돌이의 프로그래밍공부 방법론‘은 어디까지나 다음에 해당하는 사람들에게 어울리는 방법임을 미리 밝혀둔다.
1. 나는 학원에 다니면 적어도 반 이상은 완주할 정도의 인내력이 있다.
2. 기본 영어 리스닝 실력은 있다.
3. 내 목표는 개발자가 아니라 개발자랑 일하는 것이다. (-> 진짜 프로그래머가 되려면 절대로 내가 한 방법으로 해서는 안된다.)
Step 1. 생활코딩으로 준비운동만 하기 (1주일)
생활코딩은 이제 너무 유명해져서 많은 문돌이들이 코딩을 공부하는 성역이 되어버렸다. 아이러니한건 여기를 아는 사람은 많은데 코스 하나를 완주했다는 사람 보기는 힘들다. 생활코딩 사이트에 보면 생활코딩 작심 40시간 라이브가 있는데, 그야말로 40시간동안 웹서비스의 방대한 영역을 전부 건드리는 무지막지한 코스다.
아무리 프로그래머 이고잉님이 쉽게 리드한다지만 문돌이가 처음부터 저걸 다 따라하는건 무리가 있다. 하지만, 프로그래밍의 세계에 대해 전반적인 그림을 잡을 수 있기에 완주하면 앞으로 ‘내가 뭘 공부해야 하겠구나’하고 감 잡는데 큰 도움이 된다. 여기서 명심할 것은 이걸 그냥 가벼운 마음으로 시청만 하라는거다. 설치하라는거 다 설치하고, 코딩하라는거 다 코딩하면서 너무 진지하게 보지 않길 권한다. 그냥 시청만 하면서 프로그래밍 세계에 대해 맛만 보는거다. 왜냐면 완전 초보자가 AWS 트고, 리눅스, 우분투 설치하고, 깃허브에 서브라임까지 생소한 툴들 만지작하다 보면 겁부터 먹고 그냥 접게되는 경우가 많기 때문이다.
Step 2. 유데미에서 Ruby on Rails 프로그래밍 코스 완주 (2개월)
요즘 프로그래밍 배우는 온라인 사이트가 정말 많아졌다. 유데미, 유다시티, 칸, 코세라, 린다닷컴 등등 내가 아는 곳만 해도 10군데는 된다. 개인적으로 처음 프로그래밍 공부하는거면 어지간하면 한글말고 영어로 배우는 것을 추천한다. 객체 지향, 변수, 매개변수, 상수, 선택자, 제어문… 등등 한글로 배우면 이런 한문어로 된 단어들로 가르친다. 그래서 용어 이해가 솔직히 더 어렵고 어차피 코딩하다 막히면 가장 많이 찾아볼 사이트가 스택오버플로우이다. 스택오버플로우에서 다시 영어로 공부하고 찾아보느니 아예 처음부터 저걸 object-oriented, variable, parameter, constant, control statement… 이런 식으로 인식해 버리는게 더 낫기 때문이다.
해외 온라인 사이트는 많은 사람들이 유다시티를 얘기하는데 나는 유데미를 추천한다. 이유는 간단하다. 우리의 목표는 프로그래머로 취직하는게 아니라 프로그래머랑 일을 같이 하는게 목표기 때문이다.
유다시티는 진짜 프로그래머 취업을 목표하는 사람들을 위해 디자인되었다. 그래서 수강료가 비싸고, 퀴즈도 엄청 풀어야 하고, 출석률도 체크하고, 대학같은 느낌으로 엄청 까다롭다. 하지만 유데미는 내가 필요한 특정 스킬들만 골라서 빠르게 수강 가능하고, 수업료도 저렴한 편이며 퀴즈도 점수를 체크하지 않는다. 무엇보다도 강사들이 대부분 실제 현업 종사자들이어서 가르치는 내용이 매우 실무적이다.
아까 1단계의 생활코딩 40시간 라이브를 전부 들었다면, 이제 프로그래밍의 세계가 대략 클라이언트-서버 프로그래밍의 두 영역으로 구분될 수 있고 (하드웨어, OS 같은 것들 제외), 프로그래밍 언어가 뭔지 (Ruby, Python, PHP ), 프레임워크가 뭔지 (Ruby on Rails, Django, CodeIgnitor) 정도는 감이 생겼을 거다. (저게 각각 뭔지는 몰라도 되고 그냥 카테고리화만 할 줄 알아도 된다는 뜻이다)
이 글에서는 간단하게 프로그래밍 언어와 프레임워크의 차이점만 짚고 넘어가 보자.
프로그래밍 언어는 말 그대로 소프트웨어작성을 위해 필요한 언어규약을 의미한다. 즉 내가 미국사람과 대화를 하려면 영어라는 언어가 필요하듯이 어떤 웹서비스를 통해 사용자와 통신하려면 수 많은 프로그래밍 언어들 중 내가 필요한 걸 사용한다는 것으로 이해하면 편하다. ‘고급언어-저급언어’ 이런 말이 있다. 고급언어가 더 좋은거고 저급언어가 나쁘다는 뜻이 아니다. 사람이 사용하는 언어와 가까우면 고급언어라 부른다. 반대로 컴퓨터가 CPU 레벨에서 비트단위로 직접 사용하는 언어는 저급언어라고 부르고 기계어, 어셈블리어 같은게 있는데 이런 건 지금 몰라도 된다. (생활코딩에서 이고잉님이 빙산의 일각 그림으로 아주 명쾌하게 설명해 주신다)
즉, 우리 초보레벨에서 프로그래밍 언어라고 하면 Ruby, Python, PHP, Java, JavaScript, C, C++, HTML, CSS 를 말하는 거라고 이해하면 된다. 저기서 HTML, CSS는 웹브라우저에서 지금 당신이 보는 페이지를 띄워주기 위해 필요한 언어다. 즉, HTML, CSS는 웹페이지 코딩하려면 반드시 들어가는 내용이고, 좀 현란한 인터렉션도 넣으려면 JavaScript도 이 범주에 필요할 수 있다. 나머지 Ruby, Python, PHP, Java, C들 중에서 당신이 기본 베이스로 할 프로그래밍 언어를 선택하면 된다는 뜻이다. 정리하면, ‘HTML, CSS (필수) + JavaScript (선택) ‘ + ‘기본 베이스로 할 언어 한개’ 이렇게 공부를 해야 한다는 뜻이다.
프레임워크는 저기 언급한 프로그래밍 언어들로 프로그래밍을 쉽게 할 수 있도록 필요한 뼈대를 미리 설계해 놓은 것이다. 좀 더 어려운 말로는 재사용이 가능한 클래스들과 그 관계들을 미리 정의해 놓은 패키지라고 이해하면 된다. 각 기본 베이스로 선택하는 언어별로 프레임워크가 정해져 있다. 예를 들어 Ruby 언어를 공부하면 프레임워크는 Ruby on Rails를 공부하면 되고, Python을 공부할거면 프레임워크는 Django를 같이 공부하는 식이다.
정리하면, 생활코딩 강의로 그냥 저 전반적인 세계에 대해서는 맛만 보고 당신은 그냥 Ruby와 Ruby on Rails를 선택해서 배우도록 하자. 왜 Ruby on Rails로 공부해야 하는가에 대해서는 여러가지 내 나름의 이유가 있다.
첫째, 컨벤션이 매우 엄격해서 비록 처음에는 러닝커브가 조금 있는 편이지만 초보자가 실수할 여지를 최대한 줄여준다. 예를들어 명령어 하나의 대소문자만 틀려도 레일즈는 아예 페이지 전체를 보여주지 않는다. 초보자가 어느 정도 돌아가는 웹사이트 만들기 위해서는, 좀 오래걸리겠지만 한번 제대로 만들어 추후 운영을 유리하게 하는 편이 낫다는게 개인적 의견이다.
둘째, 레일즈에는 Ruby Gem이라고 불리는 아주 강력한 서드파티 라이브러리가 있다. 물론 대부분의 프로그래밍 언어에서 서드파티 라이브러리는 다 있지만, 루비젬이 강력한 이유는 앞서 얘기한 첫번째와 유사하다. 다른 언어의 라이브러리는 초보자가 그대로 가져다 쓰면 분명 에러 100%일 것이다. 내 상황에 맞게 어느 정도 변형할 수 있는 수준의 프로그래밍 능력이 있어야 할텐데 문돌이 초보자에게 그걸 기대하긴 어렵다. 반면 루비젬은 (전부 다 그렇진 않지만) 진짜 옛날 MS도스 시절 디스크꼽고 인스톨 클릭하면 알아서 프로그램 깔아주던 느낌으로 젬파일을 인스톨하면 대부분의 라이브러리가 알아서 장착된다.
셋째, 실제 웹사이트를 Deploy(배포)하는데 있어서 아무런 지식이 필요 없이 가능하다는데에 있다. 당신의 컴퓨터에서 코딩한 웹페이지들을 실제로 유저가 사용하기 위해서는 크게 다음 3가지가 필요하다.
- 서버: 당신이 만든 웹페이지들을 어딘가에 가져다 놔야 유저가 찾아올 수 있다. 당신 컴퓨터로 유저가 직접 접속할 순 없지 않은가.
- 도메인: 당신 집에 유저가 놀러오려면 집주소가 필요한 것 처럼, 당신이 올려놓은 웹페이지를 호출하기 위해서 필요한 주소같은 거다.
- Deploy (배포): 위 준비된 내용들을 실제 서버에 설치하고 유저가 찾아올 수 있게 만들어주는 일이다.
이 3가지 영역은 보통 백엔드라고 부르고 아마존 클라우드 서버니 하는게 다 저것을 운영하기 위해 활용하는 서비스이다. 아무튼, 이 영역은 나같은 평범한 문돌이에게 넘을 수 없는 영역이다. 괜히 배우려고 낑낑댈 필요도 없다. 레일즈를 배우면 나중에 디플로이(배포)할때 ‘헤로쿠‘라는 서비스를 활용할 수 있는데 (물론 다른 언어도 가능하지만 쓱 읽어보면 레일즈로 하는게 젤 편해보인다) 저기 웹사이트에서 시키는 대로 코드 복붙하고 명령어 몇번 치면 디플로이(배포)가 정말 마법처럼 이루어지고 덤으로 공짜 도메인까지 준다!! (물론 일정 트래픽 이하에는 서버비도 공짜) 난 이 3번째 이유만으로도 초보자들이 처음으로 배우는 프로그래밍 언어로 루비만큼 강력한게 없다고 생각한다.
서론이 너무 길었다. 아무튼 결론은 아까 말한 유데미 사이트에서 Ruby on Rails로 웹사이트 만들기 프로그램을 찾아서 공부하라는 말을 하려고 이 긴 설명을 했다. 유데미에서 레일즈로 웹사이트 만드는 코스 찾아보면 한 20개는 넘게 검색되는데, 다음 기준에 부합하는 내용의 코스를 선택하도록 한다.
1. Bootcamp가 제목에 있는 코스: 부트캠프라고 명시한 코스는 대부분 웹서비스 하나를 실제 서버에까지 올려서 완전하게 구현하는 코스를 말한다.
2. Ruby on Rails를 활용하는 코스: 각 코스 학습계획서에서 Ruby on Rails를 활용하는지 확인해 본다.
3. 레이팅이 적어도 4.5 이상, 별점 준 학생수가 최소 200 이상인 코스를 선택한다.
참고로 내가 들었던 과정은 The Complete Web Developer Bootcamp라는 코스인데, 이미 1년 넘은 과정이기 때문에 이걸 듣지 말고, 그냥 이 코스의 학습 계획서를 참고해서 유사한 최신 코스를 찾아서 완주하길 바란다. 보통 2-3달 코스로 디자인 되어 있는데 하루에 1시간 정도씩만 투자하면 2달이면 완주 가능하도록 되어있다.
Step 3. 부트스트랩 (Bootstrap) 숙달하기 (1주일)
부트스트랩이란 아까 잠시 짚고 넘어간 HTML, CSS등의 웹페이지를 구현하는 언어를 위한 프레임워크이다. 사실 HTML, CSS도 초보자가 자유자재로 내가 구상한대로 화면에 딱 띄우도록 코딩하는건 매우매우 어렵다. 심지어 버튼하나 중앙정렬 하는것도 쉽지 않다. 부트스트랩은 이런 일들을 마법같이 쉽게 해주는, 그리고 모바일 반응형 구현도 코딩 몇줄로 가능하게 해주는 프레임워크이다. 아마도 당신이 선택할 유데미 코스에서 부트스트랩 활용하는 법이 포함되어 있을 듯 한데, 거기서는 정말 기본적인 내용만 훑어볼게 뻔하니 1주일정도 투자해서 부트스트랩을 제대로 익히고 넘어가도록 하자. 부트스트랩 사용법은 유데미에서 저렴한 코스를 하나 찾아서 수강하는것도 좋은 방법이고 그리 어렵지 않으니 부트스트랩 공식 웹사이트에서 필요한 내용만 골라서 본인의 웹사이트에 이것저것 적용해보며 익히는것도 좋다.
Step 4. 부트스트랩 코딩 되있는거 통째로 다운받아서 내 포트폴리오 사이트로 변형해보기 (3주일)
여기까지 왔으면 당신은 이미 웹서비스에 관해서는 개발자랑 어느정도 대화는 되는 수준이 되어있을 것이다. 하지만, 여기까지 왔는데 실제로 내가 직접 코딩해서 서버에 디플로이까지 해 본 사이트 하나 정도는 있어야 하지 않겠나? 하지만 아무리 유데미 코스 하나 들었다고 당장 멋진 포트폴리오 웹사이트 만드는게 그리 쉽지는 않을 것이다. 이 단계를 아주 쉽게 해주는 사이트가 하나 있다. 바로 부트스트랩에서 제공하는 연습용 웹페이지인 Start Bootstrap이다.
여기 가면 아주 잘 디자인된 다양한 종류의 부트스트랩 기반 웹사이트 코딩 파일들을 통째로 다운받을 수 있다. 본인이 도전해 보고 싶은 스타일 몇 개를 골라서 다운받은 후에 index.html과 연결된 css파일 구조를 잘 파악해 본 다음에, 본인의 포트폴리오 웹사이트를 한번 만들어 보자. 이미 뼈대가 다 잡혀있기 때문에 그 뼈대를 분석하는 것 만으로도 큰 공부가 된다. 박스모델을 어떻게 쓰고 있고, 각종 버튼들을 글리피콘이랑 폰트어썸을 써서 멋있게 구현하는 법, jQuery의 각종 트랜지션들을 어떻게 구현하고 있는지 등등을 배울 수 있고, 이 중에서 내가 필요한 부분을 복붙해서 내 웹사이트에 붙여볼 수도 있다. 나는 이 당시 여기의 웹사이트들 중 3개를 적절히 조합해서 다음과 같은 내 포트폴리오 웹사이트를 만들었다. (링크: andrewyhc.herokuapp.com)
당신이 여기까지 오는데 아마도 3-4달정도의 시간이 필요할 것이다. 다시 한번 강조하지만, 이렇게 공부하고 나서 당신이 ‘나는 개발자 입니다’라고 말하면 욕 먹기 쉽다. 개발자의 세계는 웹개발만 해도 그리 녹록한 세상이 아니다. 하지만 이렇게 3달정도 야매로 포트폴리오 웹사이트 하나 뚝딱 만들어낼 정도로 훑어내고 나면 개발자랑 어느정도 대화가 통하는 문돌이 PM이 될 수 있다. 또한 당신이 정말 뜻이 생겨서 앞으로 앱개발도 배우고 직접 스택오버플로우 찾아다니면서 버그도 고치고 하다 보면 한 반년쯤 후에는 진짜 기본수준의 프로그래밍은 할 줄 아는 문돌이 PM이 되어 있을 것이다. PM으로서 본인이 구현하고자 하는 기능의 기술스택에 대해 개발자랑 어느정도 대화도 가능할 것이다.
다음 글에서는 같은 맥락으로 디자이너랑 일할 수 있는 PM되기, 또는 디자이너없는 스타트업에서 PM이 디자이너 역할 야매로 하는 방법에 대해 논해볼 것이다.
[fbcomments url=”http://ec2-13-125-22-250.ap-northeast-2.compute.amazonaws.com/2017/01/12/andrewyhc_2/” width=”100%” count=”off” num=”5″ countmsg=”wonderful comments!”]