본문 바로가기

BOOK/PROGRAMMER

소프트웨어 장인정신

나도 배움에 대한 열정이 생기는 책

신입 개발자가 배움과 자기계발의 열정이 가득하고 자기가 하는 일에 애정이 있으머 더 나은 방법을 발견하거나 새로운 것을 배웠을 때 흥분하는 그런 선배 개발자들을 보고 배운다면 어떨까? 이 글을 읽으면 나도 행복해지고 열정이 생긴다. 이런 곳에서 함께할 수 있는 그런 직장을 갖고 싶다. 배움에 목말라있는 사람들.

프로페셔널

일을 어떻게 했느냐는 일을 해낸 것 만큼이나 중요하다. 과정의 중요함 소프트웨어 장인정신은 프로페셔널리즘 기술적 탁월함 고객만족을 중점 요소로 두고있다. 또 한 가지 중요하게 보는 요소는 소프트웨어 프로젝트와 소프트웨어 개발자를 공장 운영과 생산라인 노동자로 보는 관점을 바꾸는 것이다. 최선 지향 자바 영국 코드는 버그와 고통의 근원. 더 적게 작성 할 수록 더 좋다. 중복 없이 명료하게 쓰는 것. 추구하는 가치는 말이 아니라 행동에 의해 규정된다. 누군가가 스스로를 장인이라고 부른다면 그가 추구하는 가치와 프로페셔널한 태도를 지칭하는 것이지 능력을 지칭하는 것이 아니다.

이렇게 높은 수준의 동기가 부여된 사람들은 일을 재미있게 할 뿐만 아니라 항상 회사 바깥 세상에 관심을 갖는다. 

이 때문에 회사 입장에서는 외부로부터의 혁신과 효율을 지속적으로 수혈 받을 수 있는 큰 이득이 생긴다. 관리자들은 개발자들에게 일일히 통제와 명령하는 것이 아니라 권한을 위임하고 스스로 배움의 문화를 만들어갈 수 있도록 북돋워야한다. 

명령을 하게 되면 의무가 되고 흥미를 끌기 어렵게 된다. 언제 무엇을 어떻게 배울지 개발자들 스스로 정하게 내버려두자. 개발자들이 훌륭해지는 만큼 회사도 혁신적이고 기민해진다. 개발자들이 행복한 회사라면 외부의 훌륭하 개발자들을 유인할 수도 있을 것이다.

배움 환경 조성 방법

북 클럽 가입 배움 문화가 잘 되어있는 기업으로 가도록 노력해야지. 실제 그런 회사가 어디에 있을까. 취업 상담사님께 그런 부분을 좀 여쭤봐야겠네. 테크 런치 진행 그렇다고 토론회를 업무의 연장으로 만들지는 않는 것이 좋다. 토론회는 배움에 대한 것으로 만들어야한다.

서로 다른 기술, 접근 방법, 테크닉, 서적 등 참여자 누구든 공유하거나 토론하고 싶어하는 것을 다룬다. 페어 프로그래밍, 업무 교환하기 매너리즘 타파 색다른 방법을 배움, 영감 얻는 토대가 될 수 있다. 그룹 코드 리뷰

그러한 환경은 소프트웨어 장인이 되기 위한 열망을 불어넣는 것은 물론 소프트웨어 개발이라는 일 자체를 즐길 수 있도록 북돋을 것이다.

코드 리뷰를 통해 얼마나 배울지를 경험하면 매우 놀랄 것이다. 제대로만 된다면 그룹 코드 리뷰는 팀 전체를 하나로 만들 수 있다.

주석은 주관적 개인적으로 표현 되어서는 안된다. 그룹 코드 리뷰 시간에 커밋 히스토리를 뒤지지 않는다. 비난할 사람을 찾기 위해 과거를 해치지말고 미래를 변화시키는데 집중한다. 주석은 반드시 객관적이고 생산적이어야한다. 왜 그것이 엉망인지가 아니라 어떻게 코드를 개선할지에 대해 고민한다. 코딩 실습의 주 목적으 연습 문제를 끝내는 것이 아니라 최선의 코드를 작성하는 법을 훈련하는 것이다. 개발자는 페어 프로그래밍으로 연습 문제를 푼다. 이전에 해본 적 없는 개발자를 선정하는 것이 좋다. 모든 개발자들이 같이 연습문제를 풀어야한다. 이렇게 하면 문제의 해답둘을 서로 비교하여 잘한 것과 못한 것을 되새길 수 있다.

