천객만래 [千客萬來] (It has an interminable succession of visitors)

[개발/컬럼] 프로그래밍, 얼마나 배워야 하나요?

개발자에게 도움이 될만한 컬럼 같아서 올려봅니다.

Post-It Note Art Collage (PINAP)
Post-It Note Art Collage (PINAP) by Adrian Wallett 저작자 표시비영리변경 금지



 얼마나 배워야 하나요? | Codeway  2003.12.18  

류(ryujt)   http://cafe.naver.com/codeway/6 


얼마나 배워야 하나요?


가끔 프로그래밍을 시작하려고 하거나 입문과정에 있는 분들에게 받는 질문이다. 그리고, 때로는 자신의 위치가 어느 정도가 되는지 항상 의문을 가지는 사람들에게로부터 같은 질문을 받는다.

본인이 그러한 것에 대한 권위적인 기준을 남에게 이야기할 만한 자격은 없지만, 나름대로 생각한 기준을 말해보고자 한다. 지금부터 이야기하는 것들은 본인 자신의 개인적인 기준일 뿐, 그 어떠한 권위적인 해석이나 정보를 바탕으로 하고 있지 않음을 미리 알려둔다.

우선 본인은 개발자의 등급분류를 준비과정, 입문과정, 초급, 중급, 고급, 특급으로 나누고자 한다. 여기서 입문과정과 준비과정이 다소 애매하다. 프로그래밍을 시작하면 무조건 입문과정이라고 분류할 수 있을 것이다. 하지만, 그 입문과정을 준비과정과 입문과정 둘로 나누고 싶은 데에는 이유가 있다.

준비과정은 공부를 시작한 지 최소 1개월 정도를 생각한다. 이 과정 중에는 개발에 대한 전반적인 이해와 개념을 공부하는 과정이다. 이러한 공부는 상당히 지겨운 편이다. 공부하는 동안 그 결과가 겉으로 들어나지 않기 때문이다. 하지만, 본인은 조금은 여유를 가지고 살펴보기를 강력히 권장한다.

대부분의 사람들은 무엇을 배울 때, 상당히 조급한 경향이 있다. 그리고, 그 조급함으로 인해 무엇인가 빨리 터득했다고 믿는다. 또한, 항상 자신이 빠르게 배웠음을 자랑으로 여긴다. 하지만, 이러한 사람은 임계점에서 실력이 향상되지 않는 슬럼프를 꼭 겪게 된다.

준비과정에서는 프로그래밍 자체보다는 자신이 선택한 개발영역에 대한 포괄적인 이해에 대하여 집중해야 한다. 이것을 공부해 나가는 동안 여러분들은 개발에 관한 전체적인 안목을 얻을 수 있는 좋은 기회가 된다. 편협한 지식은 가끔 문제해결을 하고자 할 때, 상당한 방해가 된다. 마땅히 공부할 자료를 제시하기는 어렵지만, 전산학개론 정도가 될 것이다.

입문과정은 6개월 정도를 생각한다. 이 과정 중에는 선택한 프로그래밍 언어 자체에 대한 수련을 하는 과정이다. 우선은 문법체계와 프로그래밍에 대한 절차에 대해서 공부를 하고, 이후 다양한 문제해결에 대한 실전적인 연습이 필요하다. 굳이 책에 집착하지 말고 자신이 하고자 하는 새로운 프로젝트 또는 문제를 설정하여, 이를 선택한 언어를 통해 해결해 나가는 동안 그 언어에 대한 감각을 길러 가는 것이다.

프로그래밍은 지식보다는 감각적인 요소가 상당히 중요하다. 그것은 프로그래밍을 실무에 접했을 때, 그 문제의 해결을 위한 그 어떠한 정석도 존재하지 않기 때문이다. 비슷한 업무에 대한 개발을 계속적으로 진행하더라도, 결국 구현단계에서는 언제나 새로운 문제가 기다리고 있다. 이러한 것들을 단순히 암기된 지식의 결합 및 수정으로는 해결할 수가 없다. 특히 알고리즘에 관한 공부를 게을리하지 않기를 바란다.

