초보 웹 개발자를 위하여 ver 0.0.1 작성: hyjung@nhnnext.org
이 글은 웹 개발자가 되고 싶지만 실상은 컴맹인 분들을 대상으로 쓰고 있습니다. 완성품은 그래프의 형태가 되면 좋겠지만, 일단 대충 써 봅니다. 여기에 적혀 있는 내용들은 상당 부분이 practical(우리 말로 뭘까요?) 합니다. 여러분이 일반 대학에서 배우는 컴퓨터 공학 커리큘럼을 병행해서 배우고 있다는 가정으로 내용을 적었습니다.
2015년 3월 14일 NEXT의 기초 과목 담당 교수님께서 추가 조언을 해 주셨습니다:
“깊이 있는 개발자가 되려면 논리력, 분석력, 비판적 사고 역량이 매우 매우 중요합니다. 이 요소들이 개발자 역량 그릇의 크기를 결정하는 제일 중요한 요소들이고요. 이 역량의 큰 틀은 이산수학의 논리, 증명 등의 학습에 의해서 만들어집니다. 이산수학 교재의 연습문제를 가능한 한 많이, 혹은 모든 문제를 풀어보라고 강력하게 추천합니다. 역량 상승이 눈에 쉽게 보이지 않지만, 어느 순간 다른 사람에게 역량있고 스마트한 느낌을 전달하는 이미지를 갖추게 될 겁니다. 이 부분은 고급/핵심 개발자들이 갖는 공통적인 모습이고요. 역량있는 개발자로 성장하기를 바랍니다. “
우리나라 IT 개발자 직군의 종류
우리 나라 산업의 형태로 볼 때 정확한 통계는 모르지만 과거에는 대다수가 자바를 기반으로 하는 웹 서버 개발자였는데 현재는 다양한 직군이 늘어나고 있습니다.
- 웹 서버(백엔드) 개발자:
- 웹 프론트엔드 개발자
- 모바일 앱 개발자
- 기타: 시스템 프로그래머, 모바일 게임 개발자, 게임 서버 및 게임 클라이언트 개발자가 있는데 이 직군들은 상대적으로 높은 실력에 비해 구직이 어렵고 대우가 좋지 않습니다. ‘이 직군이 매력적이다’라고 생각하시면 개인적으로는 해외 취업을 권하고 싶습니다.
- 비개발자 직군: 중요한 비개발자 직군으로 DBA, 시스템 엔지니어, 빅데이터 전문가가 있습니다. 빅데이터 전문가가 최근 매우 유망하고요. 시스템 엔지니어들도 클라우드가 나타난 이후로 과거에 비해 대우가 좋아진 듯 합니다.
개발자들이 좋아하는 사이트들
- google.com :검색은 구글을 사용한다. 네버 네이버, 네버 지식인, 생활코딩 비추.
- stackoverflow.com: 개발자용 지식인, 필수
- github.com: 소셜 코딩이라는 별명으로 부르기도 합니다. git의 사용법과 함께 필수적으로 알아야 합니다. * github 자체의 사용법을 배우는 게 좋습니다.
- slideshare : 다양한 기술을 예쁘고 쉽게 볼 수 있습니다. 깊이가 깊지는 않은 경우가 많지만 그래도 매우 유용합니다.
- trello: 스크럼이라는 개발 방법론을 적용할 수 있는 도구인 것 같습니다. 개인적으로 좋아합니다.
- facebook : 커뮤니티를 적극적으로 활용한다. (페이스북, 구글 그룹스 등)
- mooc 사이트들: 최근에는 다양한 mooc 사이트들을 통해서 공짜로 공부할 수 있는 곳이 많아졌습니다.
처음에 배워야 하는 것들
맥 / 리눅스 사용법: 개발자 커뮤니티에 초보 개발자들이 가끔 떡밥으로 ‘맥을 사용하면 개발이 잘 되나요?’ 라는 글을 던지고 싸움이 일어납니다. 답은 yes입니다. 맥에서 맥os를 사용하는 것 자체가 개발자에게 도움이 됩니다. 더불어 리눅스를 배워야 합니다. 예쁜 맥을 사서 부트캠프 + 윈도우를 사용하는 건 자제 좀 부탁. 다양한 프로그래밍 언어: 쉽고 재미있는 프로그래밍 언어를 배우는 것을 추천합니다. 개인적으로 파이썬을 선호하는데, 웹 개발자라면 자바스크립트, 모바일 개발자라면 파이썬을 배우면 좋겠군요. 나중에 실력이 조금 붙으면 반드시 C 언어와 포인터에 대해 배우길 권합니다. 그리고 모바일 개발자라면 ObjectiveC도 공부하세요. 마지막으로 내공이 쌓이면 함수형 프로그래밍 언어(scala)를 배우는 게 좋겠습니다. * 웹 개발자를 위한 권장언어: python, javascript, java, bash, C, scala
내 전문분야에 대한 방향성을 일단 결정하자: 웹 개발자라 하더라도 전문 분야는 앞서 본 것처럼 백엔드 개발자와 프론트엔드 개발자로 나뉘게 됩니다. 사물의 내면이나 돌아가는 원리를 생각해 보는 걸 좋아한다면 백엔드, 디자인 감각이 있고, 꾸미는 걸 좋아하고 반복작업도 질리지 않고 잘 할 수 있다면 프론트 쪽일 가능성이 높습니다. 프론트엔드 분야는 jquery, v8의 등장과 더불어 비교적 최근에 고도화가 되었습니다. 앞으로 더 많은 수요가 필요할 것으로 생각됩니다.
처음에는 프론트와 백엔드 모두를 배워야 한다: 백엔드 개발자는 자바, 프론트 엔드 개발자는 javascript + html + css 가 핵심 역량이 됩니다. 그러나 처음에는 둘 모두 알아야 합니다. 꼭 두 분야의 기초 정도는 함께 공부하기를 권합니다.
일단 시작해 보자.
여기에 나와 있는 실습들은 상당부분 내용이 중복됩니다. 하지만 코딩이라는 우리에게 필요한 작업은 머리와 손이 함께 배우는 부분이 많습니다. 반복이 매우 중요하기 때문에 아는 거 또 나왔네? 라고 넘어가지 말고 반복해서 학습을 하길 권합니다.
(1) 제일 먼저 해볼만한 것: 1시간 정도 투자해서 code.org 의 hour of code로 놀아 봅시다. 안나 + 엘사가 재밌는 것 같아요. 컴퓨터에서 중요한 기초 개념인 순차 + 반복 + 조건문의 개념을 배우시기 바랍니다. “프로그래머는 바보같은 일을 하는 천재적인 사람이다. 컴퓨터는 위대한 일을 하는 바보같은 기계이다. 이 둘은 그래서 찰떡궁합!” - 출처는 기억이 안 나네요. http://code.org/learn
(2) 칸 아카데미의 컴퓨터 교육: 자바스크립트의 감을 잡게 해 줍니다. https://www.khanacademy.org/computing/computer-programming
(3) 생활코딩의 작심 40시간 라이브: 개인적으로 존경하는 이고잉님이 만든 강의입니다. 주변에서 유용했다는 평이 많았습니다. https://opentutorials.org/course/1029
(4) codecademy를 활용해 봅시다. 어떤 특별한 언어를 처음 시작하고 싶을 때는 codecademy를 사용하면 감을 잡는데 도움이 됩니다. 쉬운 편은 아니고 혼자 공부하면 막히는 경우가 많기 때문에 꼭 주변에 멘토가 필요합니다. http://www.codecademy.com/learn
조금 더 깊게
위 과정을 통해 가볍게 웹 서버와 프론트엔드에 대해 감을 잡았으면 좋을 텐데, 아니면 말고요. 여튼 이제 본격적으로 들어가 봅시다.
협업하는 방법: 개발자에게 가장 중요한 자질 0번은 협업하는 자세입니다. 물론 동의하지 않는 천재 개발자들도 많으시지만, 저는 협업할 수 있는 열린 마인드가 가장 중요하다고 생각합니다. 술 한 잔 사주고 내가 일주일 끙끙될 걸 하루만에 해결하기도 합니다. 에자일 방법론과 스크럼에 대한 좋은 책들을 한 번 읽어 보시기 바랍니다.
(1) 유닉스 콘솔 명령어 (bash) 배우기 <링크 첨부 필요: 얼렁 만들자 --;>
(2) git 의 원리와 사용법 git을 왜 사용하는지, 그리고 간단한 사용법 필수 명령: clone, init. log, status, add, commit, push, pull, branch, checkout, fetch, merge rebase, stash (pop) merge 를 해결하는 방법: 3-way merge 유용한 도구들: sourceTree, kdiff3
참고 링크1: https://github.com/honux77/practice/wiki/learngit 이고잉님 git 강의: http://opentutorials.org/course/1492
(3) github 배우기 markdown, 이슈 등록, fork와 pull request, 다른 프로젝트 검색, 별 주기, static 웹 페이지 만들기
(4) 백엔드: 자바 기초 배우기 객체 지향 프로그래밍, 파일 IO, 멀티 스레드의 개념을 꼭 배우시길 바랍니다. 단위 테스트를 꼭 잘 배우시구요. 로그 라이브러리 사용법도 알아야 합니다. 자료 구조 중 list, map의 용도와 사용법, 그리고 하위 클래스들의 사용법은 필수입니다. 가능하다면 TDD를 해 보시고, 좋은지 나쁜지는 스스로 판단하시기 바랍니다. 이클립스(혹은 inteliJ)와 같은 IDE 사용법, 그리고 maven의 기초에 대해서도 배워야 합니다.
(5) 프론트엔드:: javascript, html, css box model의 이해, 프론트 엔드 개발 도구들, 기타 등등… 저도 이 분야는 초보라서…
(6) 데이터베이스 기초: 관계형 데이터베이스, nosql(mongdb), 웹 서버와 데이터베이스의 연동
(7) VirtualBox와 aws를 이용한 내 서버 마련하기
(7) 네트워크의 기초: tcp/ip, 소켓의원리, http의 구조, 웹 서버와 웹 브라우저의 동작 원리
(8) REST API: 웹 페이지와 웹 서비스와의 차이점, REST API란?
웹 개발자 초보 탈출!
제 생각에 초보를 탈출하고 나서 여러분들에게 도움이 될 만한 것들은 디자인 패턴 (head first desgin pattern이 좋다고 합니다.) effective Java 읽어 보기 다른 소스 많이 읽고 많이 짜 보기 (개인적으로 이희승님의 netty를 공부하는 걸 추천합니다.) reflection, generic에 대해 조금 더 깊게 배워야 할 것 같습니다. virtual machine의 동작 원리, 가비지 콜렉션의 원리, bytecode의 이해 성능 프로파일링
정도가 있을 것 같습니다.
<자바지기 만세>
프론트엔드 개발자 초보 탈출!
<@윤지수>
잉여력이 생긴다면
서버 개발자들은 C#을 공부해 봅시다. 여러분이 사용하는 언어가 java라는게 엄청 아쉬워 질지도 모릅니다. “Do you know why java devepers wear glasses? Because they can’t see #.” 그리고 groovy가 우리나라에서는 잘 사용되지 않지만 역시 한번쯤 공부해 볼 만합니다. 프론트 개발자들은 rust를 배우고 firefox와 함께 놀아 봅시다. 새로운 세상이 여러분에게 열릴 것 같습니다.
0개의 의견 from FB
3개의 의견 from SLiPP
이 문서의 원본은 https://docs.google.com/document/d/16RXSJzG6mK02yiXW8ey9wWyylSSEZ3JBcmc9Lb4s64Q/edit 있습니다. 존경하는 농촌코더 자바지기님의 요청으로 공유합니다. 원본 링크는 계속 업데이트 될 예정이며, 업데이트를 원하시는 분은 원문에 덧글 또는 권한 요청을 해 주시면 감사하겠습니다.
@호수 공유 감사드립니다. 소프트웨어 개발을 처음 시작하는 친구들은 막막함이 앞설텐데 이 내용이 많은 개발자들에게 도움이 될 겁니다.
새 버전을 작성했어요. 아래 링크 참고 부탁드립니다. 제 페이스북 계정으로 로그인이 안 되는데 가능하면 윗 글 업데이트도 부탁드리겠습니다.
초보 웹 개발자를 위하여 ver 0.2
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.