예전에 같이 공부했던 것 정리했던 기록입니다. 리팩토링을 리마인드 하기 위해서 OReilly에서 21년 10월 출간된 "Five Lines of Code" 책을 가지고 공부했었습니다. 지난 6월에 정리한 것을 이제 하나씩 공유해 볼까 합니다. 리팩토링 관련해서 좋은 책이니 일독을 추천합니다.


 

코드 품질이 좋으면 유지보수비용도 낮아지고, 오류도 적고, 개발자도 행복.

 

기술(skill) 코드가 좋은지 나쁜지, 나쁘면 리팩토링이 필요한지를 판단하는 기술. 판단력과 경험 필요. 주니어에겐 육감처럼 느껴질 수도 있음.
문화(culture) 코드 개선 작업에 시간을 할애할 수 있고, 장려하는 문화.
도구(tool) 우리가 하는 일이 안전한지 확인하는 데 도움이 되는 무언가.
자동화된 테스트 등

 

리팩토링

  • 코드의 기능(하는 일)을 변경하지 않고도 사람이 더 읽기 쉽고 유지 관리하기 쉽도록 코드를 변경하는 것
  • 정기적으로 수행하지 않으면 시간(개발자의 시간은 곧 비용)이 많이 걸릴 수 있음.
  • 코드 속도 향상,  코드를 더 작게 만들기, 코드를 더 일반적으로 변경하여 재사용 가능하게 만들기, 코드를 더 쉽게 읽거나 유지 관리하기
  • 코드가 수행하는 작업을 변경하진 않으므로, 읽기 쉽고 유지 보수가 쉬운 코드를 작성하는 방법에 중점.

좋은 코드: 사람이 읽기 쉽고 유지 관리가 쉬우며, 설정한 작업을 올바르게 수행

코드 이해가 중요한 이유.

  • 대부분의 프로그래머는 코드를 작성하는 것보다 코드를 읽고 이해하는 데 더 많은 시간을 할애
  • 코드를 이해하지 못한 채 무언가를 변경하면 치명적인 오류가 발생할 수 있기 때문
  • 코드의 가독성을 향상시키면 새로운 기능을 구현할 시간 확보 가능
  • 유지 보수가 쉬운 코드는  버그가 줄어들고 수정하기 쉬워진다
  • 코드를 읽을 때  머릿속으로 코드가 무엇을 하는지에 대한 모델을 구축하는데, 한 번에 머릿속에 더 많은 것을 기억해야 할수록 더 피곤해짐.

코드 악취

  •  코드가 나쁘다는 것을 암시할 수 있는 요소
  • 리팩터링은 샤워를 하는 것과 같다.-Kent Beck
  • 리팩터링은 정기적으로 수행할 때 가장 효과적이고 비용도 적게 듬.일상 업무에 리팩터링을 통합하는 것이 좋음.

개발 워크플로 6단계:

  • 탐색하기.: 문제(요구사항)에 대한 인식 . 실험으로부터 시작. 무언가를 빠르게 구현한 다음 고객과 함께 요구사항을 검증해보기.
  • 명세하기.  구축해야 하는 것이 무엇인지  명시. 어떤 형태로든 자동화된 테스트를 수행하는 것이 가장 좋음.
  • 구현하기:  코드 작성.
  • 테스트: 작성한 코드가 명세를 통과했는지 확인
  • 리팩터링: 코드 전달 전에 다음 사람이 작업하기 쉬운지 확인
  • 배포(적용): 풀 리퀘스트 또는 특정 브랜치에 푸시

누가 뭐라해도 코드의 가치는 작성한 코드를 고객에게 전달하는데 있다!!

 

 

규칙 기반 리팩터링 수행 워크플로

레거시 시스템 리팩토링

  • 먼저 쉽게 변경할 수 있는 구조로 바꾼 다음. 쉽게 변경하세요.-Kent Beck
  • 새로운 것을 구현하려고 할 때마다 새로운 코드를 쉽게 추가할 수 있도록 리팩터링부터 시작

리팩터링의 가치가 없는 코드베이스:

  • 작성하고 한 번만 실행한 다음 삭제할 코드.
  • 폐기되기 전에 유지 관리 모드에 있는 코드.
  • 임베디드 시스템이나 게임의 하이엔드 물리 엔진과 같이 엄격한 성능 요구 사항이 있는 코드.

도구

  • 자동화된 테스트:  소프트웨어 개발에 있어 자동차에 브레이크와 같은 존재
  • 레시피와 유사한 상세한 단계별 구조화된 리팩토링 패턴
  • 버전 관리
  • 컴파일러
  • 도구의 도움을 받아서  리팩토링 작업에 대한 확신을 얻자!

 

DRY(반복하지 마세요) KISS(단순하게, 바보처럼) 원칙을 준수

규칙의 목적은 이해를 높이는 것.더 잘 알 때까지는 규칙을 따르자.


 



반응형

'2. 개발 > 2.0 개발 잡설' 카테고리의 다른 글

