프로그래머의 길

위키책, 위키책

차례

[+/-] 프로그래머의 길(The Tao of Programmer)

[+/-] 머리말

본서의 처음 편집의 시작은 한 필자가 대학 4년, 대학원 2년 그리고 C 언어와 4세대 언어를 갖춘 비주얼 툴을 사용한 6년간의 소프트웨어 개발에 걸쳐 듣고, 배우고, 경험한 바를 2년간의 사색을 토대로 작성이 시작되었습니다. 이를 바탕으로 여러 사용자가 함께 편집 했음을 알립니다. 비록 적은 경험에 부족한 글이지만 필자의 사변적 이성(Speculative Reason)과 경험적 이성(Empirical Reason)이 독자 제현께 조금이나마 도움이 될까 하여 제가 그동안 정리했던 글을 모았습니다. 물론, 본 글이 있기까지 수 많은 선지식의 가르침과 선학과 후학들과의 교류가 있었음을 인정합니다. 본 글이 있기까지 필자에게 정신적 자양분을 제공한 많은 분들께 감사를 드립니다.

말씀드린 바와 같이, 본서는 필자가 조금씩 써두었던 글들을 모은 것입니다. 그러나, 필자가 작성해 둔 글들의 모임이 전혀 관련없는 글들로의 모임이 아니라 서로 모종의 연관을 맺고 있습니다. 따라서, 본서를 전체적으로 읽고 여러 번 읽다 보시면 각 장의 내용을 이해하는 것 뿐만아니라 각 장들과의 연관성까지 이해하실 수 있을 것입니다. 물론 제가 이전에 집필했던 “C 프로그래밍의 기초 및 학습론” 서적이나 출간 예정인 가제목 “수학에 기초한 공부론” 서적과 중복되는 부분이 있습니다. 그러나, 최대한 중복이 없도록 노력하였습니다. 그리고 본서는 “C 프로그래밍의 기초 및 학습론” 서적보다 더 개념적이고 사변적이며 철학적인 내용을 담고 있습니다. 따라서, 이해하기 어려운 내용이 다분히 많이 있을 것입니다. 그러나, 이러한 부류의 서적을 필요로 하는 개발자와 전산학자들이 존재한다는 생각으로 제 글을 모아 출간하게 되었습니다. 비록 내용이 모호하고 주관적이긴 해도, 나름대로 최대한 독자 제현님들께서 합리적이고 직관적으로 이해할 수 있도록 정리하였습니다. 또한, 본서에 수록된 글들은 원래 제가 작성해서 소프트웨어 개발 커뮤니티 게시판 등에 올렸던 글들이 많이 포함되어 있는데 이 글들을 약간만 고치고 글의 형태는 그대로 두었습니다. 따라서, 본서의 구성이 짜집기 형태로 비추어질 수 있는데 어떤 면에서 각 장마다 독특한 글의 형태를 유지시키고 독자들이 읽기에 편할 수 있다는 생각에서 원래의 글 형태를 그대로 유지시켰습니다. 그리고, 참고하기 편리하도록 각 장마다 그때 그때 해당하는 참고문헌들을 첨부하였습니다.

본서는 전산학을 공부하는 학생에서부터 개발자로 입문하고자 하는 분들 그리고 전산철학에 관심이 있는 분들을 위해 집필된 서적입니다. 또한, 인문학을 공부하시는 분들 중에서 소프트웨어 개발이나 프로그래머에 대한 철학적 이해를 얻고자 하시는 분들에게 다소 도움이 되도록 구성하였습니다. 그러나, 아무래도 본서의 내용이 필자가 실무에서 경험하고 전산 실무 경험자들의 이야기를 논구한 것이므로 전산학을 전혀 모르는 분들은 이해하기 어려울 것입니다. 그리고, 전산학을 대강 공부한 분들도 본서의 내용을 전체적으로 이해하는데는 다소 어려움이 있을 것입니다. 본서를 시간을 두고 천천히 읽으신 후, 실무 프로젝트를 수행하면서 그때 느끼는 독자 제현님들의 경험에 비추어 제 책의 내용을 반추해 보시면 도움이 될 것입니다. 본서는 필자가 실제 실무 프로젝트를 수행하면서 경험하는 바를 정리한 것이므로, 독자 제현님들께서 실제 소프트웨어 개발 프로젝트를 수행하는데 기초자료로 이용하시면 좋을 것입니다.

한편, 전산학자들이 개발자로서 좀더 발전된 방향으로 진화하기 위해서는 소프트웨어의 기술적인 내용뿐만아니라 소프트웨어 개발 과정에 대한 이해와 소프트웨어 개발을 위해 가져야 할 프로그래머의 자세 및 올바른 마인드(心法)을 증득해야 된다고 저는 생각합니다. 그리고 초보자나 입문자들에게도 그러한 마인드가 다분히 중시됩니다. 비록 필자의 천학비재로 내용이 알차지 못하고 빈약한 면이 많지만 본서가 개발자들에게 조금이나마 소프트웨어 공학에 대한 인간적이고 철학적인 인식을 마련해 준다면 정말 기쁘겠습니다.

또한 본서는 필자가 아는 한도에서의 프로그래머의 길을 말씀드린 것이며 필자의 글이 얼마나 올바르게 프로그래머가 걷는 길에 대해서 잘 설명하고 있는지는 필자도 확신할 수 없습니다. 다만, 필자가 선학과 후학들로부터 배우고, 듣고, 직접 경험한 바에 근거하여 보편타당하다고 생각되는 선상에서 글을 전개하였습니다. 또한 본서는 여러분에게 프로그래머의 길을 제시하는 것이라기 보다는 필자가 경험하고 이해하고 인식하는 바로서 프로그래머가 갖추어야 할 지식과 지혜를 말씀드린 것입니다. 따라서 본서에 부족한 점이 있을 수 있으므로 그 점에 대해서는 너그러운 양해를 구합니다.

본서의 구성은 다음과 같습니다. Chapter 1에서는 제가 생각하는 프로그래밍에 대한 사유를 정리하였습니다. Chapter 1은 프로그래머가 염두해 두어야 할 프로그래밍에 대한 사유를 담고 있습니다. 그리고 Chapter 2에서는 개발툴이나 언어를 사용하여 소프트웨어를 개발해야 할 때 도움이 될만한 사항을 조언의 형태를 빌어 설명합니다. Chapter 2의 내용을 프로그래머의 길을 걸어가는 분들게 조금이나마 도움이 되리라 생각합니다. 그리고 Chapter 3에서는 현재 인기있는 익스트림 프로그래밍과 애자일 방법론을 중심으로 소프트웨어 개발 프로젝트 수행에 관한 내용을 다룹니다. 프로젝트 수행론은 실무에서 프로젝트를 수행하면서 얻게 되는 느낌과 이해를 담고 있어 프로그래머의 길을 걷는 분들게 약간이나마 도움이 되리라 생각합니다. Chapter 4에서는 인기를 구가하고 있는 디자인패턴에 대한 필자의 생각과 견해를 다루었습니다. 그리고 Chapter 5부터 부록까지는 에세이 형태로 프로그래머가 알아두었으면 하는 내용을 다루고 있습니다. 본 장들은 다소 현학적인 내용이 많이 가미되어 있는데, 그것은 프로그래머가 단순히 코딩하는 기계가 아니라는 점을 강조하기 위해서입니다. 프로그래머는 생각하고 추론하고 직관력을 향상시킬 수 있으며 자신을 부단히 업그레이딩해 나가야한다고 필자는 생각합니다. 그렇기 위해서는 보다 넓고 심오한 시각을 갖는 것이 중요합니다. 이러한 시각을 얻을 수 있도록 나름대로 글을 정리한 것이 바로 Chapter 5에서 부록까지의 내용입니다. 예를 들어, 매트릭스 영화가 요즘 인기를 끌고 있고, 이 영화를 이해하려면 다분히 컴퓨터 과학에 대한 현학적 이해가 필요합니다. 이러한 현학적 이해에 부록의 내용이 다소 도움이 되리라 생각합니다. 본서의 부록에서 다루는 내용을 충분히 소화한다면 동양철학과 프로그래밍의 관계를 이해할 수 있을 것입니다. 물론, 부록의 내용은 단지 흥미위주의 소설이 아니라 무엇인가 프로그래머가 지향해야 할 프로그래밍의 세계관을 한 번 도시해 본 것이라 말씀드리고 싶습니다.

