컴퓨팅 사고력

컴퓨터/프로그래밍 기초

728x90
반응형

컴퓨터는 정직하다.

컴퓨터는 거짓말을 할 수 없다는 말을 들어보셨나요? 컴퓨터는 0과 1의 2진수로 만들어졌습니다. 설계부터 2분 법적인 사고를 가지고 있습니다. 선택지의 기로에서 0 또는 1 둘 중 하나의 선택밖에 못합니다. 많은 컴퓨터의 알고리즘 기법, 자료구조, 다양한 추상적인 개념이 추가되어도 0과 1로 이루어진 컴퓨터는 2가지 선택지만 존재할 뿐입니다. 여러 다양한 개념이 나오고, 구조가 어렵다고 생각돼도 근본적으로 0과 1로 만들어져 있기 때문입니다.

 

컴퓨터는 단순하다.

컴퓨터는 단순합니다. 0과 1만이 존재하는 세상에서 살고 있기 때문입니다. 인간은 이 단순하지만 군소리 없는 이 컴퓨터를 다루기 위해 엄청난 노력과 기술의 발전을 이루었습니다. 때문에 사람들은 컴퓨터를 잘 써먹기 위해서 이 0과 1을 통해서 다양한 방법을 생각하고 개념들을 발전시켜왔습니다. 따라서 컴퓨터는 단순하지만, 그 0과 1의 2가지만 존재하는 세상을 인간들이 발전시켜 왔습니다. 이 발전을 하는 과정에서 인간은 컴퓨터를 이해하고 컴퓨터를 잘 써먹기 위해서 컴퓨터의 관점에서 해석을 하기 위해 노력했고, 지금도 노력하며 발전 중입니다. 이렇게 컴퓨터의 관점에서 이해를 하고 생각을 하는 것을 소위 '컴퓨팅 사고력'이라고 일컫습니다.

 

컴퓨팅 사고력이 필요한 이유 

컴퓨터는 단순하지만 군소리없이 일하는 기계입니다. 명령을 잘 내려주면 거짓말도 못하고 단순한 이 녀석은 명령의 정확한 결과를 제공을 해줍니다. 그럼 인간은 귀찮고 반복적인 일을 컴퓨터에게 시키면 실수 없이 정확한 결과를 제공받을 수 있습니다. 때문에 컴퓨터 프로그래밍을 하기 위해서는 컴퓨터의 관점에서 해석하고 이해하는 노력이 필요합니다. 다양한 고급언어와 다양한 툴을 사용을 하는 것도 당연히 프로그래머의 필수 항목이지만 근복적으로 일을 잘 시키려면 일을 시킬 대상에게 어떻게 일을 시켜야 좋은 결과를 가져올지 생각을 할 필요가 있습니다.

 

샌드위치 코딩 - 컴퓨팅 사고력의 대표적 예시

본문을 읽고 계신 분들은 샌드위치 코딩에 대하여 들어보신 적이 있으신가요? 인터넷에 검색하면 엄청나게 샌드위치 코딩에 대한 얘기가 많이 있습니다. 

샌드위치 코딩은 정직하고 단순한 어떤 누군가에게 샌드위치를 만들기 위한 명령을 해보는 것입니다. 

사람에게 샌드위치를 만드는 방법을 서술한다고 가정해 보겠습니다.

  1. 식빵위에 햄을 얹는다.
  2. 그 위에 치즈를 얹는다.
  3. 그 위에 소스를 뿌린다.
  4. 그 위에 다른 식빵 하나를 올린다. 

평범한 사람이라면 이 정도만의 글로 어느 정도 유추할 수 있을 것입니다. 

 

