소프트웨어, 하드웨어의 아버지

1. 들어가며
요즘 나는 블로그 댓글 보는 재미로 산다. 사람들의 칭찬 한마디 보는게 이제 8개월된 딸내미의 방긋대는 얼굴만큼 흐뭇하다. ‘이러다 너드들 사이에서 강풀 (만화가)되는거 아냐?, 우훗’, 상상도 해보다가 이내 짧은 글심이 떠올라 좋은 주제나 찾아야지 생각하게 된다. 이번에 풀고 싶은 주제 역시 지난번처럼 신문기사를 읽다가 떠올랐다. 안철수님의 “하드웨어 대응 만으로는 승산없다” 라는 기사의 한 부분에 이런 언급이 나온다:

“얼마 전 하드웨어·소프트웨어·인터넷 서비스 등으로 분류해 IT업계 트렌드를 설명했더니 대기업 전자회사 최고기술책임자(CTO) 한 분이 소프트웨어는 하드웨어를 구동시키는 하나의 부분이므로 분류가 잘못됐다고 지적하더라.”

“소프트웨어가 하드웨어를 구동 시키는 하나의 부분”이다. 왠지 울컥하다. 그래, 하드웨어로 성공한 우리나라에서 소프트웨어의 역할은 그게 맞다. 빠른 CPU, 넓은 메모리에 광활하고 밝은 디스플레이, 미려한 외관으로 장식된 하드웨어를 소프트웨어는 “구동” 시키고 있다. “구동”이 주는 어감….그렇지, 소프트웨어는 뛰어난 하드웨어가 돋보이도록 낮은곳에 숨어 봉사하고 있다.  SW에 큰 관심없는 일반인들에겐, 형체없는 소프트웨어를 설명하는데 이것보다 더 좋은 표현이 있을까?. 얼마전 SW벤쳐에서 일하는 내게 아버지가 “너희 회사 공장은 어디있냐?” 하신적도 있다 (공장은 마음속에 있어요 아버지). 아마도 “하드웨어 나고, 소프트웨어가 나오는 거다” 라는게 상식처럼 되어버린 세상인데, 근데, SW로 온가족이 먹고 살아서 그런가, 왜 나는 이 기사에 울컥하고, 뜨거운 것이 솟아오르는 건가?…그렇게 고민하며 주말을 보냈다.

나는 이 에세이에서 그 반대의 이야기를 하고싶다.  “소프트웨어가 하드웨어의 애비다” 라고 외쳐본다. 여기에서 나는 소프트웨어-본질-의 역사와 하드웨어-우연-의 역사에 대해서 소개하고, 역사가 우리 프로그래머들에게 던지는 의미에 대해 쓴다. 이 글의 큰 줄거리는 지난 블로그에서도 소개했던 [1] 에서 영감을 얻었다. 그리고 좀 더 깊게 들어가는 증명은 컴퓨터 이론 텍스트북 [2,3] 에서 찾을 수 있다 (뭐, 증명이라고? — 그렇다. 심하게 재미 없을수도 있다).

2. 라이프니치의 꿈
계산과 논리는 인류가 기록물을 남긴 시절 이전부터 존재했을거다. 1+1=2 라는 사칙연산말고도, 일련의 논리적 절차를 거쳐서 결과를 보이는 계산 — 즉 알고리즘– 에 대한 인류의 자각은 아주 먼 옛날(bc)의 기록에서도 찾을 수 있다 [4]. 비 전공자에게 알고리즘은 좀 낯설수 있으니 예를 들면서 시작하자.

문제: 주어진 임의의 숫자 나열 중 가장 큰 숫자를 찾아라

1) 제일 큰 숫자를 저장할 공간을 a 라고 부른다.
2) 제일 처음 숫자를 a에 집어 넣는다.
3) 모든 수에 대해서 a와 비교해, a보다 더 큰 숫자가 나오면 a에 집어 넣는다.
4) a를 출력한다.

엄청 간단하다. 한단계 이상의 논리적 절차를 걸쳐서 결론을 냈으니 아무튼 알고리즘이다. 조금 더 복잡한 알고리즘을 소개하자면 binary search같은것이 있겠다.

문제: 순차적으로 정렬된 숫자들 가운데서 숫자 K를 찾아라

1) K와 중앙에 위치한 수를 비교한다.
2) 비교한 결과 같을 경우, 찾았음을 알리고 종료한다.
3) K가 작을 경우엔, 처음부터 중앙 바로 전까지의 숫자를 가지고 1)을 반복한다.
4) K가 클 경우엔, 중앙 다음부터 마지막까지 숫자를 가지고 1)을 반복한다.

