티스토리 뷰

025. 알고리즘은 이상, 프로그래밍은 현실

알고리즘과 프로그램은 청사진과 실제 건물만큼 차이가 난다. 앞선 챕터에서 알고리즘을 다루었지만 실제로 이를 수행하기 위해서는 거쳐야할 난관이 많다.

프로그래밍 중 직면하는 문제들
* 불충분한 메모리
* 제한된 프로세서 속도
* 잘못 입력된 데이터(해킹 포함)
* 하드웨어 결함
* 네트워크 불량
* 휴먼 에러
...

 

프로그래밍을 위해 필요한 것

우리의 목적은 컴퓨터가 일을 대신 처리하게 하는 것이고, 이를 위해 프로그래밍을 한다.

인적 자원은 한정되어 있으므로, 우리는 최대한 컴퓨터가 프로그래밍 세부사항을 더 많이 처리하게 만들어야 한다.

이 말은 사람은 보다 덜 컴퓨터스럽게 명령을 내리고 메모리 관리 같은 컴퓨터스러운 일은 컴퓨터가 알아서 하라는 말처럼 들린다.

컴퓨터가 일을 처리하게 만들게 명령을 내리는 것이 프로그래밍 언어이며, 실제로 자연계에 가깝게 발전해온 역사가 있다.

또한 하드웨어에 가까운 일은 컴퓨터가 직접 자신의 동작을 제어하게끔 발전해왔으며, 그 역할은 OS가 한다.

 

이 책의 소프트웨어 파트는 프로그래밍&프로그래밍 언어 - 소프트웨어 시스템(OS) - 자바스크립트&파이썬 순으로 진행될 예정이다.

 

 

025. 다른 프로그램을 처리하기 위한 프로그램

 

최초의 프로그래밍 과정

1) 명령어, 데이터를 이진수로 변환한다(사람이)

2) 카드에 구멍을 뚫는다(기계 판독을 위함)

3) 컴퓨터 메모리에 적재

 

"다른 프로그램을 처리하기 위한 프로그램", 어셈블러의 등장: 어셈블리 언어 프로그래밍

어셈블러의 등장은 상기 과정에서 발생되는 반복적인 작업을 줄여주었다. ADD, SUM 같이 값 대신 이름을 붙이게 되어, 적어도 특정 로직, 메모리 위치는 어셈블러에게 맡길 수 있게 되었다.

어셈블리 언어의 가장 큰 단점(?)은 사용되는 프로세서 종속적이라는 것이다. 예를 들어 맥의 프로그램을 인텔 프로세서의 환경에서 쓰려면 프로그램을 새로 짜야 한다.

 


 

컴파일러의 등장

어셈블러의 역할은 마치 컴파일러처럼 보이는데, 컴파일러는 어셈블러보다 더 많은 역할을 한다.

어셈블러 컴파일러
- 어셈블리어로 작성된 원시프로그램을 기계어로 된 목적 프로그램으로 어셈블하는 언어 번역 프로그램
- 하나의 어셈블리어 명령어는 하나의 기계 코드에 대응함
- 고급 언어로 작성된 프로그램을 번역해서 기계어로 된 프로그램을 만들어줌
- 고급 언어의 한 문장은 여러 개의 기계 코드 명령어로 변경됨
- 짜여진 코드 전체를 한 번에 번역함
- 구문 오류를 검사해줌. 그런데 번역 다 하고 알려줌. 어디서 뻑났는지 알 수 어려울 수 있음

* 기계어는 CPU의 종류에 따라 고유한 명령어로 구성되어 있다.

* 모든 프로그램은 기계어로 번역되어야 실행 가능하다(소스 프로그램을 기계어로 번역한다는 것은 오브젝트 코드라 불리는 실행 가능한 프로그램으로 저장된다는 것).

 

이러한 컴파일러는 1954년 포트란과 함께 등장했다. 이때의 컴파일러는 상기 특징까지 갖추진 않았지만, 최대한의 속도를 내고 최소한의 메모리 요건을 갖도록 프로그램을 최적화해주기까지 했다.

이후 코볼까지 나오며 발전이 이어졌지만, 1960년대 중반 프로젝트 실패 사례가 증가함에 따라 새로운 언어가 등장했다.

 

파스칼, C의 등장

* 파스칼: 컴파일러가 진화했고, 구조적 프로그래밍(비슷한 프로시저끼리 소스파일로 묶어 모듈로 활용) 배우기 용이

* C: 쉬웠...다고 한다. 상용 어플리케이션 영역에 도입됨

어쨌든 전반적으로 구문이 간단해졌고, 컴파일러는 정교해졌다.

 

OOP의 등장 - 보다 자연계에 가깝게

* C++, C# 등등과 자바(자바는 포인터가 없고 자동으로 메모리를 관리해준다. 자바의 컴파일러는 바이트코드를 생성하여 모든 운영체제에서 동일하게 실행 가능하다)

 

인터프리터

* 비쥬얼 베이직, 스크립트 언어가 대표적

* 한줄 by 한줄: 해석과 동시에 실행한다. -> 실행 시간이 비교적 느림 / 수정 및 디버깅이 쉬움

 

참고) https://www.itworld.co.kr/insight/213089

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함