프로그래밍

프로그래밍이란?

eternal-present 2023. 5. 11. 23:57
반응형

프로그래밍이란?

프로그래밍을 말하기 앞서, 문제를 해결하기 위해선 두 가지가 필요하다.

  1. 하고 싶은 게 뭔지 정확히 알고,
  2. 그걸 이루려면 정확히 어떻게 해야 하는지.

하지만, 대부분의 문제는 한 번에 파악하기 힘든, 복잡한 덩어리로 이루어져 있고, 그것을 해결하기 위해선 복잡하게 얽혀있는 덩어리를 단순하게 [분해, 정리, 구분, 배열로]만들어야 한다.

개떡같이 말해도 찰떡같이 알아듣는다..?

이 말은 아마 컴퓨터에겐 해당되지 않는 말일지도 모른다. 0과 1밖에 모르는 컴퓨터가 알아 먹을 정도로 찰떡같이 말해주어야 한다. 말그대로. 최대한 정확하고 자세하게 설명해주어야 한다. '코드'로. 이렇게 컴퓨터의 입장에서 바라보는 것을 Computational thinking(컴퓨팅 사고)이라고 한다.

밥, 드셨어요?

이 말은 여러 의미를 포함한다. 정말 밥을 먹었는지 궁금해서 묻는 걸 수도 있고, 아니면 그냥 인사하는 김에 묻는 걸 수도 있다. 그러나 컴퓨터에게는 그리 단순하지 않다. 덧붙여서. 가령, [재미있다-재미없다], [좋다-싫다], [무겁다-가볍다], [힘들다-힘들지 않다], [슬프다-슬프지 않다] 무엇이 이를 정확하게 구분할까? 이처럼 인간이 쓰는 언어는 주관적이고 관념적이다. 하지만 컴퓨터에게는 굉장히 어려운 개념이다. 컴퓨터는 양적 개념인 숫자를 사용해 크기를 1px 키워라 혹은 색깔을 #006DD7로 바꿔라고 수치화해서 명령해야 한다. 즉, 컴퓨터에게 명령하기 위해선 해결해야 할 과제를 작은 단위로 분해하고 패턴화해서 추출하며, 평가(판단)가능하도록 정의해야 한다.

프로그래밍 '언어'

이렇게 잘게 쪼개어진 해결 방안들을 컴퓨터에게 실제로 명령하기 위해선 컴퓨터가 이해할 수 있는 언어인 기계어(machine code)로 전달해야 한다. 기계어는 인간 언어 체계와는 달리 비트 단위로 기술되어 있기 때문에 사람이 직접 전달하는 것은 한계가 있다. 이를 해결하는 방법은 사람이 이해할 수 있는 약속된 구문으로 구성된 프로그래밍 언어를 사용하는 것이다. 여기서 인간과 컴퓨터 사이에는 일종의 번역기(컴파일러 or 인터프리터)가 있고 이를 통해 인간과 컴퓨터는 서로 대화(명령)할 수 있게 된다. 프로그래밍은 프로그래밍 언어를 사용해 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다.

  1. 프로그래밍 언어는
  2. 컴퓨터에게 명령을 내릴 수 있도록
  3. 인간이 이해할 수 있는 문법(syntax)과 의미(semantics)의
  4. 조합으로 표현된다.

컴파일러 혹은 인터프리터는 일종의 '번역기'의 기능을 한다.
컴파일러 혹은 인터프리터는 일종의 '번역기'의 기능을 한다.

 

문법(구문)과 의미

const number = 'string';
console.log(number * number); // NAN

 

위의 자바스크립트의 number라는 변수는 어떠한 타입의 값도 할당할 수 있다. 하지만 위 예제는 문법적(syntax)으로는 맞지만, 의미적(semantics)으로는 맞지 않다. number라는 변수에 문자(string)가 할당되어 있기 때문이다. (number는 숫자인데, 정작 들어 있는 건 문자가 들어있다) 그러므로 문자가 아닌 숫자를 할당하는 것이 의미적으로 맞는 것이 된다. 그러므로 영어와 마찬가지로 문법(syntax)뿐만 아니라 의미(semantics)도 가진 문장이어야 한다.

결국, 프로그래밍은

  1. 내가 해결해야 할 문제를 일종의 순서도(분석한 요구사항의 집합)로 만들고,
  2. 이 순서도를 기반으로 프로그래밍 언어의 문법을 가지고
  3. 의미를 지닌 코드로 구현하는 것이다.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading