Backend
home
👨🏻‍💻

프로페셔널하게 되는 법

생성일
2025/02/16 07:38
태그
독후감

1. 끊임없는 자기 계발

특정 기술에 대한 서적

업무를 위해 어떤 프레임워크나 프로그래밍 언어 또는 특정 소프트웨어의 이용 방법을 급하게 알아야 할 때 꼭 필요하다. 당장의 업무에는 유용하지만 그 가치가 오래가지는 않는다. 기술 서적은 당면한 업무와 관련된 것들에 대해 상세하고 심도 있는 기술 지식을 제공한다. 커리어의 다음 단계를 계획하는 데 큰 도움이 된다. 현재의 업무에서 다음에 하고 싶은 업무로 옮겨가기 위해 필요한 특정 기술에 대해서도 상세하게 배울 수 있다. 기술 지식은 가치가 상당히 빨리 떨어진다. 새 버전의 기술이 릴리즈되거나, 다른 기술이 인기 있으면 이전만큼 쓸모가 없다.

특정 개념에 대한 서적

커리어를 진전시킬 때 필요한 기초를 쌓을 수 있는 책이다. 새로운 개념이나 패러다임 또는 실행 관례들을 소개한다. 당장 활용하기는 어렵고, 제대로 이해하고 습득하는 데 긴 시간이 필요할 때도 있다. 해당 개념을 설명하기 위해 특정 기술이나 프로그래밍 언어가 사용되기는 하지만 그 개념 자체는 광범위하게 적용될 수 있는 일반적인 내용이다. 이러한 종류의 책으로는 테스트 주도 개발(TDD), 도메인 기반 개발, 객체 지향 설계, 함수형 프로그래밍, NoSQL 데이터베이스 모델 같은 것들이 있다. 새로운 개념, 패러다임, 실행 관례를 배우는 것은 특정 기술을 익힐 때보다 훨씬 힘들다. 어떤 경우는 완전히 이해하고 익숙해지는 데 몇 년이 걸리기도 한다. 이러한 개념들을 알아두면 새 기술을 배울 때 학습 시간을 크게 단축시키는 장점이 있다.

행동 양식에 대한 서적

효율적으로 팀에서 일할 수 있게 안내하거나, 일반적인 상황에서 더 나은 프로페셔널이 될 수 있도록 조언한다. 팀 동료나 고객 등 사람들을 어떻게 대하고 일정을 어떤 방식으로 관리하면 되는지 설명한다. 유능한 프로페셔널이 되려면 특정 프레임워크, 실행 관례를 아는 것만으로는 부족하다. 소프트웨어 프로젝트 또는 조직에서 코드와 관련 없는 나머지 것들에 대해서도 어떻게 다뤄야 하는지 배워야 한다. 소프트웨어 개발과 관련된 인간적 측면, 프로페셔널리즘을 다루는 책들이 이러한 종류에 속할 수 있다. 예를 들어 애자일 방법론, 소프트웨어 장인정신, 린 소프트웨어 개발, 심리학, 철학, 경영에 대한 책들이 그러하다.

혁명적 서적(또는 고전)

일하는 방식이나 개인의 가치관을 배우는 책이다. 이전과는 전혀 다른 가치나 원칙들을 제시해 다수에게 무시되거나 배척되지만 결국에는 주류 사상으로 자리매김한다. 이러한 책들은 소프트웨어 개발자라면 이미 읽어 보았음직한 것들로 일상적인 업무 중 대화에서도 그 내용이 흔하게 언급된다. 특정 기술에 대한 책이 이 범위의 책이 되는 경우는 거의 없다. 보통 어떤 개념이나 행동양식을 다룬 책들이 혁명적인 책이 될 때가 대부분이다. ‘실용주의 프로그래머’, ‘디자인 패턴’, ‘익스트림 프로그래밍’, ‘리펙토링’ 과 같은 책들이 있다. 이러한 종류의 책들을 완전히 이해하려면 몇 년 이상이 걸리기도 한다.

2. 프로답게 행동하기

