한동안 블로그에 글을 쓰지 못했다. 회사 일이 너무 바쁘기도 했었고 아이들을 기르면서 시간이 따로나지 않아서 글을 적을 여유가 없었던 탓이다.

미국 회사에 다니는 덕분에 가족과 많은 시간을 보낼 수 있지만 아이 양육에 있어서 양가 부모님이나 친척의 도움을 전혀 받을 수 없어서 양육을 온전히 다 담당해야 한다. 작년에는 와이프가 둘째를 임신하고 우리 가족이 회사에서 1시간 이상 떨어진 곳으로 이사를 간 탓에 출퇴근에 걸리는 시간 문제로 많은 고민을 해야만 했다. 아침에 회사를 가면서 딸을 데이케어에 보내고 회사 일을 끝내고 오는 길에 다시 데리고 오면서 하루에 거의 3시간 이상을 길에서 보내고 나니 집에 와서는 다른 무엇을 할 여유를 쉽게 가지지 못했다. 회사 일을 하고 가족을 돌보기만도 벅찬 2015/2016년이었다.

회사에서는 이례적으로 Enterprise Rotation Program(ERP)라는 것을 시행하고 있었다. 운좋게도 본인이 속한 그룹에서 이 프로그램에 참여하는 7명 중에 한명이 되는 행운을 누렸다.이 ERP 프로그램은 매년마다 팀을 바꿔가면서 엔지니어로서의 다른 역할들을 경험하게 되는 것이다. 사실 미래에 매니저를 염두에 두고 있는 나로서는 내가 일해왔던 BIOS/UEFI 같은 로우레벨 시스템 펌웨어 분야뿐만 아니라 델에서 하는 다른 분야의 엔지니어링도 경험해 보고 싶었다. 매년마다 본인이 지원할 수 있는 잡 리스트가 나오는데 자신이 제일 가고 싶은 3가지 팀을 골라서 지원할 수 있다. 그리고 그 팀에서 짧으면 10개월 길게는 14개월까지 보내면서 새로운 일을 배우는 것이다.

본인도 3개의 새로운 일을 지원했지만 그 일들을 얻지는 못했다. 제일 우선 순위였던 일은 로테이션 프로그램에 뽑힌 사람들이 대부분 지원해서 최종 선발에서 고배를 마셨고 두번째 우선 순위였던 일은 첫번째 우선 순위였던 일과 같은 팀이었는데 이미 한명을 뽑았기 때문에 그 팀에서 추가적으로 한 명을 더 뽑을 수 없다는 답변을 들었다. 새번째 일은 본인에게 제안이 들어왔는데 너무 잦은 출장 때문에 본인이 거절했다(한달에 한번씩 실리콘밸리에 출장을 가야했다. 당시 육아라는 사정도 있었고 와이프가 임신해서 가족을 돌보기 힘들 것 같았다). 결국 로테이션 프로그램을 담당하는 커미티에서는 나에게 시스템 엔지니어라는 지금까지와는 전혀 다른 직군의 일을 주었다.

시스템 엔지니어로 일하는 1년 동안 프로그래밍과는 거의 담을 두고 쌓았다. 본인은 맡은 일은 PCIe SSD라고 SSD에 PCIe Interface를 다이렉트로 연결해서 전송 속도를 획기적으로 개선한 스토리지 제품이었는데 아직 개발 초기 단계라서 많은 문제들이 있었다.

PCIe SSD: 획기적으로 빠른 Read/Write속도 때문에 요즘 서버 분야에 많이 쓰이고 있다 (출처: Howtogeek)

매일 랩에 가서 서버들에 PCIe Analyzer를 연결해서 프로토콜을 분석하고 Principal Engineer들과 디버깅을 하면서 하루 하루를 보내고 있었다. 사실 PCIe Analyzer가 상당히 민감해서 서버에 새로 연결을 하거나 Interposer라는 측정 기기를 변경하면 파라미터가 달라져 깨끗한 신호를 얻기 위한 캘리브레이션(Calibration)을 하는데 많은 시간을 할애해야했다. 말로는 단순하지만 처음에는 깨끗한 신호를 얻기까지라도 2~3일이 걸리는 일이었다. 대학원 때 PCIe Analyzer를 많이 다뤄봤다는 사람도 깨끗한 신호를 뽑기 위해 몇 시간을 보내고 그게 안되면 측정 기기 제작회사에 사람을 불러서 도움을 받는 판에 PCIe에 초보자인 나로서는 참 힘든 나날이었던 것 같다. 그리고 생판 모르던 PCI Express 프로토콜을 보면서 분석하는 일은 정말로 힘든 것이었다. PCI Express 프로토콜에 대해서 기본 개념도 없고 뭐가 뭔지도 모르는 판에 하루 종일 아래와 같은 화면을 보고 스펙을 보고 있으면 하루 종일 머리가 많이 아프고 스트레스도 많이 받았다.

