Skip to content

juneyr.dev

프로그래머를 위한 제언

Life Hacks, Programmer3 min read

서론

개발자로 살아가기를 바랐고, 또 감사하게도 그 길을 걷고 있으면서도 항상 의문이 많다. 내 옆의 개발자들은 모두 나보다 뛰어나고, 항상 공부하고 있는 것만 같다. 나도 따라서 몇걸음 걸어보지만 맥없이 주저앉는다. 대열에 합류하기 위해서 또 일어나보고, 주저앉고... 지난 몇년간은 이 일의 반복이었던 것 같다. 잠깐 앉을 때마다 뭔가를 줍기도 했고, 같이 뛰면서 배운것들도 많았지만 이렇게 성장하는게 맞나싶다.

그러니, 개발자로 어떻게 살아가는게 효율적이고 좋은지에 대한 관심은 자연스러웠다. 여기저기 둘러본 결과, 크게 두 책에 대한 추천이 있었는데, 하나는 앤드류 헌트 & 데이비드 토머스의 실용주의 프로그래머 또다른 하나는 샘 라이트스톤의 프로그래머로 사는 법 이었다. 두 책 모두 10년도 넘은 책들이지만, 여전히 통하는 부분이 있으리라 생각한다.

이 글에서는 천천히 이 두 책을 요약할 계획이다.

개발자의 성장에 관해서

지식 포트폴리오 (from 실용주의 프로그래머 1장 5챕터)

지식에 대한 투자가 언제나 최고의 이윤을 낸다. by 벤자민 프랭클린 Benjamin Franklin

지식 포트폴리오를 관리하는 것은 금융 포트폴리오를 관리하는 것과 유사하다.

  • 진지한 투자자들은 주기적으로 투자
    • 소량일지라도 지식 포트폴리오에 꾸준히 투자해야한다. 습관 자체가 금액의 합만큼이나 중요하다.
  • 장기간 성공의 열쇠는 다각화
    • 컴퓨터 분야의 지형은 빨리 변한다. 더 많은 기술에 익숙하다면 변화에 적응하기 좋다.
  • 최대 수익을 위해 싸게 사서 비싸게 팔자
    • 하나의 기술에 올인하는 것만이 좋은 생각은 아니다.
  • 포트폴리오는 주기적으로 재검토하고 재조정
    • 이 산업은 매우 동적이므로... 오랫동안 사용하지 않았던 기술을 끌어올 때도 필요하고, 다른 언어를 시도할 때도 필요하다.

지식 포트폴리오의 목표 가이드라인을 살펴보자.

  • 매년 새로운 언어를 최소 하나는 배워라

    • 다른 언어는 동일한 문제를 다르게 푼다. 몇 개의 서로 다른 접근법을 알면 사고를 확장하고 판에 박힌 사고에 갇히는 걸 예방하는 데에 도움이 된다.
  • 기술 서적을 분기마다 한 권씩 읽어라.

    • 습관이 들면 한달에 한권씩
  • 비기술서적도 읽어라

    • 컴퓨터를 사용하는 것은 사람이라는 점을 기억하자.
  • 수업을 들어라

  • 지역 사용자 모임에 참여하라.

  • 다른 환경에서 실험해보라.

    • 윈도우에서만 일해봤다면, 집에서는 유닉스를 갖고 놀아봐라. makefile과 에디터만 사용하고 있다면 IDE를 시도해보라.

질문은 학습의 기회

어떤 사람이 질문을 했는데 답을 못 구했다고 하자. 이 답을 찾는 것이 좋은 학습의 기회가 된다. 스스로 답을 못찾겠거든, 구루를 찾든 인터넷을 찾든 계속해서 찾고, 중단하지마라.

소프트웨어 개발자 초기 시절 활용법 (from 프로그래머로 사는 법 PART 1, 챕터 5)

소프트웨어 전문가가 되려면 ...

  • 코드 계획과 개발과 관련된 스킬
  • 협업 스킬
  • 시스템의 규모에 대한 이슈

지금이라도 좋으니 아래를 배우도록 하자.

  • 최소 네 가지 서로 다른 프로그래밍 언어와 네 가지 서로다른 데이터 형식(JPEG, XML, 텍스트, MPEG) 을 배운다.
  • 적어도 천 명이 동시 사용할 수 있을 정도의 소프트웨어를 개발한다.
  • 1TB 규모의 데이터까지도 스케일링할 수 있는 소프트웨어를 개발한다.
  • 열 명 이상이 참여하는 프로젝트에서 일한다.
  • 대답해줄 사람이 더 이상 없는, 5년 넘게 지난 코드를 확장하는 일을 한다.
  • 남이 만든 코드의 결함을 적어도 40개 이상 수정한다.
  • 다국어 지원 코드를 작성한다.
  • 다음 상황에서의 성능 특성을 연구한다.
    • CPU 캐시 미스가 있는 / 없는 상황에서 메모리로부터 데이터 가져오기
    • 디스크에서 연속 블록에서 읽어오는 경우와 무작위 입출력 탐색으로 읽어오기
    • 큰 블록의 입출력과 작은 크기의 입출력
    • 세 가지 많이 쓰이는 언어(자바 , C/C++, PHP 등)