그리고, 본서는 단순한 특정 프로그래밍 언어와 개발툴에 대한 기술서적이 아니라는 것입니다. 그리고, Thinking In Java나 Thinking In C++와 같은 개념과 이론 그리고 기술이 접목된 서적도 아니라는 것입니다. 또한 Writing Solid Code나 Code Complete 그리고 The Pragmatic Programmer와 같은 기술과 철학을 종합시킨 서적들과도 다소 차이가 있습니다. 오히려 본서는 Kent Beck의 Extreme Programming Explained나 Jim Highsmith의 Agile Software Development Ecosystem과 비슷한 성격을 지닙니다. 그렇다고 본서가 이러한 방법론이나 프로그래머의 자세를 전문적으로 혹은 심도있게 다루는 책은 아닙니다. 본서는 개발자들과 프로그래머 입문자들을 위해 도움이 될만한 사항들을 필자의 경험과 선학과 후학의 이야기들 그리고 앞에서 언급한 서적들의 저자들이 갖고 있는 생각들을 종합하고 통합하려는 시도로 다분히 철학적인 접근 방법을 택했습니다. 그러나, 본서는 결코 철학서도 아닙니다. 오히려 프로그래머로서 가져야할 자세 및 심법(心法)의 중요성을 특정 프로그래밍 언어나 개발툴 그리고 특정 방법론에 국한하지 않고 언급하고 있습니다. 본서는 필자가 힘닿는 데로 개발자와 프로그래머의 시야를 보다 넓혀줄 수 있을까 하는 시도에서 집필된 것입니다. 그렇다고, 기술서적이나 이론서적들이 불필요한 것이 아닙니다. 오히려, 본서를 통해서 Code Complete나 Writing Solid Code, The Pragmatic Programmer, Extreme Programming Explained, Agile Software Development Ecosystem, UML Distilled, Applying UML and Patterns, Design Patterns 등과 같은 유명 전산학 및 프로그래밍 서적들의 목적과 취지를 이해하는데 도움이 되었으면 합니다. 즉, 본서를 통해서 이러한 서적들 하나 하나로부터 지식을 얻는데 조금이나마 도움이 되었으면 합니다. 물론, 필자는 책을 홍보할 목적을 가지고 말씀드린 것은 아닙니다. 제가 열거한 책들 외에도 좋은 책들이 있을 수 있으니까요.

한 때, 국내의 유명한 어느 컴퓨터 서적 출판사에서 일하는 직원과 대화를 나눈 적이 있는데, 그때 그 직원분이 전산서적이나 프로그래밍 서적을 구독하는 사람들이 취미 삼아 책을 모으는 경우가 있다고 이야기해 준 적이 있습니다. 물론 많지는 않지만 꽤 있는 것을 알게 되었습니다. 그것은 바로, 책으로부터 어떤 영감을 얻기 위한 것이라고 생각합니다. 본서를 전산학 책에 대한 메타 책으로 읽혀졌으면 하고 조심스럽게 바랍니다. 즉, 전산학 책을 읽을 수 있는데 어떤 영감을 이 책을 통해서 조금이나마 얻었으면 합니다.

필자가 아는 한도에서 소프트웨어 개발이라는 전장에서 생존을 위해 문제상황을 돌파하고 문제들과 싸워 이기기 위해서는 여러가지 술(術)을 구사할 수 있어야 합니다. 바로 소프트웨어 스킬로서의 기술을 의미합니다. 이러한 기술은 언어화되기가 어렵고 언어화될 경우 그 효력을 상실하기가 쉽습니다. 그래서 선학들은 이를 무언의 지식(Tacit Knowledge)이라고 말합니다.