PCIe Analyzer에서 나오는 프로토콜 분석 화면 (출처: Teledyne 웹사이트)

소프트웨어 엔지니어로서 매일 코드를 보면서 로직을 분석하고 디버깅을 하다가 이 팀에서는 측정 기기 때문에 며칠을 허비하고 매일 매일 테스트에만 몰두하는 신세가 된 것이다. 정말 프로그래밍이 하고 싶었다. 매일 매일 코드를 짜고 디버깅을 하던 그 날이 그리워졌던 것이다. 하지만 이미 이 팀에서 1년을 보내기로 한 이상 시스템 엔지니어로서 일을 해야만 했다. 진입 장벽이 너무 높아서 일이 힘들었지만 어떻게든 그 팀에서 살아남아야만 했다.

제일 힘들었던 것은 가족을 돌보는 것이었다. 첫째 딸이 두살 반이 되던 시기라서 부쩍 활동이 많아지고 집이 좁아서 자꾸만 밖에 나가자고 하는데 우리가 살던 아파트는 아이들에게 그렇게 맘껏 뛰어 놀 수 있는 환경이 되질 못했다. 이전 팀에서는 일주일에 이틀은 집에서 일해서 육아를 좀 더 도와줄 수 있었는데 로테이션 1년차 팀에서는 무조건 랩에서 일할 수 밖에 없는 것이었다 (서버와 측정 장치가 모두 랩에 있고 집으로 옮기는 것이 힘들다). 매일 회사에 있으니 와이프가 감당해야 되는 일들이 많아져 와이프도 지치고 본인도 감당해야 되는 일이 급격히 많아져 힘든 나날을 보내고 있었다.

다행히 가끔 팀에서 프로그래밍을 할 기회가 있어 본인이 자원해서 그 프로젝트를 수행하기도 했었다. 회사에서 어떤 필요에 의해서 로봇팔을 사게 되었는데 이것을 컨트롤하는 펌웨어를 만들었고 다른 프로젝트는 Python을 가지고 테스트 프로그램을 만들었다. 이것이라도 없었으면 정말 소프트웨어 프로그래밍 하는 것과는 담을 쌓고 살았을 것 같다.

그렇게 1년이 지나고 다음 팀을 고르게 되었다. 이번에는 가고 싶은 팀의 매니저와 먼저 연락해서 인터뷰도 하고 팀원들도 3명 정도 미리 만나서 어떤 일을 담당하게 될 것인지 미리 얘기를 다 들었다. 다행히 금년은 본인이 1순위로 꼽은 팀에 가게 되었고 웹 프로그래밍이라는 새로운 분야를 공부하게 되었다.

사실 하이레벨 프로그래밍을 무척이나 하고 싶었다. C/C++, Java는 익숙하지만 웹이라는 것은 나에게 생소한 분야였고 배경 지식도 전무한 상태였다. 다만 한가지 준비된 것이라고는 예전에 근처에 있는 Austin Community College에서 온라인 강의로 Javascript, HTML, CSS를 배워서 Front-end 웹 프로그래밍에 있어서는 조금 경험이 있었다는 것이다.

하지만 자신감은 있었다. 그 어려운 시스템 펌웨어를 만들고 디버깅 환경이 힘든 상황에서 백만 줄 이상의 코드를 다루는데 디버깅이 잘 되는 웹 프로그래밍을 하는 것은 훨씬 쉽지 않겠느냐는 생각이 있었다. 대학원에서 CS를 전공하고 프로그래밍 백그라운드가 어느 정도 되어있으니 웹 관련 프로그래밍도 빨리 배우지 않을까 하는 생각도 있었다. 막말로 컨솔에 값들을 다 찍어볼 수 있는데 뭐든 못하겠냐는 생각도 있었다 (바이오스에서는 특정 변수 값을 찍어보기가 무척이나 힘들고 어셈블리어를 따라가면서 분석해야 한다)

