한동안 블로그에 글을 쓰지 못했다. 회사 일이 너무 바쁘기도 했었고 아이들을 기르면서 시간이 따로나지 않아서 글을 적을 여유가 없었던 탓이다.
미국 회사에 다니는 덕분에 가족과 많은 시간을 보낼 수 있지만 아이 양육에 있어서 양가 부모님이나 친척의 도움을 전혀 받을 수 없어서 양육을 온전히 다 담당해야 한다. 작년에는 와이프가 둘째를 임신하고 우리 가족이 회사에서 1시간 이상 떨어진 곳으로 이사를 간 탓에 출퇴근에 걸리는 시간 문제로 많은 고민을 해야만 했다. 아침에 회사를 가면서 딸을 데이케어에 보내고 회사 일을 끝내고 오는 길에 다시 데리고 오면서 하루에 거의 3시간 이상을 길에서 보내고 나니 집에 와서는 다른 무엇을 할 여유를 쉽게 가지지 못했다. 회사 일을 하고 가족을 돌보기만도 벅찬 2015/2016년이었다.
회사에서는 이례적으로 Enterprise Rotation Program(ERP)라는 것을 시행하고 있었다. 운좋게도 본인이 속한 그룹에서 이 프로그램에 참여하는 7명 중에 한명이 되는 행운을 누렸다.이 ERP 프로그램은 매년마다 팀을 바꿔가면서 엔지니어로서의 다른 역할들을 경험하게 되는 것이다. 사실 미래에 매니저를 염두에 두고 있는 나로서는 내가 일해왔던 BIOS/UEFI 같은 로우레벨 시스템 펌웨어 분야뿐만 아니라 델에서 하는 다른 분야의 엔지니어링도 경험해 보고 싶었다. 매년마다 본인이 지원할 수 있는 잡 리스트가 나오는데 자신이 제일 가고 싶은 3가지 팀을 골라서 지원할 수 있다. 그리고 그 팀에서 짧으면 10개월 길게는 14개월까지 보내면서 새로운 일을 배우는 것이다.
본인도 3개의 새로운 일을 지원했지만 그 일들을 얻지는 못했다. 제일 우선 순위였던 일은 로테이션 프로그램에 뽑힌 사람들이 대부분 지원해서 최종 선발에서 고배를 마셨고 두번째 우선 순위였던 일은 첫번째 우선 순위였던 일과 같은 팀이었는데 이미 한명을 뽑았기 때문에 그 팀에서 추가적으로 한 명을 더 뽑을 수 없다는 답변을 들었다. 새번째 일은 본인에게 제안이 들어왔는데 너무 잦은 출장 때문에 본인이 거절했다(한달에 한번씩 실리콘밸리에 출장을 가야했다. 당시 육아라는 사정도 있었고 와이프가 임신해서 가족을 돌보기 힘들 것 같았다). 결국 로테이션 프로그램을 담당하는 커미티에서는 나에게 시스템 엔지니어라는 지금까지와는 전혀 다른 직군의 일을 주었다.
시스템 엔지니어로 일하는 1년 동안 프로그래밍과는 거의 담을 두고 쌓았다. 본인은 맡은 일은 PCIe SSD라고 SSD에 PCIe Interface를 다이렉트로 연결해서 전송 속도를 획기적으로 개선한 스토리지 제품이었는데 아직 개발 초기 단계라서 많은 문제들이 있었다.
매일 랩에 가서 서버들에 PCIe Analyzer를 연결해서 프로토콜을 분석하고 Principal Engineer들과 디버깅을 하면서 하루 하루를 보내고 있었다. 사실 PCIe Analyzer가 상당히 민감해서 서버에 새로 연결을 하거나 Interposer라는 측정 기기를 변경하면 파라미터가 달라져 깨끗한 신호를 얻기 위한 캘리브레이션(Calibration)을 하는데 많은 시간을 할애해야했다. 말로는 단순하지만 처음에는 깨끗한 신호를 얻기까지라도 2~3일이 걸리는 일이었다. 대학원 때 PCIe Analyzer를 많이 다뤄봤다는 사람도 깨끗한 신호를 뽑기 위해 몇 시간을 보내고 그게 안되면 측정 기기 제작회사에 사람을 불러서 도움을 받는 판에 PCIe에 초보자인 나로서는 참 힘든 나날이었던 것 같다. 그리고 생판 모르던 PCI Express 프로토콜을 보면서 분석하는 일은 정말로 힘든 것이었다. PCI Express 프로토콜에 대해서 기본 개념도 없고 뭐가 뭔지도 모르는 판에 하루 종일 아래와 같은 화면을 보고 스펙을 보고 있으면 하루 종일 머리가 많이 아프고 스트레스도 많이 받았다.
소프트웨어 엔지니어로서 매일 코드를 보면서 로직을 분석하고 디버깅을 하다가 이 팀에서는 측정 기기 때문에 며칠을 허비하고 매일 매일 테스트에만 몰두하는 신세가 된 것이다. 정말 프로그래밍이 하고 싶었다. 매일 매일 코드를 짜고 디버깅을 하던 그 날이 그리워졌던 것이다. 하지만 이미 이 팀에서 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를 배울 수 있어 정말 이번 팀은 선택을 잘 했다고 생각한다.
그리고 한가지 좋은 점은 일주일 내내 집에서 일할 수 있다는 것이다. 사실 팀에 여기서 비행기로 6시간 이상 거리에 있는 뉴햄프셔에 있다. 나는 리모트로 그곳의 서버에 연결해서 프로그래밍을 하고 있는 것이다. 매일 매일 전화로 회의를 하고 코딩은 집에서 원격 컴퓨터에 연결해서 하는 것이다. 이렇게 원격 근무가 가능한 것은 본인이 소프트웨어 일을 하는 것과 관련이 깊다. 어디에 있든 네트워크로 연결만 된다면 코딩을 할 수 있기 때문이다. 매일 아침 10시에 회의를 하고 하루 종일 모니터를 보면서 코딩하고 디버깅하고 그리고 문제가 생기면 파트너에게 전화해서 같이 문제를 의논한다. 처음에는 원격 근무를 잘 할 수 있을까 싶었는데 이제 하나의 프로젝트를 완성하고 나서 다음 프로젝트를 준비하고 있으려니 몇 년은 이렇게 일하는 것도 괜찮겠다 싶었다.
회사에 몇 년 이상을 다니고 가족이 늘어나다보면 사람이 자연적으로 안정 지향적으로 변하게 된다. 그리고 예전에 하던 편한 것 그리고 익숙한 것을 찾게 되지 새로운 것과는 조금 거리를 두려고 하는 자신의 모습을 보게 된다. 나도 어쩌면 한동안 그렇지 않았을까 생각이 된다. 아이가 태어나고 키우게 되는 몇 년은 부부에게 가장 힘든 날들 중의 하나일 것이다. 우선 잠을 충분히 자지 못하게 되고 자기만의 시간은 사치가 되어 버린다. 그리고 아이들 때문에 여러 제약을 많이 받게 된다(첫째 때는 한번 밖에 나가서 먹으려고 해도 많은 용기가 필요했다)
이번에 웹프로그래밍을 하면서 좋았던 것은 내 인생에서 처음으로 하고 싶은 것을 선택해서 하게 되었다는 것이다. 그 전에는 회사에서 주는 일을 완성하기 위해서 어떻게든 최선을 다했는데 몇 년동안 일을 하다보니 내가 정말 이 일을 좋아하는지 많은 고민을 하게 되었다. 내가 좋아하고 즐길 수 있는 일… 그건 바이오스가 아니었던 것 같다. 같이 일하던 동료는 무척이나 좋아했지만 나는 좀 더 하이레벨의 어플리케이션 분야의 프로그래밍을 더 선호했던 것 같다. 그리고 실제로 내가 만들어보고 운용해 볼 수 있는 웹 프로그래밍이 나는 정말 하고 싶었다.
새로운 시작이기도 하고 도전이기도 하다. 원격으로 일하는 것이라 아직 여러가지 제약이 있지만 금년 로테이션을 하는 동안 이 팀에서 정말 많은 것들을 배우고 또 많은 것들을 남겨주고 왔으면 좋겠다.
안녕하세요 존경합니다. 석사 꿈을 가지고 있습니다.
먼저 이런 양질의 정보를 제공하심에 감사드립니다ㅠㅠ
제가 하나 여쭙고싶은게있습니다
제가 원래는 미국으로 대학원을 가고 잡을 잡아서 영주권을 얻을 생각이었지만
나중에 여러가지 이유로 미루고 미루다 미국에 못갈 것 같기도하고
토종한국인이 대학원 2년 다녔다한들 영어 커뮤니케이션에 많은문제가 있을 것 같아
최대한 저렴하게 미국에서 학부를 다닐 방법을 찾아보았습니다.
그결과
커뮤니티 칼리지에서 유니벌시티로 편입하면 제일 싸게 다닐 수 있는곳이 뉴멕시코대학이더라구요.(컴퓨터과학은 미국에서 80위)
여기는 international한테도 cc에서 gpa 3.5이상 이였으면 in-state로 다닐 수 있게 해주더라구요!
그런데 한가지 염려되는게 졸업하고 잡을 잡을 때 과연 뉴멕시코에서 job opportunity가 있을지 걱정이됩니다.
그래서 이 지역에서 인턴을잡고 잡을 잡을 수 있을지 확신이안섭니다.
학교를 정할 때 학교의 위치도 매우 critical 하겠죠? 먼저 길을 걸어가신 인생의 선배님으로서 조언부탁드립니다 ㅠ
제 생각에는 석사를 가시는 것이 좋을 것 같습니다. 학부를 가든 석사를 가든 영어는 어렵습니다. 하지만 석사를 가게 되면 Professional Degree를 하나 더 얻게 되고 잡 시장(특히나 CS)에서는 훨씬 더 유리한 고지에 있게 됩니다. 그리고 석사 학위가 있으면 워킹 비자, 영주권에 있어서도 유리한 위치로 가게 됩니다. 학부를 가시는 것보다는 석사를 추천합니다.
그리고 학교를 선택하실 때 취업이 목적이시면 대도시로 가시는 것이 많습니다. UC계열로 가시면 IT기업이 많은 캘리포니아에서 취업에 유리합니다. 그리고 뉴욕 근처로 가게 되어도 취업에 유리합니다. 보통 회사에서 온사이트 인터뷰를 할 때 많은 부분을 근처 대학생이나 대학원생들에게 내어줍니다. 미국은 온사이트 인터뷰를 초청하면 비행기, 호텔, 식사 등 모든 비용을 기업에서 내야 되기 때문입니다. 그래서 가까이에 있는 대학생, 대학원생들을 초청하면 비용도 적게 들고 또 오퍼를 줘도 받아들이는 비율이 높기 때문입니다.
안녕하세요 Stan님의 포스팅들을 정말 흥미진진하게 읽었습니다. 우선 경험담을 이렇게 자세히 써주셔서 진짜 감사합니다ㅜ ㅜ간접체험할 슈 있어 좋았습니다. 개인적으로 질문드리고 싶은 것이 있는데,
저는 지금 대학진학을 하는데 있어 선택의 기로에 놓여있는 학생입니다. 만약 Stan님이 제 상황이시라면 어떤 선택을 하실지 궁금합니다.
저는 중학교와 일부 고등학교 과정을 미국에서 마치고 귀국했습니다. 이후 외국어고등학교에 입학했으나 여러모로 저와 방향이 맞지 않고 제가 컴퓨터쪽으로 나가고 싶다는 확고한 생각이 있어 자퇴했습니다. 지금 저는 1년 가량 프로그래머취업대비 학원에서 프로젝트 경험 + 독학으로 원래하고 싶었던 프로그래밍 공부를 한뒤 미국 cc에 입학 -> 미국 4년제 대학에 편입할지, 수능을 치룬 뒤 한국대학의 컴퓨터공학과에 진학하고 거기서 나름대로 공부한뒤 미국 석사를 할지 고민하고 있습니다.
제 궁극적인 목표는 해외의 탑테크 회사에서 일하는 것입니다. 그걸 염두에 둔다면 둘 중 어떤 선택지가 나을까요? 다시 말해 “미국에서 학부졸업하고 (해외)개발자로 취업하는게 국내학사 미국석사 후 (해외)개발자 취업보다 어려울지” 이것이 궁금합니다.
아는 게 별로 없는지라 이런 제 질문이 굉장히 치기어리게 들릴까봐 부끄럽고 죄송합니다. 부모님께서는 전자에 대해 지원해주시겠다고 말씀하셨지만 비용이 비용이고 한만큼 한 분의 의견이라도 더 들어보고 싶은 게 제 심정입니다. 읽어주셔서 감사합니다!!
제 생각에는 비용 문제가 없다면 미국에 학부부터 가는 것을 권하고 싶습니다. 언어와 문화에 빨리 적응하고 취업에 대해서 더 많은 정보를 가지고 준비할 수 있기 때문입니다. 그리고 미국 학부를 졸업하면 대부분 한국에서 가는 것보다 더 좋은 미국 대학원을 진학할 수 있습니다.
그리고 많은 대학들이 학석사 연계과정을 제공하고 있으니 가능하면 빨리 석사까지 받고 취업을 하시면 좋은 대우를 받고 일하실 수 있을 것으로 보입니다. 학부만 졸업하고 일하는 것보다 석사를 받고 졸업하면 더 좋은 대우를 받고 일할 수 있고 비자 및 영주권에 있어서도 유리합니다.
PCIE protocol 분석화면이 참 복잡하네요 ㅎㅎ 델 엔지니어는 정말 아무나 되는게 아니라는 걸 또한번 느끼면서 자극받습니다 어디든 최고수준이 되려면 그만큼 노력이 필요하군요 원하시는 분야에서 일을 하시게 되셔서 축하드립니다 그만큼 더 도약하고 열정을 가질 수 있는 또 다른 도전이 되시길 진심으로 바랍니다
안녕하세요
블로그글 매우 흥미있게 읽었습니다. 저의 경우에는 웹프로그래밍이 확실히 로우레벨 프로그래밍 보다 나은것 같긴한데요.
매우 민감한 질문일 수 있지만
웹프로그래밍의 경우 좀더 배우기 쉽다고 생각을 하는데 급여에 있어서 로우레벨과 차이가 있는지 궁금하네요.
그리고 웹프로그래밍으로 갈려는 진로를 가지더라도 C,C++java등을 잘다루도록 연습을 많이 해두어야 할까요? 궁금합니다
초기 접근은 웹프로그래밍이 훨씬 쉬운 것이 사실입니다. 시스템 프로그래밍의 경우 하드웨어의 구조나 OS가 어떻게 동작하고 컴퓨터의 동작 원리를 상당히 숙지해야지 문제 해결이 되는데 비해서 자바스크립트는 예제를 따라서 만들어보고 브라우저에서 테스트를 해 볼 수 있으니 훨씬 간단합니다. 그래서 시스템 프로그래머의 일반적(엔트리의 경우)인 연봉이 사실 좀 더 높게 형성되어 있는 것이 사실입니다. 하지만 웹의 경우 많은 기술들이 나와 있기 때문에 이것들을 이해하는 것도 상당히 힘듭니다. 예를 들어서 Angular의 경우 Front-end 개발에 있어서 상당히 많은 이점이 있는데 비해서 이것을 이해하는 것은 쉽지 않습니다. 그리고 하기 나름인 것이 이쪽도 실력이 있다면 수요가 많기 때문에 시스템 프로그래밍을 하는 사람들의 연봉을 훨씬 뛰어넘는 경우도 많습니다. 즉 각자 하기 나름에 따라 연봉이 정해지는 것이죠. :)
갑자기 프로토콜 Analyzer라니.. Rotation이 정말 너무 원거리로 날아가는게 아닌가요? 이러한 Rotation은 Leader Training에 필요한 것 같아요.
PCI가 아니고 PCIe를 언급하셨는데요, 이러한 SSD가 unit당 용량이 높지는 않을텐데 서버 시스템에는 여러개를 연결할만큼 PCIe 확장슬롯이 아주 여유있게 있나봐요.
그리고 SATA가 아닌 PCI(e) 프로토콜에 SSD를 연결하면 SATA와 비교해서 눈에 띄게 강점이 있나요? 일반적인 Desktop이나 Workstation급을 생각하면 SATA가 확장성은 훨씬 좋은 것 같아서요.
시험 공부를 해야하는데 ㅠㅠ..
이번 로테이션에서는 즐거운 시간 보내시길 바랍니다 :)
기억하기로는 서버마다 틀리지만 어떤 서버는 x16으로 8개까지 슬롯이 있었던 것으로 기억합니다. PCIe slot에 바로 연결하는 것이 아니라 탈착식인 2.5인치의 경우 x4를 사용하기 때문에 bridge를 쓰면 한 슬롯에 4개까지 연결 가능합니다. Bandwidth만 따지면 PCIe가 SATA보다 훨씬 강점이 있습니다. 그리고 SATA는 이전의 Mechnical device에 맞춰서 스펙이 정해졌었는데 SSD는 메모리와 같은 방식으로 동작하므로 최대의 퍼포먼스를 이끌어내는데 한계 사항들이 있습니다. 반면 PCIe SSD는 NVMe라고 SSD에 최적화된 인터페이스를 사용하기 때문에 성능 향상에 훨씬 강점이 있습니다