예의가 없다고 할까요? 주류(?)에 속한다고 믿는 분들이 가끔(솔직히 매우 자주) 다른 프로그램 언어를 자신들의 기준으로 보려 합니다. 게임하면 수학하라는 소리와 함께 개인적으로 정말 싫은 얘기죠. <div><br></div> <div>예를 들어 보겠습니다.</div> <div><br></div> <div><a target="_blank" href="https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)" target="_blank">https://ko.wikipedia.org/wiki/자바_(프로그래밍_언어)</a></div> <div><p style="margin:.5em 0px;line-height:inherit;color:#252525;font-family:sans-serif;font-size:14px;">자바 언어는 다음 5가지의 핵심 목표를 지니고 있다.<sup class="noprint" style="line-height:1em;">[<a target="_blank" href="https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EC%B6%9C%EC%B2%98_%EB%B0%9D%ED%9E%88%EA%B8%B0" title="위키백과:출처 밝히기" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank"><span title="2007년 1월 24일에 출처가 요청되었습니다.">출처 필요</span></a>]</sup></p> <ol style="margin:.3em 0px 0px 3.2em;padding:0px;list-style-image:none;color:#252525;font-family:sans-serif;font-size:14px;"><li style="margin-bottom:.1em;"><a target="_blank" href="https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5" title="객체 지향" class="mw-redirect" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank">객체 지향</a> 방법론을 사용해야 한다.</li> <li style="margin-bottom:.1em;">같은 프로그램(<a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8%EC%BD%94%EB%93%9C" title="바이트코드" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank">바이트코드</a>)이 여러 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C" title="운영 체제" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank">운영 체제</a>(<a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C" title="마이크로프로세서" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank">마이크로프로세서</a>)에서 실행될 수 있어야 한다.</li> <li style="margin-bottom:.1em;">컴퓨터 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC" title="네트워크" class="mw-disambig" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank">네트워크</a> 접근 기능이 기본으로 탑재되어 있어야 한다.</li> <li style="margin-bottom:.1em;">원격 코드를 안전하게 실행할 수 있어야 한다.</li> <li style="margin-bottom:.1em;">다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.</li></ol><div><font color="#252525" face="sans-serif"><span style="font-size:14px;"><br></span></font></div></div> <div><a target="_blank" href="https://en.wikipedia.org/wiki/Java_(programming_language)" target="_blank">https://en.wikipedia.org/wiki/Java_(programming_language)</a></div> <div><h3 style="background-image:none;margin:.3em 0px 0px;overflow:hidden;padding-top:.5em;padding-bottom:0px;border-bottom-style:none;font-size:1.2em;line-height:1.6;font-family:sans-serif;"><span class="mw-headline">Principles</span></h3> <p style="margin:.5em 0px;line-height:inherit;color:#252525;font-family:sans-serif;font-size:14px;">There were five primary goals in the creation of the Java language:<sup class="reference" style="line-height:1;white-space:nowrap;font-size:11px;"><a target="_blank" href="https://en.wikipedia.org/wiki/Java_(programming_language)#cite_note-design_goals-15" style="text-decoration:none;color:#0b0080;background-image:none;" target="_blank">[15]</a></sup></p> <ol style="margin:.3em 0px 0px 3.2em;padding:0px;list-style-image:none;color:#252525;font-family:sans-serif;font-size:14px;"><li style="margin-bottom:.1em;">It must be "simple, object-oriented, and familiar".</li> <li style="margin-bottom:.1em;">It must be "robust and secure".</li> <li style="margin-bottom:.1em;">It must be "architecture-neutral and portable".</li> <li style="margin-bottom:.1em;">It must execute with "high performance".</li> <li style="margin-bottom:.1em;">It must be "interpreted, threaded, and dynamic".</li></ol><div><font color="#252525" face="sans-serif"><span style="font-size:14px;"><br></span></font></div></div> <div><br></div> <div>둘을 비교해 보면 알겠지만, 영어와 한국어가 다릅니다. 자바를 제대로 공부한 사람이라면 한국어 위키가 틀렸다는 거 알겁니다. 저런 거 비일비재합니다. 하지만, 제대로 할려는 순간 자바가 주 언어가 아닌 분들이 와서 막 뭐라 할 겁니다. 말이 안 통해요. 그렇게 볼 수 있다.. 이 말로 모든 게 끝입니다. 모든 건 주소다, 포인터가 주소 아닌가요? 어디서 많이 듣던 내용과 비슷하면서도 조금 다르죠. 이거 어셈하던 후배가 c 보지 말고 어셈하라면서 한 말입니다. 25년전쯤 된 걸로 기억하네요.</div> <div><br></div> <div>자바는 하이레벨 언어입니다. 객체지향 언어죠. 이런 언어에 포인터 자료구조 들이미는 건 자바를 c처럼 공부하라는 겁니다. 첫번째 원칙에 객체지향이 나옵니다. 객체지향 원칙 중에 encapsulation이 있습니다. 알 필요없는 건 알 필요 없게 하는것. 객체지향 프로그래머의 원칙입니다. 유닉스 커널 만지고 하는 분들하고 객체 지향 하는 분들은 다른 패러다임에 존재합니다. 어느 쪽이 위고 아래고가 아니고 그냥 분야가 다릅니다.</div> <div><br></div> <div><a target="_blank" href="https://see.stanford.edu/Course/CS107/203" target="_blank">https://see.stanford.edu/Course/CS107/203</a></div> <div>이런 링크 다는 거 별로 안 좋아하는데, 제가 말한다면 듣지도 않을 거니 달아 드립니다. </div> <h1 class="page-title" style="font-size:21px;margin:0px;font-family:'Source Sans Pro', sans-serif;font-weight:400;line-height:1.2;color:#8c1515;width:792px;">CS107 - Programming Paradigms</h1> <div><br></div> <div>프로그램 언어마다 철학 패러다임이 다르고, 그렇기 때문에 공부하는 방법이 달라야 합니다. 공부하는 과목도 달라야 정상이고, 웹 프로그래머와 시스템 프로그래머의 기본은 달라야 정상입니다. 게임 프로그래머와 시스템 프로그래머의 기본은 달라야 맞습니다. </div> <div><br></div> <div>같은 얘기가 계속 나오는 이유는, 모든 생각을 학교에서 배웠던 걸 기준으로 말하는 분들이 많아서인 것 같습니다. 한국 대학교 컴공은 특히 잘 나간다는 대학 컴공은 웹과 게임을 기본으로 하는 곳이 제가 알기론 없습니다. 그런 걸 기본으로 생각하지도 않고, 그런 곳에 있는 분들이 웹과 게임쪽 일하는 것도 이상한 일이죠. 하지만, 미국처럼 시스템 자체를 건드니는 곳이 거의 없는(건드리고 욕 먹던 회사 말고는 기억이 안 납니다) 한국에서는 그런 나름 배운 분들이 웹과 게임까지 건드리다보니 이런 왜곡 현상이 생기는 거 아닐까 하는 생각이 듭니다.</div> <div><br></div> <div>그러니까, 좋은 대학에 4년제 웹 전문과, 4년제 게임 전문과가 생기면 어느 정도 해소가 될 듯도 한데.. 그럴리가 없죠. 결론은 교육이 엉망입니다.. 끝.</div>