개발&Development/프로그래밍 일반 56

코드를 잘 뽑아내고 싶은가? 그럼 컴퓨터를 버려라.

나의 컴퓨터와 관련된 인생 중에서 아직도 가장 중요한 경험이라고 하면 바로 컴퓨터를 시작했던 국민학교 2학년때의 경험이 아닐까 한다. 학교에서 특활로 컴퓨터부에 들었는데 처음에 책 한권을 사라고 하고는 1년 내내 특활을 하지 않았다. BASIC라고 적혀 있는 노란책만 나에게 주어졌다. 컴퓨터실은 1년 내내 잠겨 있었다. (오히려 그전에 누님들이 그 학교에 있을때 어머님이 잠시 배우셨다고;; 대체 몇년도야 @.@;) 초보자용 입문서와 가로줄이 그어져 있는 공책, 그리고 연필이 나에게 주어진 모든 연장이었다. 그리고 나는 그 상황에서 입문서의 한장 한장을 넘겨가며 코딩을 시작했다. 나의 공책 위에서 프로그램은 돌아갔고 거기서 난 디버깅을 했으며 결과물도 볼 수 있었다. 어제 일본에 계신 다른 개발자분과 이야..

개발자라는 용어

지극히 프로그램 코더적인 접근일지 모르겠지만 개발자(Developer)에는 단순히 프로그램의 직접 구현에 관련된 사람 뿐만이 아니라 아이디어 메이커나 기획자, 심지어 그 조직의 장 내지 대장(CEO?)도 포함되지 않나 한다. 단순히 이해관계자(Stakeholder)로 분류되던 조직의 수장이나 마켓팅 부서도 다분히 개발조직에 포함되는 것이 맞지 않나 한다. 소프트웨어 품질에 대한 책임은 누구에게 있는가 from IBM Developerworks 테스팅 혹은 품질 관리에 관련된 이야기일수 있지만 테스팅이라는 것이 기존처럼 각 함수들이 잘 동작하는지나 최종 프로그램이 원래 계획서와 일치하는지 확인하는 수준이 아님을 지적하고 있다. 품질보증의 과정으로 처음 기획서 조차도 대장(?)의 요구사항을 제대로 수용하는지..

A급 인재

요즘 글쓸거리가 쌓여만 가는데 이래저래 밀리다 보니 다 까먹어 버렸다. ㄱ- 그래도 오늘 생각난김에 하나. http://skyul.tistory.com/164 : A급 인재 어떻게 잡을 것인가 글타래를 타고 다니다 보면 많은 이야기들이 있다. 내가 하고픈 말. 언젠가 나도 A급 인재 구하러 별 쑈를 다해 봤지만, 구하긴 정말 힘들고 (특히 A급들은 현재 회사에 대한 충성도도 엄청나다. 충성도 없이 그 월급에 그정도 노력을 쏟아 낼리 없자나) 구해진다 해도 비싸다. 그러면서 든 생각. 한국의 IT 정글에서 A급 인재를 길러내려 하는 곳은 얼마나 되려나. 전의 회사에서 직무평가 시스템을 도입하면서 "선임 연구원"을 정의할 때 단순히 선행 연구를 할 수 있다거나 Project Management를 수행할 수 ..

Event Driven과 Multi-Threading

Why Events Are A Bad Idea Prefer Multithreading to Event-driven in Highly-Concurrent Servers from http://lastmind.net/ 간만에 좀 어려운 글좀 읽었더니 살포시 머리에 쥐가 오네요. Event-Driven(ED)과 Multi-Thread(MT) 기법은 서로 연관이 많습니다. 이것을 OS나 어플리케이션 서버가 구동시켜 주기 위해서는 결국 세마포어(Semaphore)라던가 블라블라들의 기능들을 요구합니다. 이동네가 그렇듯 ED는 MT로 구현할 수도 있고 반대로도 가능합니다. 현재 개발해야 하는 환경이 일단은 한쪽을 더 잘 지원한다면 그쪽으로 손이 가게 마련입니다. 그리고 위의 두 글에서 보듯 처음에는 ED로 구현하는 ..

재개발

개발자가 흔히 하는 말중에.. 지금 구린 코드는 버리고 새로 짜야 한다라는 주장이 있다. 맨날 뭐 하나 고치려면 머리 두뭉큼은 빠지는거 같으니 날잡아서 새로 개비를 합시다라고.. Refactoring이라는 말이 등장했을때 많은 개발자들이 열광한 것이 이런 이유일 것이다. Refactoring은 기존의 코드를 버리고 새로 작성하는 것은 아니다. 정확한 번역은 "정리"가 아닐까 한다. 임시방편으로 연결된 바이패스(막힌 지점을 우회시키는 혈관)를 제거하고 원래의 길을 제대로 수행되도록 수정하는 작업일 것이다. 물론 앞으로 생겨날 혈관협착도 고려해서 말이다. 기존의 코드를 폐기하는 것은 상당한 낭비이다. Project Planning에서 기존의 코드는 훌륭한 Asset의 목록이 된다. Asset이란 개발 Cos..

기획자 vs. 개발자

