컴퓨터프로그램과생명체

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
컴퓨터프로그램과생명체는 여러모로 유사한점이 많다. 그 전체적특징이 창발성에 의존한다는 것이 그 이유다.


1. 유사한점

1.1. 첫번째 수준 - 기본적인 구성요소

우선, 가장 기본적인 구성요소를 살펴보자. 컴퓨터 프로그램의 기본적인 구성요소는 기계어(예: 010101)이고, 생명체는 DNA(예: AGTCAGTC)이다. 이 기본요소만을 들여다본다고, 전체 요소가 무슨 기능을 하는지 도대체 이해할 수가 없을 것이다. 최근 HumanGenomeProject를 통해서 인간 DNA의 서열을 알아내었다고 하지만, 이는 빗대어 말하자면 StarCraft 게임의 기계어 코드일 뿐이다. 이것만을 보고 이 게임의 동작원리를 유추하는 것은 불가능에 가깝다. 생명코드 DNA는 엄청나게 복잡한 과정을 내포하고 있으며, 그 행동원리는 다양한 상호연결과정을 토대로 한 창발성에 있기 때문이다.

1.2. 두번째 수준 - Genome의 해석

두번째 단계로 Genome으로부터 기능적인 지도를 얻는 일(예를 들어 서열의 어디부터 어디는 단백질코딩부분이고, 어디부터 어디는 조절부위인지)이 필요하다. 현재 생명과학의 수준은 아직 이 부분조차 제대로 해석하지 못하고 있다. 대장균등의 작은 생명체는 많은 부분 밝혀졌지만, 고등동식물로 올라올수록 그 소스코드분석은 좀처럼 쉽지않다. 좀더 어려운 언어로 쓰여졌다고나 할까... 그러나, 마찬가지로 기능지도를 완성했다고해서 작동원리의 이해는 불가능하다.
컴퓨터 프로그램에서는 이것을 역컴파일 작업이라고 해석하고 싶다.(역컴파일이란 기계어코드를 읽고 이것의 원본 프로그램소스를 알아내는 작업이다.) 아직 CLanguage같은 언어에서 역컴파일 은 불가능하다고 알려져 있지만, JavaLanguage에서는 가능하다. 쉽지 않은 작업이지만 이 작업을 하게 되면, 무언가가 더 분명해지겠지만 그래도 DNA의 작동원리를 알아내기는 어렵다. 마치 StarCraft의 주석없는 소스코드를 본다고 이 프로그램의 작동원리를 이해하기는 역부족이듯이.

어려운 언어로 쓰여졌다는 표현은 맞지 않는 것 같습니다. 쉬운언어 어려운 언어의 차이라기 보다는 구조와 기능의 복잡성의 차이가 아닌가 싶습니다. --Colus

응주님 의견도 맞습니다. 구조와 기능의 복잡성 물론 많은 차이가 납니다. 그러나 위 예에서는 구조와 기능의 복잡성을 요 밑의 바로 다음수준으로 구분하고자 했습니다. 실제로 대장균등의 작은 생명체와 고등동식물은 그 문법이 많이 다릅니다. 기본적인 문법(분자생물학의 CentralDogma)은 동일하지만, 단백질코딩이란 부분에도 가장 어렵다는 Splicing이라는 과정이 고등동식물에 들어갑니다. 마치, C에서 포인터가 등장하듯이, 이부분은 미생물(정확히 원핵생물)에는 없는 문법입니다. 또한 각종 조절기능에 대한 문법역시 좀 차이가 나죠. 원핵생물은 주로 전사라는 과정을 조절의 가장 큰 방법으로 사용하고 있고, 대부분의 조절메카니즘은 이 전사과정에 의존합니다. 그러나 고등동식물(진핵생물)은 다양한 과정이 사용됩니다. 따라서, 이 두번째 수준에서 의논하고자 하였던 소스코드의 이해라는 차원에서, 원핵생물과 진핵생물은 현저한 차이를 내고, 이는 어려운 언어로 쓰여졌다고 표현해도 무난할듯 여겨집니다. --yong27