이같은 알고리즘의 기록은 bc.300 년전 이상으로 올라간다 [4]. 일련의 논리적 절차를 거치는 계산이 알고리즘인것은 알았지만, 17세기까지 아직 절차를 어떻게 표현할 것인가는 인식하지 못했다. 현대의 프로그래밍 언어가 바로 그런 역할을 한다.

그런데 역사상 최고의 수학자중 한명인 독일의 라이프니츠(1646-1716)는 그 옛날 이런 발칙한 상상을 시작한다.

“계산과정(알고리즘)을 몇가지 글자로 표현할 수 있다면, 그럼 어쩌면 세상 모든 알고리즘에 항상 답을 주는 마법과 같은 기계(machine)를 만들수 있지 않을까?”

다시 말해서, 알고리즘을 정해진 언어로 표현해 낼 수 있다면, 그럼 우리는 그 언어로 써내려간 스토리를 마법의 공식에 집어 넣을 수 있지 않을까? 그리고 그 공식은 즉각 답을 내어준다니, 라이프니츠의 상상은 진정 대인배다웠다. 프로그래머라면 금방 알것인데, 라이프니츠의 상상은 우리가 매일 하는 그짓이다. 프로그래밍 언어로 알고리즘을 써내려가고, 이를 컴퓨터에게 주면, 컴퓨터는 항상 답을 준다. 그런데, 그가 발칙한 이유는  이 단어, “항상 (Always)”, 에 있다. 정말 모든 질문에 컴퓨터는 정답을 이야기 하나? 이 질문이 주는 깊이는 대단해서, 참으로 증명되면 적절한 데이터를 주었을때 “신이 존재하는가?” 의 질문에도 답을 할수 있다는 뜻이다. 이에 감명받은 어떤 신학자는 수학 공식으로 신의 존재를 증명하려는 잉여행동까지 감행한다.

이를 라이프니츠의 Dream Machine 이라고 부른다. 그가 상상한 마법의 기계(Machine)는 물리적 기계(하드웨어)가 아닌 무형의 “공식” 혹은 “알고리즘” 이다. 그당시 상상으로는 이 마법 레서피가 적힌 책을 들고 있는 사람에게 알고 싶은 질문을 (프로그램 언어로)써서 주면 그 사람이 마법 레서피로 주어진 문제를 계산해 결과를 가르쳐주는 것이다. 컴퓨터는 컴퓨터인데, 사람이 계산하는 컴퓨터라니, 엄청 느렸을 거고 담당자의 기분 따라서 결과가 달라졌겠지?

어쨌든, 라이프니츠는 인류가 “Let us calculate!” 이렇게 외치는 순간이 곧 올 것이라 믿었다. 라이프니츠 이후, 불(Boole), 프뤠게(Frege), 칸토(Cantor), 힐버트(Hilbert)로 이어지는 논리학, 수학의 거장들이 하나 하나 문제 해결을 위한 단초를 제공하게 된다. 그들은 이 문제에 대해, “Yes: 그래 그런 마법의 공식은 존재해!”, 혹은 “No: 그런 마법 공식은 존재할 수 없어!”, 이 둘 중 한가지를 증명해내기 위해 평생을 잉여짓으로 보낸다. 그리고 20세기에 와서야 우리는 결론에 도달했다.

3. 튜링의 잉여짓
수백년을 이어온 이 질문은 영국의 젊은 천재 수학자 튜링 (Alan Turing, 1912-1954)[6]에게도 최고의 도전거리였다. 하지만 안타깝게도 그 보다 앞서 이  질문에 답을 한 또 하나의 천재 수학자가 있었으니 그가 바로 오스트리아 출신 괴델 (Kurt Godel)[7]이다. 괴델은 25세 되던 1931년 Incompleteness Theorem 을 발표하고, 라이프니츠의 꿈 – Dream Machine – 은 존재할 수 없음을 증명했다. 즉 세상엔 답을 할 수 없는 어떤 문제 (질문)가 존재하는 것이다. 어쩌면 당연하다. 어떻게,”엄마 좋아, 아빠 좋아?” 혹은 “짜장이 갑이냐, 짬뽕이 갑이냐?”  이런 질문들에 답을 할 수 있겠는가?

괴델의 완벽한 증명에도 불구하고 튜링은 왠 똥고집이었는지, 자신만의 사고로  Dream Machine이 존재할 수 없음을 증명하기 시작했다. 잉여짓의 좋은 예다. 그 결과가 컴퓨터 학과 학생들의 헬게이트를 열어버린 튜링 머신이다. 여기서 나도 뭔 똥배짱인지는 모르지만, 튜링의 증명을 소개한다. 그동안 두편의 블로그로 쌓아온 “이해하기 쉽게 쓰는 블로거”의 이미지를 한방에 날려버릴 절호의 찬스다! 굳이 이런 짓을 하는 이유는, 이 증명안에 설명하긴 참 어렵지만, 심오한 진리가 있기 때문이다.

컴퓨터 프로그램은 가장 단순히 표현하면 위의 그림과 같은 일을 한다. 즉 프로그램 P는 주어진 인풋 데이터를 가지고, 질문이 참인지 거짓인지를 대답한다. 바로 이때, “어 근데 어떤 질문들은 참/거짓 말고 다른 대답을 하잖소?” 라고 물을 것이다. 예를 들어, 아까 설명한 최대값 찾는 알고리즘은 결과값이 숫자여야 한다. 하지만 그런 질문들은 쉽게 참/거짓으로 변환이 가능하다. 즉, 나열된 숫자에 대해서 “1보다 더큰 수 있냐?”, “2보다 더큰 수 있냐?” 이런 식으로, “아니오” 가 나올때까지 질문하는 것이다. 이것이 라이프니츠 전까지 존재했던 모든 알고리즘 혹은 논리적 사고의 가장 단순한 형태다.

우리들의 아버지 튜링은, Input, P, 와 T/F 결과값으로 이루어지는 이 단순한 형식을 신비하게 변형시킨다. 아래의 그림은 그의 Halting 프로그램을 표현 한 것이다.

이 프로그램은 특이하게 인풋으로 프로그램(P)과 데이터(I)를 모두 받는다. 그리고 내부에서 하는 일은 받은 P를 데이터 I를 넣어 돌리는것이다 (너드 언어로 에뮬레이션 한다). 그리고 나온 결과 값이 참일 경우, 거짓을 출력하고, 반대로 거짓일 경우 참을 출력한다. 그럼 이런 프로그램을 진짜 만들 수 있냐? 라는 질문이 나오는데, 조금만 생각해 보면 그리 어렵지 않다. 잠시 “너드” 모드로 들어가서 설명하자면:
– H라는 프로그램과 P라는 프로그램 모두 C 언어로 짠다.
– H는 내부에서 gcc 를 콜해서 P를 컴파일 한다. P의 바이너리가 나온다.
– Fork하고 execute해서  P를 돌린다. 데이터는 I를 넣어준다.
– 나오는 결과값 검사해서 반대를 출력한다.

여기까지 읽고 계신분들께 존경을 표한다. 갈길이 그리 멀지 않다. 여기서 한가지 이상한 짓을 해보자. 아래와 같이 H 프로그램의 인풋으로 H 프로그램 소스코드를 두번 넣는 것이다.

이 경우 H프로그램이 하는 일은 무엇일까? 다름 아니고 H프로그램 자신의 소스코드를 컴파일하고, 돌려서 결과를 반대로 출력하는 것이다. 그럼 위의 경우에 H 프로그램의 결과값은 무엇이 될수 있을까?

참: H가 참이 되려면 안에서 돌아간 H가 거짓이어야 한다…어?
거짓: H가 거짓이려면 안에서 돌아간 H가 참이어야 한다…어?

말이 안된다. H는 어떤 결과도 낼 수 없다. 다시 말해  H라는 프로그램은 존재 할 수가 없는 것이다.  바로 이것이 튜링이 라이프니츠의 Dream Machine을 반증하기 위해 만들어낸 존재할 수 없는 알고리즘 (Undecidable problem) 인 것이다.

4. 폰뉴먼과 우연한 하드웨어
과학에 2등은 없다. 튜링은 괴델보다 늦게 증명을 했으니 그는 루저였다. 그러나 튜링은 괴델과 함께 타임지의 20세기 100대 인물에 올라가 있고, 컴퓨터의 아버지라 불리고 있다. 매년 주어지는 컴퓨터의 노벨상을 튜링 어워드라 부른다. 튜링의 놀라운 업적은 증명과정에서 보여준 H라는 프로그램에 있다. 튜링 전에도 원시 형태의 컴퓨터들이 있었는데, 이것들은 기계나 전기를 활용하여 단 한종류의 알고리즘만을 구현하는 것이었다. 이를테면 아래의 사진은 튜링보다 100년이나 앞서 시도됐던 Charles Babbage의 초대형 미분방적 계산기 부속품이다. 오로지 미분방적식만 풀 수 있는 거대한 기계다.

