프로그래밍의 특급 비밀

coolspeed

This book has a lot of knowledge in it, but it is mainly about expertise. It is going to try to teach you the things about Unix development that Unix experts know, but aren’t aware that they know.
– Eric S. Raymond, “The Art Of UNIX Programming”

벤처캐피탈 업계에는 이런 역학이 존재합니다: 최고로 잘한 투자는 수익이 나머지 모든 투자 수익의 합보다 많다. 나머지중 최고로 잘한 투자는 나머지 모든 투자 수익의 합보다 많다.

프로그래밍에도 비슷한 역학이 존재합니다.
프로그램은 90%의 실행시간을 10%의 코드 실행에 소모합니다.[1]

이것을 통해 우리는 놀라운 추론을 해낼 수 있습니다.
시스템을 성능이 낮지만 생산성이 좋은 언어로 짜고, 그중 10% 의 핫스팟만 찾아내 C++ 로 짜면 끝.

실제로 (일부) 천재 프로그래머들은 시스템을 어떻게 설계했을까요?

1. YouTube

검색창은 Go 프로그램. 웹 애플리케이션 서버는 느린 Python 으로 짰습니다.

2. GitHub

“GitHub” 의 “Hub” 은 느린 Ruby on Rails 이고, “Git” 은 C.

3. Instagram

사진 저장은 Amazon S3 (네이티브 코드 예상). 웹 프런트는 C코드 (NginX). 데이터베이스는 C (PostgreSQL).
웹 애플리케이션 서버는 Django (Python).

4. Uber

DB: C++(MySQL)
Index: C (Redis)
애플리케이션: Javascript

5. Paypal

DB: C++
애플리케이션: Javascript [2]

6. LMAX

세계에서 가장 분주환 외환거래소. 초당 600만 트랜잭션 처리 성능.

얘네들은 Java 끝. 네이티브 코드가 없습니다.
아 아니구나. JIT (Just-In-Time) 컴파일러가 자동으로 핫스팟을 탐지해 그부분만 기계어로 자동으로 컴파일해 실행합니다.

게임업계를 보더라도:

야생의 땅: 듀랑고
DB: C++, Erlang, Go (Couchbase)
IO: C (gevent, or libev)
비즈니스 로직: Python

성능 이데올로기

Java 가 금방 나왔을 때 C++개발자들은 “Java 는 느려서 성냥개비 옮기는 장난감밖에 만들지 못해” 라며 비아냥거렸습니다.
그들이 어샘블리에서 “고급언어” 로 갈아탈 때 어샘 개발자들이 하던 말을 잊고, 똑같게.
그리고 일명 “스크립트 언어”들이 뜨기 시작할 때, Java 개발자들 또한 똑같은 말을 했습니다.
역사는 언제나 놀라울 정도로 유사할 뿐입니다.

생산성 이데올로기

Python 커뮤니티에는 이런 슬로건이 있습니다:

Life is short, use Python.

그들은 광고를 할 때 마치 C++사용자들이 야근하고 있을 때 Python 프로그래머들은 미리 일을 끝내고 여유있게 커피를 마시는 것처럼 광고합니다.
하지만 현실은, 다루는 언어에 상관 없이 모든 프로그래머는 바쁩니다.(프로그래머 제1법칙) 고로 상기 광고어는 적나라한 약팔기에 불과합니다.

Conclusion

프로그래머는 성능과 생산성 모두를 책임져야 합니다.
짜낼 수 있는 성능을 당연해 짜내야 하듯이 짜낼 수 있는 생산성 또한 짜내야 합니다.
밸런스가 중요하다고 생각합니다. 게임 밸런스나 워크 라이프 밸런스가 중요하듯이.
그리고 이러한 질문을 스스로에게 멈추지 말아야 할 것입니다:
시대는 빠르게 변하고 있는데, 나는 과거의 틀에 갖혀 새로운 밸런스 지점을 놓치고 있는게 아닐까?
또한, 글 맨앞의 벤처 역학을 상기시켜보면, 이러한 외부 환경 속에서 당신은 어떻게 당신이 짜고 있는 코드가 롱런할 수 있음을 확신할 것인가? 그렇지 않은 경우 과분한 최적화는 합당한가?

선현들의 가르침이 귀가에서 맴돕니다.

The first 90 percent of the code accounts for the first 10 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time.
—Tom Cargill, Bell Labs

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil in programming.
“너무 이른 최적화는 만악의 근원이다.”
– Donald Knuth [3]

References

[1] Program optimization: https://en.wikipedia.org/wiki/Program_optimization
[2] Node.js at Paypal: https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
[3] https://en.wikiquote.org/wiki/Donald_Knuth

댓글 남기기

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s