지난 글에선 Alan Turing 에 대해서 다뤘는데 이번단원에서도 Alan 과 연결지어서 써보려고 합니다~ Alan Turing이 고안했던 Turing Machine 은 당시에는 완성되지 못했었지만, 현재는 뛰어난 기술력으로 Turing Machine의 완성품들을 만들어냈습니다.
분명 단원 제목은 2진수와 숫자 시스템인데 왜 Turing Machine얘기나 하고 있냐하면 Turing Machine의 입력체계가 2진수로 구성되어 있기 때문입니다. Turing Machine은 1과 0 두가지를 입력받고 출력할 수 있었습니다. 최초의 컴퓨터(물론 가상의)라 불리는 Turing Machine이 현대 컴퓨터의 기반을 미리 정해놨다고 할 수 있다고 봅니다. (물론 앨런 이전에 독일에서 디지털 컴퓨터를 발명했다는 이야기도 들려오지만 역시 증거따윈 없어요.) 하지만 Turing Machine 다음에 나온 컴퓨터인 애니악은 10진법을 사용했습니다. 사람처럼 10진법을 사용하는 컴퓨터인 애니악은 처리속도가 다른 컴퓨터들에 비해서 빨랐습니다. 물론 그래봤자 지금 속도에 비하면 빛과 사람의 속도차이정도 겠지만, 당시에는 굉장히 빠른편에 속했다고 합니다. (애니악 이후의 몇몇 컴퓨터들에 비해서) 애니악을 본 영국의 한 발명가가 애니박이라는 새로운 컴퓨터를 발명했는데 이 컴퓨터가 실존했던 최초의 2진법 컴퓨터라고 합니다. 10진법 컴퓨터인 애니악에 비해서 속도가 느렸지만 10진법보다 간단한 2진법 구조때문에 이후의 컴퓨터들은 모두 애니박의 형태를 따랐다고 하네요.
[[[여기서 중요한 사실!은 애니악을 보고 와 애니박을 발명한 영국의 발명가가 바로 폰 노이만 입니다. (이전 글에 썼던대로 폰 노이만은 Alan Turing의 Turing Machine 구상도를 보고 흥미를 갖게된 뒤 Alan에게 공동제작을 제의했지만 거절당했었죠. Alan 은 Turing Machine을 2진법으로 구상해두었는데, 폰 노이만이 애니박을 만들 때 2진법을 쓴 건 Alan의 구상도를 보고 영향을 받은거라는 생각이 드네요.) 폰 노이만은 Alan의 2진법만을 베낀? 빌린? 어떻게 표현해야될지 모르지만, 어쨋든 2진법만을 배운건 아닙니다. Alan은 자신의 구상도에서 테이프와 액션테이블을 통해서(테이프는 데이터가 저장되는 부분을 말합니다.-혹은 데이터 그 자체. 액션테이블은 테이프를 읽어내고 출력해내는 부분입니다.) Turing Machine의 작동을 고안했습니다. 폰 노이만은 애니박을 발명할 때 테이프와 액션테이블을 데이터와 프로그램이라는 것으로 컴퓨터 내부에 넣어버렸습니다.(프로그램을 컴퓨터 내부에 넣어버리는 것은 폰노이만의 아이디어는 맞지만 에드삭이라는 컴퓨터에서 최초로 시행되었습니다. 또한, 2진법을 컴퓨터에 사용 하는 것도 독일에서 최초로 시행되었다고 합니다. 결국 폰노이만은 다른 사람들의 성공된 결과물들만을 모아서 완성품을 만들었던 것 같네요.) Turing Machine과의 큰 차이 점은 그것 뿐입니다. 글을 쓸수록 폰 노이만이 Alan의 아이디어를 훔쳤다는 생각만 드네요...]]]
아무튼 본론으로 돌아와서 애니박은 최초의 2진법 컴퓨터였습니다. 2진법을 사용한 컴퓨터가 왜 단순한 구조로 구성될 수 있었는지 알아보겠습니다. 일단 컴퓨터는 전기를 이용한 기계입니다. 전기같은 경우 약하게 들어온다 혹은 강하게 들어온다 이런것을 조절하기가 힘듭니다. 일방적으로 들어오기 때문이죠. 컴퓨터 쓰는 사람이 지금은 전기를 조금 넣어서 3이라는 숫자를 입력해야하니 조금만 넣어라 라고 발전소에 전화할 수는 없는 거죠. 따라서 현대의 컴퓨터들은 대부분 전기가 들어온다. 안들어온다 이 두가지로 결정합니다.( 이위의 발전소 예는 좀 과장을 하긴했지만, 컴퓨터 자체에서 전기의 양을 조절하기는 힘들다는 의미였습니다. 컴퓨터 내부에서 전기를 스위치처럼 끊었다 주었다 할수는 있지만요.) 즉 전기가 들어오면 1, 전기가 안들어오면 0 이런 식으로 입력을 받는 것입니다. 전기를 들이거나 막는 이런 것은 컴퓨터 내부에서 해 낼 수 있습니다. 따라서 2진법으로 컴퓨터를 만들면 손쉽게 입력을 할 수 있는 것이죠. 반면에 10진법이나 다른 진법 수를 이용하게 되면, 0, 1이외의 숫자를 입력할 방법을 찾아야합니다. 그런데 이런 방법을 찾기가 힘들죠. 애니악의 경우에는 단순히 큰 계산기 이므로 10개의 버튼이 있는 10진 키보드(처음 들어봐요..)를 이용했기 때문에 10진법이 가능했다고 하네요.
이 글은 컴퓨터의 역사와 2진법의 관계를 다루기 위한 글이라서 다른 진법의 자세한 내용이나 2진법의 보수 같은 것들은 다루지 않도록 하겠습니다. 자꾸 여러가지 내용을 넣으려다보니 주제에서 멀어지는 것 같아서요.
다시 본론으로 가서 미래의 컴퓨터의 진법에 대해 생각해보겠습니다. 1930년대 중반까지는 10진법, 그 이후부터 현재까지는 2진법이 컴퓨터가 사용해오던 방식이었습니다. 그렇다면 앞으로도 계속 2진법의 수만이 컴퓨터에 사용될까요??? 요즈음의 과학자들은 양자컴퓨터의 발전에 큰 관심을 가지고있습니다. 최근의 연구 결과에 의하면 양자 컴퓨터를 이용하면 3진법혹은 4진법을 이용하여 현재 컴퓨터의 속도는 비교도 안될만큼의 빠른 처리능력을 가지게 된다고 합니다. 현재의 컴퓨터로 수백년이 걸리는 것을 양자 컴퓨터를 이용하면 불과 4분만에 끝낼 수 있다고 하네요. 양자 컴퓨터가 그렇게 빠른 속도를 가질 수 있는 이유는 2진법을 넘어 설 수 있기 때문이라고 합니다. 아직 지식이 많지 않아 이해할 수는 없지만 양자 컴퓨터는 현재의 컴퓨터와는 반대방식인 병렬방식이라고 합니다.(확실히 이해는 되지 않아요..) 병렬 방식을 이용한 컴퓨터는 일정 시간동안의 데이터 처리 능력이 덧셈이 아닌 곱셈이라고 하네요. 예를 들어 일반 컴퓨터에서 1초에 16 bit씩 처리할 수 있는 회로가 2개 있을때 1초에 32bit를 처리할 수 있지만, 양자 컴퓨터에선 16*16 즉 256bit씩 처리할 수 있다고 합니다. 결국 양자컴퓨터에 큐비트(양자 컴퓨터에서 쓰이는 데이터 방식을 큐비트 라고 한다네요.)가 2개에서 3개 4개 늘어날수록 기하 급수적으로 늘어나게 되는 것이죠.
미래 컴퓨터의 논리 회로에 대해 다루다가 머리가 터질것 같네요.
그래도 나름대로 애초에 계획한대로 과거의 방식->현재의 방식과 그의 장점-> 미래의 방식 순서대로 글을 쓴것 같아 신나요.
결론을 내리자면 10진법->2진법->3진법 이렇게 내릴 수 있을 것 같아요.
양자컴퓨터가 나오게 된다면 3진법이 가능할테고 아니라면 2진법을 계속 써야 한다고 하네요.
블로그 보관함
2010년 9월 23일 목요일
2010년 9월 12일 일요일
데이터 구조...
#include
#include
struct student {
int id;
float grade;
};
typedef struct student;
struct NODE {
student data;
NODE* next;
};
struct List{
NODE* head;
NODE* tail;
};
void FirstLast(List& rlist)
{
NODE* p = new NODE;
p->next=NULL;
rlist.head=p;
rlist.tail=p;
};
void Adddata(List& rlist,student data)
{
NODE* p= new NODE;
p->data = data;
p->next = NULL;
rlist.tail -> next = p;
rlist.tail =p;
}
int main(void)
{
int num,i;
student stu;
List list;
FirstLast(list);
for(i=0;i<10;++i)
{ printf("Enter your id, grade.\n");
stu.id=(int*)malloc(sizeof(int));
stu.grade=(float*)malloc(sizeof(float*));
scanf("%d %s",&stu.id,&stu.grade);
Adddata(list,stu);
}
int rank=0;
student tmp;
//성적 순서
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='A')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='B')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='C')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='D')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i) {
tmp=list.head;
if(tmp.grade=='F')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
int ttk=0;
//학번순서
for(ttk=0;ttk<10;ttk++) { for(i=0;i<10;++i) { tmp=list.head; if(rank>tmp.id)
continue
else if(rank=tmp.id)
continue
else if(rank<next;
}
printf("%d,%s",tmp.id,tmp.grade);
}
return 0;
}
어디를 고쳐야 되는지 설명 해주실분...
내가 쓴거지만 뭔소린지 모르겟음..
#include
struct student {
int id;
float grade;
};
typedef struct student;
struct NODE {
student data;
NODE* next;
};
struct List{
NODE* head;
NODE* tail;
};
void FirstLast(List& rlist)
{
NODE* p = new NODE;
p->next=NULL;
rlist.head=p;
rlist.tail=p;
};
void Adddata(List& rlist,student data)
{
NODE* p= new NODE;
p->data = data;
p->next = NULL;
rlist.tail -> next = p;
rlist.tail =p;
}
int main(void)
{
int num,i;
student stu;
List list;
FirstLast(list);
for(i=0;i<10;++i)
{ printf("Enter your id, grade.\n");
stu.id=(int*)malloc(sizeof(int));
stu.grade=(float*)malloc(sizeof(float*));
scanf("%d %s",&stu.id,&stu.grade);
Adddata(list,stu);
}
int rank=0;
student tmp;
//성적 순서
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='A')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='B')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='C')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i)
{ tmp=list.head;
if(tmp.grade=='D')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
for(i=0;i<10;++i) {
tmp=list.head;
if(tmp.grade=='F')
printf("%d,%s",tmp.id,tmp.grade);
list.head->next;
}
int ttk=0;
//학번순서
for(ttk=0;ttk<10;ttk++) { for(i=0;i<10;++i) { tmp=list.head; if(rank>tmp.id)
continue
else if(rank=tmp.id)
continue
else if(rank<
}
printf("%d,%s",tmp.id,tmp.grade);
}
return 0;
}
어디를 고쳐야 되는지 설명 해주실분...
내가 쓴거지만 뭔소린지 모르겟음..
1. The Big Picture
헤헤;; 잉? ㅋㅋ
이번 글은 컴퓨터 역사의 위인에 대한 글입니다.
컴퓨터의 역사는 크게 5가지로 나눠(제 주관엔..) Early Time(History), First Generation, Second Generation, Third Generation, Fourth Generation 라고 부릅니다.
이번엔 Early History(역사의 이전)의 한 축을 담당한 Alan Turing 에 대해서 다루려고 합니다.
Alan Turing(이하 앨런)은 현대 컴퓨터의 아버지로 불립니다. Turing Machine을 발명하기도 한 앨런은 1912년 6월 23일에 태어나 1954년 6월 7일에 죽었습니다. Turnig Machine에 대해는 밑에서 다뤄보기로 하고, 앨런의 생애를 알아 볼까요? ㅋ_ㅋ
앨런은 이렇게 생겼습니다. 약간 원숭이를 닮은 이 앨런씨는 외무부에서 1939년부터 약 6년,
국립 물리학 연구소 연구원으로 약 4년을 근무 했습니다. 어렸을 때부터 사교성이 부족했다고 전해지는 앨런씨는 인도 식민지의 영국 공무원(영국의 동인도 회사에 근무한 듯 합니다.)의 아버지를 두었습니다. 어머니와 아버지가 인도에 있어야 해서 앨런과 그의 형제는 영국의 한 가정에 맡겨졌다고 합니다. 그래서 사교성이 부족해졌나 봅니다. 소심이 앨런은 무사히 학교를 마치고 케임브리지 대학에서 <계산 가능한 수와 결정할 문제>라는 논문을 썼다고 합니다. 이 논문의 내용은 컴퓨터 이론의 발전에 도움이 되는 것으로 풀수 없는 수학 문제들의 존재를 증명하는 내용이라고 합니다. 이후에 Turing Machine의 기초가 되었다고도 합니다. 논물 발표후 1년뒤인 1938년 프린스턴 대학에서 수학 박사 학위를 받고 공부하다가 27살이 되던 해에 드디어 현대 컴퓨터의 기초 모델이라 불리는 Turing Machine을 고안해 냅니다. 이 아이디어를 보고 그 유명하신 수학자 폰 노이만(나만 알지도 모르니 대충 설명하자면, 이분은 보통 수학자보단 컴퓨터 관련으로 유명하신 듯 하지만 천재적인 암산 실력을 가진 수학자임. 6살때 8자리 나누기 8자리를 암산으로 간단히 해버렸다고도 하고, 폰 노이만이 살던 시대에 있던 수학자들 사이의 문제 게임이나, 장난 스러운 문제들 모두를 암산으로 풀어버렸다는 분이다. n=70 인가 80인가 하는 무한급수의 합을 암산으로 10초인가 만에 풀었다는 얘기도 있으심)이라는 분께서 Turing Muchine 을 함께 만들어 보자 제안했지만 세계대전이 발발해 고국으로 돌아가 버려 만들지 못했습니다.
세계대전은 앨런에게 기쁨과 슬픔 모두를 주었습니다. 세계대전당시 독일의 암호코드인 '에니그마는 그 어떤 암호 해독가들도 풀지 못했던 암호였습니다. 당연히 독일 비행기의 폭격이나 기습에 속수무책으로 당하던 연합군들은 '에니그마'의 해독을 각 국의 수학자들과 연구원들에게 부탁합니다. 여기서 앨런에게 기회가 생긴 것이었죠. 바로 Colossus 라는 연산 컴퓨터를 만든 것이었습니다. 이 기계는 엄청난 크기의 진공관 컴퓨터였는데, 암호문이 새겨진 종이테이프를 타고 들어가면 이 컴퓨터는 각종 연산을 처리하고 암호문의 원문을 출력해주었습니다. 앨런이 만든 이 Colossus를 영국이 극비로 하고, 독일의 암호문을 계속 해석해 가면서 연합군은 승리할 수 있었습니다. 앨런에게 큰 기회를 주었지만, 세계대전은 앨런이 이 기회와 성공 때문에 죽게 만들게 한 계기였습니다.
이후 맨체스터 대학에서 연구를 하면서 앨런은 자동 디지털 기계의 부책임자가 됩니다. 프로그램과 컴퓨터에 대해 뛰어난 지식을 가지고 있던 앨런은 부책임자가 되면서 인공지능에 대한 가능성을 제시합니다. '컴퓨터와 지능' 이라는 논문을 발표하고, 인공지능에 대한 연구를 시작 하면서 앨런은 뛰어난 능력을 발휘했습니다.
그!러!나! 논문 발표 뒤 얼마후 동성애자란 소식이 밝혀지게 됩니다. 앨런이 세계대전에서 뛰어난 능력을 발휘해 유명해 지지 않았다면, 있지 않았을지도 모를 이 일은 앨런이 기소되도록 만듭니다. 당시의 세계에서는 동성애자에 대해 매정한 대우를 했고, 결국 여성 호르몬 주입을 명령합니다. 여성 호르몬을 주입받은 앨런은 가슴이 나오고(잉?), 발기부전(헉?)과 중추 신경계 손상 등의 피해를 입었습니다.
결국 상처받은 소심한 앨런은 '사회가 나를 여자로 변하라 했으니, 나는 여자처럼 죽겠다'라며(으잉?) 사과에 청산가리를 주입해 자신이 직접 먹었습니다. 죽은 앨런 옆에 한입 베어먹은 사과가 떨어져 있었다고 하죠.(이 일을 계기로 애플사가 회사의 마크를 한입먹은 사과로 했다는 얘기가 있습니다. 이것도 잠시 뒤에 다루도록 하죠.)
결국 앨런을 죽인 것은 당시 시대의 멍청함? 혹은 폐쇄적인 성격 이었다고 볼 수 있습니다. 하지만 근본적인 원인은 세계대전이라고 볼 수도 있습니다. 2차 세계대전이 끝난 뒤 유럽의 각국들은 전쟁 당시의 군인들 사이에서 벌어졌던 수많은 동성애를 발견했고, 각 국의 명성이나 남성의 위엄등을 들어 비밀로 감추었다고 합니다.(중세에서 현대로 넘어온지 얼마 안된 시기라 아직 여성의 입지가 넓지는 않았다고 합니다.) 하지만 더 이런 일이 발생하지 않도록 앞으로의 법에서 동성애에 대해 엄벌에 처하기로 발표했고 그 희생양 중의 한명이 앨런이었던 것입니다. 그렇게 컴퓨터의 아버지라 불리는 Alan Turing이 죽게 됩니다.
자... 그럼 이제는 컴퓨터의 아버지가 무엇을 낳았는지 알아볼까요?? 앨런의 가장 대표적인 발명품(실제로 만들지는 못했지만, 비슷한 성격의 Colossus를 만들었으니) Turing Machine에 대해 얘기해보겠습니다. 위에서 이야기했던 '콜로서스(Colossus)'와 비슷한 방식의 기계인 Turing Machine은 간단한 형태의 계산기 입니다. 물론 간단한 계산을 하는 것이 아니라 사람이 하기에는 시간이 너무 오래걸리는 매우 복잡한 계산들을 하는 기계입니다. 튜링은 이 기계를 고안만 했었을 뿐 실제로 만들지는 못했습니다. 역시 위에서 말했든 폰 노이만이 함께 제작하기를 제안했지만 세계대전 발발로 인해 고국으로 돌아가야 했기 때문이죠. 대부분의 컴퓨터 과학자들은 Turing Machine에 대해 현대 컴퓨터의 기억 체계의 기초를 다니는 것 이라고 합니다. 테이프에 기호를 입력한 뒤 Turing Machine에 넣고, 계산이 끝나 나온 테이프를 나온 부분으로 다시 넣어도 입력이 되었기 때문에 Turing Machine이 내부 기억 능력(Turing Machine 자체의 기능)과 외부 기억 능력(테이프의 기능) 두가지를 모두 가지고 있다고 여기기 때문입니다.
앨런씨가 만든 기계는 결국 Colossus밖에 없습니다. ㅠ_ㅠ 그 유일한 발명품인 Colossus역시 내부에 자체적인 기억 기능이 있었습니다. 암호 해독기능이 Colossus의 개발 목적인 만큼 Colossus는 컴퓨터 내부에 이전에 해독했던 암호들을 가지고 있습니다. 그 암호문들과 현재 입력되는 암호문을 비교하여 암호를 해독하는 것이지요.
이상으로 앨런씨의 생애와 최초의 컴퓨터 이전의 컴퓨터(응?)라는 Colossus, 그리고 앨런씨의 상상속에 계셨던 Turing Machine에 대해서 모두 다뤄봤습니다.
이제 중간중간에 있었던 이야기에 대해 해보겠습니다.
애플사의 로고인
애플 사의 첫 로고는 원래 뉴턴의 사과였습니다. 사진을 넣고싶지만 시간이 너무 늦어 피곤한 관계로 나중에 기억하게 되면 올리는 걸로 하고, 대충 묘사해 보자면, 나무가 있고, 그나무에 사과가 한개만 매달려있습니다. 그 사과 바로 밑에 뉴턴이 나무에 기대어 누워있죠. 회사 로고라기에는 너무 복잡한 모양이었습니다. 따라서 로고를 바꿀 것을 찾게되었고, 이 로고가 선택되어진 것이죠. 제 글위에서 이야기 하듯이 앨런은 청산가리 사과를 한입 먹고 죽게 됩니다. 앨런의 시체 옆에 한입 물어먹은 사과가 있었다고 했듯이 애플 사의 이 사과 로고는 컴퓨터의 아버지라 불리는 앨런의 넋을 기리기 위한 로고가 아닐까 싶습니다.
두번째로 해볼 여담은 앨런의 동성애는 어느 정도 수준이었나? 입니다.(헉? ㅋ_ㅋ) 앨런은 자신이 동성애자라는 사실을 알고있었습니다. 남자친구도 있었다고 하네요. 자기 집에 자신의 남자친구를 불러 놀거나, 남자친구의 여러 다른 동성애자들을 데려와 자신의 집에서 파티를 하기도 했다고 합니다. 그러다가 한 동성애자가 경찰에 잡혀가게되고, 그사람이 앨런의 집에 있었던 사람들을 모두 털어놓아서, 앨런까지 덜미가 잡힌것이었죠. 남자친구와 집에서 뭘했는지는 모르겠지만..(남자끼리 도대체 뭘 하는건지..) 약간 애매한 동성애자가 아니라 확실한 동성애자였던것 같습니다. 그래서 떳떳하게 여성으로써 죽겠다는 말을 했을지도 모르겠네요.
뭐 이정도로 앨런에 대해 얘기해봤습니다.
컴퓨터의 기초를 다져준 사람, 특히 컴퓨터의 기억장치와 인공지능에 지대한 영향을 미쳤다고 하니.. 특히 기억장치... ㅇ_ㅇ? ㅋㅋㅋㅋ
아무튼 고마운 분이라는 건 확실하네요 ㅎㅎ
이번 글은 컴퓨터 역사의 위인에 대한 글입니다.
컴퓨터의 역사는 크게 5가지로 나눠(제 주관엔..) Early Time(History), First Generation, Second Generation, Third Generation, Fourth Generation 라고 부릅니다.
이번엔 Early History(역사의 이전)의 한 축을 담당한 Alan Turing 에 대해서 다루려고 합니다.
Alan Turing(이하 앨런)은 현대 컴퓨터의 아버지로 불립니다. Turing Machine을 발명하기도 한 앨런은 1912년 6월 23일에 태어나 1954년 6월 7일에 죽었습니다. Turnig Machine에 대해는 밑에서 다뤄보기로 하고, 앨런의 생애를 알아 볼까요? ㅋ_ㅋ
앨런은 이렇게 생겼습니다. 약간 원숭이를 닮은 이 앨런씨는 외무부에서 1939년부터 약 6년,
국립 물리학 연구소 연구원으로 약 4년을 근무 했습니다. 어렸을 때부터 사교성이 부족했다고 전해지는 앨런씨는 인도 식민지의 영국 공무원(영국의 동인도 회사에 근무한 듯 합니다.)의 아버지를 두었습니다. 어머니와 아버지가 인도에 있어야 해서 앨런과 그의 형제는 영국의 한 가정에 맡겨졌다고 합니다. 그래서 사교성이 부족해졌나 봅니다. 소심이 앨런은 무사히 학교를 마치고 케임브리지 대학에서 <계산 가능한 수와 결정할 문제>라는 논문을 썼다고 합니다. 이 논문의 내용은 컴퓨터 이론의 발전에 도움이 되는 것으로 풀수 없는 수학 문제들의 존재를 증명하는 내용이라고 합니다. 이후에 Turing Machine의 기초가 되었다고도 합니다. 논물 발표후 1년뒤인 1938년 프린스턴 대학에서 수학 박사 학위를 받고 공부하다가 27살이 되던 해에 드디어 현대 컴퓨터의 기초 모델이라 불리는 Turing Machine을 고안해 냅니다. 이 아이디어를 보고 그 유명하신 수학자 폰 노이만(나만 알지도 모르니 대충 설명하자면, 이분은 보통 수학자보단 컴퓨터 관련으로 유명하신 듯 하지만 천재적인 암산 실력을 가진 수학자임. 6살때 8자리 나누기 8자리를 암산으로 간단히 해버렸다고도 하고, 폰 노이만이 살던 시대에 있던 수학자들 사이의 문제 게임이나, 장난 스러운 문제들 모두를 암산으로 풀어버렸다는 분이다. n=70 인가 80인가 하는 무한급수의 합을 암산으로 10초인가 만에 풀었다는 얘기도 있으심)이라는 분께서 Turing Muchine 을 함께 만들어 보자 제안했지만 세계대전이 발발해 고국으로 돌아가 버려 만들지 못했습니다.
세계대전은 앨런에게 기쁨과 슬픔 모두를 주었습니다. 세계대전당시 독일의 암호코드인 '에니그마는 그 어떤 암호 해독가들도 풀지 못했던 암호였습니다. 당연히 독일 비행기의 폭격이나 기습에 속수무책으로 당하던 연합군들은 '에니그마'의 해독을 각 국의 수학자들과 연구원들에게 부탁합니다. 여기서 앨런에게 기회가 생긴 것이었죠. 바로 Colossus 라는 연산 컴퓨터를 만든 것이었습니다. 이 기계는 엄청난 크기의 진공관 컴퓨터였는데, 암호문이 새겨진 종이테이프를 타고 들어가면 이 컴퓨터는 각종 연산을 처리하고 암호문의 원문을 출력해주었습니다. 앨런이 만든 이 Colossus를 영국이 극비로 하고, 독일의 암호문을 계속 해석해 가면서 연합군은 승리할 수 있었습니다. 앨런에게 큰 기회를 주었지만, 세계대전은 앨런이 이 기회와 성공 때문에 죽게 만들게 한 계기였습니다.
이후 맨체스터 대학에서 연구를 하면서 앨런은 자동 디지털 기계의 부책임자가 됩니다. 프로그램과 컴퓨터에 대해 뛰어난 지식을 가지고 있던 앨런은 부책임자가 되면서 인공지능에 대한 가능성을 제시합니다. '컴퓨터와 지능' 이라는 논문을 발표하고, 인공지능에 대한 연구를 시작 하면서 앨런은 뛰어난 능력을 발휘했습니다.
그!러!나! 논문 발표 뒤 얼마후 동성애자란 소식이 밝혀지게 됩니다. 앨런이 세계대전에서 뛰어난 능력을 발휘해 유명해 지지 않았다면, 있지 않았을지도 모를 이 일은 앨런이 기소되도록 만듭니다. 당시의 세계에서는 동성애자에 대해 매정한 대우를 했고, 결국 여성 호르몬 주입을 명령합니다. 여성 호르몬을 주입받은 앨런은 가슴이 나오고(잉?), 발기부전(헉?)과 중추 신경계 손상 등의 피해를 입었습니다.
결국 상처받은 소심한 앨런은 '사회가 나를 여자로 변하라 했으니, 나는 여자처럼 죽겠다'라며(으잉?) 사과에 청산가리를 주입해 자신이 직접 먹었습니다. 죽은 앨런 옆에 한입 베어먹은 사과가 떨어져 있었다고 하죠.(이 일을 계기로 애플사가 회사의 마크를 한입먹은 사과로 했다는 얘기가 있습니다. 이것도 잠시 뒤에 다루도록 하죠.)
결국 앨런을 죽인 것은 당시 시대의 멍청함? 혹은 폐쇄적인 성격 이었다고 볼 수 있습니다. 하지만 근본적인 원인은 세계대전이라고 볼 수도 있습니다. 2차 세계대전이 끝난 뒤 유럽의 각국들은 전쟁 당시의 군인들 사이에서 벌어졌던 수많은 동성애를 발견했고, 각 국의 명성이나 남성의 위엄등을 들어 비밀로 감추었다고 합니다.(중세에서 현대로 넘어온지 얼마 안된 시기라 아직 여성의 입지가 넓지는 않았다고 합니다.) 하지만 더 이런 일이 발생하지 않도록 앞으로의 법에서 동성애에 대해 엄벌에 처하기로 발표했고 그 희생양 중의 한명이 앨런이었던 것입니다. 그렇게 컴퓨터의 아버지라 불리는 Alan Turing이 죽게 됩니다.
자... 그럼 이제는 컴퓨터의 아버지가 무엇을 낳았는지 알아볼까요?? 앨런의 가장 대표적인 발명품(실제로 만들지는 못했지만, 비슷한 성격의 Colossus를 만들었으니) Turing Machine에 대해 얘기해보겠습니다. 위에서 이야기했던 '콜로서스(Colossus)'와 비슷한 방식의 기계인 Turing Machine은 간단한 형태의 계산기 입니다. 물론 간단한 계산을 하는 것이 아니라 사람이 하기에는 시간이 너무 오래걸리는 매우 복잡한 계산들을 하는 기계입니다. 튜링은 이 기계를 고안만 했었을 뿐 실제로 만들지는 못했습니다. 역시 위에서 말했든 폰 노이만이 함께 제작하기를 제안했지만 세계대전 발발로 인해 고국으로 돌아가야 했기 때문이죠. 대부분의 컴퓨터 과학자들은 Turing Machine에 대해 현대 컴퓨터의 기억 체계의 기초를 다니는 것 이라고 합니다. 테이프에 기호를 입력한 뒤 Turing Machine에 넣고, 계산이 끝나 나온 테이프를 나온 부분으로 다시 넣어도 입력이 되었기 때문에 Turing Machine이 내부 기억 능력(Turing Machine 자체의 기능)과 외부 기억 능력(테이프의 기능) 두가지를 모두 가지고 있다고 여기기 때문입니다.
앨런씨가 만든 기계는 결국 Colossus밖에 없습니다. ㅠ_ㅠ 그 유일한 발명품인 Colossus역시 내부에 자체적인 기억 기능이 있었습니다. 암호 해독기능이 Colossus의 개발 목적인 만큼 Colossus는 컴퓨터 내부에 이전에 해독했던 암호들을 가지고 있습니다. 그 암호문들과 현재 입력되는 암호문을 비교하여 암호를 해독하는 것이지요.
이상으로 앨런씨의 생애와 최초의 컴퓨터 이전의 컴퓨터(응?)라는 Colossus, 그리고 앨런씨의 상상속에 계셨던 Turing Machine에 대해서 모두 다뤄봤습니다.
이제 중간중간에 있었던 이야기에 대해 해보겠습니다.
애플사의 로고인
두번째로 해볼 여담은 앨런의 동성애는 어느 정도 수준이었나? 입니다.(헉? ㅋ_ㅋ) 앨런은 자신이 동성애자라는 사실을 알고있었습니다. 남자친구도 있었다고 하네요. 자기 집에 자신의 남자친구를 불러 놀거나, 남자친구의 여러 다른 동성애자들을 데려와 자신의 집에서 파티를 하기도 했다고 합니다. 그러다가 한 동성애자가 경찰에 잡혀가게되고, 그사람이 앨런의 집에 있었던 사람들을 모두 털어놓아서, 앨런까지 덜미가 잡힌것이었죠. 남자친구와 집에서 뭘했는지는 모르겠지만..(남자끼리 도대체 뭘 하는건지..) 약간 애매한 동성애자가 아니라 확실한 동성애자였던것 같습니다. 그래서 떳떳하게 여성으로써 죽겠다는 말을 했을지도 모르겠네요.
뭐 이정도로 앨런에 대해 얘기해봤습니다.
컴퓨터의 기초를 다져준 사람, 특히 컴퓨터의 기억장치와 인공지능에 지대한 영향을 미쳤다고 하니.. 특히 기억장치... ㅇ_ㅇ? ㅋㅋㅋㅋ
아무튼 고마운 분이라는 건 확실하네요 ㅎㅎ
2010년 9월 2일 목요일
익스펜더블...
오늘 새벽에 본 영화 익스펜더블...
벌써 인터넷에 돌아다니기 시작해서...
시간을 달리는 소녀 보고 뭔가 신나서 봤는데..
버스 광고에 붙어있던 것처럼 엄청난 출연진...
실베스터 스탤론, 이연걸, 제이슨 스타뎀, 브루스 윌리스... 거기에 아놀드 슈왈츠제네거도..
참... ㅋㅋ
모두들 말하던 명대사가 이장면에서 나온다..
"대통령 선거에라도 출마하나보지.."
실베스터 스탤론이 아놀드 슈왈츠제네거한테 한말.. ㅋㅋㅋ
개인적으로 제일 좋아하는 제이슨 스타뎀이 스탈론과 함께
메인으로 나와서 좋았다 ㅋㅋ
영화 시작 10분쯤 지나면 스타뎀이 반지들고 애인에게 찾아간다
그러고 헤어짐 ㅇ_ㅇ? 잉?
아무튼 재밌는 영화고..
시간도 잘간다..
남자들이 보기에 좋은 영화.. ㅋㅋ
00.컴퓨터 과학개론의 각 단원과 컴퓨터교육과 전공 수업의 연관성
1.The Big Picture
챕터의 이름처럼 이 단원에서는 컴퓨터 프로그램상의 구조나 컴퓨터 사용의 역사에 대해서 배웁니다. 컴퓨터 교육에서 가장 기본적이고 필수적인 내용이라고 생각합니다.
2.Binary Values and Number Systems
2진법의 값과 숫자 시스템이라는 제목의 2단원은 컴퓨터 내에서의 2진법 사용에 관한 내용입니다. 2진법을 8진법등의 다른 진법과 비교하며 2진법의 장점을 설명합니다. 지금까지 배운 내용 중 2진법을 다룬적은 C언어 수업시간에 잠깐 나왔던 것 이후로 나온 적이 없어서 잘 모르겠습니다...
3.Data Representation
이 단원은 데이터의 출력에 관한 내용입니다. 숫자나 오디오,비디오, ASCII code 나 Unicode 등의 출력등을 다룹니다. 데이터의 출력에 관한 기본적인 내용이나 과거의 출력 방식 혹은 여러가지 출력 방식의 비교가 나옵니다. 어느 수업과 관련될지는 잘 모르지만 대형 프로그램의 프로그래밍에 관련해서 나중에 배우지 않을까 합니다.
4.Gates and Circuits
.....;;;;;;;; -0-
무슨 단원인지 알 길이 없어요.. ㅠㅠ
5.Computing Components
여기서는 컴퓨터 사용에 필요한 구성요소 등에 대해 배웁니다. 앞부분은 Stored-Program 즉, RAM 이나 ROM, 터치 스크린등의 요소에 대해 배우고, 뒷부분에서는 컴퓨터에서의 병렬방식(Parallel Architecture) 과 병렬 하드웨어에 대해 배웁니다. 지금까지 배웠던 전공수업인 리눅스 수업과 C언어 수업에서는 주로 프로그래밍=>소프트웨어에 대해 배워왔기 때문에 잘 알지 못하는 부분이지만 컴퓨터 사용에 있어서 꼭 필요한 단원이라고 생각합니다.
6.Low-Level Programming Languages and Pseudocode
이 단원에서는 주로 Assembly Language 와 Algorithms에 대해서 배웁니다. Algorithms에 대해서는 전공수업중 데이터 구조 및 실습시간의 두번째 시간에 배웠듯이 프로그램의 문제나 오류등을 찾거나 해결하기 위해 쓰입니다. Assembly Language는 지난학기에 배웠던 c언어와는 차이가 많은 언어로 기계어의 단점을 보완하기 위한 6개의 기호로 표현된다고 합니다.
단원의 마지막에 있는 Pseudocode 수도코드는 프로그램,알고리즘의 목표,목적을 자연어에 가깝게 기술하는 것으로 의사코드라고도 불리며 역시 데이터 구조 및 실습 시간의 강의 내용이었습니다.
7.Problem Solving and Alogorithms
문제의 해결과 알고리즘이라는 제목처럼 이 단원에서는 프로그램에서의 오류와 해결하는 방법 등을 다룹니다. 데이터 구조 및 실습시간에 배웠듯이 알고리즘은 프로그램의 오류를 해결하거나 찾는 방법을 의미합니다. Input,Output,Definiteness,Finiteness,Effectiveness 의 5가지로 행해지는 알고리즘은 프로그래밍에 있어서 마무리에 해당하는 작업이라고 생각합니다. 긴 코딩을 한 뒤에 어디에서 오류가 생겼는지 알수 없다면 프로그램을 시작할 수 없는 것처럼 꼭 필요한 내용이라고 생각합니다. 아마 대부분의 프로그래밍 수업 시간에 연관되지 않을까 싶습니다.
8.Abstract Data Types and Subprograms
이 단원은 Abstract data의 의미를 배우고, 스택(일시적으로 보존하고 싶은 데이터를 차례로 겹쳐 쌓듯이 수납해 가는 기억 장치)과 큐(대기행렬), 그래프 등 을 배웁니다. 단원의 이름처럼 추상적 데이타 타입에 대해 다루는데 무슨 내용인지 잘 모르겠습니다... 데이터와 관련 되지 않았을까 라고 생각합니다..
9.Object-Oriented Design and High-Level Programming Languages
객체 지향형의 디자인(처리 절차와 데이터를 분리하지 않고 기능상의 단위로 묶어 소프트웨어 시스템을 구축하는 방법)과 고급 프로그래밍 언어에 대해 다룹니다.
객체 지향형의 의미가 뭔지도 모를 정도로 생소한 단원입니다. High-Level Programming Languages 에서도 제가 기대하던 C언어나 JAVA언어는 서론에 나오지도 않아 당황스럽습니다....
10.Operating Systems
Operating Systems 즉 컴퓨터 시작시 뜨는 윈도우, 리눅스 등의 시스템에 대해 배웁니다. 2학년?또는 3학년 전공수업에 os수업이 있다고 들었는데 그 수업과 연관되지 않을까 합니다.
11.File Systems and Directories
파일 시스템과 폴더 에 대해 다루는 듯 합니다.
파일의 타입이나 구동방법 등을 시작으로 디스크의 사용법이나 스캔에 대해 배웁니다.
역시 이 단원도 컴퓨터 사용에서 기본적인 내용들이라고 생각합니다.
파일과 관련되었으니 데이타 구조와 연관된 내용들이 나올것 같습니다.
12.Information Systems
말그래도 정보 시스템 관련 단원입니다. 정보를 다루는 내용으로 시작해 스프리드시트(엑셀)이나 데이터베이스 처리 시스템을 배웁니다. 이번 단원은 데이터를 다루는 만큼 데이터 구조 및 실습 강의나 데이터베이스 심화 강의에 도움이 될 것 같습니다.
13.Artificial Intelligence
이단원은 인공지능에 대해 배웁니다. 지식의 표현이나 자연언어의 프로세싱, 로보틱스 기술에 대해 다루는 듯 합니다. 2 또는 3학년 1학기에 있는 인공지능 이라는 전공 필수 수업과 연관된다고 생각합니다.
14.Simulation, Graphics, Gaming, and Other Applications
이 단원에서는 시뮬레이션의 의미와 그래픽의 출력방법, 게임이나 다른 어플리케이션(프로그램)에 대해 배웁니다. 전공 선택 과목중 게임 프로그래밍 수업이 있는데 게임에 필요한 요소들이 시뮬레이션이나 그래픽등이 포함되기 때문에 그 수업과 큰 연관이 있을 것 같습니다.
15.Networks
네트워크를 다룹니다. 흔히 인터넷이라 부르는 월드와이드웹 이전의 tcp/ip 등 컴퓨터와 컴퓨터를 연결하여 쓰던 것을 의미합니다. 예를 들어 스타크래프트의 배틀넷을 www라고 한다면, UDP등을 이 단원에서 배운다고 할수 있습니다. 역시 전공필수 수업인 컴퓨터 네트워크 수업과 연관될 거라고 생각합니다.
16.The World Wide Web
인터넷 혹은 월드와이드웹 을 배웁니다. 검색엔진이나 메세지 시스템, 또 인터넷의 문서출력방식인 HTML에 대해서도 배웁니다. 이 수업도 컴퓨터 네트워크 수업과 관련되지 않을까 합니다.
17.Limitations of Computing
말그대로 컴퓨터 사용의 한계를 다룬 단원입니다. 구성요소의 한계나 커뮤니케이션의 한계등을 다루고 컴퓨터의 문제점 등을 다룹니다. 전공 수업과 관련된 것 보다는, 컴퓨터 교육자로서 가르칠 내용들을 배운다고 생각합니다.
챕터의 이름처럼 이 단원에서는 컴퓨터 프로그램상의 구조나 컴퓨터 사용의 역사에 대해서 배웁니다. 컴퓨터 교육에서 가장 기본적이고 필수적인 내용이라고 생각합니다.
2.Binary Values and Number Systems
2진법의 값과 숫자 시스템이라는 제목의 2단원은 컴퓨터 내에서의 2진법 사용에 관한 내용입니다. 2진법을 8진법등의 다른 진법과 비교하며 2진법의 장점을 설명합니다. 지금까지 배운 내용 중 2진법을 다룬적은 C언어 수업시간에 잠깐 나왔던 것 이후로 나온 적이 없어서 잘 모르겠습니다...
3.Data Representation
이 단원은 데이터의 출력에 관한 내용입니다. 숫자나 오디오,비디오, ASCII code 나 Unicode 등의 출력등을 다룹니다. 데이터의 출력에 관한 기본적인 내용이나 과거의 출력 방식 혹은 여러가지 출력 방식의 비교가 나옵니다. 어느 수업과 관련될지는 잘 모르지만 대형 프로그램의 프로그래밍에 관련해서 나중에 배우지 않을까 합니다.
4.Gates and Circuits
.....;;;;;;;; -0-
무슨 단원인지 알 길이 없어요.. ㅠㅠ
5.Computing Components
여기서는 컴퓨터 사용에 필요한 구성요소 등에 대해 배웁니다. 앞부분은 Stored-Program 즉, RAM 이나 ROM, 터치 스크린등의 요소에 대해 배우고, 뒷부분에서는 컴퓨터에서의 병렬방식(Parallel Architecture) 과 병렬 하드웨어에 대해 배웁니다. 지금까지 배웠던 전공수업인 리눅스 수업과 C언어 수업에서는 주로 프로그래밍=>소프트웨어에 대해 배워왔기 때문에 잘 알지 못하는 부분이지만 컴퓨터 사용에 있어서 꼭 필요한 단원이라고 생각합니다.
6.Low-Level Programming Languages and Pseudocode
이 단원에서는 주로 Assembly Language 와 Algorithms에 대해서 배웁니다. Algorithms에 대해서는 전공수업중 데이터 구조 및 실습시간의 두번째 시간에 배웠듯이 프로그램의 문제나 오류등을 찾거나 해결하기 위해 쓰입니다. Assembly Language는 지난학기에 배웠던 c언어와는 차이가 많은 언어로 기계어의 단점을 보완하기 위한 6개의 기호로 표현된다고 합니다.
단원의 마지막에 있는 Pseudocode 수도코드는 프로그램,알고리즘의 목표,목적을 자연어에 가깝게 기술하는 것으로 의사코드라고도 불리며 역시 데이터 구조 및 실습 시간의 강의 내용이었습니다.
7.Problem Solving and Alogorithms
문제의 해결과 알고리즘이라는 제목처럼 이 단원에서는 프로그램에서의 오류와 해결하는 방법 등을 다룹니다. 데이터 구조 및 실습시간에 배웠듯이 알고리즘은 프로그램의 오류를 해결하거나 찾는 방법을 의미합니다. Input,Output,Definiteness,Finiteness,Effectiveness 의 5가지로 행해지는 알고리즘은 프로그래밍에 있어서 마무리에 해당하는 작업이라고 생각합니다. 긴 코딩을 한 뒤에 어디에서 오류가 생겼는지 알수 없다면 프로그램을 시작할 수 없는 것처럼 꼭 필요한 내용이라고 생각합니다. 아마 대부분의 프로그래밍 수업 시간에 연관되지 않을까 싶습니다.
8.Abstract Data Types and Subprograms
이 단원은 Abstract data의 의미를 배우고, 스택(일시적으로 보존하고 싶은 데이터를 차례로 겹쳐 쌓듯이 수납해 가는 기억 장치)과 큐(대기행렬), 그래프 등 을 배웁니다. 단원의 이름처럼 추상적 데이타 타입에 대해 다루는데 무슨 내용인지 잘 모르겠습니다... 데이터와 관련 되지 않았을까 라고 생각합니다..
9.Object-Oriented Design and High-Level Programming Languages
객체 지향형의 디자인(처리 절차와 데이터를 분리하지 않고 기능상의 단위로 묶어 소프트웨어 시스템을 구축하는 방법)과 고급 프로그래밍 언어에 대해 다룹니다.
객체 지향형의 의미가 뭔지도 모를 정도로 생소한 단원입니다. High-Level Programming Languages 에서도 제가 기대하던 C언어나 JAVA언어는 서론에 나오지도 않아 당황스럽습니다....
10.Operating Systems
Operating Systems 즉 컴퓨터 시작시 뜨는 윈도우, 리눅스 등의 시스템에 대해 배웁니다. 2학년?또는 3학년 전공수업에 os수업이 있다고 들었는데 그 수업과 연관되지 않을까 합니다.
11.File Systems and Directories
파일 시스템과 폴더 에 대해 다루는 듯 합니다.
파일의 타입이나 구동방법 등을 시작으로 디스크의 사용법이나 스캔에 대해 배웁니다.
역시 이 단원도 컴퓨터 사용에서 기본적인 내용들이라고 생각합니다.
파일과 관련되었으니 데이타 구조와 연관된 내용들이 나올것 같습니다.
12.Information Systems
말그래도 정보 시스템 관련 단원입니다. 정보를 다루는 내용으로 시작해 스프리드시트(엑셀)이나 데이터베이스 처리 시스템을 배웁니다. 이번 단원은 데이터를 다루는 만큼 데이터 구조 및 실습 강의나 데이터베이스 심화 강의에 도움이 될 것 같습니다.
13.Artificial Intelligence
이단원은 인공지능에 대해 배웁니다. 지식의 표현이나 자연언어의 프로세싱, 로보틱스 기술에 대해 다루는 듯 합니다. 2 또는 3학년 1학기에 있는 인공지능 이라는 전공 필수 수업과 연관된다고 생각합니다.
14.Simulation, Graphics, Gaming, and Other Applications
이 단원에서는 시뮬레이션의 의미와 그래픽의 출력방법, 게임이나 다른 어플리케이션(프로그램)에 대해 배웁니다. 전공 선택 과목중 게임 프로그래밍 수업이 있는데 게임에 필요한 요소들이 시뮬레이션이나 그래픽등이 포함되기 때문에 그 수업과 큰 연관이 있을 것 같습니다.
15.Networks
네트워크를 다룹니다. 흔히 인터넷이라 부르는 월드와이드웹 이전의 tcp/ip 등 컴퓨터와 컴퓨터를 연결하여 쓰던 것을 의미합니다. 예를 들어 스타크래프트의 배틀넷을 www라고 한다면, UDP등을 이 단원에서 배운다고 할수 있습니다. 역시 전공필수 수업인 컴퓨터 네트워크 수업과 연관될 거라고 생각합니다.
16.The World Wide Web
인터넷 혹은 월드와이드웹 을 배웁니다. 검색엔진이나 메세지 시스템, 또 인터넷의 문서출력방식인 HTML에 대해서도 배웁니다. 이 수업도 컴퓨터 네트워크 수업과 관련되지 않을까 합니다.
17.Limitations of Computing
말그대로 컴퓨터 사용의 한계를 다룬 단원입니다. 구성요소의 한계나 커뮤니케이션의 한계등을 다루고 컴퓨터의 문제점 등을 다룹니다. 전공 수업과 관련된 것 보다는, 컴퓨터 교육자로서 가르칠 내용들을 배운다고 생각합니다.
피드 구독하기:
덧글 (Atom)