그런데 튜링의 증명과정에서 보여준 H 프로그램은 그 내부에서 임의의 프로그램 P를 수행할 수 있다. 그는 어떤 형태의 프로그램 P든 간에 돌리고 결과값을 산출할 수 있는 H 프로그램을 어떻게 만들어 내는지를, 읽고 쓰기가 자유로운 테이프를 활용해서 보여주었고, 이를 우리는 Universal 튜링 머신이라 부른다. 어떠한 종류의 프로그램 (SW)이든 받아서 돌리고, 결과를 보여주는 어떤것, 왠지 컴퓨터의 냄새가 솔솔 나지 않는가?

이 아이디어를 처음 하드웨어로 구현한 사람은 바로 폰 뉴먼 (John Von Neumann) [8]이다. 폰 뉴먼은 20세기 최고의 천재로 불렸고, 별의 별 분야(사실 잘 모르니 이렇게 표현할 수 밖에)에 업적을 남긴 수학자였다. 그는 1945년, 튜링이 생각해낸 방식을 좀 더 구체화시켜서, 프로그램이 메모리에 저장되는 컴퓨터 EDVAC [5]의 컴퓨터 구조를 고안했다(너드언어로, 프로그램 카운터, 논리연산, 레지스터, 연산과 데이터 메모리 통합 고 따위것들이다). 그가 써내려간 구조를 하드웨어 천재들 ( John Mauchly and J. Presper Eckert)이 구현해 내는데, 이것 저것 잡다한 아날로그 전기부품을 다 써보다가, 우연히 TV등에 널리쓰인 진공관을 활용해 이런 괴물 컴퓨터를 만들어 내기에 이른다.

여담으로, 폰뉴먼은 낚아채기의 달인이다. 폰뉴먼은 튜링의 논문에서 아이디어를 얻었으면서도 자기 저서들에서 이를 언급하지 않았다. 또 함께 일했던 하드웨어 달인들의 영향을 무시하고 무명의 용사들로 만들어 버린 결과, 훗날 그들과 특허 전쟁을 치룬다. 괴델과 튜링 모두 타임지의 20세기 100인에 선정되었지만, 폰뉴먼은 대단한 업적에도 불구하고 선정되지 못했다. 어쨌든, 폰뉴먼의 구조는 70년이 지난 지금도 여전히 유효해서, PC, 타블렛, 스마트폰 모두 여전히 폰뉴먼 구조라 부른다. 다 알다시피, 이후 6-70년대 실리콘과 마이크로프로세서의 혁명으로, 컴퓨터는 인류에게 본격적으로 침투했다.

5. 결론
여기까지 써놓으니 읽는분들께 왠지 미안하다. “이따위 길고 지루한 역사 이야기만 하다니, 대 실망이다!” , 이런 원망이 들리는듯 하다. 내 얕아빠진 지식을 길게, 가까스로 풀어놓은 이유는…

“소프트웨어는 하드웨어를 구동시키는 하나의 부분 ”

나는 이 말이 진정 듣기 싫기 때문이다.

bc 300년전에도 존재한 유클리드의 알고리즘, 라이프니츠가 상상한 모든 질문에 대답해 주는 Dream Machine, 그리고 컴퓨터의 표본인 튜링의 Universal Machine 까지, 그 어떤 것도 하드웨어가 아니었다. 인간의 두뼘남짓 뇌에서 피어난 논리의 결과물, “지식(Knowledge)이란 무엇인가?” 이 질문에 인생을 걸었던 철학/과학자들의 피와 땀이 만들어 낸 결과물은 바로 소프트웨어다.  (참고로 철학박사인 친한 형과 비슷한 대화를 나눈적이 있다. 그 형은 위에 언급된 모든 사람들을 알고 있었다.)

위 카툰처럼 우리의 소프트웨어와 프로그래머들이 받고 있는 대접이 너무 씁쓸하다. 소프트웨어는 우연의 산물 하드웨어를 보조해주는 또 다른 우연이 아니라, 태초부터 인간의 인간다움속에 내재돼있던 고귀한 창조물이다. 학부 1학년이 과제로 짜는 100줄의 코드도, 수백명 엔지니어가 함께 짜는 안드로이드의 100만줄 코드도 모두 동일하다. 주어지는 문제는 다르지만, 우리의 이 작은 뇌로 고도의 생각을 집중하고, 논리의 다리를 쌓아나가 목표에 다다른다. 우연한 하드웨어 (x86, 메모리 크기, 디스크의 속도)와 환경 (데드라인, 돈, 사회적 시선)의 제한에 둘려쌓여 있지만, 우리는 그 한계들마저 소프트웨어로 계산하고, 하나 하나 해결해 나가는 그 즐거움에 취해 산다.

“소프트웨어는 하드웨어를 구동시키는 하나의 부분 “

