상세 컨텐츠

본문 제목

[모던 자바스크립트] 1장 프로그래밍

모던 자바스크립트

by penloo 2024. 3. 20. 17:09

본문

우리가 무엇이든간 시작하기에 앞서 내가 근본적으로 이걸 왜 알아야하고, 이것을 어디에 쓸 것인지에 대해서 알기 위해선, 이런거겠지하고 넘기는것이아닌 기초공사를 확실히하고 가야한다고 생각한다.

 

그래서 프로그래밍이 뭔데?라고 질문을 던질 때 내릴 수 있는 정의가 사람마다 다르지만 누구나 이해할 수 있게 설명할 수 있을까를 중점에 두고 이 글을 쓰게 되었다.

 

그래서 진짜로 프로그래밍    이 뭔지 한번 파헤쳐보자 

 

프로그래밍이란

 

 

프로그래밍은 컴퓨터에게 "이것 좀 실행 해줘 ! "  라고 요구하는 커뮤니케이션이다

 

여기서 이것을 실행하기 앞서 컴퓨터한테 요구하는 사항이니 컴퓨터는 0과1로 밖에 알지 못하기에 그 전까지의 요구사항을 정확하고 상세하게 설명할 수 있어야한다. 우린 이런 작업을 프로그래밍이라고 부르고 프로그래밍에서 컴퓨터에게 주기까지의 정확하고 상세하게 쓸 수 있는 내용을 만드는것에 필요한 능력이 바로 문제 해결 능력이라고 볼 수 있다(>= 알고리즘보다 더 큰 능력)

 

복잡한 문제를 0과1 같이 단수하게 분해할 줄 알아야하며 자료를 정리해서 구분하고 순서대로 만들줄 알아야한다 

자 이제 어느정도 우리가 뭘 해야하는지에 대해 알게 되었다면 이젠 어떤 방식으로 저리 순서대로 만들어야할까?

mbti에서 F의 관점으로 보면된다 상대방(=컴퓨터)의 입장을 고려하여 문제를 바라보면 된다는 것이다  -> 이걸 우린 컴퓨팅사고 (computational thinking)이라 한다

"듣다, 말하다 , 크다, 작다" ->  인간이 듣기에는 너무나도 단순한 언어이다 하지만 크다 작다 같이 상대적인 개념의 기준이 너무 불명확하여 컴퓨터한테는 숫자를 사용하여 "볼륨을 100으로~" 같이 정확하게 설명해야한다.

 

지인의 얼굴을 보면 우리는 바로 인식을 하지만 컴퓨터는에겐 매우 어려운 일이며 , 377x3423x234543의 결과값이  컴퓨터에게는 물 마시듯이 쉽게 할 수 있는 일이 인간에게는 어려운 일이니 컴퓨터와 인간은 사고방식과 인지의 방식이 다르다는 걸 알아야한다.

 

그러니 우리는 프로그래밍을 할 떄 해결과제를 작은 단위로 분해해서 순서대로 패턴화하여 프로스래밍 내에서 사용될 개념들이 컴퓨터에서 평가 가능하게 정의해놔야한다.

 

 

 

프로그래밍 언어

자 그럼, 저렇게 다 해놔서 컴퓨터에게 전달하면 되는건데... 컴퓨터가 알아들어야겠지?  고양이한테 한국말로 대화할 수 없으니 고양이어(?)를 써야하듯 컴퓨터어라는게 존재한다. 여러분들도 코딩을 시작했으면 졸다가도 들었을 컴퓨터가 이해하는 언어 즉 기계어로 명령을 전달해야만 한다. 

 

근데 기계어는 너무 허들이 높다.. 기계어를 쓰는법을 알면 이걸 안 보고 있겠지.. 그렇다 기계어는 비트단위로 기술되어 있어 

우리가 알아보기엔 한계가 있다

 그래서 위 사진처럼 중간에 통역을 해주는 통역사를 한 분 모셨다. 사람도 이해할 수 있는 약속된 문법(구문)으로 구성된 프로그래밍 언어를 사용하여 프로그램을 작성하고 이걸 컴퓨터가 이해할 수 있는 기계어로 통역을 해준다고 보면 된다.

 

우린 이 통역사를 컴통역사라고 부르는데 본명은 컴파일러 님 혹은 인터프리어 님이라고 외치면 된다

프로그래밍 언어는 컴퓨터와 대화하기 위해 사용되는 사람과 컴파일러 모두가 이해할 수 있는 약속된 언어라고 보면 된다 

 

유명한 "Hello World"를 출력하는 자바스크립트 코드이다. 기계어 코드보다 사람이 이해하기 쉽게 약속된 형태이다 

 

console.log('Hello World');

 

 

프로그래밍은 프로그래밍 언어를 이용하여 컴퓨터의 실행을 요구하는 커뮤니케이션이다 라고 보면되고

 

프로그래밍에는 구문과 의미로 구성되있다 

 

구문과 의미

자 영어를 배울때 문법에 맞는 문장을 구성하는것부터 배운다.. 하지만 문법을 잘 맞춘다고 영어를 잘하냐?

그렇게 한들 원어민과 일상 대화가 가능할까? 아니다  그들이 말을 할 때 그 말의 문장을 정확히 이해하고 적절한 단어와 상황에 따른 문장 구성을 통해 말을 이어나갈줄 알아야한다

 

즉, 상황에 맞는 의미있는 문장을 구성해야 언어의 역할을 충실히 이행 할 수 있다

 

문법과 의미.. 문법엔 문제가 없지만 의미가 없다면 그건 문장이 될까? 우리 노엄 촘스키씨는

const number = 'string';
console.log(number+number);

 이런걸 보고 문법에는 틀림이 없지만 의미는 답이 없다,,라고 얘기한다 

 

number라는 변수에 문자열을 할당이 아닌 숫자를 할당하는것이 의미적으론 옳기 때문이다.

 

결국 문제해결능력의 결과는 프로그래밍 언어의 문법을 이용하여 나타나는데  이말은 작성이 된 코드는 해결방안의 구체적인 구현물이라고 할 수 있다

 

우리가 알고 있는 변수, 값, 키워드, 연산자, 조건문,반복문, 흐름제어, 함수, 자료구조 등과 같은 문법을 프로그래밍 언어에서 제공을 한다

이 제공된 문법을 통해 적절히 사용하여 의미있는 프로그래밍 언어를 만든다.

 

결국 프로그래밍은 요구사항을 모두 모아 분석하고 그것을 해결 후 구조화하여 적절한 프로그래밍언어의 문법을 사용해 변환 후 그 흐름을 제어하는것이다.

관련글 더보기