지금 두번째 로테이션 팀에서 본인이 하는 언어는 Javascript, Typescript이고 Framework로는 Angular JS, 그리고 라이브러리는 Lodash, JQuery 등도 다룬다. 그리고 백엔드 단에서는 Node.js를 다루는데 정말 배워야 할 것이 많다. 프로그래밍은 바이오스를 할 때보다 훨씬 편해졌지만 배워야 될 배경지식이 정말 많고 웹에 관한 많은 지식을 쌓아야 되는 것이다. 15년 전에 Javascript를 다뤄보았고 미국 와서 학교 온라인 강의도 들어보았지만 요즘에는 Javascript라는 언어가 많은 플레임워크와 라이브러리가 나왔고 예전에 비해서 훨씬 복잡한 로직들을 처리하게 되었다(오래전부터 쓰고 있던 Javascript는 널리 쓰이기도 하지만 객체지향 및 타입 체크 부분에서 단점이 많아 마이크로스프트에서 Typescript라는 호환되는 언어를 만들었다. Typescript를 컴파일하면 Javascript 파일이 생성되게 된다). 또한 요즘에 핫한 이슈인 Node.js를 배울 수 있어 정말 이번 팀은 선택을 잘 했다고 생각한다.

새롭게 떠오르는 Node.js

그리고 한가지 좋은 점은 일주일 내내 집에서 일할 수 있다는 것이다. 사실 팀에 여기서 비행기로 6시간 이상 거리에 있는 뉴햄프셔에 있다. 나는 리모트로 그곳의 서버에 연결해서 프로그래밍을 하고 있는 것이다. 매일 매일 전화로 회의를 하고 코딩은 집에서 원격 컴퓨터에 연결해서 하는 것이다. 이렇게 원격 근무가 가능한 것은 본인이 소프트웨어 일을 하는 것과 관련이 깊다. 어디에 있든 네트워크로 연결만 된다면 코딩을 할 수 있기 때문이다. 매일 아침 10시에 회의를 하고 하루 종일 모니터를 보면서 코딩하고 디버깅하고 그리고 문제가 생기면 파트너에게 전화해서 같이 문제를 의논한다. 처음에는 원격 근무를 잘 할 수 있을까 싶었는데 이제 하나의 프로젝트를 완성하고 나서 다음 프로젝트를 준비하고 있으려니 몇 년은 이렇게 일하는 것도 괜찮겠다 싶었다.

회사에 몇 년 이상을 다니고 가족이 늘어나다보면 사람이 자연적으로 안정 지향적으로 변하게 된다. 그리고 예전에 하던 편한 것 그리고 익숙한 것을 찾게 되지 새로운 것과는 조금 거리를 두려고 하는 자신의 모습을 보게 된다. 나도 어쩌면 한동안 그렇지 않았을까 생각이 된다. 아이가 태어나고 키우게 되는 몇 년은 부부에게 가장 힘든 날들 중의 하나일 것이다. 우선 잠을 충분히 자지 못하게 되고 자기만의 시간은 사치가 되어 버린다. 그리고 아이들 때문에 여러 제약을 많이 받게 된다(첫째 때는 한번 밖에 나가서 먹으려고 해도 많은 용기가 필요했다)

이번에 웹프로그래밍을 하면서 좋았던 것은 내 인생에서 처음으로 하고 싶은 것을 선택해서 하게 되었다는 것이다. 그 전에는 회사에서 주는 일을 완성하기 위해서 어떻게든 최선을 다했는데 몇 년동안 일을 하다보니 내가 정말 이 일을 좋아하는지 많은 고민을 하게 되었다. 내가 좋아하고 즐길 수 있는 일… 그건 바이오스가 아니었던 것 같다. 같이 일하던 동료는 무척이나 좋아했지만 나는 좀 더 하이레벨의 어플리케이션 분야의 프로그래밍을 더 선호했던 것 같다. 그리고 실제로 내가 만들어보고 운용해 볼 수 있는 웹 프로그래밍이 나는 정말 하고 싶었다.

새로운 시작이기도 하고 도전이기도 하다. 원격으로 일하는 것이라 아직 여러가지 제약이 있지만 금년 로테이션을 하는 동안 이 팀에서 정말 많은 것들을 배우고 또 많은 것들을 남겨주고 왔으면 좋겠다.