"40년차 프로그래머" 번역 - (1) 스프린트도 마라톤도 아닌, 일기

Broccolism·2024년 10월 20일
2

개발자 커리어

목록 보기
2/2
post-thumbnail

번역글입니다.

원 저작자의 허락을 받고, Noah Gibbs의 블로그 글 "The Forty-Year Programmer" 를 번역한 글입니다.

🤔 생각 타임 🥦

생성형 AI라는 키워드가 유행하면서 인간과 AI를 비교하는게 많이 보인다. 그에 대한 답을 하나 찾았다. 그저 기술적으로 뛰어나기만 한다면 소프트웨어 프로그램과 다를게 없다.

마지막 문장에 대해 생각해보자. 자바 구문을 잘 안다는 건 기술적으로 뛰어나다는 의미다. 하지만 단순히 뛰어난 기술을 갖는 것만으로는 부족하다. 그런 내용으로 일기를 채우기보다는 자신에게 영감을 주고, 일과 삶을 통해 더 많은 것을 배우며, 앞으로 나아갈 수 있는 일로 일기를 채우는게 더 좋지 않을까. 물론 그게 기술이 될 수도 있겠지만, 다른게 될 수도 있다.

단거리 달리기나 마라톤이 아니라는 구절도 인상깊다. 그동안 어떤 직업에 종사하는 일은 마라톤이라고 생각했기 때문이다. 일과 직업을 분리해서 바라보는 관점도 새롭게 배웠다. 결국 스스로에게 의미 있고 재밌는 일을 추구하며 걸어가면, 어디든 닿게 될 것 같다.

또 한가지, 계속 기억하고 싶은 구절은 이 부분이다.

제 직장에서는 그게 제일 중요한건 아니지만, 집에서는 그런 일을 많이 합니다. 모든 사람이 제 성취를 알아줄 필요는 없습니다. 그냥 스스로 똑똑하다고 느끼면 되는거죠. 그러면 그 일은 좋은 겁니다.


40년차 프로그래머

2024년이 되면 저는 프로그래머로써 40년을 일하게 됩니다. 아직은 아니지만, 곧 그렇게 되겠지요. 소프트웨어 개발이나 회사 창업으로 돈을 많이 버는 것과는 다른 이야기입니다. 돈을 꽤 벌기는 하지만 그게 전부는 아닙니다.

이 글을 읽는 당신은 오랫동안 소프트웨어 개발자로 일하고 싶을 것 같아요. 누군가 오랫동안 음악가로, 예술가로, 수리공으로 일하는 것과 마찬가지죠. 그렇지 않다면 브라우저에서 "뒤로"를 누르면 됩니다. 괜찮아요. 하지만 당신은 20년차, 40년차, 혹은 그 이상의 프로그래머가 되고 싶을 겁니다.

어떤 언어나 프레임워크를 배워야 하는지에 대해 이야기 할 생각은 없습니다. 기본기가 탄탄하다면 원하는 것은 무엇이든 배울 수 있으니까요. 그 전까지는 원하는대로 잘 되지 않을 수 있습니다. 적어도 저는 그랬어요.

대신, 제가 개발을 시작했을 때는 이해가 되지 않았지만 지금은 제게 이정표 역할을 하는 것들에 대해 이야기하려합니다. 즉, 어떠한 기술에 대한 것이 아닙니다. 기술은 있다가도 없어집니다. 프로그래밍 언어 역시 있다가도 없어집니다. 특정 기술과 언어는 당신의 목표가 될 수 없습니다.

우선, 이것부터 시작해 보겠습니다. 소프트웨어 분야는 아직 젊습니다.

소프트웨어 개발은 젊다

프로그래밍 언어 중 하나인 포트란의 역사는 1957년으로 거슬러 올라갑니다. 비슷한 시기에 만들어진 다른 언어도 있고(LISP와 Algol: 1958년, COBOL: 1959년) 더 오래된 언어도 몇몇 있습니다(콘라트 추제의 플랑칼퀼 Plankalkül, 1942년경).

프로그래머라는 직업이 대략 1957년부터 있었다고 합시다. 65년입니다. 저는 1984년부터 지금까지 38년동안 프로그래머였고, 1998년부터 24년동안 풀타임 프로그래머로써 돈을 벌었습니다. 저는 꽤 경험이 많습니다. Smalltalk 프로그래밍 언어의 발명가인 Alan Kay는 1963년경에 시작했습니다. 59년입니다. 제가 찾은 사람 중 가장 오랫동안 활동한 사람 중 한 명입니다.

