1장 프로그래밍 (JS Deep Dive)

January·2022년 4월 20일
0
post-thumbnail

프로그래밍이란?

일종의 커뮤니케이션이다.

프로그래밍에 앞서 해결해야 할 문제(요구사항)를 명확히 이해할 필요가 있다.

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

대부분의 문제는 명확하지 못하다. 그래서 문제(요구사항)를 명확히 이해하는데 도움이 되는 순서가 있다.

  1. 복잡함을 단순하게 분해한다.
  2. 자료를 정리하고 구분한다.
  3. 순서에 맞게 행위를 배열한다.

0과 1밖에 알지 못하는 기계가 실행되도록 정확하고 상세하게 요구사항을 설명하는 작업의 결과물이 코드이다.

컴퓨터 입장에서 문제를 바라보는..

컴퓨팅 사고

예를 들어
"듣다"라는 행위를 사람은 간단하고 당연한 기능으로 생각한다. 하지만 컴퓨터에게 이 행위를 설명하는 것이 단순하지 않다. 소리의 크기, 크기의 정의, 관념적인 개념 등 여러 명령을 내려줘야한다. 여기에 필요한 것은 3가지.

  • 논리적 사고
  • 수학적 사고
  • 해결 과제를 작은 잔위로 분해-패턴화-추출

프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의해야 한다.

문제 해결 과정

  1. 판단해야 하는 상태
  2. 그 상태를 판단하는 시기
  3. 판단 기준을 정의
  4. 이를 바탕으로 분해한 처리(process)의 실행 여부

프로그래밍 언어

문제 해결 방안은 컴퓨터에게 전달되어야 한다. 사람이 이해하는 자연어가 아니라 컴퓨터가 이해할 수 있는 기계어로 명령을 전달해야한다.

기계어를 대신할 가장 유용한 대안은 사람이 이해하는 약속된 구문(syntax, 문법)으로 구성된 "프로그래밍 언어"를 사용한다. 사람이 이해하는 약속된 구문을 컴퓨터가 이해하도록 일종의 번역기로 기계어로 변환한다.

일종의 번역기를 컴파일러 혹은 인터프리터라고 한다.

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

  • 자연어
  • 기계어
  • 인공어

리눅스 환경, x86 아키텍처를 이용한 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

자바스크립트 언어를 이용한 hello world 코드

console.log('hello');

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

  • 프로그래밍 언어
    • 구문 (syntax)
    • 의미 (semantics)

구문과 의미

프로그래밍 언어는 문법을 배우는 것부터 시작한다. 이는 외국어 학습과 유사하다. 문법을 잘 안다고 해서 외국어를 잘한다고 말할 수는 없다.

  1. 화자의 말이나 문장을 정확히 이해.
  2. 문맥에 맞는 적절한 어휘 선택.
  3. 결론을 향한 문장 구성.

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

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

자바스크립트의 변수에는 어떠한 타입의 값도 할당할 수 있다. 따라서 위 예제는 문법적으로 맞다. 하지만 의미적으로는 옳지 않다. number라는 이름의 변수에 문자열이 할당되어 있기 때문이다. 의미적으로 옳지 않다.

작성된 코드는 해결 방안의 구체적 구현물로 요구사항이 실현(문제가 해결)되어야 의미가 있다.

  • 문제 (문제 해결 능력)
    • 해결방안 (문법/의미)
      • 코드

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

0개의 댓글