본문 바로가기

독서

코딩 호러가 들려주는 진짜 소프트웨어 개발 이야기

이 책을 읽으면서 개발자로써 자질을 주로 다루지만 삶을 살아가는데 필요한 자세와 지혜를 알려주는 가이드북 같은 책이다.
책을 읽으면서 감명 받았던 부분을 다시금 적어보고 가슴에 새겨보려고 한다.

사소한 일에도 목숨을 거는 존재

프로그래머는 '통제'를 아주 좋아하는 존재이다. 이 컴퓨터라는 존재를 통제하기위해서 프로그래머들은 코드를 작성하고 코드를 통해 컴퓨터를 장악하려고 한다. 모든 세부사항을 꿰둟고 있지 않으면 제대로 통제되고 있지 않고 있다는 느낌이 들며 이 세부사항을 통제하기위해 일하다 보면 어쩔 수 없이 아주 사소한 일에도 목숨을 걸 수밖에 없는 존재인 것이다.
사소한 것에 목숨을 건다는 말은 '소탐대실'과 '장고 끝에 악수를 둔다.' 라는 말이 떠오르는 것은 자연스로운 일이 것이다.
물론 이 말은 우리의 아버지 어머니들의 지혜가 담겨 있는 속 깊은 뜻이긴 하다. 하지만 여기서 말하는 사소한 것이란 소탐이 아니다.
장고 또한 아니다. 여기서 사소한 것이란 얼마나 이 프로그램과 프로젝트에 열중할 수 있냐는 말이다.
'귀멸의 칼날'이라는 만화에서 나오는 <전 집중 호흡>이란 것이 있다. 전 집중 호흡은 호흡을 집중하여 흐름을 통제하면서 필요한 근육에 피를 보내 힘을 극대화하는 역할을 한다. 마찬가지로 *우리는 프로그램에 전 집중 호흡하여 통제하고 제대로 된 프로그램을 만들어 내기위해 노력해야 한다. *

형편없는 페인트 칠

페인트 칠을 잘하려면 어떻게 해야 될까? 좋은 페인트 사용하기? 아니면 좋은 붓, 롤링 사용하기? 아니다. 페인트 칠을 잘 하려면 페인트 통에 있는 사용 설명서 그대로 따라하면 된다. 그 페인트 통에 설명서가 있다는 것을 아는 사람은 얼마나 될까? 또 이 설명서대로 따라는 사람은 얼마나 될까? 만약 집안에 페인트 칠을 유튜브만 보고 따라했다면 분명 설명서의 100%를 따라하진 않았을 것이다.
프로그래밍도 마찬가지이다. 설명서대로 따라하지 않는 소프트웨어 개발은 지금까지 형편없이 개발한 것과 마찬가지이다. 그렇다면 이 참사를 막을 수 있는 것, 즉 소프트웨어 개발의 설명서는 무엇인가?
바로, * *체크리스트 ** 이다. 아래는 2000년 무렵 조엘 스폴슽키가 작성한 체크리스트이다.

  1. 소스코드 관리 시스템을 사용하는가?
  2. 한방에 코드를 빌드할 수 있는가?
  3. 매일 빌드하는가?
  4. 버그 데이터베이스를 사용하는가?
  5. 새로운 코드를 작성하기 전에 버그를 수정하는가?
  6. 최신 내용이 반영된 스케줄을 가지고 있는가?
  7. 요구사항 명세를 가지고 있는가?
  8. 프로그래머들은 조용한작업환경에서 일하는가?
  9. 돈 주고 살 수 있는 것 중 가장 좋은 도구를 사용하는가?
  10. 테스터들이 따로 있는가?
  11. 인터뷰를 수행하는 후보자들이 인터뷰 도중에 코드를 작성하는가?
  12. 무작위 사용성 테스트를 수행하는가?

코드 카타

