메모내용

상상을 현실로 만들어주는 도구. 컴퓨터

추상적인 개념(상상)은 논리적인 설계의 과정을 거쳐 구체화(현실) 된다. 그것을 가능케 하는것이 컴퓨터 라는 도구 이다. 컴퓨터 자체도 누군가 생각한 추상적인 개념을 구현한 물건이지만, 컴퓨터는 사용자의 추상적인 개념등을, 상상을 현실로 만드는 도구이다.

#1 프로그램이 무엇일까?

컴퓨터는 계산기다. 이 계산기를 어떻게 사용할 것인지를 작성해놓은것이 프로그램 이라고 부르는 글 이다. 프로그램 코드는 컴퓨터라는 기계가 사용하는 메모장(메모리) 부분에 어떠한 값을 적어 놓을것인지, 적어놓은 값을 불러와서 어떻게 계산할것인지, 어떻게 활용할 것인지 메모리를 사용하기 위한 글이다. 메모리의 어떤 영역을 확보할 것인지, 어떤 값을 적고, 이 값을 읽고, 계산해서, 다시 수정해서 적고, 이 메모리의 값을 파일이라는 개념으로 저장해 놨다가, 다시 파일을 읽어서 메모리에다가 값을 적고 이렇게 메모리를 어떻게 사용할것인지 작성해놓은것이 프로그램 코드이고, 이글을 기계가 알아들을 수 있도록 번역해놓은것이 프로그램이다. 그래서 어떻게 프로그램을 작성할 수 있을까?

#2 어떻게 프로그램을 을 작성할 수 있을까?

저장공간값을 저장 하고 필요할때 값을 가져오고 값을 계산하는 문법 을 아는것이 프로그래밍의 시작입니다.

각 프로그래밍 언어마다 저장공간을 다루는 방식이 조금씩 다르며, 문법을 표현하는 방법이 조금씩 다를 뿐 이지 어떤 프로그래밍 언어든 저장공간과 문법 을 다룬다는것만 안다면 시작할 수 있습니다.

예를 들어 JavaScript 라는 언어는 저장공간의 이름만 지어주면 저장공간의 크기나 형식을 정해주지 않아도 값을 쓰거나 저장할 수 있으며 주소도 알 필요 없습니다, 하지만 C 언어는 저장공간의 크기나 형식을 지정해 주어야 하며, 주소를 통해 서도 접근할 수 있도록 합니다.

그래서 문법에 맞추어서 작성한 프로그램은 어떻게 실행되는 것일까. 누가 이 글을 읽고 실행하는 것일까?

#3 프로그램은 어떻게 실행되지? 누가 읽는거지?

우리는 기계(컴퓨터)에게 우리가 작성한 프로그램(일감) 을 수행하도록 하고싶은데, 어떻게 기계는 이것을 수행하는 걸까? 우리가 기계(컴퓨터)의 전원을 켜게 되면, 운영체제 라는 것이 가장 먼저 기계(컴퓨터) 를 가장 먼저 장악하여 사용자(사람) 이 기계를 사용할 수 있도록 한다. ( 운영체제는 기계(컴퓨터, 컴퓨터에 장착된 다른 장치 또한(CPU,그래픽카드,모니터,스피커 등..)) 를 가장 먼저 장악하여, 사용자(사람) 이 기계를 사용하는것을 돕는, 가장 핵심적인 프로그램이자, 수많은 프로그램의 한 종류이다.) 사용자(사람)는 운영체제에게 마우스와 키보드를 통해서 우리가 무엇을 하고 싶은지 의지를 전달 (입력) 하고 운영체제는 기계(컴퓨터)의 화면이나 소리를 통해서, 사용자의 의지를 수행한 결과를 표현한다. (출력) 프로그램 이란 OS(운영체제, Operating System) 와의 대화다. 우리가 작성한 프로그램 코드의 내용은 크게 2종류로 나뉘는데, 단순 연산과, 장치(컴퓨터에 붙어있는)에 대한 입출력 요청이다. 사실 장치에 입출력 요청을 하는것도 OS 에게 요청해달라고 전달하는 것이고, 연산 또한 OS 에게, "CPU 한테 이것(1+1 등) 을 계산해달라" 는 요청을 전달하는 것이다. 즉 프로그램은 OS 에게 요청할 명령어들의 나열이며, OS 와의 대화인 것이다. 좋은 프로그래밍은 운영체제에게 잘 맡기는 것이다.

