본문 바로가기

독후감

알고리즘은 이상 프로그래밍은 현실 & 다른 프로그램을 처리하기 위한 프로그램

 저번에 다뤘던 챕터에서 알고리즘은 우리의 일상생활을 편하게 해주는 데 도움이 된다고 했다. 하지만 이번에는 알고리즘을 컴퓨터는 어떻게 이해하고 사용할 지 생각을 해봤다. 알고리즘은 추상적이고 이상적인 절차로 만들어진다. 그런데 우리에 일상에 적용하기 위해선 구체적이고 감성적인 부분도 감안해야한다. 하나의 예로 들면 라면을 끓일 때 '물을 넣고 3분을 끓이고 라면을 넣는다' 라는 과정이 있을 때 만약 '라면을 끓일려고 할 때 가스 불이 안들어온다면' 이라는 예외를 알고리즘을 처리할 수 없다. 그렇기 떄문에 알고리즘만으로는 우리 현실을 대체할 수 없다. 그래서 그 부분을 보안하고자 알고리즘을 응용한 프로그래밍이 나왔고, 그 곳에서는 상황에 따른 예외처리를 해줄 수 있다. 그래서 우리 일상과 비슷한 결과물을 도출해줄 수 있다고 생각한다.

 '컴퓨터는 다른 프로그램을 어떻게 처리할까?' 라는 의문점도 가진적이 있다. 책에 내용에서는 어셈블러라는 기계언어를 해석해 주는 언어로 컴퓨터끼리의 대화가 가능하다고 나온다. 어셈블러가 정확히 설명하면 다음과 같다.

 

어셈블러(assembler)는 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 언어 번역 프로그램을 말한다. 어셈블러는 기본 컴퓨터 명령어들을, 컴퓨터 프로세서가 기본 연산을 수행하는데 사용할 수 있는 비트 패턴으로 변환시키는 프로그램이다. 몇몇 사람들은 이러한 명령어들을 어셈블러 언어라고 부르며, 어셈블리 언어라고 부르는 사람들도 있다. 니모닉 기호(mnemonics)를 opcode로 변환하고 메모리 위치와 기타 존재물에 따라 식별자를 다시 분석함으로써 목적 코드를 만들어낸다.[2] 거꾸로 기계어를 어셈블리어로 바꾸는 것은 “역(逆)어셈블러”(disassembler)이다. 고급 언어와는 달리 어셈블리어는 간단한 문장에 대해 기계어와 일대일 대응 관계가 있지만, 자주 쓰이는 몇 명령은 둘 이상의 기계어 명령을 묶어 하나의 어셈블리 명령어에 대응시키기도 한다.

이것은 어셈블리 명령 부호를 오피코드로 해석할 뿐만 아니라 메모리의 위치들을 이름으로 표시하는 기능, 매크로를 통한 문장 치환 기능 등을 함께 제공한다. 높은 수준의 어셈블러는 고급 제어 구조, 높은 수준의 프로시져/함수 선언 및 호출, 높은 수준의 자료형 추상화 같은 높은 수준의 언어 추상화 기능을 제공하기도 한다.

 

사실 이번 챕터는 읽으면서도 정확히 이해가 되진 못했다. 앞으로 코딩을 하면서 프로그램이 어떻게 동작하는지 파악하다보면 이부분도 자연스럽게 이해가 되지 않을까 생각해본다.