이걸 조금 더 컴퓨터의 사고처럼 분석을 해서 서술해 보도록 하겠습니다.

  1. 샌드위치를 1개 만들위 위해서는 식빵 2개 치즈 1개 햄 1개 머스터드 소스 50g 케첩 50g이 필요하다.
  2. 식빵은 가로 세로 5x5cm 두께는 1cm 이며 치즈 햄은 4x4cm 두께는 0.1mm이다.
  3. 식빵의 가장 넓은 면이 대칭될수 있도록 올려놓습니다.
  4. 가장 넓은 면에 햄을 하나 올려놓습니다.
  5. 그 위에 치즈 하나를 올려놓습니다.
  6. 케첩 50g을 식빵 면적 5x5cm에 1cm^2당 2g씩 도포합니다.
  7. 그 후 머스터드 소스 50g도 1cm^2당 2g씩 도포합니다.
  8. 이후 다른 식빵 하나의 가장 넓은 면이 대칭이 되도록 올려놓습니다.

차이점이 확연하게 보이나요? 사실 더 세분화할 수도 있을 것입니다. 오른손으로 햄을 들어 접시 위에 올려진 식빵 위에 올려놓는다는 등 결국 컴퓨팅 사고력이란 얼마나 더 세분화하고, 명확하게 컴퓨터에 명령을 시킬 수 있느냐의 개념입니다.

 

컴퓨팅 사고력의 연습

프로그래밍을 하면 우리에게 주어진 고급언어와 정해진 문법 그리고 주어진 컴퓨터의 자원 및 성능을 가지고 얼마나 정확하고 간결하게 명령을 시킬지 구조화를 해야 합니다. 그래야 소모적인 시간을 줄이고 정확한 코딩 및 컴퓨터에게 일을 시킬 수 있습니다.

그래서 항상 프로그램을 설계 또는 구현을 하기 위해서 세분화가 필요합니다. 이 과정이 바로 컴퓨팅 사고력이 필요한 순간이며, 늘어나는 순간입니다.

 

 

  • 프로그램도 만들어져야 되는 결과물 (예시 - 샌드위치 5개)
  • 프로그램을 구동하면서 필요한 데이터 (예시 - 식빵 n개 , 햄 n개 , 치즈 n개)
  • 순서의 구조화 식빵 (예시 - 1개 위에 햄 1개 위에 치즈 1개 그 위에 식빵 1개)
  • 예외에 대한 생각 및 처리 (예시 - 식빵이 부족하면, 영업을 종료한다 or 사 온다.
  • 해당 과정들을 최적화하기 위한 방법의 생각 및 구현 ( 예시 - 식빵을 100개 만들려면 사람 1명보다는 2명이서 하는 게 효율 적이다)

이런 식으로 프로그래밍을 하기 위해서는 언어의 문법과 형태를 아는 것도 중요하지만 컴퓨팅 사고력을 향상해 어떤 구조로 구현을 해야겠다는 컴퓨터의 관점에서 컴퓨터를 생각하고 조금 더 정확한 지시와 효율성을 항상 생각해야 됩니다.

 

마무리 글

필자의 생각에는 현대사회에서 컴퓨터가 개인에 미치는 영향력은 엄청나게 크다고 생각합니다. 그만큼 컴퓨터가 엄청나게 가까운 거리에서 함께하고 있습니다. 물론, 사용자의 입장에서 누군가의 설계로 만든 어떤 프로그램을 사용을 한다면 큰 고민을 할 필요는 없을 것입니다. 하지만, 필자의 경우 프로그램에 흥미가 생긴 이유가 나였다면 이렇게 만들었을 텐데 하는 생각에서였습니다. 그리고 공부하는 입장에서 이런 컴퓨터의 관점에서의 해석이 없는 상태라면 생각에서 그칠 뿐 구현을 하는 것은 쉽지 않습니다. 프로그래밍을 한다는 것은 컴퓨터에 이해가 높을수록 질 좋은 프로그램이 나올 수 있습니다. 컴퓨터를 이해하기 위해 컴퓨터적인 컴퓨팅 사고능력을 길러보도록 노력해 봅시다.

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :