개발자 커리어콘 <개발자의 역량 키우기> 후기

2021 캐치카페 개발자 커리어콘

개발자의 역량 키우기 - 강진우님, 박재호님

당근마켓 데브옵스 엔지니어로 일하는 강진우님, 그리고 모든 개발자의 책장에 꽂혀있다는 클린코드의 역자이자 피치파이브 소프트웨어 아키텍트인 박재호님이 성장에 대해 이야기한 토크콘서트 시간이었다. 이미 녹화된 VOD라서 연사와 모더레이터 모두 약간은 경직되어 보이고 현장감이 덜했다는 아쉬움은 있지만 내용이 워낙 좋고 모더레이터가 준비를 많이 했는지 중간중간 잘 정리해주셨다.

엔지니어로서 성장을 이끌어 준 순간들 - 강진우님

  • 역량의 한계를 성장으로 이끌기 위한 세 가지 방법: 스터디, 글쓰기, comfort zone 벗어나기
  • 성장을 위해서는 비단 어떤 방법론적인 노력뿐 아니라 스스로에 대해 잘 알아야 한다는, 그리고 다소 실패로 보이는 경험일지라도 성장은 하기마련이니 너무 좌절하지 않아도 된다는 따뜻한 메시지였다.
  • 글쓰기의 중요성은 백번 강조해도 지나치지 않다는 것을 깨달았다.

스터디

  • 내부 구조에 대한 이해는 성장의 바탕
  • 이직 초반에는 배울게 많지만 업무에 익숙해지기 시작하면 성장이 멈춘듯한 느낌을 받았던 경험, 돌파구를 찾기 위해 커널스터디를 시작했다.
  • 기술을 용도에 맞게 사용하기 위해서는 내부구조한 이해가 필수적이다.
  • 공식 문서와 아키텍쳐 다이어그램을 활용할 것

글쓰기

  • 너무너무 중요하다. 무엇이 되었든 일단 글을 써라. 글을 쓰며 지식을 나누는 게 중요하다.
  • 겸손의 미덕으로 공유를 주저하지 말 것. 알고 있는 것을 나누고 잘못된 내용을 피드백 받는 경험은 정말 중요한 자산이다.
  • 글쓰기의 장점
    • 생각이 정리되고 이를 통해 성장할 수 있다.
    • 이직이나 집필 등 성장 이상의 기회가 온다.
  • 글쓰기는 정말 어렵다. 그러나 일단 어떤 내용이든 시작해야 한다. 아무것도 아니라고 생각한 그 지식이 누군가에겐 꼭 필요하다.

Comfort Zone 벗어나 새로운 시도하기

  • comfort zone을 벗어나는 방법에는 업무의 영역을 넓히는 것, 주어진 환경을 새롭게 바꿔보는 것, 그리고 이직을 통해 새로운 환경을 경험하는 것이 있다.

+동료들

  • 좋은 동료들 덕분에 성장을 한다.
  • 나 또한 좋은 동료가 되어줄 것

질의응답

  • 하고싶은 것과 회사에서 해야 하는 것이 일치되는 것이 중요하다.
    • 이 둘을 align 하기 위해 노력해라.
    • 내가 나 자신을 잘 알고 이와 맞는 description을 가진 프로젝트를 찾아보라
  • 이직은 답이 될 수 있는가?
    • NO. 성장은 내가 해나가야 하는 것이기 때문에 스터디 등을 통해 스스로 성장하는 에너지, 방법을 찾아낼 것. 제일 좋은 방법은 역시 글쓰기.
  • 개발 공부 방법?
    • 사람마다 스타일이 다르지만 일단 해보는 것이 중요하다.
    • Golang을 배운다고 하면, 일단 개발환경부터 설치하고, 뭐라도 해본 다음에 그 이후에 공식문서나 책을 읽으면서 내가 왜 문제를 당면했었는지 파악하는 방식을 추천
  • 기업 지원할 때 선정하는 기준
    • 스스로의 성장을 꾀할 수 있는지 판단할 것
    • 좋은 개발문화를 가졌는지 확인할 것
    • 연봉은 기본적인 것이다. 중요하지 않은게 아니지만 연봉만을 염두에 두진 말자.

결론

  • 성장에서 중요한 것은 자기자신을 잘 아는 것이다. 자기자신을 믿고 자기가 하고싶은게 무엇인지 스스로와 많이 대화해볼 것.
  • 잘못된 선택을 하게 되더라도 분명 배우는 것이 있으니 실패한 것이 아니다.

소프트웨어 장인정신, 클린코드 - 박재호님

  • 읽기 좋은 코드, 그리고 코드 개선이 왜 중요한지에 대한 호소에 가까운 강연이었다.
  • 아직 코드짜는 것조차 버거운 수준이기에 클린코드는 읽을 엄두를 안 내고 있었는데, 역자의 열정적인 발제를 들으니 클린코드 독파에 대해서도 어마어마한 동기부여가 되었다. 조만간 책을 읽기 시작해야겠다.

클린코드가 사랑받는 이유

  • 10년이 훨씬 넘는 기간동안 클린코드가 지속적으로 사랑받는 이유는 근본적으로 변화하지 않는, 아래와 같은 컨텐츠를 담고 있기 때문
  • 리팩터링: 가독성이 좋고, 개선이 쉽게, 조금 더 효율적으로 코드를 바꾸는 것
  • 레거시코드: 프로그래밍의 대부분은 기존의 코드를 기반으로 남의 어깨에서 시작하므로, 레거시코드를 어떻게 읽고 개선할지가 중요
  • 기술부채: 부채는 지렛대이다. ‘언젠가는 수정해야지’라는 것을 감수하고 만드는 것인데, 이를 어떻게 효율적으로 갚을지 다룬다.
  • 테스트 주도 개발(TDD): 테스트과정에서 클린코드를 활용할 수 있다.