반면, 중국계 미국인 첼리스트인 요요마는 66세이며 4살 반 때부터 첼로를 연주했습니다. 그럼에도 그는 세계에서 가장 오랫동안 음악을 연주한 거장이 될 수 없습니다. 기네스북에 따르면 카스퍼 "스트레인저" 말론은 80년 내내 전문적인 음악 작품을 발매했습니다. 이 기록은 돈을 벌기 위해 활동하는 음악가와 그들이 판매한 노래에 대해서만 해당됩니다. 라이브 공연이나 비용을 받지 않는 경우는 포함되지 않습니다. 그러니 정말 경험이 많은 음악가가 우리 분야 전체가 존재한 것보다 15년 더 오래되었다고 생각해 봅시다.

우리 분야는 아직 젊습니다.

어릴 때부터 시작할 필요는 없습니다

그러니까 제가 8살에 시작했고 요요마가 4살 반에 시작했다면, 너무 늦은걸까요? 아닙니다.

저는 1년 전쯤, 45살에 피아노를 진지하게 연주하기 시작했습니다. 개인적으로는 점점 실력이 좋아지고 있다고 생각합니다. 계속 노력한다면 60살이 되었을 때 아주 환상적으로 연주할 수 있을 겁니다. 이미 몇몇 곡은 꽤 잘 칠 수 있습니다. 알고 계신가요? 배경 지식과 주관이 있으면 실력이 더 빨리 향상 됩니다. 수십 년, 혹은 그 이상으로 기술을 익히는 연습을 해왔으니까요.

당신이 50살이라고 가정해 봅시다. 당신은 소프트웨어 개발자로서 30년을 더 살 수 있을 겁니다. 50살에 시작한다면, 10년 후인 60살에 훨씬 나아질 겁니다. 8살의 제게 주어진 10년이 흘러 18살이 되었을 때 보다 더요. 훨씬 나아질 겁니다.

저는 스무 살, 서른 살, 심지어 마흔 살에 시작한 훌륭한 프로그래머들을 만났습니다. 50살이나 60살에 시작할 수 없을 그 어느 이유도 없습니다. 시간과 노력이 필요합니다. 하지만 젊을 필요는 없습니다.

하지만 당신이 그만큼 잘하지 못할 거라는 뜻인가요? 어느 정도는요. 저는 피아노를 요요마가 첼로를 연주하는 만큼 잘하지 못할 겁니다. 프로그래밍은 제가 어렸을 때 시작했지만, 앨런 케이만큼 잘하지 못할 겁니다. 요요마만큼 잘하지 못하는 사람이 또 누가 있는지 아시나요? 기본적으로, 첼로를 연주하는 다른 모든 사람들입니다. 그들은 이 사실이 자기자신을 멈추게 하지 않습니다. 그들 중 많은 사람들은 어쨌든 첼로를 잘 연주합니다. 그리고 저는 세계 10위안에 드는 피아니스트는 아니지만, 피아노를 치는 걸 즐깁니다.

저는 여전히 소프트웨어 개발을 좋아합니다. 제가 제 2의 Alan Kay가 될 확률은 사실상 0입니다. 그는 이미 제 나이에 Smalltalk 언어를 만들었습니다. 소프트웨어 업계에서 일한다면 "Alan Kay가 아니어도 괜찮아"라는 말이 필요합니다. 어린 Alan Kay조차도 현재의 Alan Kay는 아니었습니다. 그는 그걸 당연하게 여겼을 것입니다.

순서는 성공과 실패를 가르는 것이 아니다

프로그래밍 경력을 쌓고 싶고 방금 시작했다면, 저는 종종 "그냥 코드를 작성하세요. 어떤 소프트웨어든 상관없습니다."라고 말합니다. 여러분은 공부해야 할 것은 수없이 많을겁니다. 어떤 순서로 공부하든 큰 문제는 아닙니다.

40년동안 많은 트렌드가 생겨났다 사라졌습니다. 데스크톱 앱? 해봤습니다. 모바일 앱? 만들어봤습니다. OS와 시스템? 물론이죠. 웹 프로그래밍? 당연히 해봤습니다. 여러분의 목록은 이와 다르겠지만, 여러 종류의 프로그래밍을 포함하게 될 것입니다. 여러분이 다양한 것을 시도하는 한, 어떤 순서로 하든 크게 중요하지 않습니다.