늑대와 양만큼이나 서로 으르렁 거리는 관계가 있다면 바로 기획자와 개발자이다. 개발자 출신의 기획자나 기획자 출신의 개발자가 도움은 되지 못한다. 언제나 상황은 한쪽에 서게 만들기 때문이다. 요즘은 오픈소스조차 빌어먹을 상용 소프트웨어를 박살낼 획기적인 기능을 내포하길 원한다. 그리고 발표시기도 상당히 정치적이다. 자선단체도 이윤을 내야 영속할 수 있는 상황인 것이다. 경쟁중인 분야의 소프트웨어는 신기능이 빠른 시간 안에 나와야 하고 그것이 상대를 압도할 정도로 획기적이어야 한다. 개인적으로는 그냥 영리업체가 돈 펑펑 쓰면서 개발해 낸 기능을 낼름 카피하는게 더 효과적일 것이라고 생각하지만.... 아무튼 이런 상황에서 기획자가 쉽게 하는 실수는 너무나 강력하고 획기적인 기획을 내어 놓아 기존 버전의 프로..

Quality Assurance

개발자는 프로그램의 기능이 동작하게 하고 테스터는 프로그램의 기능이 오동작하거나 동작하지 않는 경우를 없앤다. - 겐도 - 테스팅에서 가장 먼저 수행하는 것은 Smoking Test일 것이다. 전기제품을 만들었을때 전류를 가해서 어디 타는 곳이 없나 확인하는 작업에서 유래된 이 말은 어플리케이션을 만들고 릴리징 준비 단계로 들어갈 때 실제로 설치하거나 배포(Deploy)를 수행한 후 가동을 시작해 보는 작업이다. 수없는 단위 테스트로 인해 이미 더러워질 데로 더러워진, 즉 시스템의 상당 부분이 해당 프로그램이 동작하도록 설정된 환경을 벗어나서 깨끗한 곳에서 동작성을 테스트 하는 이 과정조차 한번에 되기란 그리 쉬운 것은 아니다. DLL이 누락되었거나 버전이 안맞을 수도 있고 임시 파일이나 레지스트리등의 ..

수요와 공급

인도에 인재가 부족하다 from Memories Reloaded 그나마 인도에서는 그 많은 인구중에서 잘먹고 잘사는 방법중 하나가 미국가서 IT를 하는 것이다 보니 이전부터 많은 사람들이 미국으로 수출되었고 이제는 그들이 고향으로 돌아와서 인재를 양성하고 있다. 이전까진 미국의 콜센터(Call Center)의 역할을 했다면 이제는 R&D 센터화 되는 중이다. 많은 투자로 인해 IT 인력이 인도 내에서도 먹고 살 수 있게 되었고 대학에서 적절히 교육되어 나온다. 그리고 IT기업들이 적절히 인력들을 교육 시키고 있다는 것. 우리나라의 많은 IT기업들이 인력난에 허덕인다. 좋은 인력들은 다 어디갔냐 하면 대기업에 가서 대굴대굴 구르고 있다. 대학에서 갓 나온 개발자는 중소기업에서 경험을 쌓고는 대기업으로 가버..

코더의 길

서두에 밝혀야 할 것이.. 아래의 글은 매우 주관적이기 때문에 전적으로 신봉하지도 말 것이고 자신의 생각과 다른 부분이 있을 수 있습니다. 모티브 글 http://sparcs.kaist.ac.kr/~ari/each/article.each.756.html 직업에는 두가지가 있다고 생각한다. 재미있는 직업과 재미없는 직업. 그리고 이것은 매우 지극히 주관적이다. 음악에 살고 죽는 뮤지션이라 해도 그 음악이 매일 자신을 괴롭히는 존재일 수도 자신의 생명 그이상의 것일 수도 있다. 이세상의 코더들에게 자신의 직업에 대한 생각은 두가지일 것이다. 빨리 돈벌거나 돈많은 배우자를 만나서 때려쳐야 할 대상이거나 꿈과 이상을 실현하면서도 돈까지 벌게 해 주는 것일테다. 전산학(Computer Science)의 많은 이론..

어플리케이션 속도 튜닝 노가다

최근 티스토리를 비롯한 태터툴즈의 속도 향상 작업을 하면서 새삼 깨닫게 되는 법칙이 "측정 효과"일 것이다. 정확히 기억은 나지 않지만 어떤 Software Engineering 책에서 읽은 예제인데 어떤 공장에서 조도에 따른 작업 효율을 측정하는 예제가 기억난다. 기본 상태에서 공장 노동자들의 생산성을 측정한 후 조도를 높여 보았더니 생산성이 증가하는 것으로 측정되었다. 그래서 이번엔 조도를 처음보다 낮추어 보았더니 역시 증가된다는 것이다. 조도 뿐만이 아니라 측정 그 자체가 실험의 환경변수가 되어 버린다. 프로그램 혹은 어플리케이션의 속도를 향상시키는 작업에서 기본적으로 하는 활동 중 하나가 Profiling 즉 현재 상태에 대한 측정일 것이다. 운좋게 딱 한군데의 버틀넥(Bottle-Neck)을 찾..