읽기 좋은 코드의 중요성

  • 프로그래밍을 할 때는 코드 쓰는 시간보다 코드에 대해 생각하는 시간, 남의 코드를 읽는 시간이 훨씬 많다.
    • 기존 코드를 읽어야 새 코드를 만들 수 있다. 그러니까 읽기 좋은 코드를 짜라.
    • 확장의 관점에서 소프트웨어를 바라본다면 읽기 좋은 코드가 정말 중요하다.
  • 읽기 쉽게 만드는 데에 들이는 시간을 아껴서는 안된다.
    • 읽기 쉬운 코드는 미래의 나에게 주는 선물이니 현재의 내가 조금 더 노력해야 한다.
    • 코드의 가장 중요한 독자는 미래의 내가 될 가능성이 매우 높다.
  • 프로그램이 ‘돌아간다’고 해서 넘어가지 말라. 전문가로서 항상 현재에 집중하여 좋은 코드를 만들어야 한다.

지속적인 개선의 중요성

  • 소프트웨어를 흔히 건축에 비유하지만, 건축보다는 정원가꾸기(gardening)에 더 가깝다. 코드는 지속적으로 개선해나갈수밖에 없는 것이다.
  • 아주 복잡한 코드를 일필휘지하는 경우는 현실에 없다.
    • 논문이나 교과서에 나오는 코드는 모두 개선과 수정의 과정을 거친 결과물일 뿐
    • 프로그램을 한번에 짤 수 있는 것으로 생각하는 것이 문제의 시작
  • 지속적이고 점진적인 개선은 필수이다.
    • 컴퓨터 과학에서 엔지니어링으로 이름이 변경된 것처럼 과학보다는 공예에 가깝다.
    • 먼저 지저분한 코드를 짠 후에 정리하라
  • 코드에 만족하는 프로그래머는 전문가 정신이 부족한 것이다.
    • 나쁜 코드보다 더 오래, 심각하게 프로젝트에 악영향을 미치는 요인은 없다.
    • 힘들다는, 시간이 없다는 핑계로 나쁜 코드를 내버려두고 싶을 때 이런 유혹을 잘 벗어나는 것이 전문가.

보이스카우트 규칙을 지키자

  • 보이스카우트 규칙: 캠프장을 처음 왔을 때보다 더 깨끗하게 해두고 떠날 것
  • 고치려고 봐도 딱히 손댈 곳 없는 코드를 만들어야 한다.
  • 내 코드나 남의 코드의 문제점을 발견하면, 고치고 나와라.
    • 1년 전 코드보다 5분 전 코드가 더 고치기 쉬우니 바로 고쳐야 한다.
    • 일주일 뒤에 고치겠다는 말은 안 고치겠다는 것이다.
    • 그러나 마구잡이로 고치지 말고, 해당 코드에 대해 충분히 잘 이해한 후 테스트도 해보아야 한다.

결론

  • 클린코드는 프로그램을 바라보는 태도이다.
  • 읽기 좋은 코드는 결국 나를 위한 것이다.
  • 보이스카우트 정신을 기억하며, 떠날 때 더 깔끔하게 하는 습관을 체화하라.
  • 클린 코드가 왜 필요하고, 이게 내 삶을 어떻게 바꿀지 체화하며 훌륭한 개발자가 되어라.

질의응답

  • 기술부채는 언제 상환하는가?
    • 한번 크게 혼나면 상환하게 된다(ㅋㅋㅋ)
    • 마이크로소프트는 기술부채를 상환하는 시기를 아예 지정해주는데, 그 때는 신규 기능 커밋을 못하게 하기도 한다.
    • 신규 기능이 잘 돌아가지 않기 시작하고, 고객들의 claim이 늘어갈 때가 기술부채를 상환해야 하는 시점
  • 우선 MVP가 출시되어 시장의 주목을 받아야하는 상황에서의 기술부채는 괜찮다. 그 때는 클린코드에 집착하기보다는 기술부채를 감내해야 한다.
    • 그러나 그 지점을 벗어나 고객의 니즈에 맞게 기능을 추가해야 하는 경우에는 즉각적으로 태세를 바꿔야 한다.
    • 시장의 주목을 받았을 때가 바로 클린코드가 필요한 시점, 곧 코드 자체의 부채를 줄이고, 확장성을 높이고, 점진적 개선을 꾀해야 할 시점이다.
  • 기한 내 업무를 처리해야하는데 클린코드를 어떻게 개인이 지향할 수 있을까?
    • 클린코드가 미진한 업무진척의 핑계가 되지 않도록 기본적으로 실력과 성실함을 증명해두어야 한다.
  • 클린코드를 체득하는 방법은?
    • 오픈소스 소프트웨어, 라이브러리, 프레임워크 등의 초기 코드를 잘 읽어보고, change log를 눈여겨 보면서 어떻게 코드를 수정했는지 볼 것

느낀 점

  • 주니어 또는 입문하는 단계의 개발자에게 정말 필요한 내용의 강의였다. 어떤 방향과 방법으로 성장해나갈지 많은 도움이 되었다.
  • 클린 코드보다도 일단 코드를 쓰는 것 자체가 나에겐 당면한 문제라는 건 함정