컴퓨터/프로그래밍 기초
컴퓨터는 거짓말을 할 수 없다는 말을 들어보셨나요? 컴퓨터는 0과 1의 2진수로 만들어졌습니다. 설계부터 2분 법적인 사고를 가지고 있습니다. 선택지의 기로에서 0 또는 1 둘 중 하나의 선택밖에 못합니다. 많은 컴퓨터의 알고리즘 기법, 자료구조, 다양한 추상적인 개념이 추가되어도 0과 1로 이루어진 컴퓨터는 2가지 선택지만 존재할 뿐입니다. 여러 다양한 개념이 나오고, 구조가 어렵다고 생각돼도 근본적으로 0과 1로 만들어져 있기 때문입니다.
컴퓨터는 단순합니다. 0과 1만이 존재하는 세상에서 살고 있기 때문입니다. 인간은 이 단순하지만 군소리 없는 이 컴퓨터를 다루기 위해 엄청난 노력과 기술의 발전을 이루었습니다. 때문에 사람들은 컴퓨터를 잘 써먹기 위해서 이 0과 1을 통해서 다양한 방법을 생각하고 개념들을 발전시켜왔습니다. 따라서 컴퓨터는 단순하지만, 그 0과 1의 2가지만 존재하는 세상을 인간들이 발전시켜 왔습니다. 이 발전을 하는 과정에서 인간은 컴퓨터를 이해하고 컴퓨터를 잘 써먹기 위해서 컴퓨터의 관점에서 해석을 하기 위해 노력했고, 지금도 노력하며 발전 중입니다. 이렇게 컴퓨터의 관점에서 이해를 하고 생각을 하는 것을 소위 '컴퓨팅 사고력'이라고 일컫습니다.
컴퓨터는 단순하지만 군소리없이 일하는 기계입니다. 명령을 잘 내려주면 거짓말도 못하고 단순한 이 녀석은 명령의 정확한 결과를 제공을 해줍니다. 그럼 인간은 귀찮고 반복적인 일을 컴퓨터에게 시키면 실수 없이 정확한 결과를 제공받을 수 있습니다. 때문에 컴퓨터 프로그래밍을 하기 위해서는 컴퓨터의 관점에서 해석하고 이해하는 노력이 필요합니다. 다양한 고급언어와 다양한 툴을 사용을 하는 것도 당연히 프로그래머의 필수 항목이지만 근복적으로 일을 잘 시키려면 일을 시킬 대상에게 어떻게 일을 시켜야 좋은 결과를 가져올지 생각을 할 필요가 있습니다.
본문을 읽고 계신 분들은 샌드위치 코딩에 대하여 들어보신 적이 있으신가요? 인터넷에 검색하면 엄청나게 샌드위치 코딩에 대한 얘기가 많이 있습니다.
샌드위치 코딩은 정직하고 단순한 어떤 누군가에게 샌드위치를 만들기 위한 명령을 해보는 것입니다.
사람에게 샌드위치를 만드는 방법을 서술한다고 가정해 보겠습니다.
평범한 사람이라면 이 정도만의 글로 어느 정도 유추할 수 있을 것입니다.
이걸 조금 더 컴퓨터의 사고처럼 분석을 해서 서술해 보도록 하겠습니다.
차이점이 확연하게 보이나요? 사실 더 세분화할 수도 있을 것입니다. 오른손으로 햄을 들어 접시 위에 올려진 식빵 위에 올려놓는다는 등 결국 컴퓨팅 사고력이란 얼마나 더 세분화하고, 명확하게 컴퓨터에 명령을 시킬 수 있느냐의 개념입니다.
프로그래밍을 하면 우리에게 주어진 고급언어와 정해진 문법 그리고 주어진 컴퓨터의 자원 및 성능을 가지고 얼마나 정확하고 간결하게 명령을 시킬지 구조화를 해야 합니다. 그래야 소모적인 시간을 줄이고 정확한 코딩 및 컴퓨터에게 일을 시킬 수 있습니다.
그래서 항상 프로그램을 설계 또는 구현을 하기 위해서 세분화가 필요합니다. 이 과정이 바로 컴퓨팅 사고력이 필요한 순간이며, 늘어나는 순간입니다.
이런 식으로 프로그래밍을 하기 위해서는 언어의 문법과 형태를 아는 것도 중요하지만 컴퓨팅 사고력을 향상해 어떤 구조로 구현을 해야겠다는 컴퓨터의 관점에서 컴퓨터를 생각하고 조금 더 정확한 지시와 효율성을 항상 생각해야 됩니다.
필자의 생각에는 현대사회에서 컴퓨터가 개인에 미치는 영향력은 엄청나게 크다고 생각합니다. 그만큼 컴퓨터가 엄청나게 가까운 거리에서 함께하고 있습니다. 물론, 사용자의 입장에서 누군가의 설계로 만든 어떤 프로그램을 사용을 한다면 큰 고민을 할 필요는 없을 것입니다. 하지만, 필자의 경우 프로그램에 흥미가 생긴 이유가 나였다면 이렇게 만들었을 텐데 하는 생각에서였습니다. 그리고 공부하는 입장에서 이런 컴퓨터의 관점에서의 해석이 없는 상태라면 생각에서 그칠 뿐 구현을 하는 것은 쉽지 않습니다. 프로그래밍을 한다는 것은 컴퓨터에 이해가 높을수록 질 좋은 프로그램이 나올 수 있습니다. 컴퓨터를 이해하기 위해 컴퓨터적인 컴퓨팅 사고능력을 길러보도록 노력해 봅시다.
메모리에서의 정수 (음수와 양수) (0) | 2021.05.11 |
---|---|
데이터의 자료형 - 변수의 크기 (0) | 2021.05.10 |
메모리에 데이터를 사용하기 위한 방법 - 변수 (0) | 2021.05.09 |
메모리의 구조 (Memory Structure) (0) | 2021.05.07 |
프로그래밍의 절차와 방법 그리고 IDE (0) | 2021.05.03 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet