소프트웨어 장인 (The Software Craftsman) 리뷰

별점 : ★★★★ 한줄평 : 더 나은 소프트웨어 개발자가 되고자 노력하는 모든 이들의 필독서. 소프트웨어 장인의 길로 안내하는 이념서. 번역 :  http://book.naver.com/bookdb/book_detail.nhn?bid=9585753 원서 :  https://www.amazon.com/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501 이 책은 Robert C. Martin Series 5권 중에 하나로서, "소프트웨어 장인정신" 에 대한 책이다. (저자는 밥아저씨가 아니라 다른 분이지만, 마틴 시리즈로 분류되고 있다..) 소프트웨어 장인정신은 마스터가 되어가는 긴 여정이다. 소프트웨어 장인정신은 소프트웨어 개발자 스스로가 선택한 커리어에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다. 위는 이 책의 저자가 말하는 소프트웨어 장인정신의 정의이다. 아래는 이 책을 읽고 생각하면서 내가 이해하고 받아들인 "소프트웨어 장인정신" 에 대한 내용이다. (개인적인 생각이 포함되어 있다.)     소프트웨어 장인정신이란, 다른 것은 무시하고 단순히 아름다운 코드만을 추구하는 것이 아니다. 철저히 프로페셔널리즘과 실용주의에 입각하고, 비지니스적인 가치를 첫째로 추구한다. 다만, 비지니스 가치를 극대화시키고 고객을 만족시키며 끊임없이 추가되고 변경되는 요구사항에 대응하기 위해서는, 결국에 높은 수준의 소프트웨어 품질을 성취해야한다 .     소프트웨어 장인은 비합리적인 것들과 잘못된 의사결정에 대항하며 , 회사와 비지니스 가치를 위해 올바른 실행 관례를 배우고 실천하며 널리 퍼뜨린다. 그러한 실행 관례로서, 책의 저자는 애자일, XP, TDD 등을 들고 있다. 하지만, 이러한...

★★★ 네이버 블로그에서 왔습니다 ★★★

안녕하세요~ 새롭게 인사드립니다! http://blog.naver.com/likeme96 에서 이사온 taeguk (전공체육) 입니다~ 이유는 4가지 입니다! 구글 검색에 노출되는 빈도를 높이기 위해 카테고리 기반이 아닌 태그 기반으로 포스팅을 하기 위해 변화를 도모하기 위해 포스팅 시간을 맘대로 바꿀 수 있음. (포스팅 마이그레이션 작업에 용이.) 기존 블로그에 있던 상당수 글들 (기술 포스팅 위주) 을 대부분 마이그레이션 해온 상태입니다! (100% 수동 작업... 한 5~6시간 걸렸어요... 너무 힘들었어요 ㅠㅜ) 새 마음 새 뜻으로... 잘 부탁드립니다!

이것이 직장인의 삶이구나

회사에 온지도 8개월이 넘었고, 병특을 시작한지도 반년이 넘었다. 회사 입사 지원 서류를 쓴게 엊그제 같은데,, 시간이 진짜 빨리 흐르는게 느껴진다. 아침에 일어나서 회사에 출근하면, 좀 만 지나면 점심시간이 되고, 또 눈 깜박하면 퇴근 시간이 된다. 그리고 집에 와서 저녁먹고 그러면 또 자야할 시간이 된다. 일주일에 이런 생활을 5일 반복한다. 회사 일 자체는 즐겁게 하고 있다. 기존 레거시 코드베이스에서 요구사항을 추출/개선해서 새롭게 코드를 재작성하고 있다. 아예 리포지토리부터 새롭게 파서, 프로젝트를 처음부터 정립해나가다보니 많은 것들을 도입하고 개선할 수 있다. 설계, 자동화된 테스트, 문서화, CI, 정적분석툴, 예외처리 등 다양한 부분들을 고민하면서 진행하고 있다. 나름 소프트웨어 장인 정신을 가지고 개발을 하기 위해 노력중이다.. 학생때부터 나는 리펙토링, 코드깍기를 좋아했는데 그냥 아무생각없이 병특으로 들어온 회사에서도 내 흥미/적성에 맞게 일을 하게 되서 신기하고 감사하다. 무튼, 회사에 오고나서 실력은 많이 늘은 것 같고, 앞으로도 실력이 많이 늘꺼 같아서 좋다. 물론 아쉬운 점도 있다. 기존 레거시 코드베이스(프로젝트) 의 품질과 프로세스에 대해 실망감이 많았다. 테스트코드의 부재... 구조화되지 않은 요구사항... 당장은 돌아가지만 '찜찜한' 코드들... 스파게티처럼 꼬여있는 의존성... 이것들이 입사 후부터 지금까지 나에게 많은 스트레스를 안겨준다. 지금 내가 하고 있는 작업이 결국 이러한 소프트웨어 품질과 개발프로세스를 개선하기 위한 작업이다. 주인을 잃은 지 오래된 코드들에서 요구사항을 추출하는게 종종 지치고 의욕이 꺽기기도 하지만,, 전반적으로는 재밌게 하고있다...ㅎㅎ (조급함을 버려야만 한다...ㅜㅜ) 아무튼,, 이렇게 회사원의 삶을 살고 있다.. 슬슬 회사에 다니는 게 뻔하고 질린다.. 이런 회사 생활을 나보고 평생 계속 해야한다고 하면... 흠... 회의감이 들꺼 같다...

