실용주의 프로그래머 1장

김형석·2023년 6월 12일
1

서문

무엇이 실용주의 프로그래머를 만드는가

모든 개발자는 유일무이하나 실용주의 프로그래머들의 특징들 가운데 많은 수는 다음과 같다
  1. 얼리 어댑터 또는 새로운 것에 빠르게 적응하는 사람.
  2. 호기심 많은 사람.
  3. 비판적인 사고의 소유자
  4. 현실주의자
    • 근본적인 특성을 이해하려고 노력하는 사람, 이 일이 얼마나 걸릴지 또 얼마나 어려운 일인지 파악하는 감각을 길러준다.
  5. 다방면에 능숙한 사람

실용 주의 프로그래머의 가장 기본적인 특징

Tip 1. 자신의 기예 craft에 관심을 가져라

  • SW 개발을 잘하는것에 관심이 없다면, 이 일을 하는 의미가 없다.

Tip 2. 자기 일에 대해 생각하라.

  • IBM의 표어 생각하라! THINK!가 실용 주의 프로그래머의 계명 mantra이다.

정원사가 완벽한 잔디밭을 만드는 방법은 간단하다.
매일 아침 이슬을 털어주고, 이틀에 한번 잔디를 깎아주고 , 일주일에 한번 잔디밭을 골라주면 된다.

그 일을 500년 동안하면 누가 봐도 좋은 잔디 밭이 될 것이다.


1장.

Topic 1. 나의 인생이다.

본인에게는 모든 상황을 바꿀 수 있는 힘이 있다. 어떤 방향으로든, 자신의 의지와 노력으로.
주도적으로 행동해서 나의 기대대로 인생을 만들 기회를 잃지 말자.

Topic 2. 고양이가 내 소스 코드를 삼켰어요.

실용주의 철학의 초석중 하나는 자신과 자신의 행동에 대해 책임을 지는것.
자신의 경력에 대해 책임을 지고, 자신의 무지나 실수를 주저없이 인정한다.

약점을 보이는 것에 대한 두려움이 가장 큰 약점이다.
-J. B. 보쉬에-

가능한 한 전문가 답게, 능력에 자부심을 가질 수 있지만 실수나 무지 같은 단점도 인정해야한다.

팀원들이 나를 신뢰하고 의지할 수 있어야하고, 책임을 져야한다.
통제할 수 없는 위험 요소는 없는지 상황을 분석하고, 해당 사항에 대해서는 말을 할 줄 알아야하며.
그 이후의 일은 책임을 져야한다.

혹, 실수나 잘못된 판단이 있었을시에는 변명 대신 대안을 제안하도록 노력해야한다.

저장된 소스가 날아갔을 경우 상사에게
고양이가 내 소스코드를 삼켰어요 라는 식의 변명은 당연하게도 통하지 않을테니.

"잘 모르겠어요" 라고 말한다면, 꼭 바로 이어서 하지만 알아보겠습니다. 라고 말해야한다.

Topic 3. 소프트웨어 엔트로피

Entropy : 시스템 내의 무질서한 정도를 가리키는 물리학 용어

  • 소프트웨어의 무질서도가 증가할때 -> 소프트웨어의 부패 긍정적으로 말한다면 기술 부채 (언젠가는 갚을 수 있지..라는 뉘앙스를 풍기며 하지만 많은 사람이 갚지 못하지 않을까)

도심에서 도시 부패를 연구하는 사람들이 흥미로운 유인 메커니즘을 발견했다.

깨진 창문
1. 오랜 기간 수리하지 않고 방치한 창문 하나 때문에 거주자들에게 버려진 듯한 느낌이든다.
2. 그래서 창문이 더 하나 깨짐.
3. 사람들이 쓰레기를 함부로 버리기 시작
4. 벽에 낙서가 등장 -> 심각한 구조적 손상이 시작
5. 꽤 짧은 시간 만에 소유주가 그걸 고치려는 의지를 넘어설 정도로 건물이 손상됨. 결국 버려진 듯한 느낌은 현실이 되어버림.


심리학자들은 절망감이 전염된다는 연구를 발표했다

명백히 망가진 상황을 무시하는 것은, 아무것도 고쳐지지 않을 것 같다는 생각, 아무도 신경쓰지 않는다는 생각이 들고 망조가 들었다는 생각을 굳어지게 만든다.
이런 부정적인 생각들이 팀원들 사이로 퍼져서 악순환을 만들 수 있다.

위의 상황을 방지할 방법은 깨진 창문을 내버려두지 않는것 이다.

  • 나쁜 설계
  • 잘못된 결정
  • 형편없는 코드

발견하자 마자 고칠것.
적절히 고칠 시간이 없으면 일단 판자로라도 덮을 것.

  • 불쾌한 코드 주석처리
  • 아직 구현되지 않았음 이라고 메시지를 표시
  • 더미 데이터로 대치

핵심은 더 이상의 손상을 예방하기 위해 어떤 조치든 취하고 상황을 잘 관리하고 있음을 보여주는 것

소프트웨어 부패에는 여러 요인이 있지만. 방치는 어떤 요인보다도 부패를 더 가속화 시킨다

엔트로피가 우리를 지배하게 내버려 두지 말라.

Topic 4. 돌맹이 스프와 삶은 개구리

돌맹이 세개만 넣고 스프를 끓이며 ...이 있다면 더 나을텐데, ...이 있다면 풍미가 더 좋아지긴 할텐데 등의 말로 사람들로 하여금 자신의 자원을 하나씩 내어 두도록 유도를 한 이야기가 있다.