이제, 위에서 거론된 두 과정을 지나면 여러분들은 초급 프로그래머라고 할 수 있을 것이다. 그리고 이 초급은 최소 1년에서 2년 이상 거쳐야 한다고 생각한다. 이후 중급은 4년 이상 그리고 고급과 특급은 기간자체가 중요한 요소라고 생각하지 않는다.

입문과정이 전반적이 이해와 감각을 키우는 과정이라면, 초급과정에서는 스킬을 중점으로 공부하는 과정이라고 생각한다. 입문과정은 다소 포괄적인 공부를 하는 단계라고 한다면, 자신의 개발영역을 조금씩 넓혀가면서 심도 깊게 연구하는 단계이다.

초급, 중급, 고급, 특급 개발자들의 기준은 다음과 같이 정리해봤다.


초급 
     - 제한된 범위의 단위 모듈에 대한 코딩 능력
     - 작성된 모듈에 대한 수정 및 변경 능력
     - 프로그래밍에 대하여 상급 개발자의 조언에 의존하는 단계

중급 
     - 설계서를 토대로 스스로 프로그래밍의 문제를 해결할 수 있는 능력
     - 개발절차와 흐름에 대한 완벽한 이해

고급 
     - 프로젝트의 위험요소를 미리 판별하고 대응하는 능력
     - 설계능력
     - 리더십
     - 풍부한 개발 경험

특급 
     - 기술적인 사회적 흐름을 예측하는 능력
     - 대인관계와 대응에 대한 능력
     - 풍부한 사회 경험
     - 회사내의 개발전략을 작성하고 영업과 경영에 대한 조언 및 보조 능력

Posted by SB패밀리

[개발/컬럼] 조금만 멀리 보면

흔히들 "인사가 만사"라고 한다. 어떤 일을 하건, 사람이 가장 중요하다는 뜻이다. 정치도 그렇고, 경영도 그렇듯이, 제품 개발도 결국은 사람들이 하는 일이다. 따라서 좋은 사람들을 잘 써야 한다.

일을 하고 다니다보면, 하드웨어나 소프트웨어를 다루는 엔지니어들을 많이 만나게 된다. 평소에 별일 없을때야 뭐 하던일 계속 하면서, 개발 작업도 여유있게 하고 그런다. 문제는, 일이 터졌을때다. 개발 중인 제품에 문제가 생겼을때도 그렇고, 더 심각하게는, 개발을 완료하고 납품을 한 제품에 하자가 생겼고, 이로 인해서 회사가 엄청난 재정적 손실을 입게 될 상황이 생겼을때, 개발자들은 몇날 며칠씩 날밤을 새가며 디버깅을 해야 하고, 회사로서도 눈에 보이는 혹은 눈에 보이지 않는 손실을 입게 된다.

아주 간단한 예를 들어보자. 개발을 완료하고 납품을 한 제품에 치명적인 결함이 발견되었다고 해보자. 이로 인해서 회사가 입게되는 손실이 금전적으로 따졌을때 100억원이라고 한다면, 이를 최 단시간안에 해결해 줄 수 있는 디버깅 도구를 1억원 주고 구매를 해서, 손실을 50억원으로 줄여줄 수 있다면 이 1억원짜리 개발 도구를 안살 사람이 있겠는가?

그런데, 문제는, 사고가 터진 시점에 그런 개발 도구를 살 경우는 보통 좀 늦은 경우가 많다는 것이다. 구매 절차도 그렇거니와, 그 도구를 잘 쓰도록 배우는 시간도 필요하고 해서, 당장 필요한 문제에 적용을 하기에는 좀 무리가 있다. 그러면, 개발 기간중에, 이런 문제점을 예상하고, 미리미리 장비나 개발 도구를 사 놓고 불의의 사태에 대비할 수도 있을 것이다. 뭐 일종의 보험같은 것이라고 할 수 있을 것이다. 물론 당장 사용하는 1억원이 좀 아깝기는 하겠지만, 나중에 문제가 생겼을때 그 진가를 발휘할것이다.

자 그러면, 아예 그런 문제가 발생하지 않도록, 개발 과정 자체를 완전하게 만들면 어떤가? 방법은 간단하다. 개발자에게 그 1억원을 주고 완전한 개발을 독려하는 것이다... :)