VC++2015 에서 vc140_xp의 내부 원리

Visual Studio 2015에서 C++프로젝트 플랫폼 도구 집합으로  vc140_xp 을 사용했을 때, vc140에 비해 내부적으로 바뀌는 점들을 한번 분석(?) 해봤다. (완벽한 내용은 아닐 수 있다..) 1. Windows SDK을 XP를 지원하는 옛날 버전으로 변경.   * VC Directories에서 Windows SDK의 include, lib, bin 폴더 경로를 변경   * 원래 vc140이 v8.1 버전을 사용했다고 하면, vc140_xp로 플랫폼도구집합 변경 시, v7.1A를 사용하는 식으로 바뀜.   * v7.1A는 xp를 지원함.  (https://en.wikipedia.org/wiki/Microsoft_Windows_SDK ) 2. CL 컴파일시 _USING_V110_SDK71_ 매크로를 정의함.   * VC++의 라이브러리들 (ATL/MFC 라이브러리, C++표준라이브러리의 헤더파일들이 이 매크로에 영향을 받음.)   * _USING_V110_SDK71_ 매크로가 큰 영향을 주진 않는다. (하지만, 조금이더라도 분명 영향을 미친다.)   * 예를 들면, 이 매크로가 정의되어 있는 경우, C++표준라이브러리에서 std::shared_mutex 가 정의되지 않는다. 3. 링크시, /SUBSYSTEM:CONSOLE",5.01" (or 5.02) 옵션을 사용. (구성 형식이 EXE 일 경우)   * vc140의 경우에는 /SUBSYSTEM:CONSOLE 옵션이 링크시 사용되는데, vc140_xp의 경우 /SUBSYSTEM:CONSOLE",5.01" 이 사용됨. (64bit에서는 5.01이 아니라 5.02)   * 이 링크옵션은 완성된 PE파일의 서브시스템 버전에 영향을 줌.   * 서브시스템 버전이 명시되지 않은 채로 링크되면, PE파일의 서브시스템이 6이상이 되고, 프로그램이 XP에서 실행되지 않음.  ...

Intel CPU 보안 취약점 (Meltdown)

이번에 인텔 CPU 보안취약점 (멜트다운) 관련해서 쉽고 잘 설명해놓은 좋은 글을 발견해서 공유합니다~ http://blog.cyberus-technology.de/posts/2018-01-03-meltdown.html (Trying it all together 부분만 읽으시면 됩니다. 짧습니다.) 간단하게 한번 끄적여보자면,,,, 다음과 같은 연속된 instruction들을 실행합니다. 1. 값을 얻으려는 특정 커널메모리 주소에 접근하여 값을 1바이트 읽습니다. 2. 1번에서 얻은 값에 4096을 곱합니다. 3. (미리준비된 충분히 큰 버퍼의 주소 + 2번에서 얻은 값) 의 주소에 접근합니다. (여기서 "충분히 큰" 이란 4096 * 256 바이트를 의미합니다.) 실제 cpu는 이 instruction들을 동시에 실행하게 됩니다. 그러나 instruction들의 실행 결과가 실제로 반영이 되는건 차례대로 반영이 되게 되는데, 1번에서 접근권한이 없어서 예외가 발생하므로, 저 instruction들의 결과가 실제로 반영이 될 순 없습니다. (Exception Suppression을 위해서는 Intel TSX 를 사용한다고 합니다. 사용할 수 없는 환경에서는 그냥 Exception handling) 그러나, 3번에서 비록 실행결과가 반영이 되진 않더라도, 실행과정에서 (미리준비된 충분히 큰 버퍼의 주소 + 2번에서 얻은 값) 의 주소의 메모리가 cache 되게 됩니다. 그 후 (미리준비된 충분히 큰 버퍼의 주소 + 4096 * 0~255) 의 주소에 각각 접근하면서 시간을 잽니다. (엄밀히 말하자면 Flush-Reload 라는 기법을 사용합니다.) 만약 가장 시간이 적게 걸렸을 때가 0~255중 74라고 한다면, (미리준비된 충분히 큰 버퍼의 주소 + 4096 * 74) 의 주소가 cache 됐다는 뜻이고, 즉 따라서 처음에 읽으려했던 커널메모리 1바이트의 값이 74인것 입니다! ...

산업기능요원 현역 시작.

이미지
34개월간의 산업기능요원 현역을 시작하게 됐다. 정당한 절차를 거친 것이긴 하지만, 다른 사람들에 비해 특혜를 누리는 것이기 때문에, 복무기간동안 사회를 위한 활동이나 기부같은 걸 해야겠다는 의무감이 든다. '진짜 현역'으로 군복무를 하신 분들에게 진심으로 존경과 감사를 표하며, 주변에 군복무를 당당하게 마친 친구들에게 식사나 술이라도 대접해야겠다고 생각하고 있다. 아무튼, 기나긴 병특 기간동안 개인적으로도 의미있고, 주변사람들에게도 도움이 될 수 있는 시간들을 보내고 싶다.

C++ API 디자인 (API Design for C++) 서평

http://book.naver.com/bookdb/book_detail.nhn?bid=7405945 https://www.amazon.com/API-Design-C-Martin-Reddy/dp/0123850037 올해 9월 중순~말쯤에 내가 회사에 입사하고 나서, 팀장님께서 읽으라고 던져주신 책이다. C++언어를 이용해 API를 디자인하는 것에 대해 다루고 있다. 하지만, 비단 C++이나 API 디자인에 국한된 내용들은 아니다. 전반적인 소프트웨어 설계에 대해 영감을 얻을 수 있는 부분들이 많이 있다. 결론부터 말하면, 책이 굉장히 좋다...     이 책은 C++언어 자체적으로 고급적인 문법이나 스킬적인 부분, 그리고 디자인패턴적으로 고급적인 내용들을 다루지는 않는다. 다만, 내가 느끼기에는 다른 책들과는 다르게 좀 더 '현실적인' 관점에서 어떻게 소프트웨어를 잘 설계하고 프로젝트를 진행할 수 있는지에 대해 다루고 있다는 생각이 들었다.     "화려하고 기괴한, 마법같은" 과 같은 단어들은 이 책과 어울리지 않는다. 내가 이 책을 읽으면서 머릿 속에 떠올랐던 건 "투박하고 현실적인, 그렇지만 효과적인" 이런 단어들이다. C++쪽은 언어의 특성 탓인지 사용자들의 특성 탓인지, 다른 언어들에 비해 각종 기괴하고 마법같은 '언어적 기술'들이 많이 존재하고, 극단적으로 overhead를 없애거나 설계를 완벽하게 하려는 그런 점들이 많이 존재한다. 그런 것들은 기술적인 호기심을 자극하긴 하지만, 실제 팀내의 모든 사람들이 그것에 열의가 있거나 그것을 받아들일 역량이 있는 것은 아니기 때문에, 현실적으로 프로젝트에 적용하는 것이 쉽지 않다. 반면에 이 책은 그런 것들과는 다르게, 책 내용을 이해하고 활용하는데 고급적인 C++지식들이 필요하지 않고, 내용들이 상당히 유용하기 때문에, 진짜 현업에서 당장 적용할 수 있고, 당장 회사의 프로젝트와 팀에게 큰 도움을 줄 수 있을 것 같다는 생각...