퍼실리테이터는 반드시 리뷰시간을 갖는다. 서로의 페어 프로그래밍 파트너에게 감사를 표해야한다. 코딩 실습은 팀에 열정을 불어넣능데에 매우 도움이 돈다. 개발자들이 서로 배울 수 있는 기회를 제공하고 업무 현장에 작은 흥밋거리를 제공해준다. 코딩 실습을 업무의 연장으로 만들지 않는다. 실습의 의도는 훈련과 배움이다. 모임이 알차고 재미있게 되는데 집중한다. 절대로 규모를 키우는 데 집중해서는 안된다. 그러다보면 참여자의 숫자는 자연스럽게 늘어나게 된다 


이 내용은 개발뿐만이 아니라 마케팅을 할때에도 적용되는 철학이 아닐까 사람 모으는 것보다 컨텐츠가 더 알차고 재미있게 만드는데 집중하다보면 저절로 사람들은 더 몰리게 되어있겠지. 내 블로그도 컨텐츠를 더 알차고 재미있게 만들다보면 사람들이 들어와줄 수 있겠지

어떻게 하는게 블로그를 더 양질로 만들 수 있을까?

음악을 추가한다. 집중을 도울 수 있도록 사람들이 댓글로 참여할 수 있게 만든다. 모두가 함께 소스를 넣어 구현해나갈 수 있게 만든다. 



더 나은 일터로 만들기 위해 모든 사람을 바꿀 필요는 없다. 배움의 문화를 만들려는 대다수의 시도들이 실패하는 이유도 거기 있다. 조직 전체 또는 부서나 침 전체를 한번에 변화시티는 것을 목표로하면 실망할 일만 있기도 하다. 변화를 추진할 동기도 약해지고 포기하기도 한다. 변화를 수용하는 사람들에게 집중하라. 강제하지 마라 대신 계속 초대장을 보내자. 참여하는게 계속 즐겁고 기분 좋은 일이 될 것이라는 것을 확실하게 한다. 이것 역시 세상 모든 것에 적용되도록 만들 수 있지 않을까

긍정성

투덜대지 마라 상사에게 허락을 구하지마라 책임있게망 행동한다면 불평할 관리자는 없다. 기술적은 측면에서 매우 많은 것을 배웠디만 그 점이 가장 중요한 것은 아니다. 가장 중요한 것은 나의 상사와 다른 모든 개발자들이 자신의 일을 대하는 태도였다. 자신의 일을 대하는 태도....

아 정말 숨가쁘게 멋진 이야기들만 나타나있으니 정말 읽기에 행복하다. 성장 이자체로 내가 더 나아가고 있다는 점. 내가 가려는 목표와 지향점들에 정말 직진으로 가장 적극적은 속도로 나아가고 있다는 점 밀고 나가고 있다는 점이 나를 정말 기쁘게 만든다. 이 성취에서 느껴지는 엔돌핀들이 나를 더 적극적으로 성장의 길에 속도를 붙여주는 방법이 되지 않을까. 말 이라는게 상대에 따라 다르게 나타나야한다. 상대에게 익숙한 언어 또는 그보다 조금 더 수준있는 언어를 쓴다면 상대가 날 호감과 즐거운 모습들로 이해해주려나? 잰 척하거나 더 좋은 척하려는 듯한 인상으 심어주려나? 하기사 다른 사람의 생각이 과연 중요할까? 인식하는건 중요할 수 있으나... 코딩에서 손을 뗀 기간이 길면 길 수록 다시 손에 익히기가 어려워진다. 정리하면 커리어패스를 정할때는 열정이 있능 것. 진정 즐겁게 할 수 있능 것을 따라야하는 것이든. 아키텍트든 개발자등 테스터든 비즈니스 분석가든 관리자든 상관없다. 모든 역할이 필요하고 중요하다.

