모던 자바스크립트 Deep Dive 정리 - 프로그래밍이란?

공부하고 기록하기·2022년 8월 13일
0

JavaScript

목록 보기
8/13
post-thumbnail

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

이를 위해 문제(요구사항)를 명확히 이해한 후, 적절한 문제 해결 방안을 정의할 필요가 있습니다. 대부분의 문제(요구사항)는 복잡하며 명확하지 않을 수도 있습니다. 따라서 문제(요구사항)를 명확히 이해하는 것이 우선되어야 하며 복잡함을 단순하게 분해하고 자료를 정리하고 구분해야 하며 순서에 맞게 행위를 배열해야 합니다.

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

문제 해결 능력을 함양하기 위해서는 컴퓨팅 사고가 필요합니다. 문제 해결 능력은 직감직관의 영역이라고 볼 수 있는데, 이는 문제를 바라보는 우리의 사고와 경험에 영향을 받습니다.

컴퓨터와 사람은 사고, 인지의 방식이 다르기 때문에 컴퓨터의 관점에서 문제를 사고(Computational thinking)해야 합니다. 여기에는 논리적, 수학적 사고가 필요하며, 해결 과제를 작은 단위로 분해하고 패턴화해서 추출하며, 프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의해야 합니다.

프로그래밍 언어

컴퓨터는 인간의 언어(자연어)가 아니라 기계어로 명령을 전달해야 합니다. 하지만 기계어로 직접 전달하기란 너무 어렵습니다.

7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 02 00 03 00 
01 00 00 00 35 40 B3 04 2C 00 00 00 00 00 00 00 00 00 00 00 
34 00 20 00 01 00 00 00 00 00 00 00 00 40 B3 04 B2 0C EB 1C 
62 00 00 00 62 00 00 00 05 00 00 00 00 10 00 00 48 65 6C 6C 
6F 20 77 6F 72 6C 64 0A B9 4C 40 B3 04 93 CD 80 EB FB

기계어로 직접 명령을 전달하는 것을 대신할 가장 유용한 대안은 사람이 이해할 수 있는 약속된 구문으로 구성된 프록로그래밍 언어를 사용해 프로그램을 작성한 후, 그것을 다시 기계어로 변환하는 일종의 번역기를 이용하는 것입니다. 이 일종의 번역기를 컴파일러 혹은 인터프리터라고 합니다.

프로그래밍 언어란 컴퓨터와의 대화(명령)에 사용되는 일종의 표현 수단으로, 사람과 컴퓨터(컴파일러 또는 인터프리터) 모두가 이해할 수 있는 약속된 형태의 인공어입니다.

구문과 의미

Colorless green ideas sleep furiously.

  • 노엄 촘스키 -

MIT의 저명한 언어학자인 노엄 촘스키는 위 문장을 통해 “언어의 의미는 문맥에 있는 것이지 문법에 있는 것이 아니다"고 지적했습니다. 위 문장은 문법적으로 전혀 문제가 없지만 의미는 없습니다. 프로그래밍 언어도 마찬가지 입니다.

아래 중괄호는 블록문일까요? 아니면 객체 리터럴일까요? 세미콜론이 문의 끝에 붙거나 변수에 할당할 수 있으면 객체로 평가가 됩니다. 그렇지 않으면 코드블록으로 평가 됩니다.

함수 선언문과 함수 리터럴은 어떻게 구분할까요? 값으로 평가되어야 하는 상황이거나 변수에 할당될 경우 함수 리터럴로 평가되고, 단독으로 존재하면 함수 선언문으로 평가됩니다.

노엄 촘스키의 말을 빌리면 코드의 의미도 문맥에 있는 것이지 문법에 있는 것이 아니라고 할 수 있습니다.

{} // 코드 블록
{}; // 객체 리터럴

function add(x, y) { // 함수 선언문
	return x + y;
}

(function add(x, y) { // 함수 리터럴
	return x + y;
})

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

profile
Better than yesterday

0개의 댓글