하지만, 비록 소프트웨어 개발 기술을 언어화시키는 것이 실질적인 기술을 표현하지 못한다하더라도 어느 정도 개발자에게 도움이 될 수 있습니다. 즉, 언어라는 과정을 통해서 소프트웨어 개발 기술로서의 지식을 무의식적으로 승화시킨다면 그 차원에서는 개발 기술에 대한 의미가 비슷해지지 않나 생각해 봅니다. 우리가 국어를 처음 배울 때 자주 따라하고 반복하면서 저절로 암기화되어 무의식적인 차원까지 도달하는 것처럼 말입니다. 따라서, 소프트웨어 기술이라는 것이 행위적인 수단을 요체로하지만 이를 언어로 풀이해서 이해한 후, 깊이 학습하여 무의식적인 차원까지 이르르게 한다면 소프트웨어 기술을 익히는데 도움이 될 것입니다. 즉, 소프트웨어 기술에 대한 지식을 언어화하여 익히고 배우는 것이 어느정도 도움이 된다고 생각합니다. 물론, 실질적으로 일을 통해서 직접 체험을 통해서 증득하는 것만큼 직접적이지는 않지만 말입니다. 따라서, 본서의 반 사변적이고 반 경험적인 이성이 독자제현님들게 도움이 될 것이라 생각합니다.

또한, 소프트웨어 개발이라는 전장에 나가 문제상황을 돌파하고 문제들과 맞서 싸우기 위해서는 개발툴이나 언어에 의한 단순한 스킬로서의 기술이 아닌 술법(術法)을 알아야 합니다. 술법(術法)이라고 해서 어떤 도력(Occult Power)을 뜻하는 것이 아니라 기술을 쓰는 마음가짐과 자세를 뜻합니다. 검을 사용하는 검법처럼 소프트웨어 개발 기술을 사용하는데에도 법이 있으며, 이러한 법을 배워야 합니다. 그러나, 앞에서 말씀드렸듯이 이러한 법 또한 말로서 설명되어서 이해될 수 있기 보다는 실질적으로 옆에서 지켜 보고 직접 자신의 선생이나 스승으로부터 배워야 합니다. 즉, 소프트웨어 개발 기술에 대한 마음가짐과 자세를 언어로 표현한다는 것에는 한계가 있습니다.

동양의 옛 고전을 읽어보면 수레바퀴에 맞는 차축을 깍는 수레차 수리공에 대한 일화가 나옵니다. 수레바퀴에 맞는 차축을 깍으려면 수많은 시행착오를 통해 몸과 마음으로 배우고 익힌 노련한 전문 수레차 수리공의 기술이 필요합니다. 수레바퀴에 차축을 제대로 끼우려면 차축을 너무 얇게 깍아도 안되고 너무 두껍게 깍아도 안됩니다. 이러한 기술은 언어로 표현할 수 있는 문제가 아닙니다. 우리가 언어화할 수 있는 것은 그가 어떻게 수레바퀴에 맞는 차축을 깍는법을 배워왔는지 그 시행착오와 함께 그의 직관과 사유만을 배울 수 있습니다. 필자도 본서를 통해서 소프트웨어 개발에 관해 언어화할 수 있는 바의 한도 내에서 프로그래머로서 알아두어야할 소프트웨어 개발에 관한 내용을 담았습니다. 또한 소프트웨어 개발 자세와 마음가짐에 대해서 함께 담고자 하였습니다. 그러므로, 필자의 글에서 너무 많은 것을 얻으려하거나 지나친 기대를 하실 필요는 없다는 것을 삼가 말씀드립니다.

아무쪼록, 본서가 조금이나마 독자 제현님들께 소프트웨어 개발을 이해하는데 도움이 되었으면 합니다. 끝으로, 본서의 출판을 허락해 주신 홍릉과학출판사 사장님께 감사 드리며 직원분들께도 감사 드립니다.