리더로부터 배워라 대가급 전문가들이 생각보다 최신 기술면에서 뒤처져있다는 사실에 놀랄 수 있다. 하지만 그들은 대형시스템을 만드는 방법을 안다. 좋은 코드와 나쁜 코드를 구분할 줄 안다. 어떤 부분에 힘을 주고 주지 말아야할지를 안다.

어떤 사람이 될 것인가? 사람들을 살펴보면서 스스로에게 질문을 던져라.

  1. 저렇게 일하면 즐거울 것 같고, 내 커리어에서 가장 닮고 싶은 인물은 누구인가?
  2. 어떤 윗사람이 하는 만큼은 내가 할 수 있겠다고 느껴지는 역할은 무엇인가?

멘토 인생의 지혜를 공유해주고 자신의 행동에 대해 어느 정도 개인적인 피드백을 제공해줄수 있는 사람이 바로 멘토다. 멘토를 만들어야한다. 누군가 현자를 붙여줄 때까지 기다리지말고 직접 찾아나서자. 멘토링에 대해서 지속적으로 감사를 표하고, 일정을 잡자. 커리어의 시기에 따라서 여러 다른 멘토가 필요하다.

성장역량 (from 프로그래머로 사는 법 PART 1, 챕터 6)

개인이든, 조직 입장에서든 잠시 시간을 투자하여 자신을 스스로 향상하면 장기적으로 더 긍정적인 효과를 본다.

  • 더 나은 디버거를 찾아 도입
  • 새로운 프로그래밍 언어를 배운다

보통 자기계발보다는 현재 맡은 프로젝트 업무가 훨씬 급한 경우가 많다. 이 시간을 마련하는 비법은 스스로 시간을 쓰는 방법에 대해 민감해지는 것이다.

  • 중요하지만 급하지 않은 (알찬 시간) 에 경력을 확장하고 잠재력을 키우는 일을 하자.
  • 중요하지도, 급하지도 않은 (시간 낭비) 를 줄이고 건너뛰자.

시간관리

시간 관리 (from 프로그래머로 사는 법 PART 2, 챕터 12)

목표 중심적인 시간관리는 시간을 투자하여 전문가로서의 자기 목표를 이해한다음, 그 목표를 달성하는데 필요한 것을 반영하는 것에서 시작한다. e.g) 유리그릇에 돌멩이, 모래, 물을 채워넣는 예시

과제 중심적인 시간관리는 며칠 / 몇 주 안에 해야 할 과제를 이해하고, 매일 그 우선순위를 설정하는 방식이다. 이 관리법은 일간, 주간 단위의 우선순위를 잡는 데는 도움이 되지만, 경력 전반에 걸쳐 장기목표를 꾸리는 데는 도움이 되지 않을 수도 있다.

영향력의 원 밖에 있는 일에 신경쓸 수록 부정적인 감정이 커진다.

  • 영향력의 원 - 스스로 어느 정도 영향력을 행사 할 수 있는것

    • 제품의 품질
    • 제품의 출시계획
    • 나에게 주어지는 일
    • 내가 계발할 능력
    • 나의 사회적 행동
    • 내가 열심히 일하는 정도
  • 관심의 원 - 관심이 있지만 거의 통제할 수 없는 것

    • 어떤 프로젝트에 참여하는 사람
    • 회사의 전략
    • 경제 상태
    • 동료의 성격적 결함
    • 날씨

어느 정도까지 시간을 낭비해도 될까? 시간 낭비는 두가지

  • 사람들과 어울리며 인맥을 구축하는 것
  • 완전히 노는 것

전자는 일종의 회색지대로서, 운영 효율면에서 어느 정도 이익이 될 수도 놀랍게도 완전히 노는 것도 어느 정도 이해 가능 ..? 소프트웨어 개발이나 설계는 정신적으로 강도 높은 일이기 때문

일단 하루에 75분을 넘기면 안된다. + 시간 낭비는 누구에게든 보기 좋은 일은 아니다.

이메일 처리

이메일 처리는 실시간으로 하지 말 것

  • 업무에 인터럽트
  • 계속 이메일만 처리하게 됨
  • 처리하다보면 진짜 중요한 것에 집중할 수 없음

첨) 2021-books-딥워크 참조 !

균형의 기술 (from 프로그래머로 사는 법 PART 2, 챕터 14)

아무리 재밌게 일하는 사람이라고 하더라도, 업무와 그 외적인 삶에 균형을 잡지 못하면 진정한 행복을 느끼기 쉽지않다. 시간을 잘 나눠서 모자라는 부분에 더 많은 시간을 쏟자.

  • 시간을 효율적으로 쓸 수 있다거나 잠을 줄일 수 있다는 가정은 금물이다.
  • 정보를 한꺼번에 묶어서 처리하자.
  • 회의도 수시로 하지 말고 정해진 시간대에 몰아서 하자.
  • 경력을 쌓아가고 & 업무 만족도를 높이는 데 있어서 별 도움이 되지 않은 일을 찾아보고 없애버리자.

첨) https://news.hada.io/topic?id=5111 의 정보를 어떻게 습득하는지

참고

  • 실용주의 프로그래머, 앤드류 헌트 & 데이비드 토머스, 2005

  • 프로그래머로 사는 법, 샘 라이트스톤, 2012

  • GeekNews