그러면...우리는 프로그래밍으로 무엇을 할 수 있을까?

#4 프로그래밍으로 뭘 하려는 걸까. 의미에 대해서

프로그래밍 한다는것은, 이론이나 개념, 추상을 구현하는것이다 어떤 이론이나 개념을 구현하기 위한 함수들을 모아놓은 것이 API 이다. 나아가 API 들을 모아 하나의 개발 키트로 제작한것이 SDK 이다. 예를들어 윈도우OS 에 대한 개념이나 이론을 설계하고, 이것을 구현한 것이 즉 윈도우 프로그래밍(win32 Programing) 이다. 다른 장치와 통신하기 위한 네트워크 개념과 이론을 설계하고, 이것을 구현한것이 네트워크 프로그래밍 (Socket Programing) 이다, 어떤 게임에 대한 이론과 설계를 하고, 이것을 구현하는것이 게임 프로그래밍 이다. 그래서 프로그래밍을 하기 전에는 무엇을 어떻게 구현할 것인지 기획이 먼저 앞서야 한다. 그림을 그리기 위해서는 무엇을 그릴지 정하고 그려야 하는 것처럼 아무생각없이 마음가는대로 (꼴리는대로) 그리는 사람의 그림은, 그냥 그 사람의 붓질, 손놀림, 기술 그 이상의 의미를 넘지 못한다. 그림또한 어떠한 상상이나, 의도, 개념 을 그 사람의 기술로 구현할때, 의미를 가지는 그림이 되는 것이다. 이것이 코더(기능의 나열) 와 프로그래머의 차이 이지 않을까. 반대로, 다른 사람의 프로그램을 이해하기 위해서는 대상이 되는 주제에 대한 이론을 이해할 필요가 있다. 그래야 왜 이렇게 구현하였는지 알 수 있을것이다. 프로그래밍은 이론과 상상의 구현이다. 반대로 말하자면, 구현에 앞서, 이론과 상상이 충분히 학습, 구체화가 선행되어야 한다. 확장 하자면, 상상이 클수록, 알고있는 지식이 많을 수록, 이론이 방대할 수록 안정되고 논리적인 프로그래밍이 가능하며, 프로그램의 규모도 커진다. 가볍게 말하면 누구나 프로그램의 토대가 되는 이론을 상상하거나 이야기 할 수 있으며, 프로그래밍에 기여할 수 있다. 단, 이론은 구체적인 논리, 근거 가 뒷받침 되어야 한다. 어떤 이론도 프로그래밍의 소재나 아이디어 구조화가 될 수 있으며, 과학적, 사회적 현상을 관찰하면서도 프로그림 구조를 설계하는데, 모델을 설계하는데 기여될 수 있다. 소스가 될 수 있다. Bio 에 관심이 많은 개발자는 Bio 의 어떠한 시스템등을 구조로 쓸 수 있을것이다. 예를들어 Unreal Engine 은 건축학에 영향을 많이 받았다.

프로그래밍은 이론과 상상의 구현, 구체화다. 프로그래밍 문법에 따라, 컴퓨터 메모리(메모장)에 값을 쓰고,읽고, 계산해 가면서, 추상적인 이론이나 개념을 구체화 할 수 있다. 프로그래밍을 한다는것은, 상상을 현실로 구현하는 것이다.

Application

응용 어떤기능을 부품으로 응용해서 만든 완제품. 부품을 응용한 것 머신러닝, DirectX 등등의 부품을 응용한것

Program

시간, 순서 시간의 흐름에 따라 순차적으로 수행하는 것

수백만개의 작은 작업을 순서대로 해야 합니다.