프론트엔드와 백엔드 (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 안타깝게 실패하고 실의 속에 세상을 떳다. 지금 잡스나 게이츠의 무리들을 본다면 아마 저승에서 특허나 낼 걸 생각할지도 모르겠지만:) 그랬다면 아마 잡스나 게이츠의 무리들은 커녕 업계 자체가 남아있으려나..
프론트엔드와 백엔드에 대한 이야기를 하려다-진짜 했었다-이야기가 좀 샌 감이 있지만, 프로그램에 대한 이야기를 했다. 다음 기회가 있다면 프론트엔드와 백엔드에 대한 이야기를 하게 될 것이다.
이 글에 관한 여러분의 의견을 남겨 주세요
프로그래머 애인은 저녁으로 달걀 오므라이스를 밥상에 올리려고 했는데, 사과 오므라이스가 올라오겠네요 ^^. 아무튼 재미있네요. 컴맹인 저에겐 <시장에 가라>는 명령부터 머리가 아프네요. 어떻게 로봇이 알아먹게 프로그래밍하지? 예를 들어 로봇에 서울에 있는 시장의 GPS 포지션을 입력해서 “시장”을 알아보게 하고, 서울에 10개 시장이 흩어져 있다고 하면 일이 어떻게 될까 궁금하네요. 1-9번째 시장에 사과가 없을 경우 로봇은 충실하게 열번째 시장까지 가서 사과를 사겠죠. 서울의 교통을 감안하면 아마 하루종일 돌아다닐 것이고. 이때 로봇은 <시장에 가라>란 말이 무슨 말인지 이해했지만 제대로 이해했다고 할 수는 없을 것 같네요. 말이란 게 공간과 시간의 제약을 받는 삶에서 적당하게 행동해야 제대로 이해한 것이라고 한다면 로봇이 <시장에 가라>는 말을 이해하는 것은 아무런 직관이 없는 r2=(x-a)2+(y-b)2라는 방정식 공식으로 원을 다 이해했다고 하는 것 같네요. <시장에 가라>는 말은 사실 실생활에서 대충의 방향을 잡아주는 것일 뿐인데 이걸 명확한 명령이라고 생각하면 저녁밥 굶을 수도 있겠고. <시장에 가라>란 말을 적합하게 이해하려면 반복과 반복으로 엮어지는 삶의 경험으로 – 이런 경험이 어떻게 프로그래밍 되지? - 보충되어야 하지 않을까 하구요. 그래야 사과가 없으면 저녁밥 하지 전에 배를 사올 수도 있고… 후식이 중요하니까… X
충분히 훌륭한 로봇이라면 아마 배달시키겠죠:) X
ㅎㅎ "고놈 재치있네"하면 좋겠는데 "야 임마, 우리가 니를 왜 만들었는데? 택배비 등 잡비를 줄이려고 만들었는데 뭐 배달시켰다고?! 썩 껴져!"하면 그 충분히 훌륭한 로봇은 어떻게 행동할까? 자기 존재이유에 회의를 느낀 나머지 집을 나가고 서울을 정처없이(!) 헤매다가 한강교에서 한강을 내려다보다가 "존나, x할"하고 한강에 몸을(!! 몸을!!) 던져 퐁당 빠져 죽어 버릴까? 이쯤 되면 더이상 AI 운운할 필요가 없겠지만... X
근데 프론트엔드는 뭐고 백엔드는 뭔지 정말 궁금하네요. X
달걀 육십 개 사 와 그리고 퍼먹어 그리구 음, 음... 음...... 삶을 프로그래밍햄 X
먹기 전에 삶아야지:P X
수학과 과학에 관심이 많고 '딱히 할 일이 없었던' 그녀의 삶이 부러울 따름이네요 ㅎㅎㅎ X
NEET라고들 하죠. 역시 창조는 잉여에서 나오는 법인 듯요:) X