능력의 구분

고참 신참 개발자는 없다. 큰 규모의 기업용 시스템 자바 애플리케이션 개발에 경험이 많더라도 자바스크립트로 만드는 데는 생 초보일 수 있다. 한가지 밖에 할줄 모르는 지엽적전문기들은 이제 자기 전문 분야와 더불어 비즈니스와 관련된 여러 방면에 조예가 있는 사람들로 바뀌고 있다. 소프트웨어를 삐르게 바꾸면서도 품질 유지가 가능하다면 높은 경쟁 우위를 차지할 수 있다. 제품 출시와 피드백 루프를 신속하게 수행하는 린 스타트업 모델이 경쟁 방식을 완전히 바꾸어놓았다. 굉장히 기민하고 유연하게 치고 빠질 수 있는 언어들을 유려하게 사용하는 프로들을 원

모든 단계에서 절차마다 피드백이 있어야 제품이 더 나아진다. 뭔가 잘못되고 있거나 좋은 의견이 있을 때 의견을 제시항 수 있는 프로페셔널한 개발자가 있어야한다. 기술을 이해하지 못하는 사람이 의사결정을 하는 것은 프로젝트를 재앙으로 이끄는 지름길이다. 소프트웨어 프로페셔널은 능숙하고 정교하게 소프트웨어를 짜낼뿐 아니라 비즈니스적 이슈들에 대해서도 그것이 오떤 종류의 것이둔 선택지를 제안하고 건설적인 비판을 함으로써 목적을 달성하도록 도울 수 있다. 짧은 피드백 루프는 기업이 기민해지기 위한 핵심요소다. 가치에 따라 일을 이해하고 우선순위를 정하고 관료주의와 낭비를 줄이고 사람들에게 권한 이양과 동기부여를 하고 피드백 루프를 만들어준다. 이것이 기업의 반응속도를 높히고 올바른 일을 하도록 돕는다. 소프트웨어 장인 정신이 아닌 것들 아름다운 코드 테스트 주도 개발 스스로 조직화된 개발 그룹 특정 기술 또는 방법론 자격 인증 종교 주관적인 소프크웨어 장인 정신 마스터가 되어가는 긴 여정 개발자 스스로 커리어에 책임감 갖는 것. 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐. 책임감 프로페셔널리즘 실용주의 개발자로서의 자부심을 의미 소프트웨어 개발의 프로페셔널 리즘 고객이 원하는 것이 무엇이든 달성하도록 돕는다. 다른 개발자에게 배운다. 경험이 부족한 개발자들을 돕는다. 프로로서의 수준을 높여 프로의 모습으로 일하는 소프트웨어 개발자를 지향한다. 고객을 염두해두고 그들이 원하는 바라면 어떻게해서든 만들 수 있다는 긍정적인 자세를 가졌어야했다. 클린 코더 프로페셔널 프로그래머의 행동 강령 - 매우 좋은 책인 듯 코리 헤인즈 : 장인 교환 프로그램 - 소프트 웨어의 장기적인 생명에는 아랑곳 없이 돈만 추구하거나 빨리 개발 하려고만 하는 그런 사람들과 경쟁하려는 것 입니다. 굉장히 프로로서. 장기적인 안목으로서 소프트웨어를 대하는 뭔가 고결하며 최고의 결과와 과정 조차 아름답기를 고대하는 순수한 마음이 느껴진다. 하나하나를 걸작으로 만들려는 마음. masterpieces 이런 정신을 아로 새겨야할 것 같은데 대충대충이 아니라 마스터

더불어 스스로에게만 의존하면 자신만의 좁고 편향된 생각에서 벗어날 방법이 없다.

처음 보는 프로그래밍 언어, 전에 닿지 않았던 모듈, 테스트 주도 개발과 같은 새로운 실행 관례, 개발툴의 단축키와 같은 사소한 것부터 전혀 다른 형태의 해결 방법론까지 배울 수 있다. 다른 사람을 어리석다고 단정 짓기 전에(실제로 그런 경우는 극히 드물다.)

좋은 소프트웨어