[+/-] Chapter 1. 프로그래밍에 대한 사색

[+/-] Chapter 2. 소프트웨어 개발 입문자분들께 드리는 31가지 조언

본 글은 전산학 및 프로그래밍 언어에 대한 기본 지식을 갖고 있는 분들을 위한 조언을 담고 있습니다. 필자가 실무에서 주력 언어로 사용한 언어가 C 언어와 파워빌더였고, 특히 파워빌더 개발툴을 오래 사용했기 때문에 파워빌더에 대한 내용을 주로 다룹니다. 그러나, 어떤 개발툴을 사용하건 간에 개발자가 갖추어야 할 마인드와 자세는 다를바 없으므로 보다 큰 견지에서 본 장의 글을 읽어주시면 될 것입니다. 필자는 C 언어와 같은 텍스트지향적이고 절차지향적인 언어를 사용하기도 하였으므로, 본 장에서 거론하는 대부분의 조언들이 C++, Java 등의 거의 모든 언어와 개발툴에도 적용된다고 생각합니다. 본 장에서 비주얼 개발툴이라고 굳이 언급한 것은 요즘의 C++ 언어도 비주얼 툴의 형태를 빌려 제공되고 있기 때문입니다. 그리고, 본 장은 특정 언어의 기능을 다루기 보다는 개발 언어와 개발툴을 익히고 공부하는 방법 그리고 자세에 대한 내용을 다루고 있습니다. 또한 이 글에서는 특정 언어와 개발툴에 대한 기능과 코드 분석은 일부를 제외하고는 거의 다루지 않습니다. 물론, 본 장에서 다루는 코드는 파워빌더의 스크립트 언어에 바탕을 두고 작성되었습니다.

본 장의 글은 7년에서 8년 동안 필자가 경험한 바를 나름대로 소화하고 정리한 글로서 특정 언어와 개발툴을 사용하여 실무 소프트웨어 개발 프로젝트에 입문하는 분들을 대상으로 하고 있습니다. 그러나, 글이 내용이 인생수행의 방편으로서 소프트웨어 개발을 생각하고 있는 필자의 지론에 의해 다소 내용이 함축적이고 은유적이기까지도 함으로 이점에 대해서 양해를 구합니다. 사실, 노자의 도덕경에서 이야기 한 바처럼 도가도 비상도(道可道 非常道)라고 하였으므로 말의 표면적 의미보다는 글자들 속에 새겨진 내적인 의미를 통찰하시는 것이 중요합니다.

본장에서 이야기하는 내용은 다소 사변적일 수 있습니다. 지행합일(知行合一)이라고 하여 아는 것과 행하는 것이 일체가 되어야 합니다. 필자도 이 지행합일을 실천하기가 어려워 나름대로 고민과 고생을 하였습니다. 그리고 지금도 잘 안 되는 경우도 있고 항상 이를 염두해 두고 살아갑니다. 본 장의 내용을 소화하여 여러분의 실무에 실제로활용 하였으면 합니다.

한편, 필자가 여기서 소프트웨어 개발 입문자분들이라고 한 것은 전혀 소프트웨어 개발을 모르는 분들에 대해서 이야기하는 것이 아닙니다. 특정 개발툴을 배우고자 하는 강한 열정과 뜻을 지니고 이곳 저곳 개발 언어와 툴에 관련된 서적과 전산 경력자들을 만나보고 뛰어 다니고 개발툴과 언어에 관한 강의도 들어보려고 노력하시는 분을 말씀드립니다. 그냥 전혀 개발툴을 모르시는 분은 시중의 개발툴 서적을 읽어보시고 한 번 정도 프로그램을 실행시켜 보았으면 합니다. 그리고 나름대로 한 권 정도의 서적에 대해서는 통찰을 얻으셨으면 합니다. 본 글은 처음으로 소프트웨어 개발 프로젝트를 수행하기 위해 준비하는 초급 개발자를 위한 글이라고 생각하시면 될 것입니다. 즉, 자신이 사용하는 개발툴에 대해서 책 한 권 정도 읽어 본 경험이 있으나 프로젝트 수행 경험이 없는 개발툴 입문자분들을 대상으로 글을 작성하였습니다.