천하에 불효자들이나 지껄일 수 있는 소리일 뿐이다.

– 박상민 http://twitter.com/#!/sm_park

[1] The Universal Computer: The Road from Leibniz to Turing by Martin Davis
[2] Introduction to Automata Theory, Languages, and Computation, by John E. Hopcroft, et al.
[3] Introduction to the Theory of Computation, by Michael Sipser
[4] Euclidean Algorithm: http://en.wikipedia.org/wiki/Euclidean_algorithm
[5] EDVAC: http://en.wikipedia.org/wiki/EDVAC
[6] People of the century: Alan Turing (http://www.time.com/time/magazine/article/0,9171,990624,00.html)
[7] People of the century: Kurt Godel (http://www.time.com/time/magazine/article/0,9171,990621,00.html )
[8] John Von Neumann: http://en.wikipedia.org/wiki/John_von_Neumann

51 thoughts on “소프트웨어, 하드웨어의 아버지

  1. 오늘도 여전히 이해하기 쉽게 이야기를 풀어주셔서 감사합니다! ^^ 오늘 내용을 가지고 비약해보면 fix된 기능을 제공하던 피쳐폰 세상에서 사용자가 직접 customizing을 가능케하는 스마트폰 세상으로 순식간에 바뀌는 과정도 설명이 될 것 같네요. 실제로 스마트폰 덕택에 요즘 체감하는 분위기는 만평에 나오는 일용직보다는 조금 대우가 좋아진 것 같긴… 하네요. 다음엔 Cloud 세계에 대해서도 오늘 수준의 ‘이해하기 쉬운’ 글이 올라왔으면 좋겠습니다 ^^

  2. 이쪽 계열은 문외한인 완벽 문과 태생이라 중간 알고리즘 부분을 제대로 이해하지는 못했지만, 아주 재미있게 읽었습니다. 알맹이인 컨텐츠가 있고 나서야, 그걸 담고 표현해 낼 매체가 있다는 (문과식) 저의 생각과도 일치. 감사합니다!

  3. 잘 봤습니다.
    소프트웨어로 밥 먹고 살고 있으면서 이런 역사는 모르고 있었네요.
    누군가에게 “너는 애비 애미도 없냐!!”라고 말하고 싶어졌습니다.ㅎㅎㅎ

  4. 소프트웨어가 하드웨어를 돌리기 위해 나온 것이 아니라 하드웨어가 소프트웨어를 돌리기 위해 나온 것이죠. 생각해보면 당연합니다. 좋은 글 감사합니다.

  5. 정말 좋은 글 고맙습니다!
    이렇게 어려운 이야기를 재미있게 풀어주시다니, 소프트웨어계의 강풀! ^^;

    그런데, 한가지 괴델의 불완정성 정리에 대해 명확하게 설명할 필요가 있는데요.
    즉, 라이프니츠의 드림머신은 1928년 힐버트의 결정문제(Entscheidungsproblem)로 계승되었고, 이는 정확히 괴델이 아닌 튜링과 람다 계산법의 처치(Alonzo Church)에 의해 불가함이 증명되었습니다.
    물론 증명에 있어 괴델의 영향을 받지만, 이 문제를 해결한 학자는 튜링과 처치입니다.
    (http://en.wikipedia.org/wiki/Entscheidungsproblem)

    반면, 괴델의 불완정성 정리는 “모순이 없는 모든 공리계에는 참이지만 증명될 수 없는 명제가 존재하며, 또한 그 공리계는 자신의 무모순성을 증명할 수 없다.”로써, 저 유명한 1900년에 힐버트가 제시한 수학 난제 23개 중 2번째 문제인 “산술의 공리들이 무모순임을 증명”에 대한 답이었습니다.
    (http://en.wikipedia.org/wiki/Hilbert%27s_second_problem)

    결론적으로 “3. 튜링의 잉여짓”에서 언급하신 괴델의 불완정성의 정리가 라이프니츠의 드림머신이 존재할 수 없음을 증명한 것이 아니라, 영향을 주었다 정도이고 증명은 튜링과 처치가 했다고 함이 더 정확한 표현이 아닌가 합니다.

    감사합니다.

    • 얕은 지식으로 쓴 글에 좋은 커멘트 감사합니다! 그런데, 제가 이해하고 있기로는 같은 문제 (드림 머신)에 대해 다른 속성(consistency)을 깨뜨림으로써 Godel이 먼저 드림 머신의 불가함을 보인것 아닌가요? 튜링의 증명은, 해결 불가한 문제의 예를 직접 보인 것이고 말이죠…물론 튜링, 처치 thesis가 증명한 결과도 대단한 것이지만, 결정적으로 드림머신 불가능 선언한건 Godel 로 이해했거든요.

      • 네, 저도 맞는 말씀이라고 생각합니다.
        다만, 수학사적 배경에서 괴델과 튜링이 해결하고자 했던 문제가 달랐던 것으로 이해하여 그 부분을 말씀드렸습니다.
        괴델의 불완정성 정리는 힐버트의 형식주의 수학이 주장하는 무모순성과 완정성에 대한 검증이었고,
        튜링은 수학 자동화가 불가함을 증명한 것으로 이해됩니다.
        즉, 넓은 의미에서 괴델의 불완정성 정리는 수학 자동화가 불가능함까지 내포하고 있다고 생각합니다.
        저야 말로 얕은 지식으로 한계가 오네요…
        수리논리 전공하신 분이 한번 정리해 주시면 좋겠습니다.

    • 괴델의 불완전성 정리에 대한 설명에서 “모순이 없는 모든 공리계”는 “산술을 표현할수 있는 모순이 없는 모든 공리계”로 바꿔야 되겠네요.

  6. SW에 엔지니어링과 모듈화 개념을 도입하면서 SW 스스로가 종속의 자리로 나앉은게 아닌가 생각해 봅니다. 장인의 산물이던 생산품이 대량생산으로 흔해지면서 장인은 단순노동자에 자리를 내줄수 밖에 없듯이요.

  7. 하드웨어-드리븐을 반대하다가 너무 반대쪽으로 간 느낌이… ^^; killer app은 계산이론만큼 하드웨어의 보급의 덕도 많이 봤죠.

    • 물론 맞는 말씀입니다. SW/HW 같이 나가는게 정상이고, 컴퓨터가 이렇게 보급된건 결국 마이크로프로세서 덕이니까요.. 글을 쓴 이유는 제 느낌엔 한국이 오랫동안 HW에만 치중해왔다고 생각이 들어서 였습니다. 그래서 약간의 오바한감이 있긴 하지만 일부러 소프트웨어를 좀 부각시켰습니다.

  8. 좋은 글에 주제넘게 댓글을 달아 봅니다.

    2007년 아이폰을 발표하는 자리에서 스티브잡스가 자신들의 소프트웨어에 대한 생각을 잘 표현한 글이라며 인용한 말이 있습니다.
    “People who are really serious about software should make their own hardware.” – Alan Kay
    하드웨어가 소프트웨어를 따라가야 한다는 말이라고 이해했습니다.
    애플은 실제로 그렇게 하고 있고요.

    8분20초 부근부터 보시면 나옵니다.
    도움되시길

    • “People who are really serious about software should make their own hardware.” – Alan Kay
      저는 이 말이 하드웨어가 소프트웨어를 따라가야 한다는 말이 아니고 하드웨어/소프트웨어 공동설계를 뜻하는 것 같네요. 실제로 애플은 하드웨어/소프트웨어 공동설계를 상당히 잘하는 기업으로 알고 있습니다.

  9. 하드웨어를 돌아가게 하는것은 소프트웨어죠. 소프트웨어가 없다면 하드웨어는 무의미 합니다. 의식이 없는 죽은 사람의 뇌는 의미가 있는지? 그냥 누군가에겐 골요리 정도로 쓸모가 있을지도.

    • Halting problem의 어떤 부분이 그런가요? 이해를 돕기 위해 halting 여부를 True/False 로 바꾸어 설명했습니다.

      • 바꾸면서 완전히 잘못되었습니다. H프로그램의 입력으로 H를 두번 집어넣었을때의 출력은 H프로그램의 입력으로 H를 한번 집어넣었을때의 출력의 역이 됩니다.
        즉 H(H)가 참이면 H(H,H)는 거짓이고, H(H)가 거짓이면 H(H,H)는 참입니다.
        H(H)와 H(H,H)는 입력이 다르므로 (H가 한번 들어갔냐 두번 들어갔냐 차이) 결과가 다르더라도 아무런 모순이 없습니다.
        튜링이 괜히 복잡하게 증명한게 아닙니다. 참고로 말하면 칸토르의 대각선 논법과 비슷한 방법이 쓰였는데 괴델의 불완전성 정리의 증명에서도 역시 비슷한 방법이 쓰였습니다. 🙂

      • 훌륭한 catch 입니다.. 그런데 H를 두번 넣은건, H(H) 를 넣은게 아니고, H+H 입니다. 하나의 H는 프로그램, 이어지는 H는 데이터 이 의미였습니다.
        데이터는 Null 이다 라고 설명하면 되긴 하는데, 그렇게 쓰면 앞에서 설명한 기본 모델에서 벗어나서 좀 복잡한 설명이 되거든요…하긴 그런 제 설명 자체도 복잡합니다. 프로그램으로서 H, 데이터도 H .. 그래서 아예 설명을 Skip 해 버렸습니다.

  10. 요즘 연속해서 올리시는 멋진 글에 또 댓글을 남기지 않을 수가 없네요.
    헌데, 소프트웨어는 하드웨어를 구동시키는 하나의 부분일 뿐이라는 그분께, “당신의 머리는 단지 원하는 방식으로 몸을 움직이기 위해 신체 각 기관에 명령을 내리는 부분이군요.”라고 말씀해주시지 그러셨어요. 🙂

  11. 저도 글 초반부에 나오는 기사를 봤어요
    프로그래머로서 저런 멘트에 울컥안할 수가 없네요 ㅎㅎ
    제가 미비했던 지식부분에 대해서 소중히 담아갑니다.

  12. 한국 대기업에 임원으로 있는 분들 대부분의 생각이 딱 저렇습니다. 저정도까지는 아니더라도, 싼 값에 대량으로 제품 찍어내서 팔다보니 원래 그런거다, 이럴 수밖에 없는거다… 로 자위하고 계시죠. 그런 방법으로 성공했으니 그게 맞는 걸 수도 있겠다 싶어서 크게 반박하진 못합니다. 요즘 소프트웨어가 크게 이슈가 되다보니, 자기의 한창 시절 소프트웨어 경험을 부풀려 이것도 해봤고 저것도 해봤고 자신은 소프트웨어 전문가라고까지 인식하고 계시는 걸 볼 수 있는데, 참 안타깝지요. 현업에 종사하는 입장에서는 이런 현실이 쉽게 타파될 것 같지는 않다는 점에서 아주 비관적입니다.

  13. 소프트웨어 개발자에 대한 처우도 처우지만 우리 개발자들부터 이런 긍지를 가질 필요가 있는 것 같습니다.
    간만에 긍지도 되새기게 해주셨고, nerd 들을 위한 내용이 많아 좋았네요.^^

    앞으로도 좋은 글 부탁드립니다. 🙂

  14. 핑백: What-How-Why-Why not? | Me learning, reflecting, and writing…

  15. 그건 마치 인터넷 망서비스를 하는 사람이 인터넷 위에서 행해지는 모든 서비스들은 인터넷(?)을 구동시키는 하나의 부분이라고 얘기하는 거랑 비슷한 거 아닐까요?

    상호 의존관계에 있는 건 명백한 사실이지만 platform 과 application 의 관계는 단순한 종속관계에 대한 논쟁보다는 그 시대에 얼마나 많은 variation 과 부가가치, 고용창출이 가능한지가 쟁점이 될 수 밖에 없는 것 같습니다. 하드웨어가 모든 소프트웨어가 무리 없이 돌아갈 수 있을 만큼 충분히(?) 발전하고 발전 속도가 더디어 진 이상, 소프트웨어의 세상이 온 것 만은 틀림 없는 것 같습니다.

    • 말씀하신대로 인터넷과 서비스 역시 같은 맥락인것 같습니다. 저도 소프트웨어 세상이 왔다고 믿습니다!

  16. 그런인식의 연장으로 정부는 SW인재양성을위 불철주야로 친히 돈들여 6개월 속성 프로그래머양성 전공무관을 부르짖고 기업은 실무형인재 양성을 부르짖는것이지요. 인식의 변화없이 SW인력선진화(?)는 불사하며 세금낭비이죠.

  17. 중요한것은 아니지만 본문중에 폰노이만 아키텍쳐를 언급하신 부분에서 인스트럭션과 데이터 메모리의 분리가 아닌 공유가 아닌가합니다.^^;;(하바드 아키텍쳐가 분리로 알고 있습니다…)
    우연히 들려서 좋은 글들 많이 보구 갑니다…앞으로도 종종 눈팅하고 가도록 하겠습니다…^^

    • 아 맞습니다. 메모리의 통합이죠. 좋은 catch 감사합니다. CPU 관점에서 통합된 메모리에서 불러오는 데이터, instruction 을 분리해 처리한다고 생각한게 오히려 거꾸로 된 표현이 됐네요. 본문 수정하겠습니다 ^__^

  18. “소프트웨어가 하드웨어를 구동시키는 하나의 부분일 뿐이다”라는 소릴 들었을 때 저는 반문하고 싶었습니다.
    ” 그렇다면 당신의 ‘자아’와 ‘정신’ 당신의 몸뚱이가 뭔가를 잘 먹고, 잘 싸고, 잘 움직일 수 있게 하기 위해 존재하는 것이겠군요. ”
    재미있는 글 잘 읽고 갑니다.~

  19. 핑백: 소프트웨어 문제가 SI 때문? – 따라쟁이

  20. 웹 기반 기술에서도 마찬가지였군요. 책 메모를 남깁니다.
    — 콘텐츠의 미래 (p.154) —
    [배너바 부시 Vannevar Bush] 가 아이디어를 내놓은지 20년만에 하이퍼텍스트 hypertext 라는 이름을 붙인 것은 테드 넬슨 Ted Nelson 이었다. 1965년 8월 세계 최초이자 최대의 과학 컴퓨터 학회인 미국컴퓨터 협회 연례 회의에서 역사가 만들어졌다. (..) 하버드 학부 시절부터 하이퍼텍스트를 구상하기 시작한 괴짜 컴퓨터 선지자라 할만한 넬슨은 부시의 연관 정보 경로 아이디어와 디지털 기술을 결합해 도독자들이 한 텍스트에서 다른 텍스트로 꼬리에 꼬리를 물고 이동하게 해주는 임베디드 링크 embedded links 를 상상했다. (…)

    그가 미국컴퓨터학회에 제출한 논문에는 기술적인 내용이 거의 포함되어 있지 않았다. 그도 그럴 것이 넬슨의 제안을 구현하기 위해서는 상당한 양의 메모리와 처리능력이 필요한데, 1960년대 중반에는 요원한 일이었기 때문이다. 컴퓨터 전문가들은 그의 아이디어를 탐탁잖게 여겼다. “넬슨이 이런 환상을 좇는 것은 전문적인 소프트웨어에 대해 무지하기 때문이다.” (의 게리 울프 Gary Wolf)는 기사에서 이렇게 단정한다.

    하지만 마이크로프로세서 기술과 메모리 용량이 급속도로 발전하면서, 예컨대 개인용 컴퓨터와 같은, 한때 불가능한 영역으로 여겼던 많은 것들이 가능해졌다. (..) 팀 버너스리 Tim Berners-Lee 가 궁극적으로 월드 와이드 웹으로 발전하게 될 인터넷 서비스를 제안했을 때, 그 설계의 중심에 바로 하이퍼텍스트가 있었다.

  21. 핑백: 컴퓨터 이야기 #1 – 생각에서 기계로 | Human-Computer Symbiosis

  22. 핑백: 컴퓨터 이야기 #2 – 천재들의 행진 | Human-Computer Symbiosis

  23. 지루하다니.. 하나도 안지루합니다 ㅋㅋ 웃음빵빵터지면서 잘봤습니다
    저는 이제 대학교1학년 전자소프트웨어학과(컴공) 다니게될.. 사람입니다
    블로그 자주들르겠습니다. 하하

  24. 검색하다 우연히 들리고는 하나씩 보고 있네요.
    저는 물리학을 공부하다가 전산분야에 관심이 있어 공부를 하고 있는데, 제 생각에는 하드웨어나 소프트웨어나 어느 하나에 얽매여 있지 않았으면 하네요.ㅎ

    라프니츠 등 과거 과학자이자, 수학자 들은 사실 무언가를 하기 위해서 둘다 발전시켜왔으니깐요. 문제는 국내 여론 의식 수준이 아직 부족해서 불효자 같은 발언이 나온것이 아닐까합니다. 학교라는 곳을 벗어나서 최신 정보를 얻을 수 있는 곳은 그리 많이 않으니깐요.

    이글도 재미있게 읽고 갑니다.ㅎㅎ

  25. 하하 울컥하시는 기분 이해합니다. 왜냐하면 저는 하드웨어쪽 일을 하고 있습니다만, 소프트웨어하시는 분들이 하드웨어쪽일을 그저 공돌이 운운으로 말씀들 하실 때 울컥하거든요. 싼 값에 벽돌 찍어내듯이 라는 표현을 들을 때도 마찬가지입니다. 소프트웨어쪽에서 열심히 하시듯이 하드웨어쪽도 온갖 설움을 가지고 세계에서 1,2위를 다투는 자리에 이루었습니다만, 칭찬은 커녕 마치 하드웨어쪽때문에 소프트웨어가 발전을 못한다는 투로 비난을 합니다. 그자리에 이루는 것이 쉬운 일이고 소프트웨어가 없으니 하나마나한 일이였을까요?
    소프트웨어 없는 하드웨어를 생각할 수 없고, 하드웨어 없는 소프트웨어도 생각할 수 없으니 서로를 존중해주는 분위기를 만들수는 없을까요?

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중