C에서 역컴파일이 불가능하다는 것은 100%동일한 소스코드를 재생해 낼 수 없다. 라는 뜻인가요? 하나의 기계어가 무수히 많은 경우의 수를 가진 소스코드로 표현될 수 있기 때문이니까 DNA분석에 적용하기 위해서는 과연 DNA가 소스코드를 가지고 있는가.. 하는 문제부터 시작해야 할 듯 한데요. 프로그램은 기본적으로 인간이 이해하는 언어인 소스코드를 가지고 있지만 DNA는 신이 이해하는 언어인 소스코드로 바꿀 수 있는건가요? DNA는 그냥 DNA의 기능을 해석하는 것이니까 프로그램보다는 고대언어의 해석에 더 가깝지 않을까 싶습니다만.. --saintwar

돌발질문: DNA가 결정하는 것은 만들어 낼 수 있는 단백질의 종류뿐인가요?

1.3. 세번째 수준 - 복잡한 상호작용

세번째 수준은 기능간의 복잡한 상호작용이다. (프로그램의 소스코드 내의 각종 함수와 모듈들은 서로 거미줄처럼 연결되어 있고, 적절하고 언어문법에 맞게 인수가 전달되어야 하며, 그 전체적인 흐름이 최대한 효율적이고, 효과적으로 구성되어야 한다. 생명체 역시 각각의 유전자들이 모두 복잡하게 얽혀있으며, 복잡한 네트워크를 이루면서 커다랗게 동작한다. 치료가 어려운 대부분의 질병들은 한두개의 유전자고장, 함수내 오타에 의한 에러가 아니라, 전체적인 네트워크의 이상행동이고, 함수와 함수사이의 논리적 오류이다. 이러한 복잡한 상호작용은 개개의 유전자관찰 및 함수관찰만으로는 알 수 없는, 바로 창발성을 낳는다.

1.4. 다양한 행동

마지막으로, 그로부터 구현되는 다양한 행동이다. 팔은 이런 모양으로, 다리는 이런모양으로 만들어지게 되고, 질럿은 어떻게 생기고, 마린의 총에 얼마만큼의 쉴드에너지를 뺏기는 지등에 대한 구체적인 행동양식으로 표현된다.

1.5. 논의

리차드도킨스는 그의 책 이기적유전자에서, 생물의 사고과정을 체스장기 프로그램에 비유했다. 체스 프로그램은 한번 만들어진 것으로, 체스장기 내내 중간중간 명령을 받지않고도 스스로 끝까지 둘 수 있다는 것이다. 여기서의 체스프로그램은 바로 생물의 Genome에 프로그래밍된 생명정보를 의미할 것이다.

1.6. 해킹과 크래킹

생물체에도 컴퓨터프로그램과 동일한 해킹과 크래킹, 그리고 그에 대한 방지책이 생성된다. 네트에서 해커는 아무런 이유없이(라고 말해도 되는가) 해킹과 크래킹 행위를 하고 이를 방지하기 위해 네트는 점차 방지책을 마련하기 시작한다. 그럼으로 인해 네트와 생물체의 진화는 계속된다. --musiki


2. 다른점

  • 아무도 95% 쓸모 없는 code 가 들어간 프로그램을 짜지 않는다.
    쓸모 없다고 단정할 수 있는가? 아! 물론 아니지요. 생명체에서는. ^^
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    이런 식의 의미 없는 반복이라면 쓸모 없다고 단정할 수 있습니다. 무언가 의미 있는 정보가 들어 있기 위해서는 완벽하게 무작위 나열이어도 안 되고, 완벽하게 규칙적이어도 안 됩니다. 유전자의 95%는 위와 같은 의미 없는 단순 반복입니다. 게다가 나머지 의미 있는 부분은 여기 저기 예외처리로 덕지덕지 땜질되어 있습니다. 프로그램으로 치면 생명체는 완전히 소 뒷발로 쥐 잡기식으로 작성된, 결코 효율적인 프로그램이 아닙니다.
    정말 단정할 수 있는거예요? 단순한 예로 Telomere는 AAAAA와 같은 식으로 길게 반복되는데 쓸모가 있잖아요. ^^ --아무개

  • 직접적인 연관은 없지만, 소프트웨어에서도 파레토법칙(소위 80/20법칙)은 적용된다.
    IEEESoftware에서 배리 보엠은 20%의 코드가 전체 수행 시간의 80%를 점유한다는 사실을 보고했고 TheArtOfComputerProgramming의 저자 DonaldKnuth 교수는 4%미만의 코드가 전체 수행 시간의 50% 이상을 차지한다는 논문을 발표했다.

  • 아무도 같은 함수(또는 모듈)를 전체 프로그램의 10%나 되도록 반복해서 넣지 않는다. (ALU repeat)
  • 아직까지는 아무도 스스로 진화하는 컴퓨터프로그램을 짜지 못했다. 스스로 복제하는 프로그램은 있지만. (그렇다면 생명체는스스로진화하는가?)
    그러나 GeneticAlgorithm이나 EvolutionaryProgramming 같은 것들도 있다. 이것들은 기본적으로 진화를 모델로 한다.
    이것은 프로그램을 생명체처럼 기능하도록 코딩하지 않기 때문이다. 생명체처럼 기능한다는 것은 천문학적 규모의 풀을 대상으로 임의성과 확률에 기반한 적자생존의 원칙에 따라 선택된 모듈이 잔존하는 과정을 반복하는 방식이다. 이러한 방법이 우리가 프로그래밍하는 목적에 부합하지 않기 때문이다. (물론 유전자 알고리즘 등이 이러한 방식을 따른다. 그러나 진화적 방법론은 정확성과 즉시성에 따라 합목적하도록 되어있지 않다. 우선은 생명 자체의 목적이 진화가 아니라 존재-유전자의 보존-일 뿐이라는 점에 주목해야 한다.) 수정하고 보니 아래의 목적과 실존에 관한 문제와 같은 맥락이군요. --godai
  • 생명체는 X,Y 염색체에 있는 일부 유전자를 제외하면 모두 같은 기능을 하는 함수(또는 모듈)를 pair 로 가지고 있다. (왜 그럴까?)
  • 아무도 살아있는 프로그램, 즉 유기물의 범주를 넘어서는 일반생물학(Kauffman)의 대상으로 볼 만한, 전자생물, 을 본 적이 아직은 없다. 프로그램은 참으로 복잡한 것도, 박테리아 만큼도 살아 있지 않다. (살아있다는 것은 무엇인가?)
    바이러스 만큼 살아있는 프로그램은 있는가? 단순히 자기복제를 하는 프로그램이라면 무수한 바이러스들과 웜들이 있다. 이들은 바이러스만큼은 살아있는 것이라고 말할 수 있지 않을까?
  • 프로그램에서는, 먼저 목적이 존재하고 그 후에 (목적에 맞추어) 프로그램이 존재한다. 즉 실존이 선행된다. 그러나 생명체는 존재가 실존에 대해서 선행한다. 생명체의 대부분의 특질은 규정이나 명세에 따라 만들어진 것이 아니다.
    여기서 존재와 실존은 어떻게 다른가? 맥락상으로는 실존이 teleology를 지칭하는 것으로 쓰인 것 같은데, 아주 생소하다.
    "(인간의 문제/조건은) 존재가 실존을 선행한다는 것이다." 라는 실존주의의 표어가, 생명에도 그대로 적용되지 않나 싶어서 써 본 말인데요, 조금 정리 해서 재와실존 페이지에 정리해보겠습니다. 흑... 사실 자신없군요 ;) 존주의에 익숙한 분이 좀 ...
    사르트르의 "실존(존재)이 본질에 우선한다"는 말씀을 하시려던 건 아니었는지요? 서양 철학의 역사에서 실존과 본질은 대부분 구분되어 이야기 되어 왔지만, 우리가 "실존"이니 "존재"니 하는 번역어로서의 철학용어는 대부분 같은 것(영어로 existence)을 지칭하는 것으로 알고 있습니다. --김창준
    아이쿠 부끄러워라... 같은 단어에 대한 역어인가요? 존주의에 대해서 배울때, 두 단어를 구분해서 사용하던 선생님께 배웠는데, 그래서 당연히 다른 단어겠거니 하고 제 마음속 단어록에 올라있네요. 다시 체크해보고, 사용을 정리해 놓겠습니다. --nayas


