프로그래을 공부 한다는건...

|
프로그램을 공부하다보면 다들 겪는 공통적은 사항은 어떤 언어를 공부하냐 일 것이다.
C언어? C++?? Java?? C#?? 뭘 하지?
사실 이런 고민따위는 별 필요도 없는 고민이라 생각한다.
어차피 컴퓨터 언어라는건 마지막엔 하나로 통합이 된다! Logic이라는 것으로 말이다.
그러니 언어를 공부 한다 해서 어떤 언어를 공부 할 것인가에 대한 고민은 하지 않아도 된다
생각 한다.

무협영화에서 보면 캐릭터는 자기의 주력 무공은 하나씩 가지고 있다. 그리고 다른 무공을 배우는데 처음배우는것 보다는 시간이 많이 단축된다는 내용을 많이 볼 수 있을 것이다. 프로그램도 같다 자기 주력의 프로그램 언어를 하나 가지고 있다면 거기에 기반하여 다른 언어는 빠른 속도로 습득할 수 있다. 그렇기 때문에 프로그램 언어의 종류를 따지기 보다는 자기가 고른 언어를 깊이 있게 배우는 것이 무엇 보다 중요한 것이다.

여기저기 프로그램 포스팅을 하는 곳이나. 프로그램 Q/A게시판에 글들을 올린것 보면
내공이(지식IN내공이 아니다.. -_-) 어쩌고 하는것을 볼 것이다.
이 내공이라는것 자체가 익숙한 정도 그리고 경험이라고 볼 수 있겠다.

그렇다면 숙련도와 경험을 어떻게 올릴것인가가 관건인데. 이건 무술과 빗대어 설명하겠다
어떤 무술이던 기본을 배운다 태권도로 따지면 앞차기, 돌려차기, 등등.. 그렇다면 프로그램에서는?
그렇다 기본적인 문법을 배운다 if문, for문, while문 등등.. 그렇다면 기초적인 기본을 배웠다하면
태권도에서는 띠에 색을 바꿀려면 품세를 배워야 한다. 이 품세에서는 기초적인 지식에서 배운것들을 종합적으로 활용한다. 그렇다면 프로그램에서는? 그렇다 책에 나와있는 연습 문제들이 그것들이다. 이런것들을 어느정도 익숙하게 다룰 수 있게 됬다면 무술에서는 겨루기라는 것을 하게 된다.

여기서 부터가 중요하다. 겨루기즉 여태 배워왔던 익숙한 기본기를 가지고 맞붙어 서로의 기량을 가늠하는 것이다. 여기에 프로그램을 빗대어 설명하면 프로그램을 제작 하게 되서 어떤 로직으로 프로그램을 작성할 것인가가 될 수 있다!

마지막에 하나로 통합 된다는 Logic은 여기서부터가 통용되고 내공이라는 말이 나오게 된다.
즉 기본은 가지고 있되 책에서 써왔던 연습문제따위는 잊어버리라는 것이다! 영화 의천도룡기에 보면 장삼풍이 장무기에게 태극권을 가르치는 내용이 나온다. 거기서 보면 기본적인 기본기(사상)을 가르치면서 품세 비슷한것도 한다. 그리고 장삼풍이 물어본다! 어디까지 잊어버렸느냐! 이것이다!

기본적인 사상과 사용법을 배웠다면 사용에 따른 고정관념따위는 잊어버려라! for문을 사용할 수도 있다 하지만 while문을 쓸수도 있는 것이다. 아니면 노가다로 if문을 사용 해도 된다! 꼭 연습문제에 나온대로만 사용 할려고 하지 말라는 거다! C++을 배우다 보면 생성자나 소멸자가 나온다! 이거 안써도 된다. 클래스 제작할때 자기가 정해 놓고 Call해도 같은 효과다 왜 머리아프게 Call하는 순서까지 머리속에 박으면서 사용 할려고 하느냐? 그건 간단해지기 때문이다.!

즉 여러줄로 사용 해야 될껄 안에다 숨겨놓고 자동으로 호출 되는 기능을 사용 하기 위해서기 때문이다. 이런게 내공이다. 무술의 고수들은 불필요한 동작은 하지 않고 간결하고 적은 타격으로 적을 제압한다. 프로그램도 마찬가지 적고 간결한 코드 그리고 적게 도는 Loop으로 문제를 해결한다면 그 사람이 바로 고수인 것이다.

이렇게 어느정도 익수해져 중수 이상의 실력을 갖게 되었다면 슬슬 조심해야 되는 요소가 하나 둘씩 발생하기 시작한다. 이건 프로그램언어의 문제가 아닌 자기 자신의 문제가 시작되는 것이다.

여기서 중요한 전환점이 시작되는 것이다. 이렇게 언어에 익숙해 지다보면 자기가 제작 한것 보다는 잘 만들어져 있는 Code를 사용하는 경우가 많아 진다. 무공중 흡성대법을 보면 다른 사람의 내공을 자기것으로 만드는 무공이 있는데 이 무공에는 부작용이 있다. 이렇듯 자신의 내공을 발전시켜야지 다른사람 내공을 쓸 경우에는 부작용이 생긴다는 말이다. 아무리 잘 만들어진 Code일 지라도 자기가 이해 하지 못하는 Code를 사용 하였을 경우에는 큰 낭패를 볼 수 있는 것이다. 아무리 잘 만들어진 Code일 지라도 필요한 부분과 불필요한 부분이 있을 것인데 이것을 무분별 하게 사용 하다 보면 분명 문제가 터진다는 말이다.

마지막으로 가장큰 문제점이자 가장 중요한 문제점이다. 자기자신의 모순에 빠지지 말자라는 것이다. 이 문제는 프로그램 Project진행시 가장큰 문제점으로 다가간다. 프로그램에 자신감이 있는 사람들의 생각들중 가장 위하함것은 자기 자신이 하는 말은 모두 옳다는 자기 모순이다. 다른 사람의 견이나 생각따위는 이라는 마음가짐이다. 자기보다 경험이 적기 때문에 자신보다 잘 못하기 때문에 라는 생각으로 상대의 생각을 밟아버리는 것은 자칫 팀을 무너뜨릴 수 있다! 프로그램은 어찌보면 생각으로 하는 백지위의 예술이다. 예술에는 정답이 없다! 이사람 생각이 맞을 수도 저 사람 생각이 맞을 수도 있다는 것이다. 무조건 자신의 주장을 내세우지 말자! 그렇다고 다른 사람의 생각이 전부 옳다는 생각도 하지 말자는 거다! 자기 자신의 생각과 다른 사람의 생각을 비교하고 분석해서 최상의 대안을 얻어 내는것 이것이 가장 올바른 마음가짐이 아닌가 생각해 본다. 말로 전 할 수 없나? 역시 생각을 말로 전 하는 방법은 어렵다. 하지만 고수들에게는 통하는것이 있다. 무공을 서로 한수 한수 주고 받으며 마음으로 대화를 하듯 자신이 만든 간단한 셈플 Code를 보여주는 것으로 대답을 찾을 수도 있다는 이야기 이다. 무공영화나 책에서보면 많이 나오는 단어중에 하나가 있다 주화입마 이것을 뛰어 넘으면 엄청난 고수로 거듭날 수 있다. 자기 자신의 모순에 빠져 주화입마 하지 말고 진정한 고수로 거듭나 보자!
And