프로그래밍(Programming)
해결해야 할 문제(요구사항)를 명확히 이해한 후 적절한 문제 해결 방안을 정의하는 것
- 복잡하고 명확하지 않을 수 있는 문제(요구사항)에 대해 복잡함을 단순하게
분해(decomposition)
하고 자료를 정리하고 구분(modeling)
해야 하며 순서에 맞게 행위를 배열
해야 한다.
- 문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라봐야 한다. 이때 필요한 것이
컴퓨팅 사고(Computational Thinking)
이다.
컴퓨터 사고(Computational Thinking)
컴퓨터와 사람은 사고, 인지의 방식이 다르다 !
Ex) "듣다(Listen)" 를 정의할 때
**사람
- 소리의 크기 : "크다" or "작다" ( 상대적인 개념, 기준 불명확 )
컴퓨터
- 소리의 크기 : "현재 볼륨보다 1단계 크게 조정하라" or "볼륨을 60으로 조정하라" ( 양적 개념인 숫자를 사용, 기준이 있음 )**
- 사람의 일반적인 사고방식은
매우 포괄적
이며 실생활에서 경험하는 익숙한 사항에 대해 당연시하는 안이한 인식
이 있다.
- 따라서
컴퓨터의 관점
에서 문제를 사고(Computational Thinking)해야 한다.
- 논리적, 수학적 사고도 필요하지만, 더 중요한 것은 해결할 문제를
작은 단위로 분해
하고 패턴화해서 추출하며
, 프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의
해야 한
구문(Syntax)과 의미(Semantics)
const number = "string";
console.log(number * number); // NaN
- 위에 예제는
구문(문법적)
상으로는 전혀 문제가 없다. ( cf. 자바스크립트의 변수에는 어떠한 타입의 값도 할당할 수 있다. )
- 하지만,
의미적
으로는 옳지 않다. ( cf. number라는 이름의 변수에는 숫자를 할당하는 것이 의미적으로 옳지 않은가 ! )
문제 해결 능력을 통해 만들어낸 해결 방안은 프로그래밍 언어의 문법을 사용해 표현한다. 즉, 작성된 코드야말로 해결 방안의 구체적 구현물이다.
이 때, 수행하고자 하는 바를 정확히 수행하는 것, 즉 **요구사항이 실현(문제가 해결)되어야 의미(Semantics)가 있다.**
- 개발자는 결국, 프로그래밍 언어가 제공하는 문법을 적절히 사용하여
변수를 통해 값을 저장하고 참조
하며
- 연산자로
값을 연산, 평가
하고