본문 바로가기

분류 전체보기

최고가 되지 마라 소프트웨어를 개발하는 개발자입니까? 주변을 한번 둘러보세요. 개발자 중에서 자신이 최고로 뛰어난 실력을 가지고 있습니까? 그렇다면 심각한 상황입니다. 더 이상 배울게 없다면 도태될 것입니다. 시행착오를 통해서 배우게 될 가능성이 더 높아졌습니다. 뭔가 더 배울 수 있는 사람들이 있는 곳으로 옮기거나 주위에 자신보다 더 뛰어난 사람을 두십시오. 모든 분야가 아니더라도 특정 부분이 배울 수 있는 사람이 있어도 좋겠죠. 주변에 항상 자신보다 뛰어난 사람들을 둬야 합니다. 뛰어난 사람의 행동 양식을 익히게 됩니다. 자신이 최고인 줄 알면서 살아온 10년보다 자신이 뭐가 부족한지 알고 뛰어난 사람에게서 배운 1년이 더 배울 것이 많다는 것을 알게 될 것입니다. 어차피 우리가 지금 배우고 있는 대부분도 뛰어났던 앞.. 더보기
소프트웨어를 개발하는 끝내주게 좋은 방법 블로깅을 시작한지는 그리 오래 되지 않았지만 블로그 운영을 시작하면서 자연스럽게 인터넷에서 소프트웨어를 개발에 대한 다양한 글들을 보게 되었습니다. 대부분의 글들은 자신의 직,간접적인 경험에 의해서 작성되지만 모든 글들을 쓰면 그 백그라운드에 대해서는 자세히 설명할 수가 없으므로, 글을 읽는 독자들은 오해를 하는 일들이 잦을 것으로 생각합니다. 즉 그 경험들과 지식들이 나에게 똑같이 적용이 되거나 도움이 될 것이라고 단순히 생각하는 오류가 벌어질 수도 있을 것 같습니다. 그래서 제가 쓰는 글들은 자연스럽게 소프트웨어를 개발하는 기본 원리나 원칙에 포커스를 하고 있습니다. 수많은 소프트웨어 개발사와 개발자들을 만나면서 단순한 기법이나 툴의 사용보다 기본 원리를 익히는 것이 더 중요하다는 것을 알게 된 것도.. 더보기
Head First Software Development 리뷰 "더 쉽고 재미있게 소프트웨어를 개발하는 방법" 이 책의 한글 부제입니다. 확실히 재미는 있겠더군요. 책도 재미있게 구성되어 있고요. 책의 전반적이 내용이 소프트웨어를 개발하는 과정을 재미있고, 쉽게 접근할 수 있도록 잘 작성되어 있습니다. 하지만 상당히 부족한 점이 발견됩니다. 그건 바로 "스펙"이죠. 이 책에서 소개하는 사용자 스토리와 태스크는 "스펙"을 대신할 수 있는 수준은 아닙니다. 사실 내용도 좀 다르죠. 이 세상에는 수많은 종류의 소프트웨어가 있는데, 그 중에서 일부는 이 책에서 소개하는 방법이 적당할 수도 있다는 생각이 듭니다. 예를 들어서 간단한 쇼핑몰 사이트를 구축하거나 그리 복잡하지 않는 비즈니스 시스템을 만들 때 좋을 것도 같습니다. 그 외에도 더 있겠죠. 하지만 사용자 스토리와 태.. 더보기
이클립스 프로젝트 필수 유틸리티 개정판 : Subversion, Ant, JUnit, Trac 자바 개발자를 위한 책을 소개합니다. --------------------------------------------------------------------------- Trac을 비롯한 필수 유틸리티로 프로젝트 환경에 단비를 내리는 책 이 책은 Trac(위키와 이슈 트래커), Subersion, Mylyn, Subclipse 플러그인, CVS, Ant, JUnit을 사용해서 자바 프로젝트 환경을 개선하는 책이다. 이 책의 내용은 유틸리티의 설치와 사용법 그리고 이클립스에서 유틸리티를 통합해서 사용하는 방법에 중심을 두고 있다. 마지막 장에서 다루는 프로젝트는 책에서 다루는 모든 유틸리티와 플러그인을 사용해서 실제 개발 프로젝트를 보인다. 어떻게 개발자의 프로젝트 환경을 변화시키는지 직접 확인할 수 .. 더보기
우리는 개발자가 테스트해요. 주변의 소프트웨어 회사들을 보면 개발자가 테스트를 하는 회사를 정말로 많이 접하게 됩니다. 물론 개발자도 구현을 하면서 Unit테스트는 일상적으로 하지만, 제품의 기능이 정상적으로 동작하는지 확인하는 시스템 테스트도 개발자가 테스트하는 것을 보는 것은 그리 어려운 일이 아닙니다. 오히려 전문 테스트 인력이나 테스트팀이 있는 회사를 보는 것이 더 어렵습니다. 있다고 하더라도, 테스트팀이 전문적으로 테스트를 수행한다기 보다 개발자의 손을 좀 덜어주는 경우가 흔합니다. 이렇게 개발자가 테스트를 하는 이유는 다양하지만 다음과 같은 것들이 있습니다. 우리는 인력이 너무 적어서 테스터를 별도로 둘 수 없어요. 프로젝트 기간이 너무 짧아서 별도의 테스트 단계를 둬서 테스트를 할 수 없어요. 개발자만이 기능을 속속들이.. 더보기
닭이 먼저일까? 달걀이 먼저일까? 소프트웨어 공학은 가르칠 수 없다고 합니다. 단지, 시행착오를 통해서 배우던지, 경험자에게 배우는 방법 밖에 없다고 합니다. 그래서 소프트웨어를 잘 개발하는 방법을 배우는 가장 좋은 방법은 잘 되어 있는 소프트웨어 회사에 들어가서 배우는 것입니다. 잘 되어 있는 회사에서 소프트웨어를 개발하다 보면 자연스럽게 몸에 익히게 되는 겁니다. 소프트웨어 개발이 전체적으로 어떻게 돌아가는지 자연스럽게 몸에 익히게 되며, 각 기능 조직은 어떻게 구분이 되며, 개발에 꼭 필요한 기반 시스템은 어떤 것들이 있으며 어떻게 사용하는지 배우게 됩니다. 따로 공부한다는 생각으로 배우는 것이 아니며 자연스럽게 몸에 익게 됩니다. 그런데 우리의 문제는 여기에 있습니다. 잘 되어 있는 소프트웨어 회사가 별로 없다는 겁니다. 제 컨설.. 더보기
프로젝트 시작부터 개발자가 바글바글 소프트웨어 개발 프로젝트가 시작되면 바로 개발팀이 구성되어서 개발자들이 바글바글 한가요? 그렇다면 뭔가 개발 체계에 잘못된 것이 없는지 검토를 해봐야 합니다. 개발을 단계(Stage)구분 없이 마구잡이로 하고 있지 않은지? 개발 업무(분석, 설계, 구현)의 구분 없이 섞여서 하고 있지 않은지? 개발자가 별도의 전문성 없이 모든 업무(분석, 설계, 구현, 빌드, 테스트)를 다 하고 있지 않은지? 프로젝트의 각 단계에 따라서 투입되는 인력이 달라집니다. 소프트웨어 개발 프로젝트에서 흔히 저지르는 실수 중 하나가 프로젝트가 시작되자마자 모든 프로젝트 인력을 한꺼번에 투입해 놓고 프로젝트 끝날 때까지 그 인원으로 계속 진행하는 경우입니다. 각 단계 별로 필요한 인력과 인원 수가 달라지는데 프로젝트 초기부터 많은.. 더보기
인류멸망 그 후(Life after People) 얼마 전 TV에서 "인류멸망 그 후(Life after People)"를 방영했죠. 인간이 지구에서 당장 사라진다면 어떤 일이 일어날지 살펴보는 프로그램이었습니다. 여기서 인간이 만들어 놓은 건축물이 유지보수를 하지 않는 순간 얼마나 빨리 망가지는지를 확인할 수 있습니다. 소프트웨어 개발도 비슷하다고 생각합니다. 소프트웨어 기본 원리야 항상 변함이 없지만, 회사의 규모와 환경에 따라서 개발 프로세스는 그에 알맞게 절절해야 하고, 회사의 성장과 전략의 변화에 따라서 지속적으로 그에 맞춰줘야 합니다. 그런데, 어떤 이유에서건 갑자기 회사의 개발 프로세스를 관리하지 않기 시작하면, 서서히 망가져가는 것을 볼 수 있습니다. 개발자들에게 서서히 외면을 받고 피해가기도 하고, 개발을 방해하는 거추장스러운 것이 될 .. 더보기
샘플만 보여주세요. 소프트웨어 개발에서 가장 어려운 것이 "요구사항분석"이라고 여러 차례 언급한 바가 있습니다. 요구사항을 분석하여 "스펙"으로 만들어서 적어 놓은 문서를 "SRS"라고 합니다. 그런데 SRS는 샘플이나 Template을 보고 잘 적는 것은 거의 불가능합니다. 개발자들은 원래 샘플 소스코드를 보고 많은 것들을 배워왔기 때문에 스펙도 샘플을 보면 잘 적을 수 있을 것 같은 착각을 하는 경우가 흔합니다. 샘플 소스코드가 도움이 되는 이유는 개발자들인 소스코드에 대해서는 이미 상당한 지식과 경험이 있기 때문입니다. 샘플만 보고 잘하려고 하는 것은 피아노를 잘 치고 싶다고 유명 피아니스트가 친 것을 몇 번 보고 피아노를 잘 치려 하는 것과 비슷합니다. 심지어는 지금 듣고 있는 피아노 연주가 잘 하는 것인지 못하는 .. 더보기
프로젝트는 연습이 아니다. 필자는 수많은 소프트웨어를 개발해왔고, 주위에서 여러 프로젝트를 봐왔습니다. 그러면서 성공한 프로젝트와 실패한 프로젝트도 많이 봐 오면서 그 차이에 대해서도 많이 생각해 왔습니다. 물론, 성공한 프로젝트는 모두들 알고 있는 요소들이 있습니다. 상세하고 꼼꼼한 일정관리, 꾸준한 리스크관리, 인력관리, 품질관리 등등 이미 알려진 것들입니다. 비단 S/W 프로젝트가 아니더라도, 빌딩을 만들 때도 당연히 필요한 프로젝트 관리의 요소들입니다. 그런데, 유독 소프트웨어 개발 프로젝트에서 종종 벌어지는 현상이 있습니다. 이것이 프로젝트에 큰 리스크가 되고 프로젝트를 실패하게 만드는 원인이 되기도 합니다. 이것은 바로 "프로젝트를 연습처럼 생각한다"는 겁니다. 연구, 공부처럼 생각합니다. "요즘 Python이 인기인데.. 더보기