좋은 소프트웨어라면 그 애플리케이션이 얼마나 오래되었든 간에 개발자가 쉽게 이해할 수 있어야한다. 부작용도 알려져있어야 하고 관리가 가능해야한다. 명료하고 단순한 디자인과 비즈니스 용어로 잘 기술된 코드여야 한다. 새로운 기능을 추가 슈정하는일이 처음 애플리케이션울 개발 할때와 비슷한 수준의 개발공수로 완료될 수 있어야한다. 코드베이스 자체도 최대한 작아야한다. 소스코드는 예측 가능하고 유지보수 될 수 있는 상태여야한다. 코드를 수정할 때 어떤 일이 일어날지 개발자가 알 수 있어야하고 수정 자체가 두려운 상황에 처하지 않도록 해야한다. 변경사항이 있더라도 그 영향 이 해당 기능 모듈에만 국소적으로 제한되며 애플리케이션 다른 부분에 파급효과가 없어야한다. 몇분 또는 몇초만에 전체 애플리케이션에 대한 자동화테스트가 구동되어 잘못된 부분이 없늕 파악가능 해야한다. 테스트 주도 개발, 당순한 디자인, 비즈니스 용어로 표현된 코드는 코드를 건강하고 질만들어진 상태로 유지ㅘ능 최선의 방법이다. 기업이 소프트웨어 프로젝트에 비용을 들이는 유일한 이유는 돈을 벌거나 돈을 아끼거나 아니면 매출을 지키기 위해서다. 매니페스토의 계속해서 가치를 더한다는 의미는 코드를 깔끔하게 정리하고 구조를 개선하며 확장성을 높히고 테스트를 가눙하게하며 쉽게 유지보수 할 수 있게 하는걸 의미한다.

늘 심플리씨티의 법칙대로 모든걸 짜야한다. 간결하고 쉽게 영희고 알아들을 수 있게

프로젝트에 새로운 기능들을 추가하고 수정하는 속도가 프로젝트 초기와 다를바 없다면 소프트웨어가 얼마나 오래되었든지 관계없이 시장에 빠르게 대응할 수 있다. 소프트웨어의 생명을 늘리면서 변화에 빠르게 대응할 수 있도록 유지하는 것이 우리 목표다. 캠핑장소를 처음 발견했을때보다 더 깨끗하게 남겨두라. 코드도 처음 발견했을 때보다 더 깨끗하게 관리해야한다. 애플리케이션 수명을 오래 유지시키려면 소프트웨어 품질에 최우선으로 집중해야한다.

문제는 유지보수 비용이 높은 기존 어플리케이션을 개발랬던 바로 그 잘못된 방법으로 새로운 애플리케이션를 개발하여 몉달 혹은 몇년 후 똑같은 오류를 반복한다는 점이다.

소프트웨어 장인은 항상 열정적으로 자기발전을 추구한다.

항상 다른 사람에게 배우려하고 겸손한 사람이어야하고 경험이 적은 개발자와 지식공유하기를 주저하지 않는 사람이어야한다.

상대에게 배우는 것은 더 나아지기위한 최선의 방법이다. 블로그에 글을 올리고 으픈 소스 프로젝트에 기여하고 작성한 코드를 공개하고 지역 커뮤니티에 참여하고 다른 개발자와 페어 프로그래밍하는 것은 업계의 발전을 위해 할 수 있는 일이다. 훌륭한 개발자는 더 뛰어난 개발자와 일하고 싶어한다. 서로를 더 성장시킬만한 사람들과 함께 일하고 지식을 나누며 상대에게 배우는 것. 서로에게 영감을 주는 프로페셔널이자 친구를 기대한다.

고객 서비스