우리가 성장 할 수 있는 것은 연습하는 것밖에 없다. 그러나 한 분야에 매몰되어 그 것만 연습한다면 성장하는데에는 한계가 있다. 주변을 바라보고 다른 환경에 노출되면서 그 분야를 새로운 시각으로 보는 것 또한 프로그래머으로써 성장할 수 있는 좋은 공부이다.
주식을 생각하면 간단하다. 주식을 공부할 때 차트보는 법, 회사 회계 분석하는 법만 배우면 결국 지금은 좋지만 앞으로 좋은 기업을 발굴하기 어려울 것이다. 그러나 사업의 전반적인 흐름과 그 사업 부분에 대한 공부, 그리고 다양한 접근(책, 인터넷, 현장 등)을 통해 다른 시각으로 들여다 보는 통찰력을 기르는 것도 좋은 투자자로써 성장할 수 있는 공부이다.
이처럼 코드 카타를 할때 코딩 퍼즐만 답이 아니다. 아래의 조언 통해 좀 더 다른 시각으로 바라보자

  1. 다른 프로드래머와 이야기를 나눠라, 다른 프로그램의 소스코드를 읽어라, 책이나 강의보다 그것이 더 좋은 방법이다.
  2. 프로그램을 짜라! 최선의 배움은 실행을 통해 배우는 것이다.
  3. 대학이나 대학원에서 프로그래밍 수업을 들어라
  4. 프로그래머로 구성된 팀에서 수행하는 프로젝트를 찾아 참여하라, 프로젝트에서 최선의 혹은 최악의 프로그래머가 된다는 것이 어떤 의미인지 파악하라.
  5. 다른 사람이 수행한 프로젝트를 이어받아 운영해보라. 자기가 작성하지 않은 코드를 유지보수하는 법을 배워라, 다른 사람들이 효과적으로 유지 보수할 수 있는 코드를 작성하는 법을 배워라
  6. 다른 프로그래밍 언어를 배워라, 자신에게 이미 익숙한 것과 세계관과 프로그래밍 모델이 완전히 다른 언어를 선택하라.
  7. 자기가 하는 일에 하드웨어가 어떤 영향을 주는지 이해하라. 컴퓨터가 명려어를 하나 수행하는 데 메모리에서 워드를 하나 읽어오는 데(캐시 적중이 일어난 경우와 일어나지 않는 경우 모두에 대해), 디스크에서 연속된 워드를 읽어오는데, 그리고 디스크에서 새로운 위치를 찾는 데 각각 어느 정도의 시간이 필요할지 알아보라.

첫 페이지를 훌륭하게 만드는 요소

  1. 페이지가 상당히 빠르게 로드돼야 한다.
  2. 이런 망할, 이게 뭐야?
    당신이 만들고자하는 애플리케이션이 해결하고 있는 문제가 무엇이고 다른 사람들이 왜 그러한 문제에 신경을 써야 하는지 정확하게 설명하는 것, 마치 처음보는 사람에게 30초 동안 명확한 의사를 전달하는 일종의 엘리비에터 토크가 필요한 것이다. 낯선 사람의 눈의 지루함 혹은 두려움으로 떨리지 않는 것을 확인 할 수 있어야한다.
  3. 구체적인 예를 제시하라
    회원가입, 동영상 등 묻지마 광고를 하게 하지마라 이 어플리케이션이 하는 일 이 무엇인지 이야기 해야 된다.
  4. 장애물 없는 명확한 동작이 가능하게 하라.
    눈에 띄는 버튼으로 사용자에게 다음 행동을 유도해야 한다. (어렵게 만들지 마라)
  5. 일부 사용자를 폿기하는 것을 의미할지라도 자신에게 진짜로 의미 있는 사용자를 놓치지 않도록 노력하라.

보안의 약한 고리는 사람

해킹을 하는 일에 컴퓨터 보안을 뚫는 것 또는 내부정보를 가져오는 갈취 하는 행위는 쉽지 않다. 그러나 아무리 강력한 소프트웨어 보안이라고 할 지라도 가장 약한 고리는 사람이다.
아래는 해킹 사례이다.

"저는 넷플렉스에 전화를 했고, 그 다음은 너무 쉬웠어요. 그들이 이름을 물어 보았고 나는 그의 이메일을 주면서 토드라고 했죠 그러자 그들은 좋아요. 당신의 비밀번호는 ~ 입니다.라고 했고 그걸 이용하여 사이트에 들어가자 그의 신용카드 번호 마지막 네자리가 보였습니다. 이제 윈도우 라이브 비밀번호 재설정 폼은 신용카드 소유자의 이름과 성, 마지막 네 자리 숫자, 그리고 유효기간만 있으면 되요.

위에 처럼 언제나 해커들의 목표는 컴퓨터가 아니라 사람이였다.

마무리

글을 적다보니 분명 소프트웨어, 프로그램을 다루는 방법에 대해서 이야기를 하고 있지만 우리의 평소 생활에 대한 지도를 받는 기분이였다.

  1. 어떠한 일을 수행 할때는 집중하고 자세히 들여보아라.
  2. 경지에 도달하기 위해서는 연습을 해라
  3. 다른 사람을 설득해야 프로젝트가 성공한다.
  4. 기계보다 사람은 언제나 나약한 존재이다. 반대로 무언가 일을 할 때 사람을 공략하는 일이 가장 쉽다.

위에서 말하는 4가지는 우리가 삶을 살아가거나 직장에서 사업에서 심지어 학교에서 성공할 수 있는 좋은 조언이다.
프로그램과 상관없어 보이지만 이 책을 읽고 느낀 것은 저 4가지에 대한 것이였다. 삶을 어떻게 살아가고 있는가는 우리가 어떤일을 하던가에 중요한 영향을 미치는 것을 확실한 것이다.