위의 첫번째 경우처럼 사고가 터진 뒤에도 개발자들에게 노가다만을 강요하는 회사가 매우 많은 지금의 상황에서 말도 안되는 소리일 수도 있다. 개발에 매우 큰 도움이 될 것 같지만, 눈에 보이는 비용이 증가한다는 이유로 매우 열악한 하드웨어나 소프트웨어 환경에서 작업을 해야 하는 상황도 늘 보게 된다. 그러니, "인사가 만사"라고 하며 개발자에게 투자를 해야 한다는 소리는 허황된 소리일지도 모른다. 나는 아직도 믿어지지가 않지만, 어쩌면 내가 주변에서 보는 이런 불합리한 일들이 소위 "이공계 기피현상"의 원인인지도 모르겠다.

그러나 난 믿고 싶다. 좋은 개발 환경을 갖춘 상태에서 여유있는 일정으로 개발한 제품이 결국 그 가치를 발휘하듯이, 최고의 대우를 받는 최고의 개발자들을 보유한 회사가 결국 최고가 된다는걸 믿고, 또 그렇게 회사를 이끌어 가는 분들이 많이 계시다는걸...
Posted by SB패밀리

만년 초보 딱지를 달고 다니는 사람들이 있다.  스스로 초보 수준임을 모르는 사람까지 합하면 그 수는 무시 못할 정도에 이르게 된다.

무엇이 문제일까?  물론 수 많은 개발자들의 숫자만큼 수많은 이유가 있을 것이므로 몇 가지 말로 일반화하기란 너무 어렵다.  다만, 만약 지금 내가 거론하려는 조건들이 그대에게 적용된다면 부디 그 거추장스러운 딱지를 어서 떼어내기를 바란다.


1. 우유를 시켜먹는 사람보다 배달하는 사람이 더 건강하다.

대한민국 국민은 참으로 특이하다.  건강에 좋다고 하면 지렁이도 씨가 말라 버린다.  이러한 요상한 취미는 학문을 하는 사람에게도 고스란히 적용된다.  어떤 이의 방석을 훔쳐 앉으면 합격한다든가, 무엇을 어떻게 하면 성적이 오른다는 등의 비법들이 난무한다.

그 정도는 애교로 봐줄 수 있다.  하지만, 전문가의 길을 걷는, 프로의 길을 걷는 개발자들이 의식적이든 무의식적이든 젖어버린 이 비법 중독은 참으로 어처구니 없다.

간혹 좋은 책이 나오고 이것이 소문이 나면 금새 모든 개발자들은 반드시 그것을 읽어야 한다고 생각한다.  그리고, 그 책을 읽고 나면 자신이 무엇인가 업그레이드 된듯한 만족감을 느낀다.  좋은 강좌나 세미나에 참석했을 때는 그 환각증상이 더욱 심각해 진다.

하지만, 그것은 자신의 것이라고 할 수 없다.  아무리 좋은 것을 듣고 아무리 좋은 것을 읽어도 여전히 여러분의 실력은 그대로이다.  무엇인가 깨닫고 무엇인가 느낀 것이 있다면, 이제 여러분 스스로의 이론과 생각을 창조해 내고, 수없이 연마하는 시간이 필요한 것이다.

누구나 배트를 휘둘러 공을 쳐내는
"기술" 자체는 쉽게 이해할 수 있지만,
실재로 멋지게 공을 쳐내기 위해서는
수없이 헛 방망이질을 해야 하는 것처럼...


2. 재능의 부족을 탓하지 마라

재능이 부족한 그대여.  우리 부족한 재능의 덫에 걸려 넘어지지 말자.

자신감 부족이야 말로 가장 심각한 재난이다.  자신감을 잃어버린 자는 마치 사이드 브레이크를 걸어둔 채로 달리려는 자동차와 같다.  여기에 열정마저 잃어버리면 기름마저 떨어진 꼴이 된다.  계속 뒤를 돌아보고 자신의 부족한 위치에 한숨을 짓는 동안 그대의 발걸음은 늪 속으로 빠져들게 될 것이다.

재능의 차이는 있다.  인정해야 할 수밖에 없는 것을 외면하기 위해 시간을 낭비하지 말자.  하지만, 여러분들이 느끼는 것만큼 그 재능의 차이가 심각한 결과를 가져오는 경우는 없다.

