-
하버드 CS50 프로그래밍 입문 강의 수강 가이드 및 수강 후기Programming/CS50 2023. 9. 4. 12:20
하버드 CS50 강의 수강 방법과 상세한 후기를 다룹니다.
edx, havard CS50 공식 사이트, 네이버 부스트코스의 CS50 모두를 위한 컴퓨터 과학 강좌 등 여러 수강 방법을 소개합니다.
수강 환경에 대한 설명과 윈도우 유저를 위한 여러가지 팁을 제공합니다.
입문자부터 경험자까지 CS50 수강을 고민하시는 분들을 위한 가이드를 제공하고자 합니다.수강 방법
edx에서
강의 수강 신청이 가능하다. Linkedin 같은 데 올릴 수료증/인증서가 필요하다면 수강 등록을 하고 수강하자.수강 신청을 하지 않아도 된다. 나는 마음대로 듣고 싶어서 일부러 하지 않았다.
하버드 CS50 공식 사이트에서 강의 보기, 강의 노트 열람, 필요한 과제와 자료 확인이 가능하다. 사이트가 정말 잘 되어있다. 관심 갖고 탐색할 가치가 있다.
사이트나 강의는 물론 영어로 되어있다. 영어가 익숙하지 않다면 따라가기 힘들 수 있다.
그럴 땐 부스트코스에서 모두를 위한 컴퓨터 과학를 확인해보자. 한국어로 번역된 CS50강의를 제공한다.단, 영어 강의를 듣는 데 심각한 결격 사유가 없다면 무 조 건 공식 사이트에서 영문으로 공부하기를 강력 추천한다.
코딩하며 영어를 접할 일도 많을테니 미리 익숙해진다는 장점도 있다.강의에 영어 자막도 달려있다. 실시간 독해/청해가 어렵다면 자동 번역을 켜자. 한글 자막이 나온다.
공식 사이트에 올라오는 강의가 가장 최신 버전이다. 부스트코스는 훨씬 예전 강의를 제공한다. 당연히 예전 강의를 듣는다고 해서 문제될 건 없다.
공식 사이트를 추천하는 데에는 더 중요한 이유가 있다.바로 제공하는 과제의 차이이다.
청강할 수 있는 외국 대학교 강의는 많다. 학생들 과제까지 그대로 제공하는 곳은 드물다.
공식 사이트에는 실제 수강생이 푸는 과제가 그대로 나와있다. 자동 채점 기능, 코드 스타일 점검 등 다양한 기능도 제공한다.CS50의 본질이 대학교 전공 기초 과목이기 때문에 정말 그 정도 수준의 과제가 나온다.
타과생도 많이 듣는 수업이고 매 주 부여되는 과제란걸 생각해보면 사실 좀 심한 난이도다. 엄청 어렵다.그래서 도전 정신을 자극하고, 풀면서 내용 습득도 더 잘 된다.
한편 국문 버전 부스트코스 모두를 위한 컴퓨터 과학은 타겟 층이 다르다.
CS50 과제가 대학교 1학년 수업 과제 중에서도 살짝 더 까다로운(양심이 없는) 정도라면, 모두를 위한 컴퓨터 과학은 좀 더 모두를 위한 퀴즈나 과제가 나온다.
조금 안좋게 말하면, 안전교육 이수 확인용 퀴즈 문항 같은 느낌이다.
CS50의 과제는 어렵고, 또 잘 만들었다. 과제 개발에 꽤나 공을 많이 들인 티가 난다.
사람들이 강의만 듣고 과제는 넘어가는 게 너무 아까울 정도다.오디오 파일 뒤집기, 웹사이트 제작 등 다양한 주제를 폭 넓게 다룬다.
필요한 정보를 적당히 직접 찾아보게끔 유도하는 것도 너무 좋다.파일 형식을 정의한 공식 문서나, 어려운 이미지 처리 알고리즘 위키피디아 페이지 들을 읽고 과제를 직접 구현해야한다.
처음엔 초보자에게 너무 과한 걸 시킨다는 생각이 들 수도 있다.
그래도 천천히 읽어보면 막상 지금까지 배운 내용 만으로 충분히 해결할 수 있음을 깨닫게 된다. 자신감이 생긴다.
필요한 정보, 공식 문서나 스팩을 찾아보고 문제를 해결 하는 게 두렵지 않아진다.과제마다 나름의 스토리텔링도 있다. SQL 쿼리로 로그를 분석해 물건을 훔친 범인을 찾거나, SD카드에서 지워진 사진을 복구하는 과제도 있어서 재밌게 학습이 가능하다.
CS50가 명강의인 이유는 잘 짜인 과제에 있다.
열심히 수강할 생각이 있다면, 그리고 과제 붙잡고 씨름할 여유 시간이 있다면
무조건 공식 사이트에서 수강하는 것을 추천한다.
수강 환경
CS50는 강의를 위한 코드스페이스를 제공한다.
덕분에 컴퓨터가 윈도우든 맥이든 리눅스든 상관없이 모두 같은 환경에서 강의를 듣고 과제를 제출할 수 있다.
과제 제출, 채점, 코드 스타일 점검같은 기능도 여기서 제공한다.하지만 약간의 불편함이 있다.
웹으로 접속하는 방식이기 때문에 들어갈 대 마다 로딩 시간이 있고, 계정 로그인도 해야 해 번거롭다.여기에는 3가지 해결 방안이 있다.
- 윈도우 내 로컬 컴퓨터 환경에서 코딩하기
- WSL로 리눅스 환경에서 코딩하기 (맥OS일경우 여기에 해당)
- 도커로 CS50 코드스페이스 컨테이너 구현하기
어떤 방법을 쓰던지, CS50를 수강하는 초보자 입장에서는 조금 가혹한 환경 설정을 해야 한다. 이슈도 많이 생긴다.
따라서 CS50 코드스페이스 불편하지 않다면 웹 코드베이스를 그냥 사용해도 절대 나쁘지 않다.처음에는 코드스페이스를 사용하다, 갈증을 느낄 때 쯤 아래 내용을 참고해보면 좋겠다.
윈도우 내 로컬 컴퓨터 환경에서 코딩하기
수강 처음부터 끝까지 내가 고집한 방법이다.
CS50 수강 이후에도 계속 코딩을 해나갈꺼라면, 내 환경에서 연습하며 익숙해지는 편이 더 좋다고 생각해서 택한 방법이다.CS50 코드스페이스가 리눅스 기반이라, 서로 운영체제가 달라 생기는 이슈를 많이 만나게 된다. 그만큼 배우는 것도 많고, 부침도 많다.
하면서 많은 애로사항을 만나게 된다. 키워드 위주로만 간단히 정리해보겠다.
설정 할 게 많다.
CS50 초반부는 C언어로 진핸된다.
후반에 다루는 파이썬은 설치가 제법 간단하다. 반면 C언어는 MSYS2를 통해 gcc니 Mingw니 개발 환경 설정이 조금 더 복잡하다.
CS50 라이브러리를 사용할 때도 직접 다운받아서 써야 한다. CS50 C Library Link에서 받을 수 있다.
컴파일러가 저장 위치를 아는 다른 라이브러리 코드와 다르게, 직접 다운받은 파일이기에 사용 방법이 조금 다르다.
불러올 때도#include "cs50.h"
로 불러와야 하고, 컴파일 할 때도 명시적으로 연결해줘야 한다.그 외에도 개발 환경을 직접 세팅해야 되는 부분이 자잘하게 몇가지 있었는데 적어놓지 않아 기억이 나질 않는다.
Linux와 Windows의 차이를 알아야한다.
먼저 간단한 터미널 명령어부터 많이 다르다.
CS50 강의는 터미널로 강종 작업을 수행한다. 이때 명령어가 달라서 종종 헷갈릴 수 있다.강의에서 터미널 무언가를 입력 할 때마다, 일시 정지를 누르고 구글에 "윈도우에서 xxx 하는법"을 검색하게 된다.
코드도 다르게 짜야 하는 경우가 있다. 2023년 기준 만났던 문제는 아래와 같다.
- 숫자 자료형의 크기가 다르다. 과제에서
int
보다 큰long
을 사용하는 문제가 나온다. 윈도우에서는 이 둘의 크기가 같아서long long
을 사용해야 한다. - 개행 문자가 다르다. 파일이 줄을 바꾸는 형식이 다르다는 의미이다. 과제에서 파일을 읽을 때, 파일이 바이너리 파일임을 명시해주지 않으면 윈도우에서는 오류가 난다.
과제 채점이 번거롭다.
과제 채점용 프로그램을 사용할 수 없다.
나는 그냥 과제는 내 컴퓨터에서 풀고, 채점을 하고 싶으면 그제서야 CS50 코드스페이스에 들어가 코드를 복사/붙여넣기 하고 과제 체크를 수행했다.WSL로 적어도 리눅스에서 코딩하기
윈도우 컴퓨터도 WSL을 설치하면 리눅스 환경에서 코딩이 가능하다.
컴퓨터 운영 체제가 달라서 생기는 많은 이슈를 해결할 수 있다.하지만 결국 개발 환경을 세팅해야 되는 점이나 CS50 코드스페이스에서 제공하는 기능을 사용할 수 없다는 점은 동일하다.
WSL은 강의 막바지 쯔음 한 번 써봤는데, 개인적으로 만족도가 높았다.
강의와 상관없이 이후 모든 개발을 WSL로 진행하고 있다.
윈도우를 사용하는 개발자라면 한 번쯤은 써보는걸 추천한다.도커로 CS50 코드스페이스 구현
CS50 공식 문서에 자세한 설명이 나와있다.
처음 설치와 설정이 조금 복잡하다.설정만 잘 한다면 적은 지연시간으로, 오프라인 환경에서 모든 작업이 가능하다. 가장 확실하고 편한 방법이지만 처음 설정이 조금 어렵다. 엄청 해맸다.
수강 후기
CS50 강의를 듣기 시작한 건 "졸업을 앞두고 개발자로 진로를 전환해도 될까?"란 질문의 답을 찾기 위함이었다.
저번 학기 데이터 분석 수업을 들으며 프로그래밍에 흥미를 느꼈기 때문이었다.뒤늦게 적성을 찾은 듯 했지만, 진로를 바꾸기엔 좀 늦지 않았나 하는 생각이 들었다. 그래서 이번 방학에 계절학기를 수강하며 CS50를 같이 듣기로 했다.
리트머스 테스트 같은 느낌으로 CS50를 듣기 시작했다. 수업이 나한테 잘 맞고 재밌으면 그떈 개발자로서의 진로를 진지하게 고민해보기로 했다.결론은, CS50는 정말 만족도가 높은 강의였다.
한달이 조금 넘는 짧은 기간동안 배운 것도 많았고, 무엇보다 그 과정이 너무 재미있었다.CS50는 Computer Science 이론을 단순히 전달하는 데에 그치지 않고, Scratch 부터 시작해서 여러가지 프로그래밍 언어, 웹 개발, 데이터베이스, 알고리즘 등 정말 다양한 주제를 다룬다.
과제도 너무 재밌다. 난이도가 있는 만큼 성취감도 있었다.
내용도 과제를 위한 과제처럼 억지스럽게 느껴지지 않았다.CS50의 과제가 실제 개발자들이 하는 업무나 문제 해결과 비슷할지는 모르겠다. 어디까지나 초보자 수준 과제이기도 하고.
그래도 CS50를 통해서 본 프로그래밍의 세계는 너무나 흥미로웠다.그래서 개발자가 되기로 했다. 비전공에, 남보다 늦을지라도 시작해봐야겠다는 그런 확신을 얻게 해 준 수업이었다.
다른 프로그래밍 입문 강의를 들어보지 못해 객관적인 비교는 어렵다.
하지만 나처럼 개발자로의 진로를 고민하고 있다면, 근데 어디서부터 시작할 지 고민중이라면 CS50를 강력하게 추천하고 싶다.이미 다른 입문 강의를 들었거나 코드를 짜는 게 익숙하더라도 CS50는 들을 가치가 충분하다.
일단 나부터도 CS50를 듣기 전부터 파이썬을 다룰 줄 아는 상태였다.
학교에서 데이터 분석을 하면서 나름 프로그래밍 기초 문법과 구조는 능숙하게 다룰 수 있었다.CS50 강의는 함수, 반복문, 변수, 조건문 등의 기본 개념부터 시작한다. 아는 내용이었지만 하나도 지루하지 않았다. 강의가 좋은 탓도 있겠지만, 이런 기초를 C언어로 배운다는 게 키 포인트다.
파이썬같은 고급 언어만 다뤄봤다면, 이미 아는 기초 내용이여도 지루할 새가 없다.
새로운 언어를 배워야하고, 또 좀 더 기계와 가까운 관점에서 기초를 다시 배우게 된다. 개념이 명료해지고 미신이 사라진다. 강력한 언어가 자동으로 해주던 게 있음을 알게 된다.정말 두 번 세 번 강력 추천하고 싶다. 그리고 과제도 다들 풀어봤으면 좋겠다.
한국어 웹에서 과제 풀이를 찾아보면 올라온 글이 엄청 적다. 그냥 거의 없다시피하다.
재밌게도 강의를 들은 사람은 많다. 강의 요약도 많고 같이 들으며 공부하는 스터디도 꽤나 보인다.CS50는 과제가 본체인데, 왜 아무도 글을 안 올릴까 너무 궁금했다. 그래서 블로그도 시작했다.
필요한 글이 없으면 나라도 직접 쓰자는 마음이었다.과제 풀이 올리면 다들 와서 댓글도 달고 코드 피드백도 해주지 않을까 기대했는데... 이건 좀 큰 욕심이었다.
그런데 댓글은 그렇다 쳐도, 조회수도 나오지 않는다. 이것도 그럴 수 있는데, 통계를 보면 검색 노출 횟수도 적다.
구글 검색 순위가 높은 글도 마찬가지다. 검색 노출 횟수 자체가 적다.아무도 강의 과제를 검색하지 않는다는 의미다. 이게 너무너무 안타깝다.
사실 이 글은 그래서 쓴 글이다.
하버드 대학교? CS50? 하면서 강의에 관심이 있는 사람들에게 "제발 과제도 한번 확인해보세요!!" 라고 전하기 위함이다.이 글이 도움이 되었으면 좋겠다.
강의 관련 질문은 댓글로 남겨주면 최대한 성실하게 답변하겠다.