목적/명세/실존이 선행되고 그 목적에 귀착되기 때문에, 프로그램 세계에서는 함수가 환경에 적응 방산하여 변화한다거나 창발적으로 새로운 기능의 일부가 되거나 하는 일은 드물다. 어쩌면 이것은 그저 프로그램이 충분한 복잡성을 지니고 있지 못한 탓일 수도 있으며(낙관론), 아니면 생명 현상 자체에 뭔가 특별한 것이 있기 때문인지도 모른다(비관론). 이런면에서 현재의 프로그램들은, 그 자체로는 거의 창발성이 내재되어 있지 않다.

인간중심적인 감정론에 휩쓸리지 않는 현대의 진지한 이론들은 대부분 생명의 특질이 신경계와 기타 육체의 복잡도에 따른 창발에서 오는 것으로 본다. 그리고 사고 과정에서 임의성은 양자역학적 불확정성에 의해 얻어진다고 본다. 참고할만한 서적으로 "인공생명", "과학은 지금 물질에서 마음으로 가고 있다" 등이 있다.


아무래도 프레드울프나 로저펜로즈, 프리초프 카프라 등의 얘기를 신뢰하시는 건 별로 좋은 선택이 아닌듯 싶은데요... --아무개 1


음... 프레드 울프는 사실 검증된 바 없는 얘기라 (아직 검증할 수도 없죠) 잘 모르겠고, 프리초프 카프라에 대해서는 독창적일 뿐이라고 생각합니다만, 로저 펜로즈는 왜죠? 호킹 씨와 함께 많은 연구를 펼친 견실한 학자라고 생각하고 있습니다만.. 일반적이지 않은 주장을 한다고 해서 무조건 신뢰할 수 없다는 식은 곤란하다고 생각합니다. 테슬라가 교류 전기의 유효성을 주장했을 때, 그는 미친 사람 취급을 받았지요.