물론, "다른 것을 시도해 보세요"가 핵심입니다. 40년 동안 네트워크 소켓 서버를 작성하는 것보다 4개의 다른 분야에서 각각 10년씩 공부하면 훨씬 더 나아질 것입니다. 40년의 깊이가 가치가 없다는 것은 아닙니다. 깊이는 확실히 가치가 있습니다. 그러니 40개의 다른 분야에서 각각 1년씩 공부해서는 안 됩니다.

그러나 너무 한 가지만 고집하지 않도록 조심해야 합니다. 거의 모든 분야가 당신에게 교훈을 줄 것이 있다는 사실이 밝혀졌습니다. 유연하지 못해서 다른걸 배우지 못한다면, 당신은 기회를 놓치게 됩니다.

다양한 종류의 프로그래밍을 시도해 보세요. 어떤 순서로든 시도해 보세요. 단, 무언가를 위해 노력하고 나아져야 합니다.

아직 이르다

당신이 공부하고 있는게 쓸모없는 것이라고 생각할수도 있습니다. 흠, 쓸모없다는 건 상대적인 거예요. 저는 수년간 DGD라는 오래된 MUD 프로그래밍 언어에 여가 시간을 투자했어요. 실용적인 가치를 위해서가 아니었습니다. 거의 모든 것이 이상하고 비표준적이었고, 그 중에서도 정말 실용적인 것은 거의 없었어요. 하지만 이상했기 때문에 엄청난 것을 배웠습니다. Ruby on Rails가 나중에 도입한 것들을 배울 수 있었고, 데이터베이스를 사용하지 않더라도 데이터베이스로 프로그래밍하는 방법을 배울 수 있었죠! 이 때 배운 것 중 일부는 이후에 대여섯 가지 최신 언어를 배우는 데에 유용한 역할을 했습니다. 몇 시간이고 이야기할 수 있는 이야기거리를 들려주었어요.

재밌게도, 저는 몇 년 후에 DGD에서 컨설팅 일을 얻었습니다. 당시 세상에는 DGD 일자리가 많지 않았습니다. 하지만 저는 그 중 하나를 갖게 되었습니다! 제가 배운 많은 "실용적인" 언어보다 더 실용적인 역할을 한 셈이죠. 미래는 결코 알 수 없습니다.

요요마가 15살, 음악인이 된 지 10년 정도 되었고 앞으로 그가 클래식 음악을 연주해야 할지, 대중적인 재즈 음악을 연주해야 할지에 대해 고민 중이라고 해 봅시다. 먼저 각각의 장점을 검토해보는 방법이 있습니다: 클래식 음악은 그의 기술을 향상시키고, 대중적인 재즈는 그의 음악의 폭을 넓혀 줄 것입니다.

하지만 진짜 답은 더 간단합니다: 둘 다 가치가 있으니 무언가를 골라서 실행하세요. 그리고 앞으로 30년동안 그 길을 간다면 어느 것을 선택하든 그렇게 중요하지 않습니다. 둘 다 당신을 더 나아지게 할 수 있습니다. 중요한 것은 노력하는 것입니다. 둘 중 하나에 진짜 노력을 기울이면 귀중한 경험이 될 것입니다. 깊이 생각하지 않고 쉽게 가려고 한다면 둘 다 당신의 시간을 투자할 가치가 없을 것입니다.

그게 젊은 요요마를 위한 답입니다. 그리고 당신을 위한 답이기도 합니다.

저는 종종 "아직 이르다"고 스스로에게 말합니다. 제 말은, 저는 46살이라는 것입니다. 96살이 되어서 끝난 게 아닙니다. 저는 적어도 20년동안은 더 할 수 있고, 어쩌면 50년은 더 할 수 있을 겁니다. 때문에 뭔가 이상하고 엉뚱한 일을 하면서 재밌는 걸 배울 수 있다면, 정말 좋은 일입니다. 단기적으로 저를 이끌어 줄 실용적인 일을 한다면 그것도 좋습니다.

하지만 중요한 것은 계속 일하는 것입니다. 프로그래머로서 20년, 40년, 70년을 버티려면 많은 노력이 필요할 것입니다. 두 가지 일을 선택하기 어렵다면… 아마도 둘 다 좋은 일이고, 둘 다 좋은 선택일 것입니다. 그렇지 않으면 둘 다 나쁜 일이고, 그것보다 더 가치 있는 일을 찾아야 합니다.

아직은 이릅니다. 흥미롭거나 유용한 것을 공부하세요. 당신은 10년, 20년, 30년 후의 이익에 대해 추측하고 있겠죠.. 18개월 후에 가장 좋을 것을 선택하지 마세요. 미래가 어떻게 될지 실제로 볼 수는 없습니다.

