프로그래밍란
이번에 개발에 앞서 프로그래밍에 대한 개념을 혼자서 끄적여 봅니다. 해당 글은 모던 자바스크립트 Deep Dive에서 참고하며, 작성하였습니다.
프로그래밍?
프로그래밍이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이라고 할 수 있습니다. 프로그래밍에 앞서 해결해야 할 문제(요구사항)를 명확히 이해한 후 적절한 문제 해결 방안을 정의할 필요가 있습니다.
이때 요구되는 것이 문제 해결 능력입니다. 이것을 알고리즘과 완전 동일시하면 안됩니다. 물론 문제 해결 능력에 알고리즘은 큰 도움이 되지만 문제 해결 능력은 더 큰 차원의 능력입니다.
대부분의 문제(요구사항)는 복잡하며 명확하지 않을 수도 있는데요. 따라서 문제(요구사항)을 명확히 이해하는 과정을 거쳐 복잡함을 단수하게 분해(decomposition), 해당 자료를 모델링 합니다. 그리고 순서에 맞게 행위를 배열해야 합니다.
즉, 프로그래밍이란 0과 1밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업이며, 그 결과물이 바로 코드입니다. 모호하고 대략적인 요구사항을 전달해도 우리의 머릿속에 있는 의도를 정확히 꿰뚫어 완벽히 이해하는 컴퓨터는 없습니다.
우리는 문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라봐야 합니다. 이때 필요한 것이 Computational thinking(컴퓨팅 사고)
입니다. 문제 해결 능력은 직감과 직관의 영역이라고 볼 수 있는데, 이는 문제를 바라보는 우리의 사고와 경험에 영향을 받습니다. 사람의 일반적인 사고 방식은 매우 포괄적이며 실생활에서 경험하는 익숙한 사항에 대해 당연시하는 안이한 인식이 있습니다.
컴퓨터에게 행위를 설명하는 것은 엄청 복잡하며, “크다”와 “작다”같은 기준도 명확하지 않습니다. 하지만 단순 산수 연산은 사람을 초월합니다.
프로그래밍은 이런 사고방식(Computational thinking)을 인식하고 진행해야 합니다. 여기에는 논리적, 수학적 사고가 필요하며, 해결 과제를 작은 단위로 분해하고 패턴화해서 추출하며, 프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의해야 한다.
프로그래밍 언어
문제 해결 능력을 바탕으로 문제 해결 방안을 컴퓨터에게 전달 하여야 합니다. 실행하는 주체는 컴퓨터인데, 기계언어를 전달받아 그것을 처리합니다.(자연어 - 사람, 기계어 - 컴퓨터)
기계어를 사람이 직접 입력하는 것은 정말 어려운 작업 입니다. 복잡하고, 시간이 많이 걸리는 작업이죠. 사람이 이해하기 싶고, 명령어가 기계어보다 간결한 언어를 프로그래밍 언어(programming language)
라고 생각하면 됩니다. 그리고 이것을 기계어로 번역하는 것을 컴파일러(compiler) 또는 인터프리터(interpreter)라고 합니다.
결론적으로 프로그래밍 언어란 기계어보다 사람이 이해하기 쉽되, 구문(syntax)와 의미(semantics)의 조합으로 구성된 인공어 입니다.
console.log("Hello");
콘솔창 “Hello”라는 문자열을 로그로 출력하라는 의미의 문구
개발자는 이러한 프로그래밍 언어를 활용하여, 요구사항의 집합을 분석, 적절한 자료구조와 함수의 집합으로 변환한 후, 그 흐름을 제어할 수 있어야 합니다.
댓글남기기