본 글은 필자가 4년간 C 언어와 파워빌더 개발툴을 사용해서 프로그램을 개발해 본 경험을 토대로 정리한 것입니다. 부족한 내용이지만 그래도 필자의 글이 나름대로 도움이 되었으면 하는 바램으로 소프트웨어 개발 입문자분들을 위해 글을 정리하게 되었습니다. 서점이나 학원에서는 실제 특정 개발툴과 언어를 사용하는 방법에 대해서 개괄적이고도 자세하게 다룹니다. 하지만 개발툴과 언어를 배우는 방법과 자세 등에 대해서는 그렇게 많이 다루고 있지 않은 듯 합니다. 필자의 개인적 소견에 의하면 몇몇 서적을 제외하고는 시중의 서적들이 특히 소프트웨어 개발에 대해서는 많은 노하우를 제공하지 못하는 듯 합니다. 서적이 지향하고 추구해야 할 것은 개발툴과 언어를 사용하는 개발자들에게 개발툴의 기능과 사용법 그리고 언어의 문법과 코딩 방법을 가르쳐 주는 것을 넘어서 개발툴을 숙달하는 방법과 자세를 배우는 것을 가르쳐 주는 것입니다. 본 글은 특정 개발툴을 마스터하기 위해서 갖추어야할 개발자의 소양을 필자의 경험을 토대로 정리하였습니다. 특히, 파워빌더라는 구체적인 개발툴을 통해서 특정 개발툴을 체계적으로 배울 수 있는데 도움이 되는 학습방법과 자세들에 대해서 주제별로 정리하여 강좌로 마련하였습니다.

1995년도 겨울, 파워빌더, 비주얼 베이직 그리고 델파이 개발툴이 가장 인기 있는 비주얼 툴로서 각광받고 있었습니다. 그당시 이러한 글을 구하고자 노력했는데, 그 길을 제시한 글을 찾기가 어려웠습니다. 그리고 지금도 이러한 글은 잘 소개되어지지 않고, 많은 사람들이 이러한 글을 쓰기를 어려워하고 있는 듯합니다. 혹시 자기자랑이 되지 않을까 부담도 되고 과연 얼마나 보편타당하게 쓸 수 있을까하고 고민하게 되기도 하고 말입니다. 필자도 이 글을 쓰기에 앞서 이러한 부담을 갖게 되었는데, 용기를 내어 글을 씁니다. 부디, 필자의 경험과 지식이 미흡해도 너그러이 이해해 주셨으면 합니다.

이 글은 필자가 대학 때부터 전산학을 공부하여 지금까지 배워온 지식과 제가 접한 수많은 전산 및 프로그래밍 서적을 학습한 내용을 집약해서 담고 있습니다. 따라서, 어떤 부분은 다소 개념적인 내용이 나오기도 하고 이해하기 어려운 내용이 나올 수 있습니다. 그러나, 여러 번 글을 읽다보면 필자가 말하고자 하는 바를 이해할 수 있다고 생각합니다. 또한, 필자의 본 글이 개발자의 모든 삶을 대변해 주는 것은 아니며 다만 본인이 바라보는 개발자의 삶과 배움에 대한 인식을 정리한 것일 뿐입니다. 그러므로, 필자로부터 얻을 수 있는 것은 취하고 그렇지 못한 것은 서서히 익혀나가셔도 되지 않을까 생각합니다. 물론, 필자의 글에 오류가 있을 수 있으니 독자 제현님들의 현명한 식견에 근거하여 필자의 글을 읽어주시길 바랍니다.

