프로그래밍

유석현(SeokHyun Yu)·2022년 7월 7일
0

JavaScript

목록 보기
1/44
post-thumbnail

1. 프로그래밍이란?

프로그래밍이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다.

이를 위해 먼저 무엇을 실행하고 싶은지 정의할 필요가 있다.

다시 말해, 프로그래밍에 앞서 해결해야 할 문제(요구사항)를 명확히 이해한 후 적절한 문제 해결 방안을 정의할 필요가 있다.

이때 요구 되는 것이 문제 해결 능력이다.

문제 해결 능력을 알고리즘과 동일시하려는 경향이 있지만 반드시 그런 것은 아니다.

물론 문제 해결 능력을 향상하는 데 알고리즘 학습은 큰 도음이 되지만 문제 해결 능력은 더 큰 차원의 능력이다.

대부분의 문제(요구사항)는 복잡하며 명확하지 않을 수도 있다.

따라서 문제(요구사항)을 명확히 이해하는 것이 우선되어야 하며 복잡함을 단순하게 분해하고 자료를 정리하고 구분해야 하며 순서에 맞게 행위를 배열해야 한다.

즉, 프로그래밍이란 01밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업이며, 그 결과물이 바로 코드다.

모호하고 대략적인 요구사항을 전달해도 우리의 머릿속에 있는 의도를 정확히 꿰뚫어 완벽히 이해하는 코드는 절대 존재할 수 없다.

우리는 문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라봐야 한다.

이때 필요한 것이 Computational thinking(컴퓨팅적 사고)이다.

문제 해결 능력은 직감과 직관의 영역이라고 볼 수 있는데, 이는 문제를 바라보는 우리의 사고와 경험에 영향을 받는다.

사람의 일반적인 사고 방식은 매우 포괄적이며 실생활에서 경험하는 익숙한 사항에 대해 당연시하는 안이한 인식이 있다.

예를 들어, "듣다"라는 행위를 사람은 하나의 간단하고 당연한 기능으로 생각한다.

하지만 컴퓨터에게 이 행위를 설명하는 것은 단순하지 않다.

그리고 사람은 소리의 크기를 "크다" 또는 "작다"로 표현한다.

하지만 "크다" 또는 "작다"는 의미는 상대적인 개념으로 기준이 불명확하다.

컴퓨터에게는 양적 개념인 숫자를 사용해 "현재 볼륨보다 1단계 크게 조정하라" 또는 "볼륨을 60으로 조정하라"라고 명령해야 한다.

또한 "좋다", "붉다", "사랑"과 같은 관념적 개념은 컴퓨터에게 매우 난해한 개념이다.

사람은 지인의 얼굴을 보고 누구인지 바로 인식하지만 컴퓨터에게 이것은 매우 어려운 일이다.

347×3959×2393249347 \times 3959 \times 2393249 를 계산하는 것은 사람에게는 쉽지 않지만 컴퓨터에게는 매우 쉬운 작업이다.

이처럼 컴퓨터와 사람은 사고, 인지의 방식이 다르다.

따라서 컴퓨터의 관점에서 문제를 사고해야 한다.

여기에는 논리적, 수학적 사고가 필요하며, 해결 과제를 작은 단위로 분해하고 패턴화해서 추출하며, 프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의해야 한다.


2. 프로그래밍 언어

이처럼 문제 해결 능력을 바탕으로 정의된 문제 해결 방안은 컴퓨터에게 전달되어야 한다.

이떄 명령을 수행할 주체는 컴퓨터다.

따라서 사람이 이해할 수 있는 자연어가 아니라 컴퓨터가 이해할 수 있는 언어, 즉 기계어로 명령을 전달해야 한다.

하지만 사람이 기계어를 이해해서 기계어로 직접 명령을 전달하는 것은 매우 어려운 일이다.

기계어는 우리가 사용하는 언어와는 너무나도 체계가 다르기 때문이다.

사람이 기계어로 직접 명령을 전달할 수 있는 대안은 사람이 이해할 수 있는 약속된 구문(문법)으로 구성된 "프로그래밍 언어"를 사용해 프로그램을 작성한 후, 그것을 컴퓨터가 이해할 수 있는 기계어로 변환하는 일종의 번역기를 이용하는 것이다.

이 일종의 번역기를 컴파일러 또는 인터프리터라고 한다.

다음은 "Hello World!"를 출력하는 자바스크립트 코드다.

console.log("Hello World");

프로그래밍은 프로그래밍 언어를 사용해 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다.

프로그래밍 언어는 구문(syntax)의미(semantics)의 조합으로 표현된다.


3. 구문과 의미

프로그래밍 학습은 일반적으로 프로그래밍 언어의 문법을 배우는 것부터 시작한다.

이는 외국어 학습과 유사하다.

그러나 이미 경험을 통해 알고 있겠지만 문법을 잘 안다고 해서 외국어를 잘한다고 말할 수는 없다.

외국어를 잘하려면 외국어 화자의 말이나 문장을 정확히 이해한 후, 문맥에 따른 적절한 어휘 선택, 스리고 순차적으로 결론을 향해 나아가는 문장 구성이 필요하다.

즉, 문법에 맞는 문장을 구성하는 것은 물론 의미(semantics)를 가지고 있어야 언어의 역할을 충실히 수행할 수 있다.

문제 해결 능력을 통해 만들어낸 해결 방안은 프로그래밍 언어의 문법을 사용해 표현한다.

즉, 작성된 코드는 해결 방안의 구체적 구현물이다.

그리고 이것은 프로그래밍 언어의 문법에 부합합는 것은 물론이고 수행하고자 하는 바를 정확히 수행하는 것, 즉 요구사항이 실현(문제가 해결)되어야 의미가 있다.

결국 프로그래밍은 요구사항의 집합을 분석해서 적절한 자료구조함수의 집합으로 변환한 후, 그 흐름을 제어하는 것이다.

profile
Backend Engineer

0개의 댓글