Today
-
Yesterday
-
Total
-
  • 기반 기술을 어디까지 알아야 할까?
    Life/Software Engineer 2016. 1. 5. 11:42

    "기반 기술"을 알아야 좋은 개발자이다. 대략 맞는 말이지만 알아야 하는 기반 기술의 깊이를 논의할 필요가 있다. 개발자의 시간 자원이 유한하기 때문이다.


    전산학이나 소프트웨어 엔지니어링의 진보는, 다른 분야와 마찮가지로, 이전 세대가 완성했던 토대 위에 새로운 것을 더하는 과정이다.[각주:1] 어떤 기술이 기반 기술이 될 정도로 널리 인정받으면 그것 위에 다음 계층이 놓인다. 이렇게 기술은 블럭처럼 하나씩 쌓여나간다.


    각 계층은 추상화로 구분한다. 새로이 추가된 층위는 하위 단계를 추상화한다. 만약, 하부 영역의 세부 구현에 의존한다면-즉, 추상화를 하지 않았다면- 아래 부분을 확장한 것이지 새로운 계층을 추가한 것이 아니다.


    하위 영역를 추상화하면 문제의 범위가 현저하게 낮아진다. HTTP 프로토콜을 논할 때 TCP/IP의 구현 방법까지 끌어들이지 않는다.[각주:2] 시스템콜이나 기계어를 몰라도 자바 프로그래밍을 할 수 있다.


    "매우 깊은 계층[각주:3]을 알면 좋다."라는 이야기를 종종 듣는다. 맞는 말처럼 들이지만, 함정이 있다. 아예 아무것도 하지 않는 것과 비교하기 때문이다. 정확하게 하려면 "나의 문제 계층을 더 공부하는 것"과 비교해야 한다. 이는 경제학에서 기회비용이라고 하는 것으로, 매우 깊은 계층을 공부하는 기회비용은 아무것도 하지 않는 것이 아니라 문제에 직접적인 공부를 포기하는 비용이다. 예를 들어 웹개발자라면, 최근에 떠오르는 웹프레임워크를 공부하는 것이 TCP 스펙을 읽는 것보다 더 경제적이다.


    기반 기술의 학습은 탑다운 방식이 바텀업 방식보다 더 낫다. 나의 영역과 주변의 기술을 충분히 넓게 이해하면서 더 깊이 있는 단계로 파고 들어가는 것이 효과적이다. 내가 서 있는 기술과 거리가 먼 단계일수록 효용이 떨어진다. 예를 들면, RESTful API를 설계/구현하는데 HTTP를 이해하는 것으로 많은 부분이 해결되며 유용하다. 반면, TCP/IP 지식은 상대적으로 덜 유용하다. 즉, TCP/IP를 공부할 시간에 HTTP 헤더 필드나 응답 코드를 더 아는 것이 효과적이다.


    1. 가끔 그 토대 자체가 무너지는 혁명도 있긴 하다. 기반 기술을 말하는 지금은 논지를 흐트러뜨린다. [본문으로]
    2. 최근에는 HTTP가 기반 기술이 되어서 새로운 기술을 얻고 있다. HTTP 기반 어댑티브 스트리밍이 대표적인 예이다. [본문으로]
    3. 흔히, 로우레벨이라고 말한다. 운영체제, 시스템 아키텍처, TCP/IP/Ethernet 등이 이에 속한다. 더 나아가서 수학, 전자기학 등도 포함될 수 있겠다. [본문으로]

    댓글

Designed by Tistory.