
안녕 모두들! 제 이름은 YK이고 현재 구독자 20 만 명 이상을 보유한 프로그래밍 교육 유튜브 채널 인 CS Dojo를 운영하고 있습니다. 저는 또한 이전에 Google에서 소프트웨어 개발자였습니다.
내 청중이 내게 묻는 가장 일반적인 두 가지 질문은 다음과 같습니다.
"컴퓨터 과학과 소프트웨어 공학 전공의 차이점은 무엇입니까?"과…
"소프트웨어 엔지니어가 되려면 컴퓨터 과학 또는 소프트웨어 엔지니어링을 선택해야합니까?"이 기사에서 나는 이것에 답하고 이러한 전공에 대한 내 자신의 빠른 분석을 제공 할 것입니다.
이 두 가지 전공에 대한 간략한 개요
- 컴퓨터 과학은 주로 이론 및 수학적 관점에서 컴퓨터가 작동하는 방식에 대한 연구입니다.
- 수학, 논리를 좋아하거나 인공 지능, 기계 학습, 보안 또는 그래픽과 같은 CS의 전문 분야에 들어가고 싶다면 컴퓨터 과학을 선택해야합니다.
- 소프트웨어 엔지니어링은 프로젝트 관리, 품질 보증 및 소프트웨어 테스트와 같은 주제를 포함하여 소프트웨어 시스템이 구축되는 방법에 대한 연구입니다.
- 실습 방식에 더 관심이 있고 소프트웨어를 구축하고 유지하는 방법의 전체 수명주기를 배우고 싶다면 소프트웨어 엔지니어링을 선택해야합니다.
- 컴퓨터 과학과 소프트웨어 엔지니어링 모두 프로그래밍과 컴퓨터 과학의 기초를 가르치므로 둘 중 하나를 선택하여 소프트웨어 개발자가 될 수 있습니다.
컴퓨터 과학과 소프트웨어 공학 전공의 차이점을 이해하기 위해 캐나다 워털루 대학교에서 각각의 커리큘럼을 살펴 보겠습니다.
저는이를 위해 University of Waterloo를 선택했습니다. 북미 최고의 컴퓨터 과학 프로그램 중 하나이기 때문입니다.
취업 전망
먼저 각 프로그램을 통해 얻을 수있는 직업과 인턴십의 종류를 비교해 봅시다.
고맙게도 University of Waterloo의 웹 사이트는 몇 가지 예를 제공합니다.
각 전공에 대해 졸업생이 보유한 일부 직함과 그들이 일하는 곳은 다음과 같습니다.
컴퓨터 과학
- 웹 개발자 / 아키텍트, The Steele Group
- 프로그래머, Harry Rosen Inc.
- 모바일 / 클라우드 개발자, Clearbridge Associates Limited
- 소프트웨어 공학, General Dynamics Canada
- 소프트웨어 개발 엔지니어링, Microsoft
- 애자일 엔지니어, Pivotal Labs
- Canadian Tire Corporation 비즈니스 분석가
- Google Developer Advocate
- Dropbox 제품 관리자
소프트웨어 공학
- 소프트웨어 개발자, Tagged Inc
- 소프트웨어 개발자, IBM 캐나다
- Arius Software Corporation 소프트웨어 관리자
- 소프트웨어 엔지니어, VistaPrint USA
- Harris Corporation 소프트웨어 엔지니어
- Accenture Inc. 소프트웨어 개발자
- 기술 제품 관리자 — 소프트웨어 설계 및 개발, NexJ Systems Inc
- 컨설턴트, PureFacts 금융 솔루션
- 구현 컨설턴트, Desire2Learn
보시다시피, 얻을 수있는 직업 유형에는 큰 차이가 없습니다.
컴퓨터 과학 또는 소프트웨어 공학 학위를 취득한 후 가장 일반적인 직업 졸업생은 소프트웨어 개발자 또는 소프트웨어 엔지니어입니다.
제품 관리자, QA 분석가 및 기술 컨설턴트와 같은 기타 관련 옵션도 있습니다. 옵션은 특정 기술 세트에 따라 다릅니다.
1 학년 과정 :
이제 각 프로그램에 필요한 과정을 살펴 보겠습니다. 먼저 첫해에 수강해야하는 몇 가지 과정을 비교해 보겠습니다.
컴퓨터 과학
- CS 135 — 기능적 프로그램 설계
- CS 136 — 알고리즘 설계 및 데이터 추상화
- MATH 135 — 대수
- 수학 136 — 선형 대수 1
- 수학 137 — 미적분 1
- 수학 138 — 미적분 2
- 몇 가지 선택 과목
소프트웨어 공학
- CS 137 — 프로그래밍 원리
- CS 138 — 데이터 추상화 및 구현
- MATH 115 — 공학을위한 선형 대수
- MATH 117 — 공학을위한 미적분 1
- MATH 119 — 공학을위한 미적분 2
- MATH 135 — 우등 수학을위한 대수
- ECE 105 — 전기 공학 물리학 1
- ECE 106 — 전기 및 자기
- ECE 124 — 디지털 회로 및 시스템
- ECE 140 — 선형 회로
- SE 101 — 소프트웨어 엔지니어링 방법
보시다시피 첫해 과정도 상당히 비슷합니다. 둘 다 몇 가지 기본적인 컴퓨터 과학 과정과 선형 대수 및 미적분학의 몇 가지 수학 과정을 다룹니다.
유일한 주요 차이점은 소프트웨어 공학에는 추가 물리학 및 전기 공학 구성 요소가 있고 컴퓨터 과학에는 몇 가지 선택 과목이 더 있다는 것입니다.
첫해 이후 과정 :
첫해 이후 필수 및 선택 과목은 어떻습니까? 여기에서 몇 가지 예를 살펴 보겠습니다.
컴퓨터 과학 :
- MATH 239 조합론 입문
- STAT 230 확률
- STAT 231 통계
- CS 240 데이터 구조 및 데이터 관리
- CS 241 순차 프로그램의 기초
- CS 245 논리 및 계산
- CS 246 객체 지향 소프트웨어 개발 <-소프트웨어 엔지니어링 전공에는 필요하지 않음
- CS 251 컴퓨터 구성 및 디자인
- CS 341 알고리즘
- CS 350 운영 체제
- 또한 여러 컴퓨터 과학 선택 과목
소프트웨어 공학:
- 엔지니어를위한 CHE 102 화학
- ECE 222 디지털 컴퓨터 (조립 언어 포함)
- ECE 358 컴퓨터 네트워크
- MATH 213 소프트웨어 엔지니어를위한 고급 수학
- MATH 239 조합론 입문
- STAT 206 소프트웨어 엔지니어링 통계
- MSCI 261 공학 경제학 : 엔지니어를위한 재무 관리
- CS 241 순차 프로그램의 기초
- CS 240 데이터 구조 및 데이터 관리
- CS 247 소프트웨어 엔지니어링 원칙 <-컴퓨터 과학 전공자에게는 필요하지 않음
- CS 341 알고리즘
- CS 349 사용자 인터페이스 <-컴퓨터 과학 전공자에게는 필요하지 않음
- CS 343 동시 및 병렬 프로그래밍 <-컴퓨터 과학 전공에는 필요하지 않음
- CS 348 데이터베이스 관리 소개
- SE 212 논리 및 계산
- SE 350 운영 체제
- SE 465 소프트웨어 테스트 및 품질 보증
- SE 464 소프트웨어 설계 및 아키텍처
- SE 463 소프트웨어 요구 사항 사양 및 분석
- SE 490 디자인 프로젝트
- 또한 몇 가지 컴퓨터 과학 및 전기 공학 선택 과목
여기서 소화 할 정보를 많이주었습니다. 그러나 여기에 내 요약이 있습니다.
수학 및 통계의 요구 사항과 관련하여 컴퓨터 과학과 소프트웨어 공학은 거의 동일합니다. 조합론, 확률 및 통계를 다룹니다.
핵심 컴퓨터 과학 요구 사항은 알고리즘, 데이터 구조 및 운영 체제에 이르기까지 유사합니다.
주요 차이점은 다음과 같습니다.
- 소프트웨어 엔지니어링 에는 소프트웨어 테스트, 설계 및 소프트웨어 요구 사항 사양과 같은 전기 엔지니어링 및 소프트웨어 엔지니어링 기초에 더 많은 요구 사항이 있습니다.
- 컴퓨터 과학 은 고급 컴퓨터 과학 과정에서 더 많은 선택 과목을 허용합니다. 보안, 소프트웨어 엔지니어링 기초, 컴퓨터 비전, 기계 학습 및 데이터베이스 관리와 같은 광범위한 주제에서 선택할 수 있습니다.
그렇다면 어떤 전공을 선택해야합니까?
나는 그것이 주로 당신의 선호에 달려 있다고 생각합니다. 요컨대 :
- 수학, 논리를 좋아하거나 인공 지능, 기계 학습, 보안 또는 그래픽과 같은 CS의 전문 분야에 들어가고 싶다면 컴퓨터 과학을 선택해야합니다.
- 실습 방식에 더 관심이 있고 소프트웨어를 구축하고 유지하는 방법의 전체 수명주기를 배우려면 소프트웨어 엔지니어링을 선택해야합니다.
하지만 잠깐만 요. 그렇다면 그것은 무엇입니까? 소프트웨어 엔지니어가되고 싶다면 어느 전공이 더 낫습니까?
여기 내 의견이 있습니다. 이 특정 대학 (워털루 대학교)에서 이러한 특정 프로그램 요구 사항을 충족하는 컴퓨터 과학은 소프트웨어 엔지니어가 되고자하는 경우 더 나은 전공입니다.
간단하게하기 위해 북미에서 소프트웨어 엔지니어로서 가장 높은 급여를받는 일자리 (~ $ 100,000 USD / 년)를 원한다고 가정 해 보겠습니다. 이러한 직업은 일반적으로 대규모 소프트웨어 회사 (예 : Microsoft, Google, Amazon 등) 또는 중간 규모의 고성장 회사 (예 : Dropbox, Lyft, Snapchat, Pinterest 등)에서 이루어집니다.
일반적으로 소프트웨어 엔지니어 후보자에서 찾는 것은 데이터 구조 및 알고리즘을 포함한 컴퓨터 과학 기초뿐만 아니라 견고한 코드를 작성하고 흥미로운 프로젝트를 구축하는 능력입니다.
이 기술을 키우는 가장 좋은 방법은 컴퓨터 과학 기초를 빠르게 배우고 문제 해결과 코드 작성을 연습하는 데 시간을 보내는 것입니다.
소프트웨어 공학 커리큘럼과 공학 학생들이 일반적으로 얼마나 바쁜 경향이 있는지에 따라 컴퓨터 과학보다 소프트웨어 공학으로 이것을하는 것이 더 어려울 것이라고 생각합니다.
이 특정 컴퓨터 과학 프로그램의 또 다른 이점은 더 많은 컴퓨터 과학 선택 과목을 허용한다는 것입니다. 구직 시장의 수요에 따라 코스를 조정할 수 있기 때문에 이것도 좋습니다. 예를 들어 모바일 앱 개발이 필요한 경우이를 배울 수 있습니다. 병렬 컴퓨팅이 필요하다면 대신 그것에 집중할 수 있습니다.
소프트웨어 엔지니어링 기초 (프로젝트 관리, 디자인, 테스트 등)를 배우는 데 몇 가지 이점이 있다고 확신합니다. 그러나 저는 개인적으로 미리 정의 된 기술 세트에 대한 유연성을 선호합니다. 그래서 저는 컴퓨터 과학이이 특별한 커리큘럼을 가지고 소프트웨어 엔지니어가되기에 더 나은 전공이라고 생각합니다.
물론 그것은 제 의견 일 뿐이며 이것은 단지 하나의 특정 대학 일뿐입니다. 컴퓨터 과학이나 소프트웨어 공학을 전공했다면 여러분의 의견과 경험에 대해 듣고 싶습니다. 아래 댓글로 알려주세요.
몇 가지 참고 사항
참고 1 : 대학마다이 두 전공에 대한 요구 사항이 다릅니다. 이 기사는 좋은 출발점이되어야하지만, 관심있는 대학의 프로그램 요구 사항을 살펴보아야합니다.
참고 2 : 일부 대학은 소프트웨어 공학 전공도 없습니다. 예를 들어, 밴쿠버의 브리티시 컬럼비아 대학교는 컴퓨터 과학 및 컴퓨터 공학 학위를 가지고 있지만 소프트웨어 공학은 없습니다. 그러나 그들은 컴퓨터 공학뿐만 아니라 컴퓨터 과학 프로그램 내에서 소프트웨어 공학 집중력을 가지고 있습니다.
관심있는 대학에 소프트웨어 공학 전공이 없다면 소프트웨어 개발자가되고 싶다면 컴퓨터 과학과 함께 갈 것입니다. 컴퓨터 공학은 컴퓨터 과학이나 소프트웨어 공학보다 하드웨어에 더 중점을 두므로 일반적인 소프트웨어 개발자의 업무와 직접적으로 관련이 없습니다.
그리고 내가 사용한 주요 소스는 다음과 같습니다.
- 워털루의 컴퓨터 과학
- Waterloo의 소프트웨어 엔지니어링
읽어 주셔서 감사합니다. 대학과 전공을 선택해 주셔서 감사합니다! ?