어셈블러나 C언어를 배운다는 의미
프로그램 개발자로서의 시작에는 행운이 따랐다. 컴퓨터 동아리 회장인 친구 덕분에 다수의 전산과 수업을 수강 혹은 청강하게 된다. 가장 도움이 되었던 강의는 어셈블러 수업이다. 기계어를 조금 진화시킨 어셈블러를 배우면서, 프로세서와 메모리가 어떻게 조화를 이루며 결과를 내놓는지를 체험하게 된다. 특히 메모리에 데이터가 저장되는 방식과 이들 정보가 어떻게 참조되는가에 대한 선명한 이해는 이후 다양한 프로그램 개발에 도움을 준다.
다차원 배열의 저장, 구조체를 위한 공간 확보, 주소를 이용한 저장 공간에의 접근은 효율적인 데이터 관리에 중요한 길라잡이가 되어준다. 자료 구조론이 선배 개발자들의 고민의 흔적이자, 아이디어의 보고로 흥미진진하게 다가오게 한다. IT의 이름에서 드러나듯이, Information을 처리하는 프로그램 개발의 보물 지도를 손에 든 셈이다.
엔트리 등의 프로그램에 쉽게 접근할 수 있도록 도와주는 툴의 장점은 알고리즘에 대한 이해다. 디지털 아티스트들을 위한 손쉬운 개발 툴들도 다수 선보이고 있는데, 기본적인 알고리즘에 대한 이해만으로도 충분히 원하는 결과를 얻을 수 있다. 단순한 흐름 제어는 데이터 관리와는 무관하게 진행할 수 있기도 하다. 대가는 막대한 메모리와 고성능 프로세서 그리고 최고의 네트워크 전송 속도다.
넷플릭스를 보고 있노라면 제한된 네트워크 성능을 극복해낸 엔지니어들의 영혼이 느껴진다. 화려한 그래픽을 자랑하는 게임에 스며있는 개발자들의 피, 땀, 눈물에 가슴이 먹먹해지기도 한다. 클라우드 서비스를 사용하면서 방대한 서버룸과 이들을 유기적으로 관리하는 아키텍처를 설계한 이들에 대한 존경심이 우러난다. 빅 테크 기업들이 쏟아붓는 연봉은 결코 헛되지 않다.
경쟁자가 많으면 보상은 적어진다. 수요 공급의 법칙이다. 컴퓨터의 기본 동작 원리를 이해한 소프트웨어 개발자는 흔치 않다. 화려한 기술보다 기초를 잘 다진 선수가 발전 가능성이 높듯, 펌웨어 등의 특수 직군에서만 사용된다는 C언어는 어려운 반면 컴퓨터 전반에 대한 체계적 기초를 다질 수 있게 한다. 어셈블러만큼은 아닐지 몰라도 소모품이 아닌 주도권을 가진 개발자가 되는 초석을 마련해 준다.
어쩌면 행운은 선택의 영역인지도 모른다. 불필요한 고행은 낭비다. 복리로 커지는 능력치는 굳건한 뿌리 위의 결실이다. 수많은 신기술이 쏟아지는 IT이지만, 빌 게이츠와 잡스 이후 컴퓨터의 프로세서와 메모리를 둘러싼 동작 원리의 변화는 200만 년 동안의 호모 사피엔스의 유전자 변화만큼 적다. 수많은 천재들도 기초 위에서 창의성을 펼치고 있다.