프로그래밍이란 0과 1밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업이다.
컴퓨터에 주어진 문제에 대한 실행을 요구하기 위해서는, 문제 해결 능력이 요구된다. 문제를 해결하기 위해서는 문제를 명확하게 이해해야하고, 그렇기 위해서는:
문제를 이해한 후 문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라볼 수 있어야 하며, 그것을 Computational Thinking (컴퓨팅적 사고)라고 한다. 컴퓨터와 사람은 사고하고 인지하는 방식이 다르기 때문에 컴퓨팅적 사고를 하기 위해서는:
프로그래밍 언어란 컴퓨터와 대화하기 위해 사용되는 수단으로, 사람과 컴퓨터(컴파일러 혹은 인터프리터) 모두가 이해할 수 있는 약속된 형태의 인공어다.
문제를 해결했으면, 해결 방안을 컴퓨터에게 알려주어야 하는데 원래는 기계어로 명령을 전달했어야 했다. 하지만 사람이 기계어를 사용하는 것은 너무 어렵기 때문에 사람이 이해할 수 있는 프로그래밍 언어를 사용하여 컴파일러나 인터프리터라는 변역기를 통해 기계어로 변환한다.
프로그래밍 언어는 구문(syntax)과 의미(semantics)의 조합으로 표현한다.
아래는 기계어로 'Hello World'를 입력한 것이다.
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
자바스크립트와 같은 프로그래밍 언어를 사용하면 더 쉽게 표현할 수 있다.
console.log('Hello World');
프로그래밍 언어에서 구문은 약속된 표현 방법(문법)이고, 의미는 그 속에 담긴 맥락이다.
프로그래밍 언어를 사용하기 위해서는 프로그래밍 언어의 문법을 배워야한다. 하지만 문법만 안다고 해서 완성되는 것이 아니라, 구문 속에 정확한 의미를 담아야한다.
const number = 'string';
console.log(number * number); // NaN
위와 같은 코드는 문법적으로는 전혀 오류가 없지만, 의미가 맞지 않다. 프로그래밍 언어의 문법에 부합하는 것은 물론이고, 문제(요구 사항)이 정확하게 수행되어야만 의미를 가진다.
프로그래밍의 문법에는 다음과 같은 것들이 있다:
🌟 프로그래밍은 요구사항의 집합을 분석해서 적절한 자료구조와 함수의 집합을 변환한 후, 그 흐름을 제어하는 것이다.
** 이 글은 모던자바스크립트 Deep Dive(이웅모 저)를 정리한 글입니다.