본문 바로가기
프로그래밍/그래픽스

프로그래밍(Programming)이란?

by moo-ti 2023. 8. 19.
반응형

 

프로그래밍이란 전 목적을 달성하기 위해 설계된 알고리즘(algorithm)을 프로그래밍 언어를 사용하여 구체적인 프로그램으로 작성하는 과정을 가리킨다. 여기서 프로그램은 대체로 컴퓨터에서 동작하는 프로그램을 말한다. 간단히 프로그래밍이란 프로그램을 만드는 모든 작업이라고 볼 수 있는 것이다. 프로그래밍하는 도구를 "개발자도구" 또는 "개발환경"이라고 부르고 프로그래밍 언어는 프로그래밍하는 방식 또는 절차를 말하며 프로그래밍을 하는 사람이 프로그래머다. 개발자라고 해도 되지만 이건 범위가 너무 넓기 때문에 프로그래머라고 칭한다. 고차원 언어들의 강세에도 불구하고, 어셈블리어 프로그래밍은 특정 분야에서 계속 쓰이고 있는데, 보통은 성능상의 이유나 명령어 수준에서 본인이 의도한 정확한 동작이 필요할 때 부분적으로 쓴다. 어셈블리어(assembly language), 또는 어셈블러 언어(assembler language)란 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다. 기계어(machine language)란 컴퓨터가 별도의 해석 과정을 거치지 않고 직접 읽을 수 있는 프로그래밍 언어를 말한다. 물론 이런 짓을 하면 해당 언어와 어셈블리어의 간극을 채우기 위한 추가 노력이 들어가야 한다. 가령, C 컴파일러는 컴파일 과정에서 나름 변수와 메모리 주소의 사용정보를 트래킹하고 있는데, 중간에 어셈블리어가 끼어서 멋대로 이를 바꿔놓으면 컴파일 과정의 정보가 훼손된다. 따라서 인라인 어셈블리를 쓸 때는, 해당 어셈블리 선언이 건드리는 데이터들을 정확히 명시해서 컴파일러 정보가 훼손되지 않도록 막아야 하고, 이를 실수 없이 해내는 건 오로지 프로그래머의 몫이다. 
결국 안 해본 사람은 의외겠지만 생으로 어셈블리 프로그래밍을 하는 것보다 C언어에 일부 어셈블리 명령을 끼워 넣는 게 훨씬 복잡하다. 그래서 보통은 가능하면 언어 수준에서 원하는 명령어가 나오도록 컴파일러의 작동을 잘 생각하면서 코드를 짜는 게 더 낫다. 하지만 어느 경우든 컴파일러 작동을 예측하는 지식이 필요한 건 변함이 없다. 그나마 이런 예측이 제일 쉬운 게 C언어이고, 그래서 C언어가 여전히 OS나 드라이버처럼 하드웨어와 밀접한 프로그램 작성에는 탁월한 선택이다. 대부분의 프로그래밍은 컴퓨터의 사실상의 표준 문자 체계인 아스키코드를 그 기반에 둔다. 아스키코드란 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( /ˈæski/, 아스키)는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다. 가나나 한글, 한자 등으로 프로그래밍할 수 있는 도구는 스크래치처럼 교육용으로 많이 쓰인다. 스크래치란 MIT 미디어 연구실에서 8세~16세의 아이들을 대상으로 만든 교육용, 블록형 프로그래밍 언어이다. 이 사이트에서 활동하는 사람들인 '스크래쳐'(영어: Scratcher)들은 블록을 조립하는 방식으로 프로젝트를 만든다. 이 말은, 데이터를 뜻하는 게 아닌 코드를 뜻한다. 코드와 데이터는 서로 개념이 다르니 주의해야 한다.
프로그래밍 언어(Programming language)란 컴퓨터에 명령이나 연산시킬 목적으로 설계되어 기계와 의사소통을 할 수 있게 해주는 언어를 뜻한다. 그 결과, 사람이 원하는 작업을 컴퓨터가 수행할 수 있도록 프로그래밍 언어로 일련의 과정을 작성하여 일을 시킨다. 쉽게 말하면 컴퓨터를 이용하기 위한 언어이다. 소프트웨어를 만드는데 기본이 되고, 이 소프트웨어는 논리 연산의 집합이기 때문에 수리 언어의 일종으로 보는 시각도 있다.
컴퓨터보다 먼저 등장하였으며 본격적인 연구는 1930년대 즈음부터 수학자들에 의해 기계적으로 계산 가능한 함수에 대한 연구가 진행된 데에서 비롯되었다. 그 결과 기계가 이해할 수 있는 언어가 탄생했으며, 바로 이 기계가 계산 가능하고 이해할 수 있는 언어를 실행하는 기계로 언어보다 나중에 발명된 것이 바로 현대적 의미의 컴퓨터이다.
이 언어들은 사람이 이해하기 쉽게 만든 언어로 실행 전 컴파일러를 통해 기계어로 컴파일된 후 실행된다. 컴파일러(Compiler)란 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. 프로그래밍 언어의 표기는 구문론(syntax)과 의미론(semantics)의 두 가지 파트로 이루어진다. 구문이란 언어의 외형적인 표기 방법을 일컬으며, 의미론은 구문이 내포하고 있는 의미, 즉 그 코드가 수행하는 작업을 뜻한다. 구문이 문법에 비유된다면 의미론은 글에 담긴 정보라고 볼 수 있다. 더욱 작은 단위로는 문자열(string), 문장(sentence), 어휘 항목(lexeme) 등이 있으며 어휘 항목의 종류를 통틀어 토큰(token)이라 한다. 어휘 항목에 속한 요소에는 식별자(identifier), 리터럴(literal), 연산자(operator), 예약어(reserved keyword) 등이 있다.

반응형