<p>오늘 보니까..</p><p><span style="font-family: Gulim; font-size: 17.27272605895996px; font-weight: bold; line-height: normal;">프로그래밍을 배우기 시작한 사람들에게 조언</span></p><p>라는 제목으로 베오베 갔길래..</p><p><br></p><p>저는 프로그래밍을 어느 정도 배웠다고 생각한 사람들에게 조언을 드리고자 글씁니다.</p><p><br></p><p>저는... 제가 프로그래밍을 잘한다... 잘난 척 하겠다는 말이 아니라...</p><p><br></p><p>프로그래밍 실력은 어느정도 까지 쌓였다고 생각하는데..</p><p>이이상 진도가 안나간다..</p><p>여기서 멀~ 더 배워야 하지? 라는 생각을 하고 있는 분들을 위한 조언이 되었으면 합니다.</p><p><br></p><p>왜냐하면, 제가 프로그래밍을 시작하고 어느 적정 까지 실력이 쌓인 후...</p><p>심각한 실력의 정체기를 겪었던 경험이 있었거든요...</p><p><br></p><p>내가 분명, 남들만큼은 코드를 짠다고 생각은 되는데....</p><p>아직은 고수라 하긴 머하고... 고수는 되고 싶은데 방법은 모르겠고.....</p><p><br></p><p>그런 기간을... 5년여 가까이 시간을 낭비 했거든요...</p><p><br></p><p>심각한 정체기를 겪고 계실... 이나라의 예비 프로그래머 분에게 이를 타파하고</p><p>고수가 될 수 있는 방법을 알려 드리겠습니다.</p><p><br></p><p>1. 객체지향프로그래밍에 거부감이 있다면 리팩토링과 디자인 패턴은 필수다.</p><p><br></p><p> 실력이 안느는 사람 들 중 대부분은... 로직은 잘짜는데, 코드는 못 짜는 경우가 많습니다.</p><p> 제말은 문제를 해결하는 방법은 모로가든 도로가든 서울로는 가는데...</p><p> 거기로 향하는 길과 이정표가 엉망인 경우가 많아요..</p><p> 로직은 잘짜는데, 코드를 이해하려면 그것도 보통이 아닌 경우가 다반사 입니다.</p><p><br></p><p>구글링 해도 좀 처럼 얻기 힘든 코드가, 정말로 객체지향적으로 잘 짜여진 코드입니다.</p><p><br></p><p>그리고 이 객체지향적인 코드를 짜는 방법을.... 아니 패러다임을 깨우쳐줄 공부가</p><p>리팩토링과 디자인 패턴입니다.</p><p> 리팩토링과 디자인패턴에 대한 개념은 우리 나라에 들어온지 얼마 안되어서..</p><p>저 같은 경우 대학다닐때 조차 들어 본적도 없는 용어 였습니다.</p><p>리팩토링? 공장을 다시 만든다는 건가?</p><p>디자인패턴??? 그거 디자이너들이 보는거 아냐? 라고 반문 하지 마시고..</p><p><br></p><p> 리팩토링! 디자인 패턴! 두가지를 지금 당장 알아 보세요..</p><p>긴말이 되니 여기서는 설명하지 않겠습니다.</p><p><br></p><p>2. 메모장으로 애쓰지 말고 그냥 좋은 IDE 툴 써라</p><p> 나는 정말 좋은 프로그래머가 될거라고... 실력을 키우겠다고... 메모장에 코드 짜는 사람들 있습니다.</p><p>실력 안늡니다. 오히려 IDE로 문장 자동 기능도 다 써보고, 이런 저런 디버깅도 돌려보고 하다 보면,</p><p>더 자연스럽게 배울 수 있습니다.</p><p>자바의 경우 이클립스가 있고, C의 경우 비주얼C++ 또는 이클립스CDT가 있습니다.</p><p><br></p><p>3. Know-How? No!!! Know-Where</p><p> 노하우를 쌓겠다고, 오만 삽질을 하는 사람들에게 꼭! 하고 싶은 조언이 있습니다..</p><p> 노하우는 노력으로 쌓는게 아니다... 시간과 사람과 운이 맞으면 자연히 쌓이는 것입니다..</p><p> 당신이 지금 쌓을 수 있는건.... 오직 지식 뿐인데.... 그래서 Know-Where에 더 많은 투자를 해라</p><p>Know-Where란 이 지식과 기술이 어디에 있냐! 라는 뜻입니다</p><p>내가 지금 어떤 어려운 기능을 만들 생각인데, 이걸 어디서 구할까? 어떤 책을 볼까? 부터 반문해보셔야 합니다....</p><p>지금 당장 떠오르는 싸이트, 책, 선생님, 선배님 등등 이를 해결 해줄 장소가 떠올려 지지 않다면</p><p> 이를 쌓기 위한 노력을 지금부터라도 해야 한다. </p><p><br></p><p>4. 책은 최고의 Know-Where 다.</p><p> 구글링도 분명 내가 알고 싶은 지식을 찾아내기엔 좋은 방법입니다. 하지만, 체계적으로 나에게 정보와</p><p>지식을 제공해주는건 책 만한게 없습니다. 아래 책들은 내가 사회생활하는 3여년 동안 읽어낸 책들입니다.</p><p>단 3년동안 읽은게 100여권이 넘네요..... <span style="font-size: 10pt; line-height: 1.8;">고등학교, 대학교 때 읽은건 부모님 집에 모셔져 있습니다.</span></p><p><br></p><p>책사는게 두렵다면, 좋은 프로그래머가 되긴 더더욱 어렵습니다. 단, 내가 천재라면 상관 없죠.....</p><p>저 같은 경우는 어떤 기능을 만들기 위해 어떤 책의 단 한페이지만 필요하다면, 일단 그 책을 삽니다!</p><p>살 형편이 안되면, 빌리거나, 도서관에 달려 갑니다.... 어떻게 해서든 구해서 봅니다.</p><p>책에 있는 자료는 정리되고 다듬어진 내용들이기에 어느면에서는 구글링 보다</p><p>더 빠르게 정보를 얻어낼 수 있습니다.</p><p>책이 많다는건 내가 그 지식을 그만큼 소유하고 있다는 말입니다...</p><p><br></p><p>당장 가서 책 부터 사라!</p><p><br></p><p style="text-align: left;"><img src="http://thimg.todayhumor.co.kr/upfile/201304/eaae3a1e04b49aa60711652cadf7679c.JPG" class="txc-image" style="clear:none;float:none;" /></p><p><br></p><p><br></p><p>5. 외우는데 쓸데 없는 시간 낭비하지 마라.</p><p>저는 프로그래머가 되려면, 많이 알아야도 하지만, 많이 외우고 있어야 한다고 생각했습니다.....ㅜ_ㅜ</p><p>초보시절 C언어 막 때고 나서, VC++ 처음 공부할때, 한달만에 포기한적이 있었습니다.</p><p> 그땐, 책의 내용, API, 함수, 라이브러리</p><p>전부 외우거나 거의다 외워야만 되는 줄 알았거든요...</p><p>처음엔 무식하게 외웠습니다. 근데, 그게 됩니까? 이상엽씬가(?) 지은 <span style="font-size: 10pt; line-height: 1.8;">VC++ 6.0 </span><span style="font-size: 10pt; line-height: 1.8;">아시나요? 2000페이지가 넘습니다.</span></p><p>전 아직도 그 책 보다 두꺼운 책 본적이 없습니다. 그걸 어떻게 다 외웁니까?</p><p>그 책 사놓고.. 저 스스로 외우는 것에 질려버려 포기해 버렸습니다..</p><p>지금 생각해 보니.. 엄청난 병신짓이었죠....</p><p><br></p><p>외우지 마세요... 단 하나의 함수... 조차도 안외워도 됩니다...</p><p><br></p><p>왜냐하면... 현장에서 프로그래머들도 책보며, 인터넷 검색해보며, 봤던거 또보고 하면서 프로그래밍 합니다.</p><p>자주쓰다 보면, 나도 모르게 외워지는게 있는 법이고, 그러다 보면, 자연히 노하우가 쌓이는 겁니다.</p><p>그냥, 책많이 사놓고.... 일할때 쌓아두고 참조하며 보세요.... </p><p>제가 책 많이 사 읽지만, 다 외우고, 다 이해하는건 아닙니다. 단지 그게 다 저의 지식이 되기 때문에</p><p>옆에 모셔둘 뿐입니다.</p><p><br></p><p>먼가를 외울 시간에 그냥 차라리.... 영화를 한편 보세요.. 아늑합니다.</p><p><br></p><p>6. 지식을 소유하는데에는 80/20 법칙이 적용 됩니다.</p><p> 80/20의 법칙이 먼지에 대해선 길게 설명 안 할게요.... 어떠한 현상을 100이라는 수치로 계량화 한다면</p><p>그중 중요한 20%가 나머지 80%보다 더 중요하다는 법칙입니다.</p><p> 전혀 외우지도 말고, 옆에 모셔만 두라고 해서.. 꼭! 수집만 해놓으라는 말은 아닙니다.</p><p>하나의 책이 있으면, 그 책에서 가장 중요한 부분, 자주 쓰이는 부분은 비율로 나누어 보면 80/20 법칙이</p><p>적용이 됩니다. 결론은 중요한 20%는 반드시 숙지를 하셔야 합니다.</p><p> 굳이 외우거나 글로 정리하거나 할 필요는 없지만, 책 안에 설명한 예제 정도는 실행 해보고..</p><p>원리에 대한 이해는 하셔야 합니다.</p><p><br></p><p> 즉 이말은 20%만 숙지하면 되기에. 굳이 나머지 80%를 익히기 위해 많은 시간을 투자할 필요는 없다는 말이지요...</p><p><br></p><p>제가 짧은 기간 많은 책을 읽어 낼 수 있었던건, 항상 80/20 의 법칙을 적용해서 책을 보기 때문입니다.</p><p><br></p><p>7. 라이브러리, 프레임워크를 잘 쓰는 것도 실력이다.</p><p>굳이 내 실력을 검증해 보겠다고, 하나부터 열까지 전부 자기 힘으로 만들려는 욕심은 이해 합니다.</p><p>하지만, 생산적인 측면에서 라이브러리와 프레임워크를 가져다 쓰는 것 보다 뛰어 난가요?</p><p>그리고 나 스스로가 만들어 낸게 라이브러리, 프레임워크 보다 더 완벽하게 만들어 낼 자신이 있나요?</p><p>평범한 개발자가 10시간 걸릴 일을, 더 최신의 좋은 프레임워크를 써서 1시간 만에 만들어 낸다면...</p><p>그것도 실력입니다.</p><p><br></p><p> 노력을 들여 고퀄리티 프로그램을 만들어 내는 것도 실력이지만</p><p>짧은 시간에 고퀄리티 프로그램을 만들어 내는 것도 실력입니다.</p><p><br></p><p> 좋은 운동선수는 좋은 운동화에 욕심을 냅니다.</p><p>정말 내 실력을 검증 하고 싶으면..</p><p>차라리 지금 쓰는 라이브러리와 프레임워크 내부 소스 코드를 파서 이해해 보세요..</p><p>그게 더 많은 가르침을 줄겁니다.</p><p><br></p><p>8. 제일 나쁜건 한가지만 아는 것!</p><p> 저는 어떤 기술을 익힐땐, 그에 대한 여러 책을 참조해서 멀티플하게 읽는 편입니다.</p><p>제가 찍은 사진에서 보면, 아마 스프링 어쩌고 저쩌고 하는 책이 가장 많을 겁니다.</p><p>스프링이라는 기술 한가지를 익히기 위해서는 그냥 책 한권만 읽어도 되지만,</p><p>어떤 책에는 있는 내용이 이책에는 없고, 이책에서 설명한 내용이 저책에서는 틀렸다 라고 하고..</p><p>그런 차이점을 알고자 스프링에 대한 책은 거의 다 사서 봤습니다.</p><p>그 뿐만 아니라, 스프링과 연관된 하이버네이트 라던지, 스트럿츠, OSGI 등등도 같이 공부 했습니다.</p><p>현재 제가 저희 회사에서 아직 사원밖에 안되지만, 스프링을 제일 잘 쓰는 개발자입니다.</p><p><br></p><p> 좀더 거시적인 예를 들면, 누구는 C++이 최고다 하고, 누구는 JAVA가 최고다 하고...</p><p>자바스크립트는 이게 문제니 저게 문제니 말만 떠드는 사람들 보면.....</p><p>한가지만 공부한 사람들이 대부분이 더군요.. 실제로 양쪽다 깊게 공부해서 이해하고</p><p>하는 말이기 보다는... 내가 좋아하는 쪽에 편들려고 그런 말 하는 경우가 더 많았습니다.</p><p><br></p><p>제가 겪어본 바로는.... 머가 좋고, 머가 나쁘고 그런거 보다는....</p><p>프로그래밍 언어마다 쓰임새가 잘맞는 곳과 아닌 곳이 있을 뿐입니다.</p><p>대형 웹 프로그래밍은 JAVA가 어울리고, 소형 웹은 PHP, ASP등이 잘 어울립니다.</p><p>네트워크 프로그래밍은 C언어가 잘 맞습니다.</p><p>데스크 탑 응용프로그래밍은 C++,C# 등이 잘 맞고 그런거지요...</p><p>또... 요즘은 하나의 프로그래밍 언어로 S/W를 만드는 경우가 별로 없습니다.</p><p>웹 프로그래밍만 해도.. HTML, XML, JavaScript, JAVA등 여러 언어를 융합해서 하나의 싸이트를 만들어 냅니다.</p><p><br></p><p>프로세스 속도는 어셈블러, C언어, JAVA 순이지만,</p><p>개발의 생산성은 루비, JAVA C언어.... 순으로 좋습니다.</p><p><br></p><p>생산성이 특징인 언어와 프로세스 속도가 좋은 언어와 비교를 한다는 것 자체가 어거지라 생각합니다.</p><p><br></p><p>서로 다른 언어들이 서로 어울려서 하나의 S/W를 만드는게 요즘의 추세입니다.</p><p>머가 옳고 그르다 그런거 없습니다. 언어는 하나의 도구일 뿐이고, 하는 용도가 서로 차이가 날 뿐입니다.</p><p>고집하지 마시고, 여러가지를 다방면으로 공부 해 보는 것도 분명 도움이 됩니다.</p><p><br></p><p>내가 좋아하는 언어는 분명 한두가지 씩은 누구나 있을 겁니다.. 하지만 내가 좋아하는 언어 한가지만</p><p>가지고 S/W를 만들겠다는 욕심을 일단 버리셔야 하고, 내가 쓰는 언어가 최고다! 라는 태도는 뜯어 고쳐야 합니다.</p><p><br></p><p><br></p><p>9. 정말로 고수라는 소리를 들어 보고 싶다면.... 언젠가는 어셈블러도 공부 해보길...</p><p>대학 때도 어셈블러를 공부 해봤지만, 당시엔 어려워서 학점도 얼마 못 받았습니다.</p><p>다시 공부해봐야지 하며 그동안 저도 계속 미루고 미루다... 얼마전에 공부를 다시 했는데,</p><p>다행이 그동안 공부했던 노하우가 있었는지 이번엔 그렇게 어렵진 않았습니다.</p><p>어떤 공부든 많이 하다 보면, 자연히 어울리듯 익혀지는 부분들이 있었습니다.</p><p><br></p><p>어셈블러가 어려운 언어인건 맞지만, 그렇다고 아주 어려운 언어는 아니었습니다.</p><p>지례짐작 너무 겁먹었던게 문제였던 것 같습니다.</p><p><br></p><p>소감을 말하자면, 그동안 C나 C++, JAVA 언어를 공부 할때...</p><p>이론적으로 알고 있던 컴퓨터 내부의 행동들이......</p><p>경험적으로 알게 되게 해주더군요..</p><p><br></p><p>어셈블러를 공부하고 나서야 비로서 컴퓨터의 실체와 마주하게 된 기분입니다.</p><p><br></p><p>물론, 어셈블러로 아주 대단한 걸 만들 실력은 아닙니다.</p><p>그저 남이짠 코드를 읽어낼 정도의 실력인데.....</p><p>이정도만 해도 큰 도움이 되었습니다.</p><p>조금만 할 줄 알아도.. 분명 도움이 될겁니다.</p><p><br></p><p>이상입니다.</p>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.