괜찮은 글이 있어서 주워왔습니다 ㅎ


---------------------------------------------------------------------------

저는... 제가 프로그래밍을 잘한다... 잘난 척 하겠다는 말이 아니라...


프로그래밍 실력은 어느정도 까지 쌓였다고 생각하는데..

이이상 진도가 안나간다..

여기서 멀~ 더 배워야 하지? 라는 생각을 하고 있는 분들을 위한 조언이 되었으면 합니다.


왜냐하면, 제가 프로그래밍을 시작하고 어느 적정 까지 실력이 쌓인 후...

심각한 실력의 정체기를 겪었던 경험이 있었거든요...


내가 분명, 남들만큼은 코드를 짠다고 생각은 되는데....

아직은 고수라 하긴 머하고... 고수는 되고 싶은데 방법은 모르겠고.....


그런 기간을... 5년여 가까이 시간을 낭비 했거든요...


심각한 정체기를 겪고 계실... 이나라의 예비 프로그래머 분에게 이를 타파하고

고수가 될 수 있는 방법을 알려 드리겠습니다.


1. 객체지향프로그래밍에 거부감이 있다면 리팩토링과 디자인 패턴은 필수다.


 실력이 안느는 사람 들 중 대부분은... 로직은 잘짜는데, 코드는 못 짜는 경우가 많습니다.

 제말은 문제를 해결하는 방법은 모로가든 도로가든 서울로는 가는데...

 거기로 향하는 길과 이정표가 엉망인 경우가 많아요..

 로직은 잘짜는데, 코드를 이해하려면 그것도 보통이 아닌 경우가 다반사 입니다.


구글링 해도 좀 처럼 얻기 힘든 코드가, 정말로 객체지향적으로 잘 짜여진 코드입니다.


그리고 이 객체지향적인 코드를 짜는 방법을.... 아니 패러다임을 깨우쳐줄 공부가

리팩토링과 디자인 패턴입니다.

 리팩토링과 디자인패턴에 대한 개념은 우리 나라에 들어온지 얼마 안되어서..

저 같은 경우 대학다닐때 조차 들어 본적도 없는 용어 였습니다.

리팩토링? 공장을 다시 만든다는 건가?

디자인패턴??? 그거 디자이너들이 보는거 아냐? 라고 반문 하지 마시고..


 리팩토링! 디자인 패턴! 두가지를 지금 당장 알아 보세요..

긴말이 되니 여기서는 설명하지 않겠습니다.


2. 메모장으로 애쓰지 말고 그냥 좋은 IDE 툴 써라

 나는 정말 좋은 프로그래머가 될거라고... 실력을 키우겠다고... 메모장에 코드 짜는 사람들 있습니다.

실력 안늡니다. 오히려 IDE로 문장 자동 기능도 다 써보고, 이런 저런 디버깅도 돌려보고 하다 보면,

더 자연스럽게 배울 수 있습니다.

자바의 경우 이클립스가 있고, C의 경우 비주얼C++ 또는 이클립스CDT가 있습니다.


3. Know-How?  No!!! Know-Where

 노하우를 쌓겠다고, 오만 삽질을 하는 사람들에게 꼭! 하고 싶은 조언이 있습니다..

 노하우는 노력으로 쌓는게 아니다... 시간과 사람과 운이 맞으면 자연히 쌓이는 것입니다..

 당신이 지금 쌓을 수 있는건.... 오직 지식 뿐인데.... 그래서 Know-Where에 더 많은 투자를 해라

Know-Where란 이 지식과 기술이 어디에 있냐! 라는 뜻입니다

내가 지금 어떤 어려운 기능을 만들 생각인데, 이걸 어디서 구할까? 어떤 책을 볼까? 부터 반문해보셔야 합니다....

지금 당장 떠오르는 싸이트, 책, 선생님, 선배님 등등 이를 해결 해줄 장소가  떠올려 지지 않다면

 이를 쌓기 위한 노력을 지금부터라도 해야 한다. 


4. 책은 최고의 Know-Where 다.

 구글링도 분명 내가 알고 싶은 지식을 찾아내기엔 좋은 방법입니다. 하지만, 체계적으로 나에게 정보와

지식을 제공해주는건 책 만한게 없습니다. 아래 책들은 내가 사회생활하는 3여년 동안 읽어낸 책들입니다.

단 3년동안 읽은게 100여권이 넘네요..... 고등학교, 대학교 때 읽은건 부모님 집에 모셔져 있습니다.


책사는게 두렵다면, 좋은 프로그래머가 되긴 더더욱 어렵습니다. 단, 내가 천재라면 상관 없죠.....

저 같은 경우는 어떤 기능을 만들기 위해 어떤 책의 단 한페이지만 필요하다면, 일단 그 책을 삽니다!