각설하고, 중요한 것은 필자가 여기서 제시한 이야기들은 독자 제현님들의 개발 과정 동안 한 번쯤 생각해 볼 수 있는 내용들이라는 점입니다. 필자 혼자서 경험한 내용뿐만 아니라 다른 서적들(소프트웨어 장인정신, 익스트림 프로그래밍, Agile Methodology 등에 관련된 서적들)과 다른 개발자들의 이야기를 나름대로 정리한 것이므로, 지금 당장 소프트웨어 개발 입문자로서 여러분에게 중요하게 인식이 되지 않더라도 시간이 지나고 세월이 흐르면 여기서 필자가 논의한 내용을 어느 정도 이해할 수 있을 것이라 생각해 봅니다. 여기서는 6년 간의 소프트웨어 개발 프로젝트 경험을 통해 얻은 작지만 필자에게는 소중한 경험을 31가지 주제 하에 정리하였습니다. 필자 나름대로 몇 개월의 시간을 할애하여 개발자로서 보내온 삶의 여정에 있어 중요하다고 생각되는 이야기들을 이 글에 담았습니다. 그리고 저의 이야기보다 더 긴요하고 값진 이야기를 다른 분들로부터 들을 수 있으니 항상 깨어있는 자세로 개발 프로젝트를 수행해 나가셨으면 합니다.

한편, 기술을 배우는데 있어 요긴한 팁을 잘 아는 것이 중요합니다. The Pragmatic Programmer라는 서적에서는 저자들이 프로그래머가 알아두면 요긴할 사항을 항목별로 정리하여 Tip이라는 제목 하에 책에 배치하였습니다. 총 70여개에 달하는 팁은 우리가 프로그래밍하면서 대면하는 실수들과 버릇들에 대해서 똑똑한 조언자로서 우리에게 하나 하나 일러줍니다. 본서에서 언급한 31가지 조언도 The Pragmatic Programmer 서적의 70여개의 팁처럼 소프트웨어 개발 입문자분들게 실질적으로 스스로의 로드맵(RoadMap)을 읽는데 약간이나마 도움이 되었으면 합니다.

[+/-] 처음에는 자신이 사용하는 개발툴이나 언어를 강력한 툴이자 언어로 생각하십시오.

[+/-] 어느 정도 숙달되면 개발툴이 아닌 업무에 주의를 기울이십시오.

[+/-] 처음에는 자신이 사용하는 개발툴이 갖고있는 기능의 전체상을 획득하도록 하시고 그 다음에 하나 하나 철저하고 자세하게 배우도록 하십시오. 그리고 중요한 지식과 기술을 중심으로 배우십시오.

[+/-] 프로젝트에서 대면하게 되는 새로운 요소 기술, 팁 그리고 노하우들을 하나 하나 기록하고 정리하여 여러분의 지식체계로 발전시키십시오.

[+/-] 자신이 사용하는 개발툴의 기능적 사용법, 요소 기술, 팁 및 노하우를 기록하고 정리하는 것 못지 않게 이를 여러분의 것으로 내면화하는 것이 중요합니다.

[+/-] 문제의 다양한 변화를 고려하고 다양한 해법을 모색하십시오.

[+/-] 개발툴은 기능적인 툴이라는 점을 잊지 마십시오. 즉, 개발툴에 대한 감각을 익히십시오.

[+/-] 반복을 두려워 하지 마십시오. 반복 속에 변화가 있습니다. 그 미묘한 변화를 터득하십시오.

[+/-] 가끔씩 소프트웨어의 실체를 파악하는데 주의를 기울일 필요도 있습니다.

[+/-] 요긴한 한 줄의 코드가 허황된 말이나 장황한 이론보다 더 중요할 수 있습니다.

[+/-] 다양한 요소 기술을 마스터하십시오.

[+/-] 문제 의식을 가지십시오.

[+/-] 자신이 사용하는 개발툴에 대한 전체적인 시야를 획득하도록 하십시오. 종종 예시적 사고(Predictive Thinking)가 도움이 될 때도 있습니다.

[+/-] 단순성(Simplicity)을 최대한 활용하십시오.

[+/-] 프로그래밍 그리고 프로젝트에서 즐거움을 찾으십시오.

