Talk is cheap. Show me the code.

Linus의 전설적인 명언이다. 컴퓨터 공학도라면 한번쯤은 들어봤을 이름 리누스 토르발스. 내가 이 이름을 처음 들었던 것은 System Programming 과목에서 Linux 를 처음 배울 때 였다. 처음 Linux를 접했을 때는, 엥?? 이게 뭐지?? 싶을정도로 기괴했고, CLI 를 처음 접했던 나는 정말 적응하기가 힘들었다. 하지만 사용하면 사용 할 수록, 그가 왜 이러한 운영체제를 만들었고, 어떤생각을 하고있는지 이해를 하기 시작했고, 사람에대한 관심이 생겨 찾아보다 Ted talk 에서 이야기 한 것을 보게되었고, 그에따른 이야기를 조금 해보려고 한다.

Who is Linus?

리누스가 뭐하는 사람인가. 이름에서 알 수 있다시피 Linux 를 만든사람이다.

대학교때 교수님이 만든 OS를 다듬다 만들었다고 한다… ㄷㄷ

그리고 무려 Git 을 만든 사람이다..!! 즉 오픈소스의 창시자라고 할 수 있는 사람이다. 아마 컴퓨터 공학도가 아니라면 체감이 안되겠지만, 이 사람이 없었더라면 다시말해서 LinuxGit 이 없었더라면 아마 현재는 우리가 살고있는 현재와 많이 다를 것이다. 일단 Linux 기반의 소프트웨어가 존재하지 않는다는점 -> 우리의 일반적인 휴대폰이나 태블릿 기타등등 얼마나 퇴화했을지 모르는것이고, 오픈소스가 없었다면 개발자들이 아직도 책으로 공부하며 Peer evluation, 혹은 code review 없이 개발을 했을지도 모른다. 하지만 깃의 개발을 통해 우리가 좀 더 쉽게 누구나 어떤 코드에 접근 할 수 있게 되었다. 그리고 이러한 개발을 한 그의 사상은 역시나 남들과 다른데 한번 들어보자.

Ted Talk

21분짜리 Ted Talk를 듣고있으면, 상당히 딴소리도 많이 한다. 자신의 근무환경이 어떻고, 부실하며, 개그도 치고 자신의 신념에 대해서도 말한다.

고양이 그르릉 소리를 들어야돼서 컴퓨터가 팬 소음이 심하면 안된다고 한다… ㅋㅋ

조금 더 본론으로 들어가, 자신이 어떻게 깃허브를 만들게 되었는지 설명하는 부분이 나온다. 애초에 리눅스가 협업을 해서 만든 프로젝트가 아니라고 설명하고, 거의 프로젝트가 완성이 되었을 때, 남들에게 보여주고 comment 를 받기 위해 만들었다고 한다. 처음에는 물론 아 이게 상업적 용도로 쓰이면 어떡하지? 라는 생각도 했다고 한다. 그럼에도 남들이 사용을 해보고, 누구나 PR 을 넣어서 수정을 할 수 있다는 장점이 더 크다고 판단해 만들었다고 한다. 그리고 여기서 리누스의 개그가 나오는데, 사실 깃은 사람들과 소통을 하기 위해서 만든게 아니라 소통을 피하기 위해 만들었다고 한다. 잉?? 이게 무슨 말일까.. 리누스의 명언을 보면 이해가 된다

Talk is cheap. Show me the code.

실제로 리누스가 깃을 만들 때, 21살이여서 사람 만나는거를 별로 안좋아 했다고 한다. MBTI는 I로 시작하는게 분명하다. 그래서 자랑을 하거나 리뷰를 받을 때도, 실제로 만나는것 보다, 사람이 사용해보고 코드로 review 를 해줄 수 있는 방법을 고안하다 나온 방법인 것 같다. 정말 컴퓨터 공학과인 사람이 생각할 만한 이유이고, 나도 너무나도 공감이 된다. 즉 본인이 깃허브를 만든 이유는 오직 리눅스를 만들다 우연히 만든거라고 했다.

근데 우연히 만든게 모든 세상 개발자의 중심지가 될줄이야..