가끔 소위 잘나가는 사람들을 보면, 무엇인가 특별하고 능력이 충만하여 보인다.  그리고, 각종 매스컴들은 그 차이점에 조명을 들이대기 시작한다.  그 때문에 그들이 겪었던 수많은 고난과 땀방울에 대해서는 쉽게 지나치게 된다.  그 어느 누구도 재능과 운으로 인해 쉽게 성공의 길에 들어설 수는 없다.  내가 장담한다.

곰곰이 생각해 보라, 자신보다 능력 있는 자들과의 자신의 차이점을.  현재 그 엄청난 차이에는 분명 재능이라는 거리도 있지만, 그들이 열정과 땀을 흘려가면 노력했던 시간이 더욱 크지 않게는 가?


3. 시작은 호기심의 힘으로, 중반은 열정으로, 마무리는 끈기와 신념으로

싹수가 노랗다고 한다.  그렇다.  그 동안 수많은 개발자들의 팀장을 맡으면서 나름대로 관상 보는 능력이 생긴 듯 하다.  싹수가 노란 놈이 보이기 시작한다.  반대로 “저 넘은 무엇인가 해낼 놈이다” 하고 느낌이 꽂히는 때가 있다.

시작부터 요란한 자는 중도에 반드시 포기한다.  잘나가다가 슬럼프에 빠지는 타입이다.  처음에 프로그래밍을 공부할 때는 모든 것이 신기할 뿐이었다.  무엇인가 만들어 보고는 대견한 자신을 뽐내고 싶어서 친구들에게 자랑하지 못해서 안달이 난다.  아직까지는 지극히 정상이다.  하지만, 그 정도를 넘어서 초보의 영역을 뛰어넘고자 안달이 나기 시작하면 일은 틀어지게 된다.

입문자는 반드시 그 호기심과 기본기 연마 사이에서 균형을 잃지 말아야 한다.  무엇인가 화려하고 어려워 보이는 문제에 대한 호기심은 지극히 정상이며 권장할만한 일이다.  하지만, 누군가에게 물어서 해결할 수 있는 일 보다는 자신 스스로 해결할 수 있는 문제에 대한 도전을 통하여 기본기를 연마할 시기에 너무 힘 빼지 말아야 할 것이다.

나중에 돌이켜 보면 입문자 시절만큼 돌아가고 싶은 시기도 없을 것이다.  그때의 그 기분을 다시는 느낄 수 없기 때문이다.

중도의 길을 들어선 자는 거침이 없어야 한다.  이제 서서히 개발하는 재미에 푹 빠져버려서 “이것이 내 천직이다” 하는 말을 거침없이 내뱉는 시기가 온다.  개발에 대한 예찬이 그 입에서 쉴새 없이 쏟아져 나온다.

하지만, 이 시기에서 입문 시기의 호기심으로만 행동하는 자는 반드시 쓰러지게 된다.  호기심과 열정의 차이는 무엇인가?  누군가 멋진 이성을 만났을 때 가슴 떨림이 호기심이라고 한다면, 사랑을 느끼고 그에게 완전히 녹아 버린 모습이 바로 열정이다.

프로그래밍의 세계에 녹아버려라.  일말의 망설임도 없이, 사랑할 때의 그 뜨거운 가슴으로 개발에 몰두하라.  돌부리를 반기고, 어려운 난관을 즐겨라.  절대 뒤돌아 서지 말고 언제나 승부를 걸어라.  해낼 수 있을 까 걱정하지 말고, “반드시 해내자” 하고 스스로를 위로하라.  자신만의 무용담을 훗날 후배들에게 자랑스럽게 이야기하게 될 그날을 기약하면서……

그리고 이제 완성의 시기.  이 시기는 조용하면서도 험난하다.  스스로 정체기를 느끼는 시절이기도 하다.  이제 교만을 버려야 할 시기이다.  어쩌면 이미 주눅이 들었을 지도 모른다.  여러 프로젝트를 통해 성공과 실패를 겪었을 것이고, 실무란 잘한 것보다 못한 것이 엄청난 위력으로 자신을 짓누르기 때문이다.