빠듯한 일정과 부딪혀야 하는 상황은 흔히 일어난다. 빡빡한 일정을 다루는 가장 좋은 방법은 필요한 모든 것을 분석하여 가능한 위험과 우려사항을 터놓고 관계자들과 소통하는 것이다. 불명확하거나 불편한 사실들, 걱정되는 사항들을 최대한 이른 시점에 문제제기해야 한다. 가장 중요한 것은, 주어진 일정을 준수할 수 있을지에 대해 어느 정도 자신감을 가지고 있는지 꾸준히 표명해야 한다는 점이다. 자신감을 갖는다는 것은, 모든 기능이 테스트되고, 실제 상용 서비스와 최대한 비슷한 환경에서 충분히 검증된 상태로 소프트웨어가 전달되어야 함을 의미한다.
개발자들이 일정이 너무 짧다고 이야기를 해도 관리자들이 그냥 흘려 들을 때가 많다. 관리자와 개발자 간에 협상이 되어야 하지만 협상 기술이나 제대로 된 근거 자료가 부족해서 개발자들이 압력에 그냥 굴복하고 말 때가 부지기수다. 빠듯한 일정을 따르도록 개발자를 설득하는 데 언변이 비상한 관리자들도 있다. “이 일은 대단히 중요하다. 일정이 어렵다는 것은 잘 알고 있다. 하지만 나는 당신을 믿는다. 우리는 이 일을 해내야만 한다. 해낼 수 있다는 믿음을 갖고 노력한다면 분명히 해낼 수 있다.” 개발자들은 논쟁하고 싶지 않아서 또는 긍정적인 태도를 보여주고 싶어서 “최선을 다해 노력하겠다.” 라고 대답해버린다.
“노력해보겠다.” 라고 말할 때의 실제 결과는 둘 중 하나다. 하나는 제대로 상황을 이해해서 그렇게 되게 만드는 것이다. 이 경우에는 ‘노력하겠다’가 ‘그렇게 되게 하겠다’와 같은 말이다. 다른 하나는 우리가 평소 열심히 일을 하지 않는다는 것을 암묵적으로 고백하는 것이다. 평소에 에너지를 충전해두고 있기 때문에 급하면 언제든지 일을 빨리 하는 데 쓸 수 있다고 하는 것과 다를 바 없다.
일정 안에 모두 완료하는 것이 거의 불가능한 상황이라는 것을 분명히 알면서도 상사에게 “노력해보겠다.”라는 말을 어떻게 할 수가 있나? 노력해본다는 것의 의미가 무엇인가? 열심히만 하면 갑자기 불가능하던 일이 가능해지고 전부 완료할 수 있다는 것인가? 아니면 개인 생활과 가족을 모두 희생하고 야근과 휴일 근무를 밥먹듯이 하겠다는 뜻인가? 그런 뜻이라면 오래 일한다고 달라지는 것이 있나? 그렇지 않다면 평소 일을 대충하고 있다는 고백임과 동시에 거짓말을 하고 있다는 것이 된다.
그저 실망시키지 않기 위해 말하는 ‘네’는 거짓말에 지나지 않는다. 그냥 거짓말이 아니라 중독적이고 파괴적인 습관이다. 양의 탈을 쓴 나쁜 습관이다.
‘안 된다’, ‘할 수 없다’라는 부정적인 말을 하지 않는 게 좋다. ‘아니다’라고 말할 때 우리는 무언가 실패한 듯한, 무언가 협조하길 거부한 기분, 좋은 팀원이 되지 못한 듯한 기분이 든다. 우리는 같이 일하는 사람을 실망시키는 것을 가장 싫어한다. 성공하길 원하고 우리의 역량을 후회없이 최대한 발휘하고 싶어한다. 언뜻 보기에는 긍정적인 사고방식같지만, 그 이면에는 대단히 이기적인 욕구가 숨어 있다. ‘네’라고 말할 때 사람들은 그 말을 믿고 그에 의존해서 계획을 짠다는 것을 반드시 기억해야 한다. 상사는 우리의 말을 믿고 그 상사에게, 다른 팀들에게, 고객에게, 다른 여러 관계자들에게 약속을 한다. 정직하지 못하고 불투명하면 회사 전체에 피해를 입힐 수 있다. 프로페셔널리즘은 나 자신과 팀 동료들 그리고 관리자들과 고객들에게 정직함을 의미한다.

3. 요약

고객이 무엇을 가장 필요로 하는지, 그것을 얻기 위한 최선의 방법을 도우며 조언하는 것이 프로페셔널로 갈 수 있는 길이다. 프로페셔널은 프로페셔널로서의 윤리의식과 행동수칙이 있다. 좋은 프로페셔널은 고객에게 해가 되는 일이라면 고객이 돈을 지불하고 그것을 원한다고 하더라도 하지 않는다. 고객이 내리는 결정이 소프트웨어 프로젝트에 전체적으로 어떤 파급효과가 있을지 고객 스스로 이해하고 있다고 기대하기는 어렵다. 이 부분을 파악해서 알려주는 것은 우리들의 몫이다. 의도한 대로 동작할 수 없거나, 실행 불가능한 무리한 일정에 대해서 “아니오”라고 답하는 것은 우리의 의무다. 고객은 문제를 들고 프로페셔널을 찾아간다. 프로페셔널들이 그들의 경험과 지식을 활용해 그 문제를 다룰 방법들에 어떤 것들이 있고 각각의 장단점은 무엇인지를 알려주길 기대한다. 고객의 결정은 프로페셔널이 제공한 충분한 정보와 이해를 기반으로 이루어져야 한다. 프로페셔널이 생각하기에 올바르지 않은 결정을 고객이 밀어붙이려 한다면 당연하게도 프로페셔널은 그것을 거부한다. 우리도 그래야 한다.

4. 정리

소프트웨어 개발자는 끊임없이 자기계발을 해야 한다. 근데 내가 경험하면서 느낀 점은 생각보다 변화를 꺼려하고 기존의 개발 방식에 크게 문제가 없다면 3년, 5년, 10년 동안 계속해서 동일한 기술만 사용하며 경력을 쌓는 개발자들이 생각보다 많다는 것이다. 물론 상황에 따라서 그 기술들을 불가피하게 계속 활용해야 하는 경우도 있다. 하지만 지금 시대가 어떤 시대인가? 하루가 지나고, 한 달이 지나고, 일 년이 지나면 우리가 알지 못하는 수많은 변화들이 곳곳에서 일어나는 시대이다. 10년 전, 20년 전에 사용했던 기술들이 시간이 지날수록 새로운 기술들로 대체되고 있는 상황에서 최근 기술 동향을 파악하지 않거나 자기계발에 공을 들이지 않는다면 소프트웨어 개발자로서의 커리어를 오래 유지해 나가기는 쉽지 않을 것이다. 이제는 AI가 개발을 하고 프로젝트를 진행하는 그런 시대까지 왔다. AI의 영향력 범위가 점차 확대되어 나중에는 개발하는 사람들이 과연 얼마나 남아있을지 조차도 장담할 수 없다. 그럼에도 불구하고 소프트웨어 개발자는 현 시대의 변화를 가장 가까이서 체험하고 느낄 수 있는 위치에 있다. 즉 개발자가 AI의 활용도 및 AI에 대한 학습을 지속해나가는 것을 멈추지 않는다면 적어도 소프트웨어 개발자로 살아가는 데 있어서 많은 도움이 되지 않을까?