당신이 정규직이라면 고용주를 고객처럼 대해야한다. 고용주는 직원들이 계약직이든 컨설턴트거나 관계없이 항상 최상의 서비스를 제공하길 기대한다. 출근해 칸막이에 파묻혀 고개를 숙인채 그저 지시받은 사항만 해내는 이는 프로가 아니다. 소프트웨어 장인은 공장 노동자가 아니다. 적극적으로 프로젝트의 성공에 기여해야한다. 요구사항에 질문하고 비즈니스를 이해하고 개선사항을 제안하며 고객 또는고용주와 생산적인 동반자 관계를 맺어야한다. 고품질의 소프트웨어를 성공적으로 전달하고 고객을 만족시키는 것은 소프트웨어 장인의 커리어에 꼭 필요한 일이다. 고객을 도와 그들의 업무 절차를 개선하고 좀 더 실현 가능성이 높은 성택지를 제공해야한다. 불필요한 관료주의를 없애고 고객의 비즈니스 도메인을 이해하며 그들이 생산하는 가치와 관련된 요구사항에 질문할 수 있어야한다. 업무 우선순위를 정하고 계획하능 것을 돕는 일 또한 프로젝트의 성공을 위해 코딩만큼 중요한 일이다. 생산적인 동반자 관계는 어떤 순간이든 고객에게 가치를 제공하는 걸 의미한다. 코드와 관련된 일이 아니면 나의 일이 아니라고 생각하는 개발자는 진정한 소프트웨어 장인이라고 할 수 없다.

고객을 위해 투입할 수 있는 노력에도 분명 한계가 있다. 같이 일할 고객 또는 고용주를 선별하는 능력도 소프트웨어 장인에게 꼭 필요하다. 소프트웨어 장인의 가치나 역량에 광심이 없는 고객을 위해 얄심히 일해봤자 공허함만 커질 뿐이다. 소프트웨어 장인이 스스로 평판을 닦고 커리어를 완성해 나가는데는 고객을 선별하는 능력이 뒷받침 되어야한다. 파트너쉽은 본디 쌍방향이다. 양쪽이 모두 동반자 관계로서 참여할 때만 파트너쉽이 존재한다. 고객과의 관계가 동반자와 관계가 멀고 나의 커리어에 부정적으로 느낀다면 다른 고객을 찾아봐야한다. 소프크웨어 장인은 고객과 동반자적 관계를 이루길 기대한다. 고객과 고용자 피고용자 관계가 아니라.

고객이 바라는 바를 가자 효율적인 방법으로 만족시키는 것이 우리의 목표다. 경험이 적은 소프트웨어 장인과 지식을 나누는 것 또한 우리의 직업 윤리적 의무다. 고객을 만족시키기 위한 투자는 스스로해야한다. 고객의 만족은 또 다른 고객으 얻기 위한 입소문에도 도움이 된다. 보통 이러한 전문가들은 스스로의 돈과 시간을 들인다. 고객은 프로에게 좋은 서비스 및 최선의 방법으로 문제가 해결되기를 기대하며 대가를 지불한다. 고객은 프로페셔널의 교육이 아닌, 그의 지식과 기술에 대한 돈을 지불하는 것이다. 프로페셔널이 명확한 해결책이나 좋은 대안을 제시하년 이는 좋은 평판으로 이어진다. 소프트웨어 프로패셔널로 대우받기를 원한다면 프로처럼 행동해야한다. 이는 스스로를 발전 시키는데 자신의 돈과 시간을 들여야하는 것이다. 나 자신의 커리어의 주체로서 언제, 무엇을 배울지를 스스로 결정해야한다. 고객, 고용자를 도와줄 수 있는 위치에 있어야한다. 회사가 새로운 소프크웨어 기술을 가르쳐주길 원한다면 이는 개발자가 아니다. 개발자로 가장한 공장 노동자일 뿐이다. 기업이 개발자에게 자기계발할 시간을 준다면 개발자들이 더 유능해질 것이고 더 효율적으로 일할 것이다. 상명하복의 관리 방법은 소프트웨어 프로페셔널의 의욕을 크게 꺽어벌고 기업을 대단히 비효율적으로 만든다. 소프트웨어 프로페셔널은 여러업무 중에서도 비즈니스에 기여하고 해결책에 옵션을 제공하고 우리가 개발하는 소프트웨어의 기술 품질 구현에 최상의 서비스를 제공해야한다.

'BOOK > PROGRAMMER' 카테고리의 다른 글

평범한 개발자의 비범한 인생 전략 71가지  (0) 2019.01.01