비전공자와 전공자, 차이가 있나요?
아마 개발자들 사이에서 가장 반응이 뜨거운 질문이 아닐까 싶다.
나 또한 최근 비전공자로서 웹개발자가 되기로 결심하면서 전문적인 커리큘럼을 통해 교육받은 전공자들과 나 자신을 비교할 때 과연 어떤 강점을 가질 수 있을까 하는 막연한 두려움이 있었다.
개발자 커뮤니티, 블로그 등에 올라온 여러 글을 읽어 보았지만 워낙 의견이 다양해서 대체 누구 말이 맞는 말인지 혼란스러웠다. 그러던 중 읽게 된 아래의 글이 생각을 정리하는데 도움이 됐다.
생활코딩 '전공자와 비전공자' opentutorials.org/course/1189/8992
EVAN님의 블로그 '비전공 개발자가 전공자보다 정말 불리할까?' evan-moon.github.io/2019/09/09/major-is-not-important/
일단 현실을 직시하자. 비전공자가 컴퓨터에 대한 이해가 전공자보다 부족한 것은 사실이다. 4년 동안 체계적으로 공부한 사람과 그렇지 않은 사람이 아무 차이가 없다 하면 전자에게 너무 억울한 일이 아닌가.
하지만 비전공자 출신의 웹 개발자가 반드시 프로그래밍 실력이 전공자보다 떨어진다고 말할 수는 없다. 학원이나 부트캠프, 실무강의, 프로젝트 등 다양한 루트를 통해서 현업에서 사용하는 기술로 실제로 프로그래밍하는 법을 익힐 수 있기 때문이다. 원래 이론과 실전은 다른 법이다.
그렇지만 개발자의 길을 걷겠다고 결심했다면 궁극적으로는 컴퓨터 전공 지식을 학습할 필요가 있다. 컴퓨터 자체에 대한 이해가 있어야 이 급격하게 변하는 업계에서 변화에 빨리 적응할 수 있기 때문이다. 쏟아져 나오는 새로운 개념, 언어, 기술 등을 기초 지식이 있는 개발자는 비교적 쉽게 익힐 수 있다고 한다. 개발자는 평생 공부해야 한다고들 하지 않나. 어차피 맞을 매 빨리 맞도록 하자....
결론 - 내가 비전공자로서 개발자가 되기 위해서 해야 할 일은
1) 실전 : 프로젝트 위주의 학습 후 Github으로 관리
2) 이론 : CS 기초지식, 기술 이론 학습 후 블로그에 정리