살 형편이 안되면, 빌리거나, 도서관에 달려 갑니다.... 어떻게 해서든 구해서 봅니다.

책에 있는 자료는 정리되고 다듬어진 내용들이기에 어느면에서는 구글링 보다

더 빠르게 정보를 얻어낼 수 있습니다.

책이 많다는건 내가 그 지식을 그만큼 소유하고 있다는 말입니다...


당장 가서 책 부터 사라!


5. 외우는데 쓸데 없는 시간 낭비하지 마라.

저는 프로그래머가 되려면, 많이 알아야도 하지만, 많이 외우고 있어야 한다고 생각했습니다.....ㅜ_ㅜ

초보시절 C언어 막 때고 나서, VC++ 처음 공부할때, 한달만에 포기한적이 있었습니다.

 그땐, 책의 내용, API, 함수, 라이브러리

전부 외우거나 거의다 외워야만 되는 줄 알았거든요...

처음엔 무식하게 외웠습니다. 근데, 그게 됩니까? 이상엽씬가(?)  지은 VC++ 6.0 아시나요? 2000페이지가 넘습니다.

전 아직도 그 책 보다 두꺼운 책 본적이 없습니다. 그걸 어떻게 다 외웁니까?

그 책 사놓고.. 저 스스로 외우는 것에 질려버려 포기해 버렸습니다..

지금 생각해 보니.. 엄청난 병신짓이었죠....


외우지  마세요... 단 하나의 함수... 조차도 안외워도 됩니다...


왜냐하면... 현장에서 프로그래머들도 책보며, 인터넷 검색해보며, 봤던거 또보고 하면서 프로그래밍 합니다.

자주쓰다 보면, 나도 모르게 외워지는게 있는 법이고, 그러다 보면, 자연히 노하우가 쌓이는 겁니다.

그냥, 책많이 사놓고.... 일할때 쌓아두고 참조하며 보세요.... 

제가 책 많이 사 읽지만, 다 외우고, 다 이해하는건 아닙니다. 단지 그게 다 저의 지식이 되기 때문에

옆에 모셔둘 뿐입니다.


먼가를 외울 시간에 그냥 차라리.... 영화를 한편 보세요.. 아늑합니다.


6. 지식을 소유하는데에는 80/20 법칙이 적용 됩니다.

 80/20의 법칙이 먼지에 대해선 길게 설명 안 할게요.... 어떠한 현상을 100이라는 수치로 계량화 한다면

그중 중요한  20%가 나머지 80%보다 더 중요하다는 법칙입니다.

 전혀 외우지도 말고, 옆에 모셔만 두라고 해서.. 꼭! 수집만 해놓으라는 말은 아닙니다.

하나의 책이 있으면, 그 책에서 가장 중요한 부분, 자주 쓰이는 부분은 비율로 나누어 보면 80/20 법칙이

적용이 됩니다. 결론은 중요한 20%는 반드시 숙지를 하셔야 합니다.

 굳이 외우거나 글로 정리하거나 할 필요는 없지만, 책 안에 설명한 예제 정도는 실행 해보고..

원리에 대한 이해는 하셔야 합니다.


 즉 이말은 20%만 숙지하면 되기에. 굳이 나머지 80%를 익히기 위해 많은 시간을 투자할 필요는 없다는 말이지요...


제가 짧은 기간 많은 책을 읽어 낼 수 있었던건, 항상 80/20 의 법칙을 적용해서 책을 보기 때문입니다.


7. 라이브러리, 프레임워크를 잘 쓰는 것도 실력이다.

굳이 내 실력을 검증해 보겠다고, 하나부터 열까지 전부 자기 힘으로 만들려는 욕심은 이해 합니다.

하지만, 생산적인 측면에서 라이브러리와 프레임워크를 가져다 쓰는 것 보다 뛰어 난가요?

그리고 나 스스로가 만들어 낸게 라이브러리, 프레임워크 보다 더 완벽하게 만들어 낼 자신이 있나요?

평범한 개발자가 10시간 걸릴 일을, 더 최신의 좋은 프레임워크를 써서 1시간 만에 만들어 낸다면...

그것도 실력입니다.


 노력을 들여 고퀄리티 프로그램을 만들어 내는 것도 실력이지만

짧은 시간에 고퀄리티 프로그램을 만들어 내는 것도 실력입니다.


 좋은 운동선수는 좋은 운동화에 욕심을 냅니다.

정말 내 실력을 검증 하고 싶으면..

차라리 지금 쓰는 라이브러리와 프레임워크 내부 소스 코드를 파서 이해해 보세요..

그게 더 많은 가르침을 줄겁니다.