[+/-] 다른 프로그래머들과의 교류를 이루어가면서 개발문화와의 흐름 및 휴먼네트워크와의 동시성을 유지하십시오.

[+/-] 업무와 관련하여 인간관계를 원활히 유지하십시오.

[+/-] 팀웍을 유지하십시오.

[+/-] 소프트웨어 장인정신을 본받으십시오.

[+/-] 자신의 일에 긍지와 자부심을 가지십시오. 그리고 일에 몰입하십시오. 그 속에서 자유를 찾으십시오.

[+/-] 연속적이고 지속적으로 일을 하십시오. 그리고 규칙적으로 일하십시오.

[+/-] 요소 기술을 익혀 하나의 완성된 제품을 만들어 내도록 하십시오.

[+/-] 코드 가독능력과 작성능력을 향상시키십시오.

[+/-] 어느 정도 실력이 향상되면 SQL과 데이터베이스 활용에 대해서 공부를 하십시오.

[+/-] 남에게 가르침으로써 알고 있는 지식을 더 새롭게 하고 새로운 것을 배우는 기회를 얻으십시오.

[+/-] 선임 개발자와 동료 개발자 그리고 후배 개발자의 진지한 모습과 개발에 몰입하는 자세를 배우도록 하십시오.

[+/-] 변화에 적응하십시오.

[+/-] 전산을 전공하지 않았다고 반드시 마이너스 요인이 되는 것은 아닙니다.

[+/-] 익스트림 프로그래밍, 디자인패턴, 리팩토링 등의 최신 소프트웨어 개발 기술에도 관심을 가지십시오.

[+/-] 어느 정도 개발툴 실력이 확고하게 되면 영어, 경영지식 및 다양한 학문에 관심을 가지십시오.

[+/-] 항상 자신을 성찰하고 반성하며 끝임 없이 배우도록 노력하십시오.

[+/-] Chapter 3. 소프트웨어 개발 프로젝트 방법론의 이해

[+/-] 필자가 익스트림 프로그래밍을 공부하게 된 배경

[+/-] 익스트림 프로그래밍과 증험적 프로그래밍 사고

[+/-] 익스트림 프로그래밍의 4대 가치와 10대 practice

[+/-] 협력(協力)프로그래밍과 지식공유 그리고 익스트림 프로그래밍의 4대 가치에 관한 생각

[+/-] 필자가 생각하는 Test First Programming 개념과 Prototype 개념의 결합 방법론 - 변형 TFP

[+/-] 통합된 시각(Unfied Perspective)

[+/-] 점진적 개발(Incremental development)

[+/-] 기민형 소프트웨어 개발 생태계(Agile Software development EcoSystem)

[+/-] WorkFlow와 문제공간/해법공간

[+/-] 단순설계(SimpleDesign)에 대한 생각

[+/-] 소프트웨어 라이프사이클과 업무 분석에 관한 해석

[+/-] 실무적 소프트웨어 공학의 새로 패러다임 - 정형화(Formalization)

[+/-] 경영자이자 기술자로서의 궁극적 조화의 길

[+/-] 프로그래머와 완벽주의 [260]

[+/-] Chapter 4. 디자인패턴에 대한 소론(小論)

[+/-] 디자인패턴을 공부해야 하는 이유

[+/-] 디자인패턴에 대한 생각

[+/-] 디자인패턴 공부 방법

[+/-] 필자가 디자인패턴을 좋아하는 이유

[+/-] Chapter 5. 소프트웨어 공학에 대한 철학적 고찰

[+/-] Chapter 6. 스터디 모임과 의사소통(커뮤니케이션)에 대한 소고(小考)

[+/-] Chapter 7. 인생 수행의 방편으로서의 프로그래밍에 대한 개인적 소고

[+/-] Chapter 8. 무의식적 정형화(Unconscious Formalization)

[+/-] Chapter 9. 프로그래머를 위한 내공 증득

[+/-] 부록. [샘플소설] 철학하는 프로그래머

개인 도구
Create a book
  • Add wiki page
  • Collections help