본문 바로가기
Computer Science/컴퓨터공학(김용담 강사님)

컴퓨터공학: 컴퓨팅 사고력과 문제해결

by 코듀킹 2023. 4. 4.

       목차

  • 컴퓨터공학(Computer Science and Engineering, CSE)이란?
  • 컴퓨팅 사고력(Computational Thinking, CT)
  • 문제해결(Problem Solving)

컴퓨팅사고력

컴퓨터공학(Computer Science and Engineering, CSE)이란?

컴퓨터공학은 계산, 자동화 및 정보를 연구하는 학문입니다. 컴퓨터공학의 이론적인 분야는 알고리즘, 계산 이론, 정보 이론, 자동화 등이 있고, 실용적인 분야는 하드웨어 및 소프트웨어의 설계와 구현 등이 있습니다. 학부 레벨에서의 컴퓨터 공학에서 보통 중요하게 다루는 분야는 총 7가지 정도로 설명할 수 있습니다.

  1. Basic Concepts of Programming Language + 특정언어 하나(C, Java, Python 등): 전통적인 과목은 C언어 이지만, 요즘엔 전세계적으로 파이썬을 배우는 추세입니다.
  2. Data Structure and Algotihms: 자료구조&알고리즘
  3. Computer Architecture: 컴퓨터의 하드웨어
  4. Operating System: Windows, macOS, Linux, …(보통 컴공 3학년 때부터 배운다. C언어를 필수로 알아야한다.)
  5. Computer Network: Ethernet(유선), Wi-Fi(무선) 등
  6. Database System: 데이터를 관리하는 시스템
  7. Software Engineering: 개발 방법론 등

컴퓨터 공학 선택 과목

  • System of Digital Circuit
  • Embedded System
  • Introduction to Compiler Design
  • Distributed System Concepts
  • Linear Algebra
  • Introduction to Statistics
  • Numerical and GPU Computing
  • Linux Kernel Development
  • Scientific Computing
  • Computer Graphics
  • Introduction to Cryptography
  • Machine Learning
  • Automata
  • Discrete Mathematics
  • BigData Mining

컴퓨터 공학은 굉장히 넓은 분야를 커버하고 있습니다. 때문에 전자, 기계공학과 다르게 학부 때 넓은 분야를 다양하게 커버하는 느낌으로 배우게 됩니다. 컴퓨터 공학의 최종 목적컴퓨터를 이용하여 주어진 문제를 효율적으로 계산 가능하게끔 하는 것입니다. 그에 따라 컴퓨터가 이해할 수 있게 문제를 정의할 수 있는 "컴퓨팅 사고력(Computational Tinking)"의 개념과 효율적으로 컴퓨터가 계산할 수 있게 하는 "문제해결(Problem Solving)"의 영역으로 나뉘게 됩니다.


컴퓨팅 사고력(Computational Thinking, CT)

'컴퓨팅 사고력'에서 가장 중요한건 현실의 문제를 컴퓨터가 계산 가능한 형태로 정의하는 것입니다. 복잡한 문제를 더 작고 관리하기 쉬운 부분으로 나누는 것이죠. 여기에는 논리적, 알고리즘적으로 생각하고 추상화를 사용하여 문제를 단순화하는 것이 포함됩니다. 이 접근 방식은 컴퓨터 과학뿐만 아니라 모든 분야의 문제를 해결하는 데 사용할 수 있습니다. 

 

컴퓨터는 안타깝게도 사람처럼 어림짐작하여 상대방이 의도한 바를 정확하게 캐치해낼 수 있는 능력이 없습니다. 그렇기 때문에 아주아주 간단한 문제라도 자세하게 정의를 해주어야죠. 예를들어 어떤 숫자를 보여주면, 홀수인지 짝수인지 맞추는 게임을 한다고 가정해보겠습니다. 이 때 사람이라면 규칙을 딱히 알려주지 않아도, 8이 나왔을 때 바로 "짝수!" 하고 외칠 수 있고, 문제를 출제하는 사람도 딱히 규칙을 설정하지 않아도 3.141592 같은 이상한(?) 숫자를 제시하진 않겠죠. 하지만 컴퓨터에게는 홀짝 게임에서의 숫자는 계산 가능한 숫자이고, 나눗셈을 했을 때 0또는1이 나오는 숫자이며, 숫자의 최소범위와 최대범위가 얼마인지 등을 수학적으로 분명하게 정의를 해주어야합니다.

 

컴퓨팅 사고력의 활용

복잡한 문제를 더 작은 부분으로 나누면 문제를 해결할 수 있는 알고리즘과 프로그램을 개발할 수 있습니다. 이 접근 방식은 보다 강력하고 효율적인 소프트웨어를 개발하는 데 도움이 됩니다. 또한 컴퓨팅 사고력은 비판적 사고 능력을 개발하는 데 도움이 됩니다. 문제를 더 작은 부분으로 나누면 더 쉽게 가정을 식별하고 정보에 입각한 결정을 내리고 문제를 효과적으로 해결할 수 있습니다. 다음은 실제로 기업에서 PM이 일을 할때 사용하는 컴퓨팅 사고 순서의 예시입니다.

  1. Decomposition: 전체 문제를 작은 여러가지 문제로 나누는 과정
  2. Pattern Recognition: 주어진 문제의 반복적으로 나타나는 패턴을 찾는 과정(컴퓨터는 단순 반복 작업에 최적화 되어있음)
  3. Abstraction: 문제에서 해결해야할 주요한 정보를 수치화(또는 계산 가능하게)하는 과정.(세세하게 다 정의하는 것: 누구나 이해할 수 있게끔)
  4. Algorithimic Thinking: 추천을 수행하는 과정을 step-by-step으로 만드는 과정

문제해결(Problem Solving, PS)

위에서 컴퓨팅 사고력에 대해서 알아보았습니다. 결국 현실의 문제를 작게 나누어서 컴퓨터가 계산할 수 있게 정의하는 작업이라는 걸 알았는데요. 그렇게 잘 정의 된 문제를 컴퓨터가 계산할 수 있게 명령을 내리는 과정이 바로 '문제 해결'입니다. 컴퓨터공학에서의 문제해결자료구조나 알고리즘을 사용하여 주어진 문제에 대한 풀이법을 코드로 작성하는 과정을 뜻합니다. 즉, 컴퓨팅 사고를 통해서 문제를 정의했다면, 그것을 코딩으로 옮기는 작업을 하는 것이죠. 여기에는 특정 요구 사항을 해결하거나 원하는 결과를 얻기 위해 소프트웨어 또는 시스템 설계, 구현, 테스트 및 최적화하는 작업들이 포합됩니다.

 

*TIP. 일반적으로 주니어개발자는 PS가 더 중요하고, 시니어 개발자로 넘어갈 땐 CT가 더 중요하다. 주니어 개발자가 주로 하는 일이 보통 시니어 개발자가 정의해놓은 문제를 코딩으로 옮기는 작업이기 때문이다. 프로그래밍 실력을 키우는 방법은 LeetCode, 백준같은 사이트에서 코드를 많이 짜보면서 문제 해결을 많이 경험해보아야한다. PS를 잘하면, 자연스럽게 CT능력도 키워진다.

 

 

마무리

여기까지 컴퓨터 공학이 무엇이고, 어떤 걸 배우게 되며, 최종 목적이 무엇인지 알아보았습니다. 컴퓨터 사고력과 문제 해결이 가장 중요했으며, 각각의 의미와 활 방법 및 능력을 키우는 방법에 대해서도 알아보았습니다. 여기까지 글을 마치겠습니다.

댓글