<div><span style="font-size: 9pt; line-height: 1.5">인터넷이나 오프라인에서 프로그래밍을 처음 시작하시는 분들께 들어본 질문들을 모아서 나름대로 답변을 해 보았어요.</span></div> <div><span style="font-size: 9pt; line-height: 1.5"><br /></span></div> <div> <div>어디까지나 나름대로의 답변이니 제가 꼭 맞다는 법은 없고요. 저와 생각이 다르신 분들은 댓글로 답변을 달아 주셔도 </div> <div>좋을 것 같습니다.</div> <div><br /></div> <div>프로그래밍을 좋아하는 많은 분들께 도움이 되었으면 좋겠습니다 ^^</div> <div><br /></div> <div><b>1. 어떤 언어로 입문을 하는 것이 좋을까요?</b></div> <div> - 비슷한 질문으로 C로 입문하는 것이 좋을까요 JAVA로 입문하는 것이 좋을까요 가 있고요. </div> <div>굉장히 많은 분들이 하시는 <span style="font-size: 9pt; line-height: 1.5">질문인 것 같습니다.</span></div> <div> 일단 결론부터 말하자면, <b><font color="#0070c0">현재 많이 쓰이고 있는 메이져 언어라면 무엇으로 입문하더라도 상관 없습니다.</font></b></div> <div>언어의 종류를 잘 모르시는 분들을 위하여 예를 들어보면 <font size="5" color="#00b050"><b>C</b></font>, <b><font size="5" color="#00b050">C++</font></b>, <font size="5" color="#00b050"><b>JAVA</b></font> 를 일단 이야기 할 수 있고요.</div> <div>최근에는 (사실은 꽤 오래되었어요. 어디까지나 앞의 언어들에 비하여 최근 이에요) <font size="5" color="#00b050"><b>파이썬</b></font>과 같은 스크립트 언어가 급 <span style="font-size: 9pt; line-height: 1.5">부상 하고 있습니다.</span></div> <div> 사실은 언어는 어떤 것을 사용하더라도 크게 상관은 없습니다. 제가 메이져한 언어라는 조건을 붙인 이유는 많이 쓰이<span style="font-size: 9pt; line-height: 1.5">는 언어가 자료가 많아서 배우기가 용이하고, 쓰이는 곳이 많아서 투자대비 효율이 좋기 때문입니다.</span></div> <div> 저는 C를 가지고 밥을 먹고 살고 있습니다만.. 개인적으로 주변 지인들에게는 파이썬을 추천하고 있습니다. </div> <div>적당히 인<span style="font-size: 9pt; line-height: 1.5">터넷을 보면서 만져주다 보면, 상당히 복잡한 프로그램도 금방 만들어 지는게 참 신기하더라구요..</span></div> <div> 다만 한가지 중요한 것이 있는데요.<b><font color="#ff0000"> 어떤 언어를 하던지 하나를 깊숙히 파야 한다는 것</font></b>입니다. </div> <div>이것도 저의 개인적인 <span style="font-size: 9pt; line-height: 1.5">생각일 뿐이지만 저는 중요하다고 생각하므로 아랬쪽에서 조금 더 이야기 해 보겠습니다. :)</span></div> <div><br /></div> <div><b>2. 알고리즘을 모르면 코더, 알고리즘을 알아야 프로그래머라던데요...?</b></div> <div> - ~하면 코더이고 ~할 수 있어야 프로그래머다 라는식의 분류가 나온 것은 상당히 오랜 전통(?)을 지닌 이야기 같은데<span style="font-size: 9pt; line-height: 1.5">요.</span></div> <div><span style="font-size: 9pt; line-height: 1.5"> 개인적으로는 이 무슨 황당한 분류인가 싶습니다 -_-;; </span></div> <div> 저 이야기에서 나오는 알고리즘이 학부에서 배우는 퀵소트, 바이너리 서치 같은 전산학 지식을 의미한다 생각을 하시고 </div> <div>' 님은 알고리즘 할 줄 모르니 코더에요. 알고리즘을 공부하셔야 진짜 프로그래머에요.'라는 식의 이야기를 하시는 경우</div> <div>를 꽤 많이 보았는데요.(심지어 오프라인에서도 저런 이야기를 꽤 많이 들었습니다.) </div> <div> 우선 실무에서 전산학이 반드시 필요하거나, 혹은 전산학만을 이용해서 해결할 수 있는 문제는 그리 많지 않습니다.</div> <div> <font color="#ff0000"><b>프로그래밍에는 여러 분야가 있고, 각 분야에는 각각의 배경지식이 필요하며 알고리즘이라는 </b></font><span style="font-size: 9pt; line-height: 1.5"><font color="#ff0000"><b>것은 그것들 중 한 가지 종류일 뿐 </b></font>이죠.</span></div> <div> 웹을 다루는 프로그래머라면, 웹서버와 브라우져가 어떤 형식으로 데이터를 주고 받는지, 고객이 요구하는 프로세스가 <span style="font-size: 9pt; line-height: 1.5">어떤 것인지를 배우고 익힐 필요가 있을 것이고요.</span></div> <div> 드라이버를 다루는 프로그래머라면, 하드웨어가 어떤 형태의 인터페이스를 갖는지 해당 OS에서 동작하는 드라이버를 작<span style="font-size: 9pt; line-height: 1.5">성하기 위해 어떤 API를 다루어야 하는지. 각 OS의 내부 동작은 어떤식으로 이루어 지는지를 알아야 할 것입니다.</span></div> <div> 펌웨어나 임베디드를 다루는 프로그래머라면, 아키텍쳐의 동작과 커널의 동작구조와 일부 전자공학적인 지식이 필요할 <span style="font-size: 9pt; line-height: 1.5">수도 있습니다.</span></div> <div> 따라서 알고리즘을 모르면 코더 라는 식의 이야기는 '알고리즘이 필요한 분야를 제외한 나머지 분야의 프로그래머들을 모두 한 등급 낮은 기술자로 매도해 버리는 이상한 주장'이라고 할 수 있습니다.</div> <div>그리고 <font color="#0070c0"><b>좋은 형태의 </b></font><b style="color: #0070c0">코드를 만들고 유지하는 것은 매우 중요한 기술</b>입니다!</div> <div>프로그램이 복잡해지고 규모가 커 질수록 이러한 기술의 난이도는 올라가며, 중요도는 점점 더 커집니다.</div> <div><br /></div> <div><b>3. C언어를 마스터 했는데 다음에는 어떤 언어를 공부해야 할까요?</b></div> <div> - 이것도 C언어에 한정해서 상당히 많이 나오는 질문인데요. </div> <div>답변하시는 분들은 'C언어를 마스터 했다'라는 부분에 발끈하셔서 질문자를 공격하는 경우가 상당히 많았습니다. </div> <div>'흥 난 20년쨰 C언어를 해도 아직 마스터를 못했는데'라거나, '지구상에 C언어를 마스터한 사람은 한명도 없을걸요' 라거나 하는 식이죠.</div> <div> 이런 경우 질문자의 의도는 대부분 'C언어 책에 나온 문법을 숙지하고, 사용할 수 있습니다.' 정도의 의미이기 때문에 그리 발끈할 건 없는 내용이라고 봅니다.<span style="font-size: 9pt; line-height: 1.5"> 그것보다 더 중요한 것은, 질문자들이 한 가지 언어의 문법을 숙지했으니 이것보다 조금 더 복잡한 문법을 가지고 있는 다음단계(?)의 언어를 익혀야 할 것이다 라는 생각을 가지고 있다는 점 인데요.</span></div> <div> 대략 5~10년 정도 전 까지만 해도 이 질문에 통용되는 독학용 C언어 테크트리(?) 가 있었습니다.</div> <div><i>'C를 하셨으면 C++ 공부하시고요 WIN32API 학습하신 다음, MFC를 공부하세요. 여기까지 익히신 다음 분야에 따라 DX나 TCP/IP,OPENGL을 공부하세요'</i> 라는 식의 답변이 네이버 지식인이나 관련 까페에 많이 달리던 것이 그리 오래된 일은 아닙니다. </div> <div>조금 다른 바리에이션으로 이런 것도 있습니다.</div> <div><i>'C를 우선 공부하시고 WIN32 API를 공부하시고요. C++을 익혀서 객체지향을 공부하신 다음 MFC/ATL로 넘어가세요.'</i></div> <div>윈도우에서 GUI를 구현하기 위한 거의 유일한 방법이 MFC였을 때의 이야기 입니다.</div> <div> C#이 등장하고 MFC가 사장되다시피 한 지금에 와서는 말도 안 되는 이야기라 할 수 있지만 말이죠.</div> <div> 저는 첫번째 테크트리(?)를 끝까지 다 타버려서..(망테크를 탔...) ㄱ- 프로그래밍을 공부한 케이스 인데요. 지금은 MFC를 대신할 수많은 라이브러리들이 나왔고, 저 역시 윈도우와는 거리가 먼 환경에서 일을 하는 관계로 MFC를 사용할 일은 없지만, 아니 게다가 루아나 파이썬 같은 스크립트언어가 GUI를 워낙 강력하게 지원하기 때문에 더욱 그렇지만요.<span style="font-size: 9pt; line-height: 1.5"> </span></div> <div> 잡설이 너무 길어졌는데요. 이 질문에 대한 제 의견은 이렇습니다</div> <div> <b><font color="#0070c0">'하나의 언어를 정하고 그것을 깊숙히 공부하세요.'</font></b></div> <div> 한 언어의 문법을 어려움 없이 다루게 되었다면, 여러가지 라이브러리의 활용법을 익히거나, 어떠한 로직을 이해하고 구현해 본다거나 하는 강력한 기능을 활용하고, 작성할 수 있는 외공을 연마할 수 있을 것이고요. </div> <div> 디버깅 기법을 연마한다거나, 버그에 강한 내성(?)을 가진 코드를 연습한다거나(있어요.. 진짜로) 확장성을 가지는 코드의 구조를 고민한다거나, 에러의 활용이나, 모듈화 습관을 강화한다거나 하는 형식의 더 크고 견고한 프로그램을 작성하기위한 발판이 되는 내공을 연마할 수 있습니다.</div> <div> 쉽게 요약을 하자면, 언어를 이해하고 어려움 없이 다루게 되는 것은 게임에서의 룰을 이해한 것과 같고요.</div> <div>게임의 룰을 이해한 지금 시점부터는 그것을 이용한 <font color="#ff0000"><b>다양한 전략과 전술을 연마하기 위한 지속적인 반복 연습과 연구</b></font>를 시작해야 한다는 것이죠.</div> <div><br /></div> <div>많은 주제를 다루고 싶었는데, 글이 너무 길어져서 -_-;; 일단 세 가지로 마무리를 해 볼까 합니다.</div> <div>재미없고 긴 글을 읽어주셔서 감사합니다.</div></div>