일이 좋다

당신이 소프트웨어 개발에 관심을 갖게 된 건 뭔가가 당신에게 와 닿았기 때문일겁니다. 어떤 부분은 좋게 느껴졌을 것이고, 그렇지 않은 부분에 대해서는 크게 신경 쓰지 않았을 겁니다.

그게 무엇이었는지 알아내려고 노력하세요. 무엇이 좋았나요? 무엇에 끌렸나요? 어떤 점이 마음에 들었나요? 사람마다 그 이유는 다 다를 겁니다. 절대 똑같지 않을거에요.

저는 성취감을 느끼고 스스로 똑똑하다고 느끼는 것을 좋아합니다. 제 직장에서는 그게 제일 중요한건 아니지만, 집에서는 그런 일을 많이 합니다. 모든 사람이 제 성취를 알아줄 필요는 없습니다. 그냥 스스로 똑똑하다고 느끼면 되는거죠. 그러면 그 일은 좋은 겁니다. 저는 또한 제 직장과 다른 것을 하는 것을 좋아합니다. 비록 두 곳에서 코드를 작성하게 되더라도요. 저는 다른 프로그래머가 사용하고, 고마워할 만한 무언가를 만드는 것을 좋아합니다.

당신의 이유는 다를 것입니다. 좋습니다. 찾아보세요.

일은 좋은 것입니다. 일하는 걸 더 이상 좋아하지 않는다면, 당신은 그만두게 될겁니다. 일하는 걸 더 이상 좋아하지 않는다면, 긴급 상황입니다: 휴가를 가든, 당신이 좋아했던 것과 다시 연결하든, 무언가 조치를 취해야합니다. 일이 더이상 즐겁지 않다면, 당신은 빠르게 번아웃 상태에 빠지게 될 것입니다.

일이 좋습니다. 만약 그렇지 않다면, 일을 바꾸세요.

이 말이 반드시 직장이 좋아야 한다는걸 의미하지는 않습니다. 직장을 바꾸라는 뜻도 아닙니다. 당신이 계속 나아갈만큼의 좋은 무언가는 필요합니다. 어떤 식으로든 계속 나아가는 것은 필수입니다. 그러니 이 사실은 당신의 직장에도 영향을 미칠 수 있겠죠.

스프린트도 마라톤도 아닙니다. 일기입니다.

"나는 컴퓨터 프로그래머가 될 거야"라고 결심하고, 그것을 어떻게 할 것인지에 대한 56개의 요점으로 구성된 8개 섹션의 계획을 세우는 것은 쉽습니다. 흥분하지 말라고 말하지는 않겠습니다. 별로 재미없는 일이라면 왜 그걸 하려고 하겠어요?

하지만 제가 말씀드리고 싶은 건, 그 계획을 너무 심각하게 받아들이지 말라는 것입니다.

어렸을 때 저는 제가 싫어했던 작은 시골 마을에서 4.2마일 떨어진 곳에 살았습니다. 그곳의 모든 사람들이 저를 싫어했습니다. 솔직히 말하자면 그럴만한 이유가 있긴 했어요 - 저는 끔찍한 꼬맹이였거든요. 그들이 저를 싫어하는건 당연한 일이었죠. 카네기 멜론 대학의 학위 덕분에 그곳에서 벗어날 수 있었습니다. 컴퓨터는 제가 보기 전부터 이미 마법처럼 느껴졌고, 오래된 Apple IIe를 가지고 놀게 되었을 때에도 그랬습니다. CMU(카네기 멜론 대학)에 다닐 때 저는 항상 컴퓨터 랩실에 들렀습니다. 왜냐하면 컴퓨터가 굉장히 멋있었고, 저는 사회적 기술이 전혀 없었기 때문이죠.

그래서: 저는 소프트웨어를 만드는 데 아주 직접적인 길을 택했습니다. 일찍 시작했고, 끊임없이 노력했습니다.

하지만 저 같은 사람도 그저 소프트웨어만 따라 살아갈 수는 없었습니다. 결국 저는 친구를 사귀었고, 그들을 지키고 싶었습니다. 결국 저는 더이상 대화하기 싫은 사람이 되는 것에 지쳤습니다. 결국 저는 아내를 원했고, 찾았습니다. 결국 저는 아이들을 낳았고 그들에게 잘하려고 노력했습니다. 결국 저는 아무리 좋은 직장이 있어도 감정적으로 경직되어있고 억압되어 있다면 그렇게 멀리 갈 수 없다는 것을 깨달았습니다.