우리쪽이 아니라 다행이네요.  (0) 2023.05.30
MS PowerToys, 또다른 생산성을 부여합니다.  (0) 2023.05.08
잘못된 문제  (0) 2023.03.16
[잡념] 의도적 프로그래밍  (0) 2023.03.08
디터람스: UX 구루  (0) 2023.01.22

책은 당연한 것에 대한 질문을 던지게 한다.

묵직한 질문을 던지는 책이 있습니다. 그 질문은 우리가 미처 생각지 못했던 지점을 강타합니다. <사라진 개발자들>은 제게 그런 묵직한 질문들을 던진 책이었습니다.  책의 부제 '알려지지 않은, 치열했던 여성 에니악 개발자 6인의 이야기'처럼, 최초의 컴퓨터였던 에니악의 여성 개발자들의 삶, 그들의 노력과 공헌을 되돌아 보게 만드는 책입니다. 단순 전기는 아니고 세상의 편견에 맞선 6인의 여성 개발자의 고군분투 이야기입니다.  

 

 

여성 엔지니어???

오랜만에 들어본 에니악이었습니다. 이 책의 저자, 캐시 클라이먼은 우연히 발견한 에니악 흑백사진에서 여성 엔지니어들을 발견합니다.  에니악을 만든 엔지니어들 중 2명의 엔지니어로 보이는 분들의 사진. 그 사진의 인물 추적해서 각자의 인생과 에니악에 얽힌 이야기를 발굴해 냅니다.

 

제가 컴퓨터를 처음 배우던 때가 생각났습니다."최초의 컴퓨터 에커드와 모클리가 만든 에니악, 방을 가득 채울만큼 진공관으로 가득 찬 기계. 탄도 계산에 사용.. 유니박 최초의 상용 컴퓨터...."

 

그때 컴퓨터 경진대회는 이런 내용에 대한 것들도 많이 나왔었네요. 어쨌든 제게 에니악은 에커드와 모클리라는 천재 엔지니어가 만든 기계였습니다. 그 외 컴퓨터를 함께 만든 사람들의 모습을 생각해 보지 못했습니다.

나름  컴퓨터 역사 속에서 유명한 여성 소프트웨어 엔지니어들을 알고 있다고 생각했습니다. 최초의 프로그래머로 알려진 에이다. '버그'라는 용어를 만든 그레이스 포러, 아폴로 계획의 전설 마가렛 해밀턴... 

정말 그랬습니다. 이 책을 읽기 전에는 에니악은 두 사람의 작품처럼 너무 당연시 되어,  "컴퓨터를 만든 여성 엔지니어"가 있을 것이라는 상상을 하지 못했고, 그러다 보니 질문도 떠오르지 않았습니다. 그런데 왜 최초의 컴퓨터인 에니악에 숨겨진(?), 책 제목처럼 사라져버린, 개발자들이 생긴 이유에 대해 한번쯤 고민을 하는 계기가 되었습니다.

 

이 책은 여성 개발자들이 주인공이기에, 남성 위주의 역사 기록에서의 여성의 역할, 특히 공학 분야에서 여성의 역할을 재평가해야 한다는 주장으로 읽히기도 합니다. 하지만 남성과 여성의 구분(이라 쓰고 차별이라 읽는)을 없애는 것 이외에도 여러가지 고민과 질문을 주는 책입니다.

 

전쟁과 문명발달의 아이러니

컴퓨터는 현대 사회에서 없어서는 안될, 인류의 삶을 풍족하게 만들어준 필수 발명품입니다. 하지만 역사적으로는 2차세계대전이라는 참혹한 전쟁의 역사속에서 탄생했다는 것은 참 아이러니합니다. 적의 피해를 극대화하기 위해 더 정확한 사표(firing table)로 포탄의 착륙지점 정밀도를 높이기 위해 만들어진 전자식 장비. 지금은  이것으로 음악도 듣고, 게임도 하고, 영화도 보고/만들고, 문서도 하고, 전세계 사람들과 글자와 영상으로 대화도 나눌 수 있게 합니다.

전쟁이 진행되면서 남자들은 징용되어 전선으로 이동하게 되고, 이로 인해 그동안 능력이 있음에도 불구하고 여자라는 이유로 일을 할 수 없었던 사람들에게 기회가 주어진 것도 역설입니다. 고등수학을 전공했지만 그 능력을 발휘할 기회조차 주어지지 않던 사회에서 전쟁이 만든 기회. 하지만 전쟁이 끝나면서 다시 일자리를 잃게 되는 현실...1940~50년대의 모습이 오늘날에도 비춰지는 것 같아서 씁쓸하기도 합니다.

비극적인 전쟁이 결과론적으로는 편견을 깨는 계기가 되는 역사....묘한 감정이 듭니다.

 

엔지니어, 개발자의 삶

책을 읽는 동안 6명 주인공 중에서 진 제닝스에게 많은 애정이 갔습니다. 다른 분들은 누구에게 애정을 더 느꼈는지 모르겠습니다. 어쨌든, 6명의 삶속에서 개발자란 무엇이고 어떻게 살아가야 할까에 대한 힌트도 얻었습니다.