무엇을 배워야 하나?
우선 무엇을 공부해야 할지 파악하기 위해 서울대 컴퓨터공학부 커리큘럼을 찾아봤다.
서울대학교 2020학번 컴퓨터공학부 주전공생이 졸업하기 위해서는 다음의 조건을 충족해야 한다고 한다. (일반선택이나 교양과목 이수조건은 고려 X)
1. 전필 31학점 + 공대공통교과목 이수
2. 전선내규 8학점 이상
3. 위 과목 포함 전공 63학점 이상 이수
전공필수
전공필수란 무엇이냐, 전공생이라면 최.소.한 이 과목만큼은 반드시 이수해야 한다는 과목, 즉 해당 전공에서 가장 중요하게 생각하는 과목들을 말한다. 따라서 학습 우선순위 1순위에 해당하는 과목이라고 할 수 있다. 여기 서울대 컴공과의 전공필수 과목에는 총 8과목이 있다. (공대 공통교과목 제외)
1학년 : 이산수학
2학년 : 전기전자회로, 컴퓨터구조, 컴퓨터프로그래밍, 논리설계, 자료구조
3학년 : 알고리즘, 시스템프로그래밍
각 과목별 학습 목표는 다음과 같다.
이산수학 : 컴퓨터공학과 밀접하게 관련된 수학적 내용들에 대하여 배우고 이러한 수학적 개념들이 컴퓨터공학에서 어떻게 쓰이는지에 대해서 살펴봄
전기전자회로 : 회로 분석 방법, 논리 회로와 증폭회로의 원리, 전자회로의 핵심 소자인 MOS와 Bipolar 트랜지스터의 특성, 디지털 하드웨어의 전기적인 특성, 속도와 에너지 소모에 대한 기초지식 습득
컴퓨터구조 : 컴퓨터를 구성하는 주요 구성 요소들의 기능과 그들 상호간의 작용을 이해하고 이를 바탕으로 컴퓨터 시스템을 구현하는데 사용되는 여러 설계 기법, 컴퓨터 발전의 역사적 고찰 및 컴퓨터 시스템의 성능 분석에 필요한 지식 학습
컴퓨터프로그래밍 : Java와 C++언어를 이용한 객체지향 프로그래밍 학습
논리설계 : 디지털 논리 회로를 구성하는 기본 소자, 조합회로와 순차회로의 설계 이론 학습
자료구조 : 컴퓨터에 의한 문제해결을 위해 필요한 개념이나 대상물의 표현을 위한 자료 구조와 문제해결을 위한 체계적 사고 방법을 학습
알고리즘 : 다양한 알고리즘 개발 방법과 알고리즘 분석 기법 학습
시스템프로그래밍 : 운영 체제의 중요 개념인 프로세스 관리, 메모리 관리, 파일 시스템과 입출력, 네트워크 프로그래밍, 병렬 프로그래밍 및 동기화 관련 내용 학습
이 외에도 전선내규, 교양, 전공선택 과목은 다음과 같다.
전선내규
2학년 : 컴퓨터공학세미나
3학년 : 창의적통합설계 1, 소프트웨어 개발의 원리와 실습
교양
1학년 : 컴퓨터의 개념 및 실습, 컴퓨터 과학이 여는 세계, 컴퓨터과학적 사고와 실습, 인공지능 입문, 인터넷 보과 프라이버시
전선
1학년 : 프로그래밍연습
2학년 : 프로그래밍의 원리
3학년 : 오토마타 이론, 운영체제, 하드웨어시스템설계, 프로그래밍언어, 선형 및 비선형 계산모델, 디지털신호처리, 데이터마이닝개론, 데이터베이스, 데이터통신, IT창업개론
4학년 : 임베디드시스템과 응용, 소프트웨어공학, 소프트웨어응용, 모바일 컴퓨팅과 응용, 인공지능, 컴파일러, 컴퓨터그래픽스, 컴퓨터네트워크, 컴퓨터모델링, 멀티코어 컴퓨팅, 컴퓨터보안, 웹정보시스템, 컴퓨터융합응용, 인간컴퓨터상호작용, 소셜네트워크 분석, 기계학습 개론, 컴퓨터비전, 컴퓨터신기술특강, 인터넷보안, 양자컴퓨팅 및 정보의 기초, 블록체인의 이해, 딥러닝의 기초
앞으로의 계획
나는 먼저 전공필수 과목 위주로 공부한 뒤 전공선택 과목에서 필요하다고 느끼는 과목들을 추가적으로 학습할 계획이다. 사실 관련 지식이 전무한 현재는 교과목 정보를 아무리 살펴 봐도 정확히 무엇을 배우는 것인지 잘 이해가 되지 않는다. 하지만 다행스럽게도 오늘날 온라인 상에는 양질의 자료가 넘쳐 나기에 나 같은 컴알못도 시간과 노력만 투자한다면 혼자서도 충분히 학습할 수 있다고 한다. 👏👏👏
나는 독학으로 CS전공지식을 학습하기 위해서 다음의 사이트들을 참고해 보려고 한다.
(향후 계속 업데이트 예정)
MIT OCW ocw.mit.edu/index.htm
UDEMY www.udemy.com/ko/
KOCW www.kocw.net/home/index.do
COURSERA www.coursera.org
EDX www.edx.org/
UDACITY www.udacity.com/
khan academy ko.khanacademy.org/
앞으로 블로그에서 내가 컴퓨터공학 전공과목을 학습한 내용을 정리하고 이를 위해 참고한 자료들도 함께 공유할 예정이다. 이 내용이 CS 전공 과목을 독학하고자 하는 다른 사람들에게도 도움이 되길 바란다.
'비전공자 개발공부' 카테고리의 다른 글
프론트엔드&백엔드&DevOps 개발자 로드맵 (0) | 2021.02.25 |
---|---|
내가 보려고 만든 프로그래밍 독학 사이트 모음집 (계속 업데이트 ing) (1) | 2021.02.22 |
댓글