어느 시점부터는 계산을 멈추게 됩니다. 계산과 계획으로 모든 것을 할 수 없기 때문입니다. 어느 시점에서는 "업무에서 벗어나지" 않고, 그저 "당신의 삶을 살고" 있을 뿐입니다.

그러니 소프트웨어 개발이 아닌 일을 한다고 해서 스스로를 꾸짖는다면… 그러지 마세요. 왜 여기서 음악에 대해 이렇게 많이 이야기할까요? 저는 음악도 배우고 있기 때문입니다. 저의 모든 것을 소프트웨어에만 쏟지 않기 위해섭니다. 미술도 마찬가지에요: 저는 예술가들의 연습 방법을 훔쳐와서 소프트웨어에 적용하는 것에 대해 강연을 했고, 책도 썼습니다. 그리고 제 작업과 관련된 삽화도 직접 그리고 있어요. 물론 저는 강연도 하고 글도 쓰죠. 매년 제 관심사는 더 넓어져 가고 있습니다.

실패가 아닙니다. 포기가 아닙니다. 무엇이 가치 있을지 예측할 수 없으므로 모든 것의 일부를 배워야 합니다. 어떤 종류의 소프트웨어를 작성해야 하는지에 대한 제 말과 동일하지만 더 넓은 범위입니다. 그리고 그것이 교훈입니다. 오래 살수록, 더 잘 일할수록, 모든 것(그리고 모든 사람)이 여러분에게 가르쳐 줄 유용한 무언가를 가지고 있다는 것을 깨닫게 됩니다.

그저 계속 작업하세요.

소프트웨어 개발을 배우는 것은 계획을 세워서 끝내는 일이 아닙니다: 어떤 체크리스트를 다 완료했다고 해서 프로그래머가 되는 것은 아니에요. 첫 번째 프로그램을 작성하는 순간 프로그래머가 됩니다. 이 기사를 읽고 있다면 아마 프로그래머일 것입니다. 그렇지 않다면 온라인 코드 학습 사이트에서 첫 번째 프로그램을 작성하세요. 20분도 걸리지 않을 것입니다.

때로는 어떤 것을 개선하고 싶을 것입니다. 프로그램이 커질수록 얽히게 되므로 모듈성과 캡슐화를 어느 정도 배우게 됩니다. 좋은 성능으로 수천 가지 조합을 처리하려고 하므로 이산 수학을 어느 정도 배우게 될 것입니다. 이 모든 자료는 온라인에서 제공되며, 더 깊이 파고들고 싶다면 보통 책과 수업에 대한 자료가 있습니다.

소프트웨어가 아닌 것을 배우는 것도 마찬가지입니다. 게임 Chicory를 쓴 사람은 게임 음악의 그 부분을 쓴 키에 맞춰 화면 사운드를 조정했습니다. 배경 음악에 따라 약간 다른 차임벨이 연주되기 때문에 조화로운 음표가 나옵니다. 얼마나 멋진 일인가요? 당시 저는 그것을 감상할 만큼 음악에 대해 충분히 알지 못했다는 것을 깨달았습니다. 그리고 그것은 작년에 저를 음악으로 이끌었습니다.

계속 일하세요. 당신이 더 나아질 수 있는 흥미로운 일이 무한히 존재합니다. 실용적이지 않아 보이는 일을 두려워하지 마세요. 저는 소프트웨어 작업을 위해 음악을 어떻게 할지 모르겠습니다. 아무것도 하지 않을 수도 있고, 모든 것을 할 수도 있습니다. 미래는 아주 멀고, 저는 20년 후에 무엇이 도움이 될지 예측하는 데 능숙하지 않습니다.
우리 중 누구도 그렇지 않아요.

단거리 달리기나 마라톤을 하는 것이 아닙니다. 대신 일기를 쓰는 것입니다. 10년 후에 일기를 다시 보면서 "와, 멋진 일을 했네."라거나 "허, 꽤 흥미로운 사람이었네."라고 말할 수 있을까요? 아마 당신은 "자바 구문에 꽤 능숙했어."라고 일기를 적으려 할 겁니다.

하지만 왜 그래야만 하나요?

profile
설계를 좋아합니다. 코드도 적고 그림도 그리고 글도 씁니다. 넓고 얕은 경험을 쌓고 있습니다.
post-custom-banner

0개의 댓글