[TIL] 구글 엔지니어는 이렇게 일한다

깨야할 환상

  • 리눅스는 리누스 토발즈 혼자 만든게 아니다. 토발즈는 천재라기 보다는 다른 사람들을 잘 설득해 프로젝트에 동참시킨 사람에 가깝다.
  • 파이썬은 귀도 반 로썸 혼자 만든게 아니다. 시작은 귀도 반 로썸이지만, 수많은 사람들의 호응과 컨트리뷰션이 지금의 파이썬을 있게 했다.
  • 환상과는 다르게 세상은 한명의 천재가 바꾸지 않는다. 다만, 유명한 사람을 보고 우리는 너무나 쉽게 모든 공을 그 사람 하나에 돌릴 뿐이다.

소프트웨어 엔지니어링

  • 시간, 규모, 트레이드 오프를 모두 고려해야 소프트웨어 엔지니어링이다.
  • 소프트웨어 엔지니어링은 시간의 흐름에 따라 지속가능하게 설계하는 것이다.
  • 소프트웨어 엔지니어링은 확장가능하다. 한 사람이 하던 것을 팀으로, 조직으로, 하나의 거대한 대기업으로 할 수 있어야 한다.
  • 소프트웨어 엔지니어링은 트레이드오프를 고려한다. 시간 측면에서 지속가능한 설계가, 너무나 큰 비용을 발생시킬 수도 있다. 빠르게 시장의 요구를 반영하기 위한 임기응변이 나중에는 큰 기술부채로 돌아올 수 있다.

하이럼의 법칙

API의 사용자가 충분히 많다면, API 명세에 적힌 내용은 중요하지 않게 된다. 사람들은 눈에 보이는 모든 동작/행위를 어떻게든 이용하고 있을 것이기 때문이다.

이는 마치 엔트로피와 비슷하다. 많은 사용자가 API를 사용할수록, 목적을 벗어나 사용하는 사람이 생기기 마련이고, API 문서에 적혀있지 않는 기능의 변경은 그 사용자가 의지하는 서비스에 타격을 주게 된다.

예를들어, 해시는 순서가 없다고 우린 경험적으로 알고 있다. 하지만, 동일한 해시 순서가 유지되면, 누군가는 해시가 동일한 순서로 순회할 수 있을 것이라 가정하고 프로그래밍 하게 된다.

규모와 확장

구글은 하나의 천재로 이뤄지지 않았다. 수만명의 사람들이 함께 일할 수 있는 시스템이 갖춰졌기에 지금의 구글이 된 것이다.