8. 제일 나쁜건 한가지만 아는 것!

 저는 어떤 기술을 익힐땐, 그에 대한 여러 책을 참조해서 멀티플하게 읽는 편입니다.

제가 찍은 사진에서 보면, 아마 스프링 어쩌고 저쩌고 하는 책이 가장 많을 겁니다.

스프링이라는 기술 한가지를 익히기 위해서는 그냥 책 한권만 읽어도 되지만,

어떤 책에는 있는 내용이 이책에는 없고, 이책에서 설명한 내용이 저책에서는 틀렸다 라고 하고..

그런 차이점을 알고자 스프링에 대한 책은 거의 다 사서 봤습니다.

그 뿐만 아니라, 스프링과 연관된 하이버네이트 라던지, 스트럿츠, OSGI 등등도 같이 공부 했습니다.

현재 제가 저희 회사에서 아직 사원밖에 안되지만, 스프링을 제일 잘 쓰는 개발자입니다.


 좀더 거시적인 예를 들면, 누구는 C++이 최고다 하고, 누구는 JAVA가 최고다 하고...

자바스크립트는 이게 문제니 저게 문제니 말만 떠드는 사람들 보면.....

한가지만 공부한 사람들이 대부분이 더군요.. 실제로 양쪽다 깊게 공부해서 이해하고

하는 말이기 보다는... 내가 좋아하는 쪽에 편들려고 그런 말 하는 경우가 더 많았습니다.


제가 겪어본 바로는.... 머가 좋고, 머가 나쁘고 그런거 보다는....

프로그래밍 언어마다 쓰임새가 잘맞는 곳과 아닌 곳이 있을 뿐입니다.

대형 웹 프로그래밍은 JAVA가 어울리고, 소형 웹은 PHP, ASP등이 잘 어울립니다.

네트워크 프로그래밍은 C언어가 잘 맞습니다.

데스크 탑 응용프로그래밍은 C++,C# 등이 잘 맞고 그런거지요...

또... 요즘은 하나의 프로그래밍 언어로 S/W를 만드는 경우가 별로 없습니다.

웹 프로그래밍만 해도.. HTML, XML, Java, JAVA등 여러 언어를 융합해서 하나의 싸이트를 만들어 냅니다.


프로세스 속도는 어셈블러, C언어, JAVA 순이지만,

개발의 생산성은 루비, JAVA C언어.... 순으로 좋습니다.


생산성이 특징인 언어와 프로세스 속도가 좋은 언어와 비교를 한다는 것 자체가 어거지라 생각합니다.


서로 다른 언어들이 서로 어울려서 하나의 S/W를 만드는게 요즘의 추세입니다.

머가 옳고 그르다 그런거 없습니다. 언어는 하나의 도구일 뿐이고, 하는 용도가 서로 차이가 날 뿐입니다.

고집하지 마시고, 여러가지를 다방면으로 공부 해 보는 것도 분명 도움이 됩니다.


내가 좋아하는 언어는 분명 한두가지 씩은 누구나 있을 겁니다.. 하지만 내가 좋아하는 언어 한가지만

가지고 S/W를 만들겠다는 욕심을 일단 버리셔야 하고, 내가 쓰는 언어가 최고다! 라는 태도는 뜯어 고쳐야 합니다.



9. 정말로 고수라는 소리를 들어 보고 싶다면.... 언젠가는 어셈블러도 공부 해보길...

대학 때도 어셈블러를 공부 해봤지만, 당시엔 어려워서 학점도 얼마 못 받았습니다.

다시 공부해봐야지 하며 그동안 저도 계속 미루고 미루다... 얼마전에 공부를 다시 했는데,

다행이 그동안 공부했던 노하우가 있었는지 이번엔 그렇게 어렵진 않았습니다.

어떤 공부든 많이 하다 보면, 자연히 어울리듯 익혀지는 부분들이 있었습니다.


어셈블러가 어려운 언어인건 맞지만, 그렇다고 아주 어려운 언어는 아니었습니다.

지례짐작 너무 겁먹었던게 문제였던 것 같습니다.


소감을 말하자면, 그동안  C나 C++, JAVA 언어를 공부 할때...

이론적으로 알고 있던 컴퓨터 내부의 행동들이......

경험적으로 알게 되게 해주더군요..


어셈블러를 공부하고 나서야 비로서 컴퓨터의 실체와 마주하게 된 기분입니다.


물론, 어셈블러로 아주 대단한 걸 만들 실력은 아닙니다.

그저 남이짠 코드를 읽어낼 정도의 실력인데.....

이정도만 해도 큰 도움이 되었습니다.

조금만 할 줄 알아도.. 분명 도움이 될겁니다.


이상입니다.


출처 : 오유(http://todayhumor.com/?humorbest_662099)

Posted by 아르다