나의 온라인 컴퓨터공학 공부
제가 컴퓨터공학 공부를 할 때 사용하는 인터넷 자료들을 공유합니다!
이 글을 올린 이후 도움받은 자료들과 면접 자료를 추가적으로 정리해서 2022년 버전으로 정리 글을 올렸습니다.
☞ https://coding-groot.tistory.com/179
공부하실 때 참고하셔용!
예전에 제가 학교에 익명으로 공유했던 내용들을 다시 한번 정리했습니다.
어떤 강의를 열심히 수강한 다음 "내가 이것을 실제로 활용할 수 있을까?"라고 생각해보면 항상 회의적입니다. 예를 들어서 컴파일러 이론을 배웠다고 해도 실제로 구현하는 것은 어렵습니다. 또는 해당 과목에서 다뤄야 할 주제 몇 개를 스킵하고 넘어가기도 합니다. 이것을 비판하는 게 아니라 교수님이 다 떠먹여 줄 수도 없고 시간상 어쩔 수 없다고 생각합니다.
이렇게 부족한 부분은 저는 항상 인터넷을 이용해서 공부해왔습니다. 이렇게 공부하다 보니 "전공 공부만 할 목적이라면 대학이 필요하지 않을 수도 있겠다"는 생각도 듭니다. 요즘 인터넷에는 퀄리티 좋은 CS(컴퓨터공학) + 기타 전공 강의들이 매우 매우 많습니다. 너무 많아서 뭘 들어야 할지 못 고를 정도입니다. 그때마다 도움받은 유용한 사이트들을 공유해봅니다. 대부분 유명한 자료들입니다.
1. 온라인 커리큘럼
OSSU(Open Source Society University): Complete education in computer science using online materials
OSSU 커리큘럼을 들어보셨나요? 요즘 온라인 강의가 많아졌습니다. 세계적으로 인기가 많은 공개강의로 구성해서 컴퓨터공학 전체 커리큘럼을 만든 겁니다. 바로 링크 클릭해서 들을 수도 있고 Trello에 계정을 만들고 자신의 진도를 체크하면서 마치 대학을 졸업하듯이? 이수해나갈 수도 있습니다. 컴퓨터공학 강의들이 1에서 4학년 순서대로 단계별로 정리되어 있기 때문에 처음에 대학교에 입학하고 공부를 시작할 때 많은 도움을 받았습니다.
이 커리큘럼을 쭉 이수만 하셔도 웬만한 컴공생 수준의 전공 지식을 쌓을 수 있다고 합니다. 이걸 본 처음에는 저도 따라가면서 다 이수해보려고 했지만 양이 너무 많아서 실패했습니다 ㅎㅎ..
Free Code Camp: Open Source codebase and curriculum
FreeCodeCamp 커리큘럼: https://github.com/freeCodeCamp/freeCodeCamp#certifications
FreeCodeCamp 유튜브 채널: https://www.youtube.com/freecodecamp
OSSU와 비슷하게 FreeCodeCamp도 있습니다. 유튜브로 CS관련 과목이나 어떤 개발 주제에 대해 검색을 하면 6시간 넘는 강의를 본 적이 있나요? 있다면 FreeCodeCamp에서 찍은 강의일 확률이 높습니다. 저도 유튜브를 보다가 우연히 FreeCodeCamp에 대해서 알았는데 이곳은 어떤 개발 주제(ex. 웹 풀 스택 개발, 자료구조와 알고리즘, 머신러닝)에 대한 커리큘럼을 제공해주고 필요한 강의를 해줍니다. 한 과목당 한 영상으로 강의들을 쭉 편집해서 유튜브에 올려주는 게 FreeCodeCamp의 특징입니다.
저는 사실 FreeCodeCamp의 커리큘럼을 참고하기보단 FreeCodeCamp의 유튜브 채널에서 필요한 주제를 골라서 듣습니다. 과목 당 4시간 이상의 강의 또는 2개 강의로 쪼개서 아주 긴 영상으로 되어있습니다. 이게 처음에는 영상 길이에 압도되고 매번 어디까지 봤는지 기록해야 할 것 같지만 유튜브 영상이라서 다시 접속하면 보던 부분부터 재생되기 때문에 생각보다 불편하진 않았습니다. 그리고 HTML, CSS, JS부터 최근 핫한 Next.js까지 웹 개발과 관련된 강의도 많이 합니다.
2. 뭐가 제일 좋은 강의지? 어떤 책이 제일 유명하지?
지금 인터넷에 컴퓨터공학 관련 자료들도 넘칩니다. 그래서 어떤 책을 봐야 하는지 결정하는 것도 큰 고민입니다(나름 행복한 고민입니당). 그러다가 찾은 사이트입니다.
Which subjects should you learn, and why?
👉 내가 어떤 과목을 들어야 하고 왜 들어야 하는가?
What is the best book or video lecture series for each subject?
👉 그 과목을 공부할 때 가장 좋은 책이나 강의는 어떤 것인가?
이런 고민들에 대한 가이드라인을 제시하는 사이트입니다. 과목별로 좋은 자료들을 추천해줍니다.
저의 선택 장애를 해결해준 훌륭한 사이트입니다.
"어떤 과목을 수강할 때 내가 이걸 왜 해야 하지?"라는 의문이 들거나 교수님이 교재로 선정한 책을 아마존에 찾아보니 평점이 1점일 때^^ 많은 도움이 됩니다.
사람들마다 중요하게 생각하는 것이 다를 수 있으므로 참고용으로만 보세욥! 저는 여기서 알려주는 것들이 공감돼서 많음 도움을 받았습니다.
이제 한국어로 번역한 사이트도 생겼네요.
3. 무료로 배울 수 있는 국내 강의 사이트 모음
http://www.kocw.net/
국내에서 운영하는 무료 강의 사이트들입니다. 생활코딩, 인프런, 코딩 도장, 위키 독스, ... 이 모든 사이트를 모아서 정리한 사이트가 있습니다. 첫 번째 링크만 저장해두면 나중에 찾기 편할 것 같습니다. 사이트에 Edwith의 링크는 들어가 있지 않아서 따로 추가했습니다.
[국내 사이트]
생활코딩
- 가볍게 듣기 좋습니다.
- 코딩을 잘하고 싶은 사람들(전공자 기준 아님!)을 위한 강의를 하는 곳입니다.
- 빠르고 쉽게 기초적인 내용을 배울 수 있습니다.
- 방대한 Web의 세상에서 도대체 뭐부터 시작해야 할지 몰랐었을 때 큰 도움을 받았습니다.
- 아무것도 모르는 신입생 때 여기에 있는 이고잉님의 Web(HTML/CSS/JS) 강의를 일주일에 한 챕터 단위로 돌파하는 스터디를 한 후부터 웹으로 입문했습니다.
Edwith
- 네이버 커넥트 제단에서 만든 무료 코딩 교육 사이트입니다.
- 세계적인 명강의들을 번역해주고 별도로 인공지능, 앱(iOS/Android), 파이썬, 유니티 등의 강의도 올립니다.
- 포스텍, 카이스트 등의 대학에서 공개한 오픈 강의들도 찾아보기 쉽도록 모아놓습니다.
- 저는 새내기 때 여기서 번역한 (하버드-cs50)를 인상 깊게 들었습니다. 컴퓨터공학과에서 제가 앞으로 무엇을 배울 것인지 알 수 있는 좋은 기회였습니다.
인프런(Inflearn)
- 가성비 넘치는 강의들이 많은 곳입니다.
- 할인 이벤트도 자주해서 부담이 된다면 기념일을 기다려보세용.
- 수학, 소프트웨어 개발, 그래픽 등의 다양한 분야 강의들이 있습니다.
- 유료이지만 다른 사이트의 유료 강의에 비해서 저렴했고 유튜브보단 더 전문적인(실무에 가까운) 강의들이 많습니다. 리뷰도 많이 달리고 무료로 기본적인 강의는 많이있습니다.
- 유튜브의 랜덤한 강의보다 체계적이라서 마음 놓고 학습하기 좋았습니다. 강의마다 다르겠지만 후기 참고하셔서 구매하시면 돈값은 무조건했습니닷!
- 최근에 관심있는 강의가 생겨서 구매해서 며칠 동안 수강했는데 쾌적하게 볼 수 있었습니다!!
코딩 도장
- C언어, 파이썬, 자료구조, 알고리즘을 학습하기 좋은 곳입니다.
- C언어를 까먹을 때마다 들어가서 복습하는 사이트입니다ㅎㅎ.
- 주제별로 동영상도 있고 코드가 첨부되어 있어서 학습하기 편합니다.
C# Study
- C#을 학습하기 좋은 사이트 중 하나입니다.
- C#문법, C# 멀티쓰레딩, C# 자료구조, C# 데이터베이스 등 C#에 관한 건 다 정리되어 있습니다.
- 이 사이트를 관리자 분께서 계속 업데이트를 해주는 것을 느꼈습니다.
- C#에서 새로운 버전이 나오면 그에 따른 글도 포스팅되더라고요.
- 처음에 들어갔을 때 개인적으로 UI가 마음에 들지 않아서 미심쩍었는데 자료의 양과 퀄리티를 보는 순간 마음이 바뀌었습니다.
- C# 공부할 때 강추합니다!
KOCW
- Korean(한국형) Open(공개) Course(강의) Ware(체제? 서비스)입니다.
- 한국의 여러 대학교에서 무료로 공개한 강의들이 있는 곳입니다.
- 아마 한국어로 된 대학 전공 강의를 가장 많이 찾을 수 있는 곳일 겁니다.
- 다른 해외 OCW 사이트에 비해 화질이 낮거나 제대로 관리되지 않은 강의들이 종종 있지만 그래도 한국어로 된 좋은 강의들도 많습니다.
- 이 사이트가 숨은 명강의들을 찾는 재미가 있는데 대표적으로 반효경 교수님의 운영체제 강의가 취준생 사이에서 엄청 유명합니다.
- 저는 운영체제와 같은 전공 공부를 할 때 제가 다니는 교수님의 설명뿐만이 아니라 여러 교수님의 설명을 들을 수 있어서 많은 도움을 받았습니다.
- 영어로 된 강의가 아니라 한국어로 된 강의인 것이 큰 장점입니다. (교수님이 영어로 수업하시는 것도 몇 개 있습니다.)
4. 수학 공부
빨리 공부해야 할 때 - Khan Academy: https://ko.khanacademy.org/math
자세히 공부할 때 - MIT: https://ocw.mit.edu/courses/most-visited-courses/
제가 그동안 소프트웨어학부에서 이수체계도대로 수강하면서 수학에 관련된 강의가 부족하다는 것을 느꼈습니다. 선형대수도 반만 배우고 심지어 공업수학은 사라졌습니다. 그래서 동기들 중에서는 수학과 수업을 듣는 친구도 있었습니다.. 저는 저 정도로 공부할 필요는 없다고 생각했지만 그렇더라도 수학이 많이 불안했습니다. 아무래도 부족한 수학은 따로 공부해야겠다는 생각이 많이 들었습니다.
Khan Academy: 수학을 간단하지만 깔끔하게 필수적인 개념 위주로 가르쳐 주는 곳
MIT OCW: 세계적으로 인정받는 MIT 명강의들이 모여있는 곳
제가 공부하는 방식입니다. 학기 중엔 팀플을 하느라 힘들었기 때문에 수학 수업에서 진도를 천천히 나가 주는 게 솔직히 편하긴 했습니닷ㅎㅎ. 어쨌든 학기 중에는 팀플/동아리 활동 때문에 저는 부담 없는 칸 아카데미 강의로 어떤 내용이 있는지 살펴보곤 했습니다. 그리고 방학 때 본격적으로 MIT공개 강의로 수학을 자세히 공부했습니다. 대부분 오래된 강의인데 의외로 필기도 선명하게 보이고 설명도 친절하고 강의 내용도 역시 알찹니다. 제가 수학을 잘하는 편이 아닌데 대부분 이해가 됐습니다. Most Visited에 있는 강의들은 전부 명강의입니다.....!
+ 추가로 이산수학에 관해서 말하고 싶은 것
이산수학은 유튜브에 TheTrevTutor가 올린 것으로 재밌게 공부했습니다. 교수님 강의랑 같이 보면서 공부했습니다. 대학교 강의에서 사용하던 이산수학 교재인 <Discrete Mathematics(Johnsonbaugh)>를 혼자 읽고 이해하려니 챕터의 도입부에서 계속 막히고 진도도 안 나가고... 쉬운 과목이라더니... 아무래도 새로운 개념이 많이 등장하다 보니 교재만으로는 익히기가 어려웠습니다. 그래서 저는 유튜브 강의를 참고했습니다. 겨우 교재의 어려웠던 설명과 표기방식(notation)을 명확하게 이해하게 되며 노잼이었던 수업이 재밌어진 기억이 있습니다ㅎㅎ. 이 분은 크게 Discrete Mathematics 1이랑 Discrete Mathematics 2로 나눠서 강의합니다. 이산수학은 어차피 다른 과목에서 더 상세하게 배울 수 있으니 쓸데없다고 생각하는 사람들도 많습니다. 저는 반대로 이산수학을 공부하면서 이해한 내용이 다른 과목을 공부할 때 생각지도 못한 부분에서(어떤 개념을 이해할 때?) 등장해서 그 과목을 따라가는데 도움을 받은 적이 많습니다. 잘 공부해 놓고 표기법과 증명하는 법을 익혀놓으면 다른 공부에도 도움이 됩니다.
위의 이산수학과 비슷한 맥락으로 MIT에서 강의한 Mathematics for Computer Science 강의도 추천합니다. MIT에서 강의한 컴퓨터공학을 위한 이산수학 강의입니다. 같은 이산수학이지만 TheTrevTutor가 강의하는 것과는 방향이 다른 강의입니다. MIT 강의가 컴퓨터공학적인 내용에 대입하기 쉽게 해주는 느낌의 맞춤형 강의입니다. 그렇기 때문에 딱히 이산수학 수업을 수강하고 있지 않다면 CS 과목을 배우고 사고하는데 큰 틀이 되는 MIT의 Mathematics for Computer Science 강의를 추천하고 싶습니다.
이산수학에서는 증명, 집합과 이산적인 것들에 관한 여러 개념, 등을 배웁니다. 각 챕터별로 내용이 이어지지도 않고 중구난방인 느낌이 들어서 당황스러울 수도 있습니다.(고등학생 때 배운 미적분과는 전혀 다른 느낌의 수학입니다)
제가 새내기 때 나에게 강의를 하나 추천할 수 있다면 Mathematics for Computer Science를 추천할 겁니다!
학년이 올라갈수록 이산수학 강의를 듣기가 애매해집니다. 한 2학년 2학기만 되어도 이산수학의 여러 부분들을 시험 준비하면서나 구글링하거나 다른 강의에서 깊게 배우게 되어서 그렇습니다. 본격적으로 컴퓨터공학에 입문할 시기이며 시간 많을 1학년 때 들으면 증명하는 것에도 익숙해지고 문제 해결 능력에도 도움이 되고 다른 과목을 배울 때도 도움이 될 내용도 많아서 좋은 강의인 것 같습니다.
5. 학교에서는 안 가르쳐 주지만 새내기 때 알았으면... 했던 것들
Great Practical Ideas in CS - CMU: https://www.cs.cmu.edu/~07131/f19/
Missing Semester - MIT: https://missing.csail.mit.edu/
Git, GitHub / Terminal, Bash / LaTex
위의 Tool들은 학부에서 잘 가르쳐주지 않습니다. 하지만 자연스럽게 쓰게 되는 것들입니다. 그래서 사용해야 했을 때 (교수님이 사용하길 원했을 때) 유튜브를 통해서 공부했습니다. 그런데 CMU는 아예 새내기를 위한 약간은 특별한 수업이 있습니다. "07-131 – Great Practical Ideas in CS"라는 과목에서 개발하면서 실용적으로 사용할 수 있는 유용한 Tool들을 가르쳐줍니다. 이런 툴들은 미리 알고 익숙해지는 것이 좋습니다. 활용할수록 점점 편해집니다.
MIT에도 비슷한 강의가 있습니다. "The Missing Semester of Your CS Education"이라는 강의입니다. 저는 시간이 여유롭다면 이 강의를 한번 들어보시는 것을 추천하고 싶습니다. 강의명 그대로 컴퓨터 공학(과학) 커리큘럼에서 생략한 것들을 가르쳐주는 강의입니다. 대학교에서 자세히 다루진 않지만 공부할 때나 개발할 때 필요하거나 알면 편한 것들을 모아서 가르쳐줍니다.
제가 다니는 학부의 커리큘럼 상 저학년 때는 리눅스나 명령어 환경에 익숙해질 기회는 거의 없습니다. 프로그래머 입장에서 리눅스는 매우 편하고 유리한 환경이어야 하는데 저는 익숙하지가 않아서 그런지 항상 어렵게 다가왔습니다. 하지만 막상 익숙해져 보니 Windows와 같은 또 하나의 편한 운영체제라는 느낌이 듭니다. 처음에 제가 그랬듯이 명령어 환경이라고 너무 겁먹지 않으셔도 됩니다. 이 강의를 통해서 리눅스 환경 특유의 (C언어 같은 프로그래밍이 아닌) 간단한 툴들을 조합(ex. Pipelining)해서 문제를 해결하는 또 다른 프로그래밍을 배워도 보시고 리눅스 환경에 익숙해지면 앞으로 CS공부를 할 때와 나중에 개발을 할 때 큰 도움이 될 것입니다. 말고도 Git 같은 좋은 필수적인 툴들을 가르쳐줍니다. 어디서 찾아보기 특별하고 어려운 유익한 강의인 것 같습니다. 특히, 서버나 리눅스나 백엔드에 관심이 많으신 분들께 추천합니다!!
혹시 감이 안 잡히실까봐 강의 목차를 들고 왔습니다.
새내기이거나 CS에 처음 입문하는 분들을 위해 아래의 강의 목차 옆에 간단하게 주석을 달았습니다!
MIT Missing Semester 강의 목차
1/13. 'The Shell': 명령어를 입력하는 창인 Shell에 대해서 알 수 있습니다
1/14. 'Shell Tools and Scripting': Shell 자체도 하나의 프로그래밍 언어입니다. Shell 스크립팅은 C언어와는 전혀 다른 방식이면서도 닮아 있습니다. Shell 스크립팅은 어떤 느낌인지 알 수 있습니다.
1/15. 'Editors (Vim)': 명령어 환경에서 자주 쓰는 텍스트 에디터입니다. 리눅스용 Visual Studio Code 같은 것입니다. 익히기 어렵지만 습득하게 된다면 키보드만으로 매우 효율적으로 프로그래밍할 수 있게 됩니다. 제가 처음 리눅스를 다룰 때 뭐만 하면 Vim이 켜져서 이게 뭔가... 하면서 엄청 고생하면서 배운 경험이 있습니다. Vim을 처음 배울 때 이 강의를 봤었다면 정말 좋았을 것 같습니다.
1/16. 'Data Wrangling': 리눅스는 미리 만들어진 간단한 명령어들의 조합으로 많은 유의미한 작업을 합니다. 그런 리눅스의 강력함을 맛볼 수 있습니다. 단순한 명령어들로 어떤 데이터를 가져와서 다르게 변환하거나 원하는 정보만 뽑아 오는 법을 배웁니다. 특정 문장에서 문자열의 패턴을 지정해서 검색할 때 사용하기 편한 정규식도 사용하고 첫 번째 열을 기준으로 정렬하거나 원하는 부분만 추출하고 처리하는 방법을 배울 수 있습니다.
1/21. 'Command-line Environment': 명령어 환경의 장점/강력함에 대해 알 수 있습니다!! 명령어를 이용해서 할 수 있는 여러 팁(ex. aliasing)들을 알려줍니다.
1/22. 'Version Control (Git)': 개발자라면 필수로 알아야 할 도구인 버전 관리 시스템입니다. 아래에서 더 자세히 설명하겠습니다.
1/23. 'Debugging and Profiling': 프로그래밍의 기본인 디버깅 스킬입니다. 대부분의 프로그래밍에서는 보통 반 이상을 디버깅하는데 투자합니다. 명령어 환경에서는 어떻게 디버깅/프로파일링 하는지 알 수 있습니다. 오류 찾는데 엄청 오래 걸리거나 어디서부터 디버깅을 시작해야 할지 모르겠던 적이 있나요? 이 강의를 통해서 디버깅 스킬이나 팁을 얻어보세요.
1/27. 'Metaprogramming': 자기 프로그램을 Build하거나 코드를 Testing 하거나 Dependency를 관리하는 법에 대해서 가르쳐줍니다. 저학년 때는 중요성을 알기 어렵지만 시간이 지나면서 소프트웨어공학을 배우고 인턴도 해보고 하다 보면 이러한 것들의 중요성에 대해서 자연스럽게 알게 될 겁니다. 오픈소스 프로젝트에 기여만 해봐도 Travis CI 같은 봇이 뭔지 모를 Build, Testing, Dependency를 체크해주는 것을 쉽게 볼 수 있습니다. 어려운 것은 아니고 미리 익숙해지는 것도 좋을 것 같습니다!
1/28. 'Security and Cryptography': 기본적인 보안에 관해서 배울 수 있습니다. 엔트로피, 대칭키, 비대칭키, 해쉬 함수 ... 등을 가르쳐줍니다. 실제 툴들을 사용하면서 만나기 쉬운 용어/개념들을 배웁니다. 해쉬 함수나 RSA 정도는 필수로 알아야 합니다.
1/29. 'Potpourri': 기타 툴들
Missing Semester 한국어 사이트를 참고하면 더 자세하게 나와있습니다.
+ 추가적으로 Git에 관하여...
이 중에서 특히 Git과 GitHub는 1학년 때 미리 익숙해져도 좋을 것 같습니다. Git은 버전-관리-시스템(쉽게 말하자면 파일을 관리해주는 관리자)이고 GitHub는 많은 개발자들이 애용하는 Git 저장소를 올리는 사이트(개발자용 구글 드라이브 같은 곳)입니다. 나중에 팀플 할 때도 Git을 이용하게 될 겁니다. 보통 프로젝트에서 쓰이는 자원들이나 자기가 작성 중인 소스코드를 GitHub에 올려서 그 프로젝트를 공유하면서 작업합니다. 제가 한 모든 개발 기록은 거기에 남습니다. 그래서 포트폴리오로도 활용 가능합니다. 요즘 회사 취직을 할 때 자신의 GitHub 주소를 적는 것은 거의 필수라고 합니다. 오픈소스 프로젝트들도 GitHub에 많이 개방되어 있습니다. 저는 여러 프로젝트를 구경하면서 "나도 공부해서 기여를 해보자!" 이런 욕심이 생기더라고요. 그래서 Git과 GitHub는 (개발자라면) 어차피 평생 사용해야 하는 것이기 때문에 미리 배우고 활용하며 익숙해지는 것을 추천합니다.
- 처음 시작하는 분들은 Git GUI(눈으로 보면서 클릭할 수 있는) 프로그램인
소스트리
로 학습하는 것을 추천합니다.
저는 이고잉님 Git 강의가 이해하기 편해서 좋았습니다! (개인적으로 소스트리가 처음 공부하고 사용할 땐 좋았는데 Conflict 해결이나 Diff 기능 같은 것은 좀 별로더라고요. 처음 학습할 땐 소스트리로 하고 GitKraken 같은 다른 프로그램도 써보세요!)
이고잉님의 Git 소스트리 강의: https://opentutorials.org/course/1492 - 나중에 리눅스를 써야 하거나 Git CLI를 공부해야 하면 "지옥에서 온 Git"이라는 강의를 추천합니다!
Git 내부 동작까지 살짝 다뤄주셔서 깊이도 있고 설명도 시원해서 좋습니다. - Git에 고이고 싶으면 <Pro Git>(https://git-scm.com/book/ko/v2)을 읽으면 됩니다. 특히 마지막 Chapter인 Git Internals가 꽤나 흥미롭습니다.
6. 해외 무크 강의
- Edx, Coursera: 하버드, 예일, 프린스턴, 등 여러 해외 대학에서 공개하는 강의들은 웬만하면 이 두 사이트 중 한 곳에 올라갑니다(따로 학교에서 사이트를 운영하는 경우도 종종 있습니다). 이런 온라인 무크 강의 사이트들은 돈 주고 전자 학위?? 같은 것을 따면서 들을 수도 있고 그냥 공짜로 들을 수도 있습니다.
이 전자 학위라는 것이 외국에서는 인정하는 곳이 몇 곳 있고 실제 이것만으로 취업한 사례도 있다곤? 하는데 한국에서는 아무 쓸모없는 것 같습니다. 아직은 인정이 되는 곳이 거의 없는 것 같으니 그냥 무료로 audit(청강)하는 것을 추천합니다. - Udacity: 이 사이트에도 많은 공개 강의들이 있습니다. 실무, 실제 활용과 관련된 강의가 많다는 것이 특징입니다. ex) FireBase로 채팅앱 만들기, Hadoop Deploy, ML for IOS, 인터뷰 준비,...
Tip) 'Program Catalog'로 가서 좌측의 'Filter By' 메뉴에서 'Free Courses'를 체크하면 무료 강의들만 필터링해서 볼 수 있습니다. - Kandenze: 이 사이트는 음악, 예술과 컴퓨터 공학을 융합한 강의들이 많이 있습니다. 그래서 특이한 강의들이 많은 것 같습니다. 예를 들어서, "Machine Learning for Musicians and Artists" 강의가 있습니다.
위에 적은 각각의 사이트에 들어가 보면 어떤 강의들이 좋은 평을 받고 요즘 세계적으로 인기가 많은지 파악하기 어렵습니다. 그때 모든 해외 공개 강의들의 트렌드를 보여주는 사이트인 classcentral.com을 이용하면 편합니다.
저는 이렇게 사용합니다. 예를 들어서 알고리즘 배우고 싶은데 강의가 여러 개라 뭘 들어야 할지 모르겠다면 https://www.classcentral.com/subject/cs에서 인기가 많은 것부터 찾아봅니다.
7. 머신러닝 / 딥러닝
- 머신러닝(Caltech): https://www.youtube.com/watch?v=mbyG85GZ0PI&list=PLD63A284B7615313A
- 머신러닝(Andrew Ng): https://www.youtube.com/watch?v=qeHZOdmJvFU&list=PLVJA7edNhnRTYqqW5zIj0gkVmxWnkXqTP
- 머신러닝(Nvidia): https://www.youtube.com/playlist?list=PLTIkHmXc-7an8xbwhAJX-LQ4D4Uf-ar5I
- 올해 새로 나온 딥러닝(MIT): http://introtodeeplearning.com/
- 딥러닝(CMU): https://www.youtube.com/channel/UC8hYZGEkI2dDO8scT8C5UQA/videos
- 컴퓨터 비전(Stanford): https://www.youtube.com/playlist?list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk
이 과목은 아직 많이 공부하지 못했고 이해도가 낮아서 자세하게 정리를 못하겠습니다. 대신 예전에 재밌게 들은 강의 하나만 추천하고 가겠습니다. (검색해보시면 좋은 추천/정리 글이 많습니다!)
매년 MIT에서 딥러닝에 대한 부트 캠프를 해주는데 매년 최신 트렌드에 맞춰서 업데이트를 해줍니다. 각각의 개념들의 핵심적인 부분을 강의하고 Lab을 진행하면서 실제로 코드를 짜보는 형식입니다. 강의 진행 속도가 빠르긴 했지만 RNN, CNN, ... 등에서 쓰이는 대표적인 여러 개념들에 대해서 왜 필요한지 또는 어떤 내용인지 배우고 TensorFlow를 이용해서 실제로 코드까지 짜 보고 이후에는 어떤 내용들이 있는지 소개를 받을 수 있어서 좋았습니다.
개인적으로 딥러닝 입문을 이것으로 시도했는데 처음에 강의만 듣고서는 따라가기 어려웠습니다! 갈수록 뇌를 빼놓고 들었던 것 같습니다. 그리고 이걸 열심히 듣고 나니 요즘은 다 트랜스포머!!! ㅠㅠ
- MIT - Introduction to Deep Learning: http://introtodeeplearning.com/
- GitHub Repository: https://github.com/aamini/introtodeeplearning
8. 공개된 전자책 모음
영어 책: https://ebookfoundation.github.io/free-programming-books/books/free-programming-books.html
한국 책: https://ebookfoundation.github.io/free-programming-books/books/free-programming-books-ko.html
저자가 무료로 공개한 전자책 모음입니다. 영어 링크는 온갖 책들이 다 있습니다. 한국책 링크에도 좋은 책들이 몇 권 있습니다. 저는 <Pro Git 한국어 번역>, <가장 빨리 만나는 Go 언어> 등의 책을 참고했던 기억이 있습니다.
개인적인 유료 전자책 서비스 추천
저는 유료로 Yes24 전자책 서비스인 북클럽을 사용하고 있습니다. 1개월 무료라서 한번 사용해봤는데 개발 도서가 많은걸 발견하고 필요할 때마다 구독해서 한 권씩 읽고 있습니다. 되게 의외였던 게 오렐리 책이 많았습니다. 말고도 Head First나 Do it! 같은 시리즈나 다른 다양한 개발 도서들도 많이 있습니다.
예전에는 모바일 전용 뷰어 앱이 버그도 많고 불안정해서 모바일로 보기에는 조금 불편했었는데 기본 훈련소를 수료하고 보니 새로운 앱이 나와서 정말 만족 중입니다. 아직 많이 사용해보진 못했지만 UI도 상당히 깔끔해졌고 기능들도 많이 안정화가 된 것 같습니다.
제가 여기서 그동안 읽은 책은 <Head First Python>, <Head First C#>, 스터디 발표 준비용으로 참고한 <처음 배우는 머신러닝>, <High Performance Python(오렐리)>, <Inside JavaScript>, <데이터베이스 첫걸음>, <유니티 게임을 만드는 10가지 방법>, 등이 있습니다. 지금 보니 서비스에 있었는데 내려간 책들도 많이 있네요. 계약 기간이 지나면 사라지는 책들도 있는 것 같습니다. 사라지지 않고 개발 서적이 더 많이 들어왔으면 좋겠습니다..ㅠ 저는 지금 <코어 자바스크립트>라는 책을 읽으려고 북클럽 서비스를 구독하고 있습니다.(21.05.01(글쓴이) - 다 읽고 요즘은 읽을 책이 없어서 구독해지했습니다!ㅎㅎ) 아무래도 종이책에 비해 보기 좀 불편하긴 하지만 구매하는 것보다 훨씬 저렴하고 바로 다운로드하여서 볼 수 있기 때문에 저는 많이 애용합니다. 좋은 서비스 같아서 추천하고 갑니다.
Yes24 북클럽에서 제공하고 있는 IT 서적들
(21.06.12 기준으로 IT 관련 책은 약 140권 정도 있는 것 같습니다!):
9. 컴퓨터공학 관련 동영상 모음
대학교 CS 강의 모음: https://github.com/prakhar1989/awesome-courses
CS 관련 비디오 모음: https://github.com/Developer-Y/cs-video-courses
- Introduction to Computer Science
- Data Structures and Algorithms
- Systems Programming
- Database Systems
- Software Engineering
- Artificial Intelligence
- Machine Learning
- Web Programming and Internet Technologies
- Computer Networks
- Math for Computer Scientist
- Theoretical CS and Programming Languages
- Embedded Systems
- Computer Organization and Architecture
- Security
- Computer Graphics
- Image Processing and Computer Vision
- Computational Biology
- Quantum Computing
- Robotics
- ...
이와 관련된 모든 동영상들을 정리해놓은 저장소입니다. 대부분 유명한 영상들은 다 있습니다.
10. 깃허브 멋쟁이 시리즈들 (😎Awesome Repositories)
이쯤 제 글을 읽다 보면 GitHub에 다양한 주제로 정리된 글들이 많다는 것을 눈치챌 수 있습니다. 여러 사람들이 자기만 아는 꿀팁을 글에 기여를 할 수 있어서 GitHub에 이런 awesome한 콘텐츠 모은 저장소가 많습니다. 이런 저장소는 "awesome-주제" 이런식으로 이름을 짓습니다. 여기에 생각보다 정보가 많습니다. 요즘도 공부할 때 awesome 시리즈를 한 번씩 찾아봅니다.
- Awesome 저장소들을 모아놓은 곳: github.com/sindresorhus/awesome
11. 개발용으로 사용 가능한 콘텐츠들
한국어 고품질 개발 콘텐츠 모음: https://github.com/Integerous/goQuality-dev-contents/blob/master/README.md
공개 API: https://github.com/public-apis/public-apis
사용만 하던 SW를 내가 구현해보자: https://github.com/danistefanovic/build-your-own-x
개발자를 위한 디자인 리소스: https://github.com/bradtraversy/design-resources-for-developers
아이콘: https://www.flaticon.com/
개발자가 사용하기 쉬운 이미지: https://unsplash.com/developers
저는 개발하는 것을 좋아합니다. 시간이 있다면 여러 툴들로 이것저것 간단한 것을 만들곤 합니다(사실 대부분 미완성으로 묻혀지긴 합니다...). 그러다 보니 의미 없는 GitHub 개인 저장소만 40개가 넘어가고 있습니다. ㅎㅎ..
이것저것 개발해본 경험은 컴퓨터공학 공부를 재밌게 할 수 있도록 도와줍니다.
표현하기 애매하지만... 개발과 컴퓨터공학 공부를 하다 보면 내가 배운 내용이 실제 개발할 때의 경험이랑 연결이 될 때가 있습니다. 예를 들어서, 어떤 툴을 사용하면서 "아 이게 이거구나" 싶은 이런 순간이라거나 반대로 수업을 듣다가 개발할 때의 기억이 딱 떠오르면서 "아 이게 이거구나" 싶었을 때가 있습니다. 너무 이론적이라 다소 지루할 수도 있는 수업 내용이 실제 경험이랑 연결되면 더 흥미롭고 내용이 머릿속에 콕콕 들어옵니다.
예를 들어서, 오토마타와 형식 언어라는 정말 이론적인 수업이 있습니다. 수강을 하면서 많은 동기들이 배우는데 무료함을 느끼고 고통스러워했던 기억이 있습니다. 하지만 저는 정말 흥미롭게 들었습니다. 수업은 듣는 내내 컴파일러를 간단하게 구현해본 기억, 유니티로 게임을 만들 때 C#으로 CSV를 파싱하기 위해 Regex를 사용한 경험, 리눅스의 grep, 유니티의 애니메이터 FSM을 사용한 기억, 파이썬의 map, filter, reduce 함수 등이 떠오르면서 뭔가 수업 내용이랑 맵핑되는?? 경험을 했습니다. "아, 이게 사실 이거구나" 싶었습니다.
너무 이론적인 공부만 하다가 분노하거나 번아웃이 심하게 오면 종류 상관없이 흥미가 생기는 걸 개발해보세요!
⚠️ 하지만 개발하고 싶은 게 있어도 필요한 자원(이미지, 아이콘, 오디오, API, 매뉴얼, 등 개발에 필요한 모든 것)을 개인적으로 구하기는 힘듭니다. 그래서 역설적이지만 먼저 내가 사용 가능한 자원들을 살펴보면서 이것들로 무엇을 할 수 있을지 영감을 떠올려서 프로젝트를 기획해보는 것도 현실적으로 좋은 방법입니다.
제가 '어떤 걸 개발해볼까~' 할 때 방문하거나 개발을 하는 도중에 자주 방문하는 곳들입니다.
12. GitHub Student Developer Pack
개발하고 싶은데 유료 서비스들을 사용해야 돼서 못 공부한 적도 있고 어떤 서비스의 무료 Plan 말고 유료 Plan도 사용해보고 싶어서 아쉬웠던 기억이 많습니다. 그땐 GitHub Student Pack이란 게 있는 줄 몰라서 돈을 지불해야 하는 줄 알아서 그랬습니다. GitHub Student Developer Pack에 가입을 하면 인기 많은 유료 IDE, Framework, ... 등을 학생들이 공부하기 쉽도록 무료로 제공해줍니다. 대학생이면 가입 가능합니다. 학생일 때만 누릴 수 있는 혜택입니다!
★ 내가 흥미롭게 봤거나 사용 중인 일부 혜택
- GitHub Pro - GitHub 프로 혜택과 자기 GitHub 프로필에 Pro 배지를 달 수 있습니다 ㅎㅎ
- Termius - SSH platform입니다. 모바일에서 SSH 접속할 때 사용합니다. ~나 ESC 키 등 자주 쓰는 것은 따로 키보드 상단에 뜰 수 있게하고 sftp를 GUI로 제공하는 등 정말 편리하게 잘 만든 앱입니다!!
- Unity Pro - 유니티 워터마크도 제거할 수 있게 되고 다크 테마를 사용할 수 있게 됩니다. 외에도 기타 유니티 프로 혜택을 사용할 수 있습니다.
- Canva - 여러 Template과 또 그것을 수정할 수 있게 제공하는 서비스입니다. 제가 똥손이라서 이력서를 쓸 때 사용할 양식이나 사이트 로고 같은 것을 만들 때 사용하기 위해 메모해뒀습니다.
- BootStrap Studio - BootStrap을 이용해서 반응형 웹사이트를 만드는 것을 도와주는 데스크탑 프로그램입니다. 나중에 한번 써보려고 합니다.
- Name.com - 무료 도메인, ssl 지원, DigitalOcean이랑 잘 연동됩니다. Domain명을 설정하면 이에 따른 이메일도 하나 만들어줍니다.
- namecheap - GitHub를 통해서 바로 .me 도메인에 호스팅할 수 있습니다. 사이트 로고 제작도 도와주네요.
- .tech domain - .tech 무료 도메인. tech 도메인은 기술 관련 사이트라는 느낌을 준다고 합니다.
- Interview Cake - 나중에 취직 준비할 때 여러 질문을 미리 연습하는 용도로 사용해 볼 것 같습니다.
- Scrapinghub - Web 크롤러를 위한 cloud platform. 나중에 프로젝트할 때 필요할 것 같아서 메모했습니다.
- Working Copy - iPad/iPhone용 Git Client입니다. 저는 모바일로 따로 작업하진 않아서 GitHub 공식 앱을 사용합니다.
- Gitpod - GitHub랑 연동해서 개발 환경을 세팅해주는 온라인 IDE입니다.
- repl.it - Oneline IDE, 여기서 언어도 여러 개 배울 수 있고 Hosting도 가능합니다. Package도 깔 수 있어서 이걸로 프로그래밍 공부도 많이 했습니다. GitHub랑 연동하면 작성한 코드도 편하게 저장하고 공유할 수 있습니다.
- Broweser Stack - 웹앱을 2000개 이상의 브라우저와 실제 모바일 기기에서 테스트할 수 있도록 만든 Device Cloud입니다.
- blackfire.io - 내 웹의 성능 측정용으로 사용할 수 있습니다. 병목 찾아내는 것을 도와줍니다.
- Wisej - C#이나 VB.NET을 사용해서 VisualStudio로 빠르게 웹앱을 개발할 수 있게 해주는 프레임워크입니다.
- Vaadin - PWA를 위한 오픈소스 자바 프레임워크입니다. 사용하면 프로로 업그레이드시켜줍니다.
- MongoDB - 자주 쓰는 몽고디비!! Atlas Credit을 200달러 주네요.
- Netwise - IT Infrastructure 시스템 호스팅해주는 서비스.
- DigitalOcean - 쉽게 서버를 만들 수 있습니다. GitHub Student Pack에서는 무료 Credit을 줍니다. 네트워크 공부할 때 이 사이트에서 우분투로 서버(droplet)를 만들어서 했습니다. SSH로 접속해서 이것저것 만져보고 터트리고 날리면서 실습할 수 있어서 네트워크 공부할 때 좋았습니다. 참고로 서버 지역을 런던으로 하면 매우 매우 느리니 다른 해외지역으로 만드시는 것을 추천합니다.
- Heroku - 배포, 실행, 관리하는 것을 도와주는 호스팅 사이트입니다. 참고로 Student Pack을 사용하면 Hobby Dyno를 2년 동안 무료로 쓰게 해 주고 신용카드가 필요합니다.
등등 엄청 많은 혜택들이 있으니 무조건 GitHub를 가입하면 GitHub Student Pack도 가입해보세요!
마무리
물론 제가 학습한 방식이나 강조한 부분은 사람에 따라서 맞지 않을 수도 있습니다. 예를 들어서, 개발에 수학이 그렇게 중요한가? 싶은 분들도 있을 수 있습니다. 그렇기 때문에 제가 느낀 점은 다른 사람들의 말도 들으면서 참고하세요. 제가 추천한 여러 자료들과 짧은 경험담이 공부할 때 많은 도움이 되었으면 좋겠습니다.
불편한 부분이나 잘못된 부분이 있으면 댓글 달아주세요! 수정하겠습니당.
감사합니다.
댓글
이 글 공유하기
다른 글
-
Windows 2004 Update 수동으로 하는 법 (업데이트가 안 뜰 때 해결법)
Windows 2004 Update 수동으로 하는 법 (업데이트가 안 뜰 때 해결법)
2020.07.19 -
블로그 정책 공지
블로그 정책 공지
2020.06.03 -
정보처리기능사 필기 하루 컷 후기
정보처리기능사 필기 하루 컷 후기
2020.04.23 -
Tensorflow와 호환되는 CUDA, cuDNN 설치하는 법
Tensorflow와 호환되는 CUDA, cuDNN 설치하는 법
2020.04.18