##저 처럼 비전공자가 프로그래밍에 입문해서부터 무엇을 어떻게 공부하면 좋을지 저의 경험이 조금이나마 도움이 되기를 바라며 이 문서를 작성합니다. 🙌 독학을 하면서 제가 봐왔던 책들과 동영상, 사이트들을 참고하시면 됩니다.
프로그래밍이 왜 필요한지에 대해서 많이 느끼게 해준 동영상입니다. 한번씩 동기부여가 필요하실때 도움이 됩니다.
##1월 3일 시작 ~ 1.14
- 프로그래밍 기초 개념
Headfirst programming으로 입문했습니다. 하나씩 차근차근 코드 따라쓰면서 문제 풀어보니 프로그래밍이 정말 매력적으로 느껴졌습니다. 이 책 천천히 보면서 이해하시면 나중에 다른 언어 하실때 도움도 되고, 프로그래밍의 재미를 붙이실 수 있으실 겁니다. 입문용으로는 베스트 책 인것 같습니다.
8000 ##1.18 ~ 1.23
- HTML & CSS
Do it Html 책 보고 공부했습니다. 근본 원리부터 차근차근 설명해주는게 아닌 기능과 테크닉만 알려주는 책이어서, 인터넷이 뭔지, 어떻게 동작하는지 공부하기 위해 Headfirst HTML & CSS읽었습니다. 지나고 나서 생각해보니 html, css는 궂이 따로 시간을 내서, 책사서 공부할만한건 아니라고 생각합니다. 나중에 웹 개발할때 코드보고 몇번 두드려보는게 훨~씬 빨리 배울것 같네요. Freecode camp에서 배우는것도 좋은 방법인거 같습니다.
##1.25 ~ 2~6
- C 기초문법
HTML공부후에 많이 고민했습니다. 무슨 언어를 공부해볼지.. 보통 입문은 python많이 추천하시더라구요. C는 첫언어로 공부했다가 다 보지도 못하고 흥미 떨어진다고해서 파이썬으로 결정하고 도서관과 서점을 둘러보던중 중고서점에서 열혈 C프로그래밍이 반값에 나와있는것을보고 그냥 사버렸습니다. 계획과는 다르게 C를 공부해보자해서 강의를 들으면서 공부했습니다. 저는 정말 재미있었습니다. 언어와 프로그래밍에 관련된 컴퓨터 지식들 메모리, 하드웨어 등과 같이 연결해서 기반지식들을 알려주시는데 진짜 유용했습니다. 지나고 나서 생각해보니 파이썬말고 C로 시작한게 정말 잘한 선택인것 같습니다. C로 처음 공부할때 제대로 해놓으면 다른언어 배울떄 시간이 엄청나게 줄어드는 것 같아요. 왜냐하면 문법은 대게 다 비슷비슷하기에.. 그리고 프로그래밍을 더욱 깊이 이해할 수 있게 도와줍니다.
##2.6 ~ 2.11
- C 문제풀이
C공부할때 넘겼던 연습문제들을 몰아서 풀었습니다. 이거 꼭 풀어보셔야 머리와 손에 기억이 남아서 오래갑니다. 이 때 너무 어렵다고 포기하지 마세요. 저도 이거 풀면서 제 스스로 바보인가 생각 많이 했습니다. 하지만 몇번하고 나니까 나름 익숙해지네요.
##2.12 ~ 2.19
- 자료구조
보통 자료구조를 다음으로 공부해라해서 윤성우씨의 열혈자료구조도 들었습니다. 내용도 어려운데 빠르게 공부해서 그런지 나중에는 그렇게 기억에 남진 않더라구요. 그래도 나중에 자료구조 알고리즘공부하는데 도움이 되었습니다. 내용을 외우려고 하지마시고 개념위주로 이해하시는게 중요한것같아요! 자료구조는 정말 정말 중요합니다.
##2.20 ~ 2.27
- 리눅스
검색을 해보니 리눅스를 사용할줄 알아야한대서 이것이 리눅스다보고 따라했었습니다. 처음에 가상머신 돌리며 만지다가, 윈도우 날리고 (우분투)리눅스로 갈아탔습니다. 처음에 많이 해맸어요. 근데 지금은 아주 편하고 웹 개발할때 리눅스는 필수입니다. 가장 쉬운 리눅스 시스템 관리 책은 기본 명령어와 기본적인 내용 위주로 쓰인 책입니다. 중간중간에 참고 했습니다. 프로그래밍쪽은 꼭 눈으로만 보지 마시고 손으로 뚜들겨보시는게 가장 최고의 방법!
##3.1 ~ 3.16
- Java 기초문법
앱 개발 해보고 싶어서 자바 기초문법 공부했습니다. 안드로이드 앱은 Java로 작성되고, ios앱은 swift라는 언어를 사용합니다. 저는 시장점유율이 더 높은 안드로이드를 선택했습니다. 역시나 윤성우씨 난 정말 자바를 공부한적이 없다구요로 공부했습니다. 처음에 조급증이 걸려서 이책보다가 저책보다가 시간 낭비 많이했습니다. 그냥 윤성우씨 책사서 강의 들으면서 책 중간중간 프로젝트 하라는거 다해봤습니다. 진짜 어려웠어요.. 제가 첫 언어인 C의 절차지향적 사고에 지배당해서 OOP란 개념 받아들이기 정말 힘들었습니다. 왜 다양한 패러다임의 언어(절차지향, 객체지향, 함수형)들을 배워야 하는지 이해가 갑니다. 프로그래밍의 목적에 맞는 언어를 선택해서 다른 특성으로(언어가 만들어질때 추구한 패러다임에 기반해서) 코딩을 해야하는지. 이 때 저는 빨리 하고 싶다는 생각에 몇 부분을 대충대충보고 넘어가고 했었는데, 그렇게 하면 어차피 다시 돌아가서 봐야합니다. 한번공부하실때 정말 빡시게 해놔야지, 뒤에 내용도 이해가 가고 뭘 만들때 덜 헤메게 됩니다. 독학하시는 분들 너무 조급하게 생각하지마시고 천천히 즐기시며 공부하실것을 추천합니다.
##3.17 ~ 4.9
- 안드로이드
자바 기본문법 끝내고 안드로이드 공부했습니다. Do it 안드로이드 앱 프로그래밍봤습니다. 이 책 저는 비추합니다. 구글이 이클립스에서 안드로이드 스튜디오로 넘어간다고 해서 나온책이 진짜 몇권 안되서 어쩔수 없이 봣는데.. 책이 뭔말인지 도통 이해가 안가고 설명 너무 생략되어있고..기능만 던지고 원리에 대한 설명은거의 없습니다. 책 때문에 한달을 낭비했네요. 혹시나 완전 초보자들이 보시기에는 이 책이 나은거 같더라구요. 원리부터 차근차근 설명해주는 책입니다. 그리고 안드로이드 개발은 언어공부하실때랑은 다르게 직접 자신이 만들어보고싶은 것 정해서 인터넷 + 책 찾아보면서 직접 만들어보는게 훨씬 빠른방법인거 같습니다. 책 한번 다 훑어보고 만들어봐야지 하다가 한달 다보냈습니다. 책만 읽어선 이해도 잘 안가고 기억에 오래 안남습니다.
##4.11 ~ 4.23
- 안드로이드 앱 개발
직접 앱 개발했습니다. 진짜 재미있더군요. 책, 구글링 찾아보면서 열심히 했습니다. 혹시나 처음 시작하시는분들 구글은 친구이자 스승입니다. 그리고 가능하시다면 영어로 찾아보고 읽으시길 추천합니다. 어차피 나중에가면 자연스럽게 보게되겠지만.. 정보의 양 차이가 엄청나요! 밑에 링크에 많은 질문과 답변 올라와 있습니다.
그리고 안드로이드 마켓에 올렸습니다. 이 때 첫 개발이였기때문에 앱 구조, UI, UX 설계를 한 다음에 개발 시작했습니다. (물론 중간중간에 수정도 많이 했구요) 디버깅도 엄청나게 많이 했습니다. 아마 처음이렇게 개발하시면 정말 많이 막힐거에요. 하나부터 열까지. 포기하지 마시고 자기가 원한것에서 조금 수정도 하면서 차근차근하시면 끝을 보시지 않을까 합니다.
##4.25 ~ 5.16
- 이산수학
두번째 앱 만들려고 시도했습니다. 시중에 나와있는 앱보고 따라만들려고 했는데. 너무 어려워서 depackage도 써보고 github라이선스 사용한것들 찾아도 봤습니다. 하루종일 구글링하는데 시간을 다 쓰는 저를 발견하고 회의감이 들었습니다. 만약 이런식으로 항상 구글에만 의존해야하고 내가 정작 생각하는 시간은 거의 없는데, 내가 옳바른 방향으로 나아가고 있는걸까. 제 판단은 아니올씨다! 라고 생각하여서 근본적인 힘 수학적, 논리적 사고를 기르기 위해, 이산수학샀습니다. 이책이 가장 유명하더군요. 처음 한챕터는 하나하나 문제를 풀면서 공부했습니다. 그 이후에는 MIT 이산수학 강의보면서 공부했습니다. 대략 3개월 정도 걸린거 같네요.. 중간에 좀 흐지부지해진게 있어서; 보통 한강의가 1시간 20분정도 됩니다. 저는 노트 필기하면서, 중간에 모르는거 찾아보고, 생각해보고 하니 한강의당 대충 3~4시간 걸리더군요. 참고하시길. 만약 나중에 알고리즘 공부하실려면 이 과목은 필수입니다! 그리고 기본적인 네트워크 지식갖추기 위해 후니의 네트워크 봤습니다. 이 아저씨채널 정말 유용했습니다. 웃기기도 하고 기술이나 개발자 생활, 취업등에 대해서 이야기 해주는데 유용합니다! 강추합니다
##5.17 ~ 6.4
- SICP
- 알고리즘 기초 1
이전에 공부하면서 찾아보다가 SICP(SICP, Structure and Interpretation of Computer Programs)라는 책을 찾았습니다. 프로그래밍에 대한 뼈대를 잡는 공부를 할 수 있을거 같아서 책 사서 보면서 scheme이라는 언어를 배우고, 재귀, 프로그래밍 구조에대해 배웠습니다. 중간에 보다가 중단했습니다. 이때 정말 조급증걸려서 빨리 취업해야한다는 생각에 이런거 볼 겨를이 없다며.. 이건 정말 나중에라도 꼭 보려구요. 프로그래밍 독학하신지 얼마안되신분들 기초를 탄탄하게 다지고 싶다면 이 책 추천드립니다! 이 책에 있는 문제에 대한 답지 MIT 강의 참고하시길
그리고 Sedgwick 알고리즘 강의들으면서 공부 시작했습니다. 구글에서 처음 알고리즘 자료구조 개념잡기에 Sedgwick 교수님 강의 추천을 보고 선택했습니다. 이 교수님 강의는 두 파트로 나눠져있고 1은 기초, 2는 응용입니다. 그림을 이용해서 시각적으로 설명을 해주시니 훨씬 이해하기 쉽습니다. 하.. 어렵습니다. 곱씹어보며 복습해도 어렵습니다. 파트 1만 들었습니다. 처음 할땐 정말 어려우니까 자기 머리나쁘다고 생각하지 마시길! 처음인데 다 어렵지 않을까요? ;) 책은 알고리즘 서적의 바이블로 불리는 Introduction to algorithm 샀습니다.
##6.5 ~ 6.30
- 웹 개발
생활코딩 웹개발 프로젝트보고 따라했습니다. 이고잉님 설명 정말 친절하게 잘해주시고 필요한 기본개념들 공부하기 좋습니다. 요즘은 무엇을 해도 웹에대한 이해는 있어야해서 찾아봤는데 여기가 시작하기 좋은 것 같아요. 몰랐는데 페이스북, 구글 등 유명한 스타트업회사들은 전부 웹기반회사더군요. 웹 프로그래밍은 이제 선택이 아닌 필수인듯 합니다. 요즘 트렌드링크도 응용앱에서 웹앱으로 바뀌어 가고 있다더군요. 이런 트렌드 꼭 읽어보시길.
##7.1 ~ 7.30
- MEAN 스택 웹 개발
- 수학 기초
웹 개발 트렌드를 보니 MEAN 스택이 핫하다고 하더라구요. 웹개발을 처음부터 끝까지 Java Script로 빠른 개발이 가능하며 풀스택이기에.. 스타트업에서 많이 쓴다고 합니다. 그래서 이 책 빌리고,Youtube에 튜토리얼들 보고 따라했습니다.
두번째 영상은 4편까지 있고 얘가 잘시간에 해서 그런지 횡설수설하기도 하고 욕도 꽤 쓰니까 알아서 필터링해서 들으시길.. 이 튜토리얼 보고 그대로 코드 따라서 쳤고, 처음부터 똑같이 다시 만들어보고 2번 했습니다.. 다행히도 저는 우분투를 계속 써와서 별문제는 없었는데 윈도우에서 개발할려고하면 많이 번거롭다고 하더라구요 ㅎㅎ 그리고 요렇게 튜토리얼하면서 MIT 이산수학 강의 들었습니다. 총 25강까지 끝까지 보는데 시간이 꽤 걸렷습니다. 수학기본개념이 부족해서 칸 아카데미에서 중간중간 모르는 개념 공부했습니다. 강력 추천합니다!
##8.1 ~ 8.8
- 코딩 문제풀기
- C++ 기초문법
- 정보처리기사 이론
문제해결능력 키우기에는 Competitive Programming이 좋다고 하더군요. 그래서 문제풀이 할려고 C++ 기초 공부했습니다. 기초문법 책 보면서 하려니 천년만년걸릴거 같아서 유튜브에 좋은 자료 찾아서 이거 한번보고 문제 풀이 시작했습니다. C++ 기초문법 초단기 꿀 튜토리얼 hackerearth에서 자료구조 알고리즘 연습문제들 풀고있습니다. MIT 알고리즘 기초 강의듣고 있습니다.
정보처리기사 한번 훑어봤습니다. 기초적인 내용이라던데 저한테는 생소한것들이 많더라구요. 이거로 부족한부분 채워야 합니다. 아래에는 문제풀이 사이트 링크와 조언에 관한 글 링크입니다.
##Competitive Programming 웹 사이트
##8.10 ~ 8.30
- 알고리즘 기초 2
- 오픈소스
문제풀이를 하다가 방향을 바꿧습니다. 기존에 뜨문뜨문 보던 MIT 알고리즘 기초 강의를 집중적으로 공부했습니다. 프로그래밍에 대해 잘못된 선입견을 가지고 있었다는것을 깨우쳤습니다. 바로 collaboration! 예전에는 소프트웨어의 규모가 작아서? 천재적인 해커가 혼자서 할 수도 있었지만은(요즘도 가능하겠지만..) 요즘은 웹기반 소프트웨어와 사용자의 규모, 사업이 커짐에 따라 한명의 머리에서 나오는 아이디어보다 여러명이서 협력했을때 시간적으로나 아이디어적으로나 더 훌륭한 개발이 가능하다고 생각합니다.
저는 예전부터 오픈소스가 중요하다는것은 알고있었는데 참여하려해도 그때는 할 수 있는 레벨이 아니었나봅니다 :( 지금도 배우는 과정이지만 조금이나마 코드를 이해할 수 있고, 깃 사용법도 조금 익혀서 이제 본격적으로 오픈소스의 세계로 빠져 보려고합니다! :) 리처드 스톨먼 삼촌의 동영상이 참 많은 생각을 하게 해주더군요! 꼭 한 번 보시길
강의 들으면서 오픈소스에 본격적을 참여하기위해 깃허브를 찾아보고있습니다. 동시에 '실용주의 프로그래머'란 책을 보면서 코딩컨벤션을 이해하고, 다른 사람이 쓴 코드를 읽고 이후에 제가 쓴 코드가 기존의 것에 잘 스며들수 있게 초점을 두고 작업중입니다. github 문서화 관련 가이드
##9.1 ~ 9.12
- 오픈소스
- 문제풀이
MIT 기초 알고리즘 14강 까지 다 봤습니다. 이제부터는 기초 알고리즘들을 문제풀이와 구현을 통해 체화하는 시간을 가지려 합니다 :)
오픈소스 워크 플로우에 대해 전반적으로 설명해주는 정말 좋은 영상 찾았습니다 꼭 보시길!
##9.12 ~
- 문제해결능력
코딩인터뷰 완전분석(Cracking the coding interview) 이란 책을 샀습니다. 이 책은 sw 개발자 기술면접준비를 목적으로 알고리즘, 자료구조 위주의 예시문제와 대처 전략등에 소개하는 책입니다. 하지만 저는 역으로 이 책을 공부용으로 샀습니다. 책은 미국에 메이저 테크 스타트업들의 채용방식을 바탕으로 쓰여졌습니다. 구글, 페이스북, 아마존 등 일류 소프트웨어 회사들이 입사 면접에서 알고리즘, 자료구조를 손코딩을 한다는 것은 개발자에게 그만큼 algorithmic thinking 이 그만큼 중요하다는 뜻이라고 생각합니다. 그리고 인터넷에 여러 칼럼이나 답변글을 보면 제가 생각하는 게 맞다고 저는 확신합니다. 이 책에서 제시하는 알고리즘과 자료구조에서 꼭 알아야하는 기초 개념들(표로 나와있습니다)을 바탕으로 문제를 풀어가면서 책에서 가이드해주는 방법으로 문제해결하는 능력을 다지려고 합니다.
험난한 여정이 예상됩니다. 이게 진짜배기 공부인데 전 여태껏 뭘 한 것일까요..
##- 지나고 나서 보니 처음 공부하시는 분들은 책을사서 공부하시면 처음부터 다 외우려고 하시지 마시고 책 처음부터 끝까지 한번 스키밍 하시면서 전체적인 내용을 한번 보시고, 구글링이나 인터넷에서 중요한게 뭔지 별로 안중요한건뭔지 찾아보시고 본격적으로 공부하시면은 시간낭비를 많이 줄이실수 있을 겁니다. 그리고 하다가 좌절할 날들이 엄청 많겠지만 재밌게 즐기면은 시간도 알차게 훅훅 잘가니까 저처럼 너무 걱정하지마시고 화이팅하시길 바랍니다!
ps. 공부하시느라 시간이 부족하시겠지만은 운동은 꼭 하시라고 권하고 싶네요. 저도 초반에 앉아만 있다가 허리가 아파서 10분도 앉아있지를 못하겠더군요.. 그래서 매일 또는 격일로 달리기하고 스쿼트하고 하니 이제 괜찮습니다! 밸런스가 중요하다고 생각합니다.