그리고 리누스의 어린시절 이야기도 잠깐 언급된다. 자신은 코딩을 10살 때 부터 했고, 똑똑한 편은 아니였다. 똑똑하다기 보다는 자신에게 생긴 일에 고집이 쎄고 자부심이 강했으며, 한번 시작한 일을 끝날 때 까지 놓지 않는 성격이라고 했다. 하지만 제 3자인 내가 보았을 때 리누스는 성공하는 개발자의 덕목을 모두 가지고 있는 것 처럼 보였다. 우선, 한번 일을 시작하면 고집마냥 틀어박혀서 끝날 때 까지 나오지 않는것, 그리고 호기심이 생기면 어떻게 해서든 해결을 하려고 하는것. 그리고 말만 그렇게 하였지, 개발에 대한 재능도 엄청나다고 생각한다. 어떤 재능없는 사람이 21살에 자신만의 OS 를 개발 할 수 있겠는가.

그리고 특히 더 대단한 것은, 보통 일반인으 개발자의 수명이 30중반 까지라고 한다. 그 이후가 되면, 머리도 굳고 힘에 부쳐 많이들 힘들어 한다고 한다. 그래서 보통 그 이후 SI 직군이나 소프트웨어 공학쪽으로 더 빠진다고 한다. 하지만 리누스의 개인 깃허브를 보면, 아직까지도 거의 매일매일 리눅스에대한 개발을 하고있다. 여전히 많은 사람들이 PR을 남겨주고, 매일매일 확인하며 그에 상응하는 대응을 해준다. 이정도의 부와 명예를 가지고 있다면, 충분히 다른 일을 찾아 나설 수 도 있지만, 본인이 이러한 개발을 좋아하고 보다 완벽한 것을 추구하기 떄문이라고 보인다.

Ted Talk 중간에 코드를 잠깐 보여주고 어떤것이 좋은 코드인가에 대한 설명을 잠깐 한 적이 있다. 우선 코드를 한번 확인해 보자

remove_list_entry(enrty) {
	prev = NULL;
	walk = head;

	//Walk the list

	while (walk != entry) {
		prev = walk;
		walk = walk->next;
	}

	//Remove the entry by updating head or previous entry

	if (!prev)
		head = entry->next;
	else
		prev->next = entry->next;
}
remove_list_entry(entry) {
	//The "indirect" pointer points to the
	//address of the thing we'll update

	indirect = &head;

	//Walk the list, looking for the thing that
	//points to the entry we want to remove

	while((*indirect) != entry)
		indirect = &(*indirect)->next;

	//and remove
	*indrect = entry->next;
}

하단에 있는 코드는 실제로 리눅스에 있는 링크드 리스트에서 한 리스트를 삭제를 하는 과정을 보여주는 코드이다. 어떻게 보면 두 코드가 동일해 보이고, 실제로 동작을 하는 모습은 동일하다. 그리고 보통 우리는 첫번째 방법으로 코딩을 많이 한다. 포인터를 쓰는것이 아니라, 노드 두개를 가지고 하나씩 옮겨가며 삭제할 곳 까지 찾아간 다음 삭제하고 연결을 해주는 과정이다. 실제로 내가 보기에도 첫번째가 좀 더 보기가 쉽고, 직관적이라 생각을 했다.

내가 아직 코딩을 못해서 그런걸지도 모르지만, 아직도 포인터와 주소값을 왔다갔다하면 헷갈린다

하지만 리누스는 오히려 두번째가 더 좋은 코드라고 설명을 한다. 애초에 if를 쓰지 않고도 할 수 있고, 예외처리가 아예 필요가 없어지는 경우라고 한다. 내가 한국어로 표현을 잘 못해 직접 내용을 인용해 오겠다.

that sometimes you can see a problem in a different way, and rewrite it so that a special case goes away and becomes the normal case. And that's the good code

즉 한 문제에 대해서 갇혀있는 생각만 하지말고, 다양한 생각과 다양한 시각으로 보면 더 간편하고 직관적이며, 효율이 좋은 코드가 나올 수 있다는 것이다. 항상 생각을 하고 행동을 하라는 의미로 받아들이고 싶다.

오늘은 컴퓨터공학의 정말 중요한 인물인 리누스 토르발스에 대해서 알아보았는데, 정말 배울점이 많고, 신념이 뚜렷한 사람 같아서 정말 보기 좋다. 이 테드영상 이후로도 몇가지의 영상을 찾아보았는데, 정말 자부심이 강하고 멋진 사람이라고 생각한다. 나도 언젠가 이렇게 자신의 신념을 가지고 행동 할 수 있으며, 그에 따른 무게의 책임질 수 있는 사람이 되고싶다.