파일:Ada Lovelace 1838.jpg

 

프론트엔드와 백엔드 (1)

 

- 에이다 러브레이스 혹은 이 양반이 특허만 냈어도 지금쯤 블로깅은 주판으로 하고 있겠지

 

새삼스러운 이야기지만 컴퓨터는 많은 일은 한다. 물론 결정적인 일들1 해주지 않지만 그래도 시키는 일은 데꺽데꺽 잘하는 편이다. 예민한 감성을 가지고 있거나 컴퓨터와 장시간 대화를 나눠본 사람이라면 쉽게 알 수 있겠지만 컴퓨터는 사실 사람의 말을 이해하지 못한다. 컴퓨터의 내면은 상당히 하드보일드한 편인데 그 속에는 수많은 집적 회로들 사이로 깜박거리는 전기 신호만이 있을 뿐이다. 전기가 흐르지 않는 상태와 흐르는 상태, 이른바 0과 1의 세계-바로 디지털-가 그것이다. 이 0과 1의 삭막한 세계와 꽃이 피고 눈이 내리는 현실의 세계를 이어주는 것이 프로그래밍 언어이다.

 

프로그래밍 언어의 알파와 오메가를 정립한 사람은 에이다 러브레이스 백작 부인으로 알려져 있다. 에이다는 찰스 베비지란 사람과 친했는데 그 양반은 오늘날 컴퓨터의 조상이라고 할 수 있는 해석 기관이란 걸 구상하고 있었다. 확실히 천재적인 발상이긴한데 아쉬운 점은 당시 기술로 이 해석 기관을 구현하는 것은 불가능했다는 것이고 그래서 이 해석 기관이란 걸 이해할 수 있는 혹은 관심이 있는 사람 역시 거의 없었다는 것. 하지만 수학과 과학에 관심이 많고 딱히 할 일이 없었던 에이다는 이 해석기관에 관심을 가지고 베비지의 연구를 이해하고 더 나아가 이 해석기관과 인간을 이어주는 언어 체계의 기초를 잡기에 이른다.

 

그 내용인즉 소위 프로그래밍의 알파와 오메가인 분기문,  반복문, 서브루틴 등의 개념을 정립한 것인데, 이를 간단히 설명하기 위해 또 컴퓨터가 사람의 명령을 이해하기 위해 어떠한 과정을 겪게 되는지 다음과 같은 예제를 보도록 하자.

 

 

1. 프로그래머의 애인이 프로그래머에게 명령을 내린다.

 

“시장에 가서 사과 1개를 사고 달걀 있으면 6개 사와.”

 

2. 프로그래머가 명령을 프로그래밍 언어로 재구성한다.

 

(시장에 간다)

 

(사과를 1개 고른다)

 

[가게에 달걀이 있는가?]

 

         > 있을 경우

 

         *(사과를 1개 더 고른다)

 

          [사과가 모두 6개 인가?]

 

                         > 그렇다

 

                         계산을 하고 집에 간다

 

                         > 아니다

 

                         *로 돌아간다

 

           > 없을 경우

 

           계산을 하고 집에 간다

 

// 여기에서 달걀이 있는가 이 부분이 분기문이며, 특정 조건을 충족하느냐의 여부로 다음 행동을 결정하게 된다. 그리고 달걀이 있을 경우 사과를 5개 더 사는 과정이 반복되는데 이것이 바로 반복문이다.  

 

3. 코딩을 한다.

 

go(market);

get(apple, 1);

if(egg!=null){

         while(ihave(apple)<6){

                     get(apple, 1);

          }

}

buy();

 

// 대충 이런 느낌이라고 표현하기 위한 코드이다. 위 아래와 비교해보면 이 중간적인 언어의 존재 이유를 알 수 있다. 사람이 보기에도 대충 어떤 뜻인지 알거 같으면서도 컴퓨터가 알아듣기 쉽게도 간결하고 명확하달까. 여담이지만 가게가 없거나, 가게에 사과가 없거나, 돈이 없거나 하는 경우에는 어떻게 될까? 사람이라면 변명하거나 다른 가게에 가거나 훔치거나 하겠지만 컴퓨터는 소위 말하는 에러 메시지를 띄우며 프로그램은 뻗게 된다. (...)

 

4. 프로그램 코드가 기계어로 변환된다.

 

001001 11101 11101 1111111111111000
001000 00001 00000 0000000000001010
001000 00001 00001 0000000000000010
101011 11101 00001 0000000000000000
001000 00010 00001 0000000000000100
101011 11101 00010 0000000000000100
001001 11101 11101 0000000000001000

...

 