무엇을 어떻게 해야 하는지, 정확히 아는 경우에 일을 착수하려고 허락을 구하는 때부터, 뭔가 지연되거나 사람들이 멍한 눈으로 바라보고 위원회가 생기며 예산 승인이 필요한 등등...
일이 복잡해지기 시작하고 모든 사람이 각자 자원을 지키려는 시작피로가 발생할 때

군인들 처럼 돌맹이를 내어놓아야한다.

큰 무리 없이 요구할 수 있을 만한 것을 찾고 그것을 잘 개발해라

계속되는 성공에 합류하기란 쉽다.

변화의 촉매가 되어라.

또 다른 이야기인 삶은 개구리의 경우 낮은 온도에서부터 천천히 온도를 올리면 개구리는 눈치채지 못할 것이다.

이처럼 개구리가 되지말고 큰 그림에 늘 주의를 기울여야한다.
지금 하고 있는 일에만 정신을 쏟지말고, 주변에서 무슨 일이 일어나는가를 늘 살펴보라.

Topic 5. 적당히 괜찮은 소프트웨어

우리는 종종 뭔가 나아지게 하려다가 괜찮은 것 마저 망친다.
-셰익스피어

완벽한 소프트웨어를 만들면 너무나도 좋겠지만, 실세계에서 아무 결함도 없는 소프트웨어를 만드는것은 불가능에 가깝다.

그래서 우리는 적당히 괜찮은 소프트웨어를 만들어야한다.
단. 여기서 적당히 괜찮은 이란 사용자에게도 평가를 받아야한다. 즉. 최대한 사용자도 적당히 괜찮은 에 한표를 던질 수 있도록 소프트웨어를 만들어야한다

우리는 종종 적당히 타협이 필요한 상황에 자주 처한다.
많은 사용자가 멋지고 휘황찬란한 버전을 위해 1년을 기다리느니 차라리 당장 좀 불편한 소프트웨어를 쓰고 싶어한다.

오늘의 훌륭한 소프트웨어 > 내일의 완벽한 소프트웨어

Topic 6. 지식 포트폴리오

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

우리의 지식과 경험은 가장 중요하고 날마다 쓰이는 전문가 자산이다.
하지만 불행하게도 이 자산은 기한이 있는 자산이다.

새로운 기술,언어,환경이 개발될 수록 지식은 옛것이되고.
우리의 지식 가치가 떨어짐에 따라 회사나 클라이언트가 보는 우리의 가치 역시 떨어진다.

새로운 것을 배우는 능력 자체를 기르도록 해야한다.

지식 포트폴리오 관리는 투자 포트폴리오 관리와 매우 유사한데,

1. 진지한 투자자는 주기적으로 투자하는 습관이 있다.
2. 장기적인 성공의 열쇠는 다각화.
3. 똑똑한 투자자는 보수적인 투자와 위험이 크지만 보상이 높은 투자 사이에서 포트폴리오의 균형을 잘 맞춘다.
4. 투자자는 최대 수익을 위해 싸게 사서 비싸게 파려고 한다.
5. 포트폴리오는 주기적으로 재검토하고 재조정해야한다.

일단 스스로 한번 해본 다음, 습관을 들이는 것. 따라할 절차를 만든뒤 뇌에 각인될 때까지 반복.
그러면 새로운 지식을 무의식적으로 빨아들이는 자신을 발견하게 될 것.

지식 포트폴리오에 대한 상세한 설명

  • 주기적인 투자

    지식 포트폴리오에 소량으로라도 주기적으로 투자를 해야함.

  • 다각화

    더 여러가지를 알 수록 본인의 가치는 높아짐. 빠르게 변하는 컴퓨터 분야에 맞게 더 많은 기술에 적응하도록 노력하고, 기술 외의 분야도 익히는 것을 잊지말자.

  • 리스크 관리

    기술은 위험하지만 잠재적인 보상이 높은 것부터 리스크가 낮고 보상이 낮은것까지 다양한 스펙트럼 위에 존재한다. 우리의 모든 기술 달걀을 한 바구니에 담지 말라. (적절한 분배)

  • 싸게 사서 비싸게 팔기

    자바가 유행하지 않았을때, 자바를 학습하는게 당시엔 리스크가 있었을 것이다.

목표

  • 매년 새로운 언어를 최소 하나는 배워라.
  • 기술 서적을 한 달에 한 권씩 읽어라
  • 기술 서적이 아닌 책도 읽어라.
  • 수업을 들어라.
  • 지역 사용자 단체나 모임에 참여하라.
  • 다른 환경에서 실험해보라 (Other OS, Other IDE)
  • 요즘 흐름을 놓치지 마라.

Topic 7. 소통하라 !

나는 무시당하느니 차라리 샅샅이 훑어보는 시선이 낫다고 봐요.

개발자로서 우리는 여러 입장에서 소통해야 한다.
회의하고,듣고 말하며 많은 시간을 보내며 , 최종 사용자의 요구를 이해하려고 노력하며 그들과 함께 일한다

하루 중 많은 시간을 소통하며 보내기 때문에 이를 잘할 필요가 있다.

글을 쓰는것도 코드를 쓰는 것과 똑같다. DRY원칙이나 ETC(Easier To Change)

DRY 원칙
Don't Repeat Yourself의 약자로 정보의 반복을 줄이는 것을 목표로 하는 소프트웨어 개발의 기본 원칙.

소통하는데 유용한 방법들

  • 청중을 알라
  • 말하고 싶은게 무엇인지 알라
  • 때를 골라라
  • 스타일을 골라라
  • 멋져 보이게 하라
  • 청중을 참여시켜라
  • 경청하라
  • 응답하라
  • 문서화
profile
코드로 소통하기 위해 힘쓰는 프론트엔드 개발자 입니다.

1개의 댓글

comment-user-thumbnail
2023년 6월 12일

재밌네요

답글 달기