그대는 이제 잠시 쉬어도 좋다.  다만, 의미 있는 휴식을 취해야 할 시기이다.  객관적인 안목 그리고 보다 넓은 안목으로 개발을 이해하고 공부해야 할 시기이다.

지금까지는 개발이라는 것이 “고객과 나”, “문제와 나”와 같은 이차원적인 시야가 주된 관심사였을 지도 모른다.  하지만, 개발은 고객, 자신의 회사의 경영자, 마케팅 인원, 기획자, 등 수없이 많은 개발 이해관계자들과의 상관관계를 생각하지 않으면 안 되는 시기가 됐을 것이다.

문치무공(文治武功)이라고 했다.  무장도 결국 정치를 알아야 그 힘이 배가되며, 정치하는 자도 힘의 원리를 알고 인정할 줄 알아야 나라를 제대로 다스릴 수 있는 것이다
Posted by SB패밀리

개발 프로젝트의 단계별로 나타날 수 있는 Risk



개발 프로젝트의 단계별로 나타날 수 있는 Risk | Codeway  
2004.01.27 16:47  

류(ryujt)   http://cafe.naver.com/codeway/15 


1. 입찰 혹은 영업 단계(Proposal Phase) 
   - 사업주 요구조건(Requirements) 이해 부족 
   - 자체 사업수행 능력의 과대평가 
   - 공기 예측의 실패 



2. 사업기획단계 (Planning Phase) 
   - 항목누락(Omissions) 
   - 업무분류체계(WBS:Work Breakdown Structure) 작성미숙 
   - 수집정보의 잘못 이해 및 적용 
   - 견적(Estimating) 기술의 선택 
   - 주요 비용요소(Major Cost Elements) 관리의 실패 
   - 사업위험(Risks) 평가 및 설정의 실패 



3. 계약 협상 단계 (Negotiation Phase) 
   - 성급한 협상 유도 
   - 협상팀의 「Win」전략에만 집중 



4. 계약단계 (Contractual Phase) 
   - 계약내용의 모순 발생(Discrepancies) 
   - RFP 요구조건과 다르게 계약추진 
   - 사업수행팀과 계약협상팀의 의사소통 부재 



5. 기획 단계 ( Phase) 
   - PM 승인 없이 사업주 요구조건 수락 
   - 사업주와의 의사소통 및 제공 자료에 문제발생 
   - 기획검토회의 미숙 
   - 기획 변경에 대한 웹사이트 개발비 영향 평가 생략 



6. 디자인/프로그래밍 단계(Design/Programing Phase) 
   - 솔루션 구매비의 상승 
   - 기획과 실제 구현 가능한 기술과의 차이 발생 
   - 노무관리의 실패 
   - 공기 지연 (단기 집중 작업, 비논리적 작업) 



7. 납품 및 검수 단계(Submission/Test Phase) 
   - 사업주/사업주측 담당자/개발자 간의 책임부재 혹은 전가 
   - Test 절차 및 Test 요원 경험 미숙

Posted by SB패밀리
[개발/컬럼] 프로그래밍, 얼마나 배워야 하나요?

개발자에게 도움이 될만한 컬럼 같아서 올려봅니다.


 얼마나 배워야 하나요? | Codeway  2003.12.18  

류(ryujt)   http://cafe.naver.com/codeway/6


얼마나 배워야 하나요?


가끔 프로그래밍을 시작하려고 하거나 입문과정에 있는 분들에게 받는 질문이다. 그리고, 때로는 자신의 위치가 어느 정도가 되는지 항상 의문을 가지는 사람들에게로부터 같은 질문을 받는다.

본인이 그러한 것에 대한 권위적인 기준을 남에게 이야기할 만한 자격은 없지만, 나름대로 생각한 기준을 말해보고자 한다. 지금부터 이야기하는 것들은 본인 자신의 개인적인 기준일 뿐, 그 어떠한 권위적인 해석이나 정보를 바탕으로 하고 있지 않음을 미리 알려둔다.

우선 본인은 개발자의 등급분류를 준비과정, 입문과정, 초급, 중급, 고급, 특급으로 나누고자 한다. 여기서 입문과정과 준비과정이 다소 애매하다. 프로그래밍을 시작하면 무조건 입문과정이라고 분류할 수 있을 것이다. 하지만, 그 입문과정을 준비과정과 입문과정 둘로 나누고 싶은 데에는 이유가 있다.