이 책의 주인공 6인은 세상에 존재하지 않았던 물건을 만나서 서로 도와 가면서 학습하고, 적용하면서 발생한 문제를 해결한느 개념을 발명해 냅니다. 조건문, 반복문, 중단점, 짝 프록그래밍, 병렬처리. 이 모든 것이 첫 컴퓨터를 활용하면서 등장한 개념이라는 것이 놀랍습니다. 처음 보는 기계. 그것도 접근조차 자유롭지 못해서 실물을 보기 전에 회로도로 공부하는 모습. 조를 나눠 유닛별로 학습해서 서로 가르쳐주며 학습하는 모습. 그것들을 조율해주는 회의 문화.

지금 IT업에 종사하는 우리의 모습도 비슷하다는 생각이 들었습니다.

이 책의 원제는 Proving ground입니다. 시험 무대. 세상의 편견을 스스로 시험무대에 올라 증명해야 하는 사람들.  참 힘들 것 같습니다.  하지만 팀을 이루고, 호기심과 열정으로 주어진 문제를 해결하는 모습에서 쾌감이 느껴지기도 합니다.

이 책에서 저는 마음에 드는 프로그래머의 정의를 찾았습니다.

"프로그래머라는 직업이 탄생했다. 문제를 가진 사람과 컴퓨터를 연결해 문제를 해결하도록 돕는 역할을 하는 사람이 등장했다"

 

책을 덮으며...금방 이 책을 다시 읽게 되지는 않을 것 같습니다. 하지만 세상에 지칠 때면 다시 이 책을 펼치고 읽으면서 어떻게 지난한 현실을 돌파할 것인가를 고민하게 될 것 같습니다.

 

 


excerpt from....

 

p.29 젊은 여성들은 한번도 해본 적이 없는 일을 하려는 참이었다. 하지만 지금껏  함께했던 시간을 생각하면 충분히 열정적이고 낙관적인 태도로 임할 수 있었다....가장 중요한 것은 함께 한다는 것이었다. (p.29-30)

p.33 케이에게 수학은 어렵지 않았다. "제게 수학은 머리 쓰는 일이 아니었어요. 수학은 그냥 풀 수 있는 퍼즐이고, 항상 답이 있죠." 

p.36  전쟁으로 인한 경제 동원은 전통적인 남성과 여성 업무의 경계를 많이 허물었다.

p.102 컴퓨터들이 유럽을 위해 만들었던 사표는 아프리카에서 사용할 수 없었다. 땅이 부드러운 아프리카에서는 포가 다르게 작동하기 때문이었다. 또한 적도 인근에 위치한 사막의 대기 온도와 밀도는 사표를 일반적으로 사용한 값, 즉 미국의 일반적인 조건 기준으로 계산한 값과 매우 달랐다.. 

p.141 애니악 팀 회의... 누구나 아이디어를 말하고 공유할 수 있는 협력적인 방식으로 회의를 진행했다..  

p.167 루스벨트 대통령이 1933년부터 1944년까지 저녁시간에 미국 국민들과 함께  나눈  노변담화는 라디오 기술 사용에 혁명을 일으키고 국민들의 불안을 잠재웠다... 일자리, 경제위기부터 전쟁에 이르기까지 그날그날 당면한 어려운 문제들을 차분하고 편안한 어조로 설명했다..... 그토록 그들의 삶에 친밀한 유대감을 형성한 대통령은 없었다. 

 p.202 참 이상한 이름이 많았다. 이들은 짝을 지어 유닛을 나눠서 공부한 후 서로 가르쳐 주기로 했다. 분할정복방식이었다. -> 새롭고 시험적인 기계를 인내심과 공동 작업으로 해결.
p.216 종이로 하는 작업의 핵심은 한번에 한단계씩 내려가는 것이다. 페달링 시트
p.232 존은 남녀 구분없이 상대의 말을 주의깊게 들었고 상대가 하고자 하는 바를 잘 따라주었다. --> 팀의 탄생
p.237 우리는 서로가 하는 일에서 결점을 찾으려 노력했어요. 상대가 결점을 찾았을때는 화를 내기 보다는 기뻐했죠. 프로그램에 오류가 남지 않는다는 뜻이었으니까요-> 짝 프로그래밍...
p.270 짜릿한 도취감과 깊은 우울감 -> 소수의 남성 위주의 발표회 직후...
p.289 이 과정에서 프로그래머라는 직업이 탄생했다. 문제를 가진 사람과 컴퓨터를 연결해 문제를 해결하도록 돕는 역할을 하는 사람이 등장한 것이다.
p.313 지원자에게 지원자격을 갖췄는지 묻기보다 업무에 대해 그녀에게 질문을 던지는 지원자를 선택했다. 에너지, 호기심, 모험심을 갖춘 사람들을 선발했다.
p.316 모두가 동등한 자격으로 참여하는 회의..폰 노이만이 새로운 명령을 제안했는데 진이 안된다고 거절....실현 가능성이 없는 아이디어라는 것을 진은 알았기 때문.... 기여한게 하나도 없던 허먼이 마치 신성모독적 발언을 한것처럼 진을 째려봄... 폰 노이만은 본인의 실수를 깨달았기에 그저 웃고 자기 의견을 바로 잡았다.

 

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

반응형

+ Recent posts