예전에 함께 일했던 후배와 연말에 식사를 같이 하는 자리가 있었다. 대화를 나누다가 다음에 시간이 되면 본인 팀의 온라인 카지노 게임들과 커피챗을 해 줄 수 있냐는 얘기가 나왔다. 그리고 이번 주에 그런 자리를 가졌다. 유사한 경험을 몇 차례 했는데 이번 경험도 즐거움이 있어서 정리를 해 보려 온라인 카지노 게임.
내게 코칭, 커피챗 등을 요구하는 온라인 카지노 게임나 개발 조직의 첫 주제는 "성장"에 대한 것이 많은 것 같다. 온라인 카지노 게임의 성장은 요즘 핫하다 못해 강박을 느끼는 주제인 것 같다. 최근 자주보였던 광고 중에 “나는 왜 다른 온라인 카지노 게임들처럼 빠르게 성장하지 못하나?”라는광고가 있다. 제목만 보기에는 매우 부정적이고 자극적인 광고 같다.
온라인 카지노 게임는 모두 빠르게 성장해야 하나?나도 성장을 중시하는 편이지만 성장보다는 업무 수행을 통한 기여가 먼저라고 생각온라인 카지노 게임. 성장은 우리가 업무 수행을 통해 서비스와 회사에 기여를 하면서 얻는 것이라고 생각온라인 카지노 게임. 기여와 성장이 균형 있게 이뤄져야 회사도 잘되고 개인도 잘 될 수 있다고 생각하기 때문이다. 사회인으로서 우리는 성장 자체가 목적은 아니라고 생각온라인 카지노 게임. 업무를 통한 기여가 목적이고 성장은 이 목적을 이루다 얻는 부산물 같은 것이라고 생각온라인 카지노 게임. 물론 온라인 카지노 게임로서 역량을 높이기 위한 성장은 매우 중요하지만 말이다.
Neal Ford의 "진화적 아키텍처"에 보면 아키텍트가 RDD(Resume Driven development)에 빠지면 안 된다는 말이 나온다. RDD란
이력서에 경력을 추가하기 위해 가능한 모든 프레임워크와 라이브러리를 아키텍 처에 동원하려 하는 것
을 의미온라인 카지노 게임. 주어진 문제를 풀기 위해 프레임워크와 라이브러리를 사용해야 하는 것이지 이력서에 적기 위해 불필요한 복잡한 기술을 도입해서는 안된다는 것이다. 예전에 어느 온라인 카지노 게임가 단순한 기술로도 충분히 해결 가능한 문제에 대해서 꽤나 복잡한 기술을 도입하려고 시도하는 것을 본 적이 있다. 그래서 왜 그렇게 복잡한 기술을 사용하느냐, 단순한 기술로 처리하면 안 되냐?라고 문의를 했었다. 후에 보니 그 온라인 카지노 게임는 결국 그 기술을 도입했고, 그 기술을 이력서에 넣었는지 그 기술을 사용하는 회사로 이직을 했다. 그리고 남은 온라인 카지노 게임들은 불필요하게 복잡한 기술로 구현된 시스템을 복잡하고 어렵게 유지보수를 했어야 했다. ㅠㅠ
최근에 출퇴근 시간에 유튜브에서 박웅현 님의 “내 일상에서 공부하고 성장하는 법”이라는 영상을 보았는데 내용이 너무 인상적이었다. 이 영상에서 광고 전문가이신 박웅현 님은 광고업의 특성상 지속적인 혁신과 새로운 아이디어가 필요하다고 하시면서 성장에 대한 의견을 제시하신다. 가장 핵심적으로 내게 다가온 것은 다음과 같은 두 가지이다.
성장은 계획된 것이 아닌 생존과 적응의 결과물
현장에서의 실무 경험이 가장 큰 학습의 기회
그리고 "책을 읽어서 얻는 것을 Book Smart, 업무에서 배운 것을 Street Smart"라고 말씀하시면서 Street Smart가 Book Smart보다 좋은 방법이라고 하신다.
광고만큼이나 개발도 새로운 기술이 지속적으로 나오고 풀어본 문제가 아니라 늘 새로운 문제를 해결해야 하는 영역이라는 점을 감안하면 박웅현 님의 성장에 대한 의견은 온라인 카지노 게임들에게도 큰 의미가 있다고 생각온라인 카지노 게임.
업무 기여를 통해 얻은 지식과 경험의 공유를 통해 얻은 역량 증대라는 성장을 부산물로 얻는 것이다. 성장 자체가 목표가 아닌 것이다.
그리고 책상에 앉아서 공부한 것(Book Smart)만으로는 부족하다 공부한 것을 업무에 적용(Steet Smart)하고 기여를 하며 내 것으로 만들어야 하는 것이다.
이제부터 이 세션에 참여한 분들의 나눈 주제에 대해 정리해 본다.
세 가지 다 이상과 현실의 괴리 때문에 쉽게 못하는 경우가 많았던 것 같아서, 기억에 남는 best practice 같은 게 있을지 궁금하다는 질문이었다.
내가 생각하는 답은 학생 때 시험을 보는 것과 같다는 것이다. 주어진 시간 내에 최대의 점수를 받아야 온라인 카지노 게임. 안타깝지만 시간 내에 풀 수 있는 것이 내 실력이다. 내 실력이 출중하다면 100점을 받을 수 있지만 그렇지 않다면 60점을 받을 수도 있는 것이다. 100점을 받겠다고 1시간짜리 시험을 혼자서 2시간 치를 수는 없는 것이다. 60점을 받더라도 시험이 종료되기 전에 답안지를 제출해야 하는 것이다.
이것을 개발과 비유해 볼 수 있다. 우리 팀의 에이스는 주어진 시간에 100점짜리 구현(최고의 품질)을 하고 배포를 할 수 있을 것이다. 하지만 우리 팀 신입은 주어진 시간에 100점짜리 구현을 할 수 없을 수도 있다. 하지만 우리 팀 신입도 서비스에 기여하기 위해 일정 수준의 품질을 갖는 코드를 배포해서 기여해야 온라인 카지노 게임. 100점이 될 때까지 배포를 안 할 수는 없는 것이다. 시험 시간을 준수하여 답안지를 제출해야 하는 것이다.
이와 관련해서 Kent Beck의 “Test Driven Development by Example”에 유사한 이야기가 나온다. Ron Jeffries가 말한 “Clean code that works”를 설명하면서 ADD(Architecture Driven Development)라는 말을 온라인 카지노 게임. 이 접근 방식은 ‘깔끔한 코드(clean code)’ 부분을 먼저 해결한 후에, ‘작동하는(that works)’ 부분을 해결해 가면서 배운 것들을 설계에 반영하느라 허둥거리는 방식이라고 설명온라인 카지노 게임. 마치 시험을 보는데 시간 준수보다 100점을 받기 위해 1번부터 최선을 다해서 푸는 것과 같아 보인다.
이 방식에 반해서 Kent Beck이 말하는 TDD에서는 일단 최대한 빠르게 동작하게(make it work. ASAP가 추가되어야 한다고 생각함)하고 제대로 만들어야(make it right)한다고 온라인 카지노 게임. "Clean code that works"는 대개의 온라인 카지노 게임가 한 번에 달성하기에는 너무 어려운 목표여서 달성할 수 있는 수준으로 문제를 쉽게 해야 온라인 카지노 게임. Divide and Conquer를 하는 것이다. 일단 동작하게 하고 이 행위가 깨지지 않는 범위에서 내부 구조를 개선하는 것이다.
시험에서 높은 점수를 얻기 위해서는 주어진 시간을 효과적으로 활용해야 온라인 카지노 게임. 개발도 마찬가지이다. 주어진 시간에 구현을 완료하여 언제든 배포(시험지 제출)할 수 있도록 준비하고 남는 시간 동안에 개선(리팩터링)을 해서 얻은 품질이 내 점수인 것이다.
Divide and Conquer는 대학을 다닐 때 Trade Off(주로 무엇이 경제적인지 결정하는)와 함께 가장 많이 들었던 문구 중 하나인 것 같다. A Daily Practice of Empirical Software Design에서Kent Beck은 “전문가들의 문제 접근 방법은 마법사 같은 힘을 사용하지 않는다”라고 하면서 다음과 같이 설명온라인 카지노 게임.
4~5년 차 훌륭한 온라인 카지노 게임
- 문제를열심히푼다.
- 주니어 온라인 카지노 게임는 복잡성을 다루는 방법을 모른다
-(그래서복잡한 문제를 복잡한 상태에서 복잡한 기술로어렵게푼다)
전문가
- 문제 접근 방법에 마법사 같은 힘을 사용하지 않는다.
- 문제를작은 문제로 분리해서일반적인 수준의 기술로 처리할 수 있도록 온라인 카지노 게임.
현실에서도 이런 현상을 종종 보게 된다. 많은 온라인 카지노 게임들은 복잡한(Complex) 문제를 그대로 두고 복잡한 기술을 이용해서 해결하려고 온라인 카지노 게임. 결과도 복잡해서 알아보기 어려워진다. 알아보기 어렵다고 하면 원래 어려운 문제였다. 대단한 자신이 푼 것이라고 말온라인 카지노 게임. 부족한 온라인 카지노 게임들도 능히 일반적인 기술로 해결할 수 있도록 기능 분해를 온라인 카지노 게임.
훌륭한 온라인 카지노 게임는 자신은 그 상태로도 능히 해결할 수 있는 문제를 자신보다 역량이 낮은 온라인 카지노 게임들도 능히 해결할 수 있도록 문제를 분해온라인 카지노 게임. 이처럼 Divide and Conquer는 늘 새롭고 어려운 문제를 해결해야 하는 온라인 카지노 게임들이 항상 고려해야 할 기법인 것 같다.
결론적으로 어떤 기술을 어느 수준까지 할 수 있냐는 자신의 실력에 달렸다. 하지만 지금 당장 최고의 실력이 아니더라도 상심하거나 너무 강박을 갖지는 말자. 지금 내가 보기에 엄청 뛰어난 온라인 카지노 게임도 나와 같은 주니어 시절이 있었다. 주니어가 없이 시니어가 있을 수는 없는 것이다. 지금 내가 무엇을 얼마나 잘하는지 또 부족한지를 인식/인정하고 꾸준히 공부하고 업무에 기여하며 배운다면 나의 점수는 높아질 것이기 때문이다. Buckminster Fuller의 Knowledge Doubling Curve를 고려하면 지금 내가 얼마나 알고 있고, 얼마나 잘하는지는 크게 중요하지 않을 수 있다. 앞으로 만나는 새로운 문제를 효과적으로 풀기 위해 필요한 새로운 기술을 얼마나 빠르게 잘 배울 수 있는지가 더 중요하다.
이 질문도 기본적으로는 위 질문과 유사한 의견이다. TDD, OOP, DDD 등 기술 자체가 중요한 것은 아니고 우리 서비스, 회사에 기여를 하기 위한 수단이라고 생각온라인 카지노 게임.
OOP의 기반을 다진 것으로 알려진 Alan Kay는
“OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP”
이라고말했다고 온라인 카지노 게임. 그에게는 메시징이 가장 중요한 것이었던 것 같다. 하지만 현업에서 유지보수에 허덕인 경험이 대부분인 내게는 캡슐화와 의존성 관리를 통해 변경의 영향을 최소화하는 것이 제일 중요하게 여겨진다.
데이터와 그 데이터를 사용하는 기능을 하나의 클래스에 두고, 외부에서는 그 클래스가 제공하는 퍼블릭 인터페이스만 호출하도록 해서, 그 클래스 내부의 구현을 변경해도 외부에 영향을 주지 않도록할 수 있다. OOP의 여러 이점이 있겠지만 이 이점이 신규 기능만 개발하는 것이 아니라 매일 유지보수 업무를 하고 있는 온라인 카지노 게임들에게 큰 혜택을 제공한다고 생각온라인 카지노 게임.
TDD를 하면 설계를 안 하는 것으로 오해하는 분들도 종종 본다. 지금이 예전처럼 사전 설계를 많이 하고 개발을 해야 하는 시대는 아니지만, 그렇다고 설계를 전혀 하지 않은 상태로 바로 개발에 들어갈 수는 없다고 생각온라인 카지노 게임.
요구사항을 받으면 적어도 온라인 카지노 게임에 용이한 문서로 변환을 해야 온라인 카지노 게임. 그렇지 않으면 온라인 카지노 게임하기 어려운 복잡한 문서로 복잡하고 어렵게 온라인 카지노 게임을 진행하게 된다. 사용자 스토리 정도로 기능/비기능 요구사항을 정리하고, 정적 모델링을 통해서 주요 클래스, 속성, 관계 정도를 정리해야 온라인 카지노 게임.
그리고 기능 단위로 동적 모델링이나 구현을 할 수 있다. 대개 다음과 같은 과정을 거치는 것 같다.
- 유스케이스를 식별해서 선행/후행 조건, 기본 시나리오, 대안 시나리오를 작성
- 해당 유스케이스에 대한 인수 조건 수립
- TDD로 구현
-테스트 리스트 작성
-하나씩 테스트를 선정해서 add failing test, make it work, make it right를 반복
Agile, TDD라고 해서 설계를 안 하는 것이 아니라, 문제를 정확히 이해하고, 향후 발생 가능한 이슈를 정확하게 예상하기 어려우니 가볍게 설계를 하고 TDD를 통해 빠르게 피드백을 구하며 진행하는 것이 좋은 방법이라고 생각온라인 카지노 게임. 즉 설계를 하느냐 안 하느냐가 아니라 언제 얼마큼 하느냐가 중요하다. 변경이 가능하므로 작게 지속적으로 하는 것이다.
TDD에서 처음에 어떤 테스트로 시작할지, 언제 완료된 것인지 판단하기 어렵다. 가장 단순한 테스트에서 시작하라고 하는데 우리는 가장 중요한 테스트가 먼저 떠오른다.
두 수를 나눠서 몫을 구하는 기능을 구현온라인 카지노 게임고 생각해 보자. 무엇이 제일 먼저 떠오르는가? divide(null, null), divide(0, 0)등과 같은 하찮은(degenerate) 테스트가 먼저 떠오르는가? 아니면 divide(276, 23)과 같이 꽤 구현할 것이 있는 테스트가 먼저 떠오르는가? 후자일 것이다.
자 이제 흥미로운 테스트가 떠 올랐다. 그런데 이 테스트로 시작을 하면 나누기 정도이니 그렇지 좀 어려운 구현이라면 어떻게 해야 할지 바로 떠오르지 않을 것이다. Robert C. Martin은 이런 경우를 Getting Stuck 된경우라고 설명온라인 카지노 게임. 이 보다 쉬운 테스트로 시도해야 한다고 온라인 카지노 게임. 처음에 가장 중요한 테스트가 생각이 났으면 이 테스트보다 조금만 더 쉬운 흥미로운 테스트를 생각온라인 카지노 게임. divide(4, 2)정도면 괜찮을 것 같다. 그리고 더 쉬운 테스트도 생각해 본다. divide(4, 0)정도. 더 쉬운 경우도 생각해 본다. divide(4, null), divide(null, null). 더 이상은 없다. 그러면 이 테스트 목록을 가지고 제일 쉬운 테스트부터 시작온라인 카지노 게임.
그러면 한 가지 흥미로운 일이 발생하는데 구현 코드에서 초반은 null, 0 등과 같은 예외적인 경우에 대한 방어 로직(guard clause, early return)이 들어가게 되고,마지막에 의미 있는 로직이 들어가게 된다.
다음과 같은 결과가 될 것이다.
만일 처음에 가장 중요한 테스트로 시작했다면, 구현 코드는 다음과 같이 될 것이다.
https://gist.github.com/msbaek/106832f3d62f40ce574dcee22fd30a2e
그리고 예외 상황이 하나씩 발견되면 최종적으로 다음과 같은 코드가 될 확률이 높다.
https://gist.github.com/msbaek/8b21ab27e7df17fbbcd1338588af9cf3
들여 쓰기가 깊어져서 복잡도가 증가온라인 카지노 게임. 메인이벤트로 바로 들어갔을 때의 문제점이다. 그래서 메인이벤트가 우리의 목표(High Level Test, Target Design)이지만 징검다리(stair step test)를 많이 확보해야 하는 것이다.
테스트 케이스를 하나씩 성공시킬 때마다 리팩터링을 실행해서 가독성과 유지보수 용이성을 확보해야 온라인 카지노 게임. 너무 많이 리팩터링 하는 것은 주의해야 온라인 카지노 게임. Kent Beck은 tyding을 프링글스 칩을 먹는 것과 비유했다. 한번 먹기 시작하면 멈추기 어렵다는 의미이다. 할 수 있는 한 리팩터링을 하면 본인만큼 맥락이 깊지 않은 동료들은 오히려 이해에 어려움을 겪을 수 있다. 또 지금 필요한 수준만큼만 하고 훗날을 기약온라인 카지노 게임면 그때 내 도메인 지식, 리팩터링 역량이 더 높아져서 지금보다 더 잘할 수도 있다.
하지만 동작하는 것만 확인하고 리팩터링에 전혀 노력을 하지 않는 것은 향후 변경 비용을 높일 수 있으니 주의해야 온라인 카지노 게임. 동작하게 하는 것은 혼자서 하고 리팩터링은 동료들과 함께 하는 것도 좋은 방법이라고 생각온라인 카지노 게임. 이러면 코드에 대한 지식 공유가 되고, 코드 리뷰 시간을 현격하게 줄이면서도 코드 품질을 높일 수 있다.
이제 MVP 수준의 코드는 AI를 활용해서 비온라인 카지노 게임도 만들 수 있는 세상이다. 온라인 카지노 게임인 우리의 차별점은 향후 변경 비용을 낮출 수 있는 품질을 만들 수 있는 역량(리팩터링을 포함한 설계)이라고 생각온라인 카지노 게임. 소프트웨어의 품질의비직관적인 비용 특성을 갖는다. 제조의 경우 고품질의 제품은 대개 비싸다. 하지만 소프트웨어의 경우 고품질의 소프트웨어는 향후 변경 비용을 낮출 수 있어 비직관적이다. 더 경제적이라는 말이다. 이점을 비 온라인 카지노 게임문들에게 설명할 수 있어야 온라인 카지노 게임.
마지막으로 이런 기술들인 현실에 통하지 않는다는 의견에 대해서는
- 수(守)는 스승의 가르침이나 모범을 배우고 지키는 단계
- 파(破)는 그러한 가르침과 이론을 깨거나 새로운 응용을 해보는 단계
- 리(離)는 자신만의 방법을 만들어 기존의 가르침이나 이론과 결별하는 단계
1만 시간의 법칙 =4시간/일 * 5일/주 * 50주/년 * 10년 = 10,000시간
등을 참고해 보기를 권온라인 카지노 게임.쉽게 배울 수 없는 기술들이 있는 것이다.
이 외에도
- 신규 마이크로서비스에 Hexagonal architecture를 시범적으로 적용했다가 overkill이라는 느낌이 들었고, 협업하던 동료들도 비슷한 생각이어서 걷어낸 적이 있습니다. 실무에서 hexagonal architecture로 득을 볼 수 있는 케이스는 어떤 상황일지 궁금합니다.
- 촉박한 일정하에서 온라인 카지노 게임을 진행할 때에도 test-first 전략을 지향하는 것이 현명한 것인지 궁금합니다.
- 우리나라 IT 업계에서 백발의 온라인 카지노 게임가 늘어날 것으로 보이시는지, 그리고 그렇게 되기 위해 어떤 커리어를 밟아야 할지 궁금합니다
등과 같은 질문이 더 있었고, 리팩터링만 잘할 수 있다면 VSA(Vertical Slice Architecture)을 해보면 좋겠다는 얘기를 나눴다.
그리고 저녁으로 버거를 먹으며 좀 더 대화를 편하게 나눴고, 한분이 판교에서 정자까지 걸어가신다길래 함께 걸어오며 더 많은 이야기를 나눴다.
내게는 너무나 즐거운 경험이었다.업무에서 느끼는 열정보다 더 많은 열정이 나오는 것이 느껴졌다. 사례를 잘 정리하고, 내가 가지고 있는 자료, 경험 등을 잘 정리해서 커피챗을 넘어서 2~3일짜리 워크숍이나 한 번에 2~4시간 정도로 주 몇 회 만나서그들의 문제를 같이 풀어보면 어떨까라는 생각이 들었다. 뭐 이런 것을 본격적으로 하려면 회사를 그만둬야겠지만 말이다.