준비과정은 공부를 시작한 지 최소 1개월 정도를 생각한다. 이 과정 중에는 개발에 대한 전반적인 이해와 개념을 공부하는 과정이다. 이러한 공부는 상당히 지겨운 편이다. 공부하는 동안 그 결과가 겉으로 들어나지 않기 때문이다. 하지만, 본인은 조금은 여유를 가지고 살펴보기를 강력히 권장한다.

대부분의 사람들은 무엇을 배울 때, 상당히 조급한 경향이 있다. 그리고, 그 조급함으로 인해 무엇인가 빨리 터득했다고 믿는다. 또한, 항상 자신이 빠르게 배웠음을 자랑으로 여긴다. 하지만, 이러한 사람은 임계점에서 실력이 향상되지 않는 슬럼프를 꼭 겪게 된다.

준비과정에서는 프로그래밍 자체보다는 자신이 선택한 개발영역에 대한 포괄적인 이해에 대하여 집중해야 한다. 이것을 공부해 나가는 동안 여러분들은 개발에 관한 전체적인 안목을 얻을 수 있는 좋은 기회가 된다. 편협한 지식은 가끔 문제해결을 하고자 할 때, 상당한 방해가 된다. 마땅히 공부할 자료를 제시하기는 어렵지만, 전산학개론 정도가 될 것이다.

입문과정은 6개월 정도를 생각한다. 이 과정 중에는 선택한 프로그래밍 언어 자체에 대한 수련을 하는 과정이다. 우선은 문법체계와 프로그래밍에 대한 절차에 대해서 공부를 하고, 이후 다양한 문제해결에 대한 실전적인 연습이 필요하다. 굳이 책에 집착하지 말고 자신이 하고자 하는 새로운 프로젝트 또는 문제를 설정하여, 이를 선택한 언어를 통해 해결해 나가는 동안 그 언어에 대한 감각을 길러 가는 것이다.

프로그래밍은 지식보다는 감각적인 요소가 상당히 중요하다. 그것은 프로그래밍을 실무에 접했을 때, 그 문제의 해결을 위한 그 어떠한 정석도 존재하지 않기 때문이다. 비슷한 업무에 대한 개발을 계속적으로 진행하더라도, 결국 구현단계에서는 언제나 새로운 문제가 기다리고 있다. 이러한 것들을 단순히 암기된 지식의 결합 및 수정으로는 해결할 수가 없다. 특히 알고리즘에 관한 공부를 게을리하지 않기를 바란다.

이제, 위에서 거론된 두 과정을 지나면 여러분들은 초급 프로그래머라고 할 수 있을 것이다. 그리고 이 초급은 최소 1년에서 2년 이상 거쳐야 한다고 생각한다. 이후 중급은 4년 이상 그리고 고급과 특급은 기간자체가 중요한 요소라고 생각하지 않는다.

입문과정이 전반적이 이해와 감각을 키우는 과정이라면, 초급과정에서는 스킬을 중점으로 공부하는 과정이라고 생각한다. 입문과정은 다소 포괄적인 공부를 하는 단계라고 한다면, 자신의 개발영역을 조금씩 넓혀가면서 심도 깊게 연구하는 단계이다.

초급, 중급, 고급, 특급 개발자들의 기준은 다음과 같이 정리해봤다.


초급
     - 제한된 범위의 단위 모듈에 대한 코딩 능력
     - 작성된 모듈에 대한 수정 및 변경 능력
     - 프로그래밍에 대하여 상급 개발자의 조언에 의존하는 단계

중급
     - 설계서를 토대로 스스로 프로그래밍의 문제를 해결할 수 있는 능력
     - 개발절차와 흐름에 대한 완벽한 이해

고급
     - 프로젝트의 위험요소를 미리 판별하고 대응하는 능력
     - 설계능력
     - 리더십
     - 풍부한 개발 경험

특급
     - 기술적인 사회적 흐름을 예측하는 능력
     - 대인관계와 대응에 대한 능력
     - 풍부한 사회 경험
     - 회사내의 개발전략을 작성하고 영업과 경영에 대한 조언 및 보조 능력
Posted by SB패밀리