에... 또, 로저 펜로즈는 인간의 정신을 강한 AI 로 구현할 수 있다는 점을 분명하게 부정하고 있습니다. 즉 저랑은 반대 논점에 서 있습니다. 저는 컴퓨팅의 규모가 커지고, 속도가 빨라지고, (아마도 양자역학적 효과에 의한) 완전한 임의성을 연산 과정에 부여할 수 있다면 진정한 의미에서 튜링 테스트를 통과하는 R. 다닐 올리버를 만날 수 있으리라고 믿고 있습니다.


팬로즈를 언급한건 사고 과정의 임의성이 양자적 불확정성과 연관된다는 듯 말씀하신 부분을 두고 한 얘기일거예요. 전 AI가 TuringTest를 통과하기 위한 조건으로 완전한 임의성 같은 개념이 필요하다고 생각하진 않아요. Psuedo Random 정도면 충분할거라고 생각합니다. --아무개 2

썰의 논점에 따르자면, 언어 체계의 모든 질의를 담을 만큼 방대한 시스템은 우리가 지능이라고 부르는 의식을 지니지 않는다 해도 TuringTest 를 통과할 수 있습니다. godaiTuringTest 가 지능... 이라기보다는 의식이라는 것을 검증할 수 있는 테스트라고 생각하지는 않습니다. 물론 의식이 자연 법칙을 넘어서는 어떤 것이라고 생각하지도 않습니다. 아무개 2 님 께서 말씀하신 것처럼 임의성이 연산 과정에 부여되고, 창발에 필요한 규모를 넘어서는 시스템은 의식을 가질 것이라고 강하게 믿고 있습니다. 인간도 진화의 결과로 의식을 갖게 된 것이니까요.

썰의 논점을 따르신다는 건, 그야말로 권장되지 않는 길입니다만.....ㅋ--아무개 1





"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>