// 역시 대충 이런 느낌이라고 표현하기 위한 야메 기계어. 이 명령은 컴퓨터가 알아들을 수 있고 컴퓨터는 상점에서 사과를 몇개 사올 것이다.  그리고 프로그램은 정상적으로 종료된다. 물론 애인이 원하는 것은 사과 6개가 아니라 사과 1개와 달걀 6개일지도 모른다는 느낌이 들지만 뭐 역시 대충 이런 느낌의 사례는 현실에도 많으니까.

 

 

여튼 에이다 선생은 위의 개념2들만 있다면 이 해석기관과 그 자손들이 모든 계산을 할 수 있을 뿐 아니라 그림을 그리거나 작곡을 하는 것 역시 가능할 수 있을 것이라고 예견했다. 그리고 그것은 현실이 되었다. 그리고 인간의 언어와 점차로 더 닮은 프로그래밍 언어들은 수많은 개발자들이 더 수많은 사람들의 욕망을 충족시켜주는 프로그램을 만들도록 인도하고 있다. 여담이지만 에이다 자신도 경마 확률3을 계산하는 프로그램을 만들어 인류에 공헌도 하고 살림도 좀 펼려고 하였으나4 안타깝게 실패하고 실의 속에 세상을 떳다. 지금 잡스나 게이츠의 무리들을 본다면 아마 저승에서 특허나 낼 걸 생각할지도 모르겠지만:) 그랬다면 아마 잡스나 게이츠의 무리들은 커녕 업계 자체가 남아있으려나..

 

프론트엔드와 백엔드에 대한 이야기를 하려다-진짜 했었다-이야기가 좀 샌 감이 있지만, 프로그램에 대한 이야기를 했다. 다음 기회가 있다면 프론트엔드와 백엔드에 대한 이야기를 하게 될 것이다.

 

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
  1. 가령 돈을 벌어 온다거나텍스트로 돌아가기
  2. 분기나 반복텍스트로 돌아가기
  3. 지금도 어디선가 많은 컴퓨터들은 로또 등의 통계/예측을 위해 오늘도 돌아가고 있다. 읭읭.텍스트로 돌아가기
  4. 도박 중독 덕에 말년에 궁핍했다고도텍스트로 돌아가기
2010/11/30 16:50 2010/11/30 16:50
Tag //

아무거나 깔아쓰기

from 리눅스 2010/11/29 16:37

  가끔 설정을 하기 위해서 컴퓨터를 하는 사람도 있지만1 대부분의 경우업무건 취미건 어떠한 작업을 수행하기 위해 컴퓨터를 사용한다. 거의 대부분의 이 작업들은 어플, 즉 응용 프로그램을 통해서 이루어진다. 가령 가계부를 작성하기 위해 우리는 스프레드쉬트(가령 엑셀)을 사용하고, 일기를 작성하기 위해 워드 프로세서를 쓰고, 특별한 용무는 없지만 와우에 접속하고, 또 인터넷에 접속하기 위해 브라우저를 열고, 사진을 편집하기 위해 ...

 

  결국 일반적인 pc사용자에 있어 자기의 필요에 적합한 프로그램을 찾는 것이 컴퓨팅의 알파요, 사용하는 것이 오메가가 될 것이다. 리눅스에서의 프로그램 설치는 웹 등에서 설치 파일을 구해서 다운 받는 경우도 있지만 많은 경우 소프트웨어 관리 툴2을 통해서 이루어진다. 설치 파일(dev이나 rpm)을 통해서건 툴을 통해서건 설치된 프로그램들은 툴을 통해 삭제하거나 할 수 있고 통합적으로 시시때때로 업데이트 관리도 해준다.

 

  다음은 웹서핑을 하다가 우연히 마음에 드는 색깔을 발견하고 html색상 코드를 추출하기 위해 프로그램을 설치/사용하는 예제이다.

 

 

  사실 많은 경우 리눅스는 쉽지 않다. 적어도 윈도우만큼은 어렵고 그보다 더 낯설다. 하지만 프로그램을 찾고 설치하는 것만큼은 직관적이며 단순하다. 또한 자유/오픈소스 소프트웨어가 보통 그러하듯이 많은 프로그램은 무료3이다. 대개 검색하고 설치하고 삭제하고 다시 검색하는 시도들을 통해 사용자는 점차로 컴퓨터를 사용하는 것에 익숙하게 된다. 그런 의미에서 리눅스는 쉽지 않지만 그닥 어렵지도 않다.

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
  1. 의외로 설정 매니아들은 우리 주위에 쉽게 찾아볼 수 있다.텍스트로 돌아가기
  2. 우분투의 소프트웨어 센터나 시냅틱, 수세의 yast와 같은.텍스트로 돌아가기
  3. 즉 결재나 크랙에서 자유로울 수 있다는 것.텍스트로 돌아가기
2010/11/29 16:37 2010/11/29 16:37
Tag //