<div>" 저기 C# 이 좋을까요 C / C++ 이 좋을까요 자바가 좋을까요. 좋은책 추천점"</div> <div> </div> <div>이런 질문 하는 분들 정말 많습니다. </div> <div> </div> <div><font size="6">아오 빡처. 학원 쎔님들 제발 재대로 가르치라고!!!</font></div> <div> </div> <div>그냥 니들은 프로그래머 하지마! 그냥 프로 게이머 해!</div> <div> </div> <div>잠시 빡첬네요... 워낙 학원이 개판이라서... 하기야 학원 강사들도 그냥 문법만 아는 사람들 가지고 문법만 가르치니까요...</div> <div> </div> <div><font size="6">그냥 C(알고리즘) C++(객체지향) 만 죽어라 하세요.</font></div> <div><font size="6">눈만 뜨면 줄줄줄 입에 나올정도로 존나게 하는거임</font></div> <div><font size="6"> </font></div> <div> </div> <div>- 컴공에서는 어셈블리를 저급언어 C 를 고급언어로 가르칩니다. 근데 요즘은 하도 분야가 발달해서 </div> <div> C / C++은 중급언어로 C# 과 JAVA등은 고급언어로 분류해야 합니다.</div> <div> </div> <div>- 물론 학원이나 학과에서 가르처주는 유니티 C#( 실제 C# 인 netframework 와는 다릅니다. 유니티 c#은 net.3.5 버전을 유니티에 맞게 </div> <div> 살짝 커스터마이징 된 언어지요)만 가지고도 게임 프로그래밍 하는데 불편은 없습니다.</div> <div> </div> <div> - 유니티는 언리얼과는 달리 스크립팅 기반의 엔진입니다. 언리얼은 C++베이스라 고급 코어는 직접 구현하거나 변경해야 하는 진짜 프로그래밍 영역이 있다면 유니티는 그냥 문법만 대충 알아도 문제 없이 돌아가는 스크립트를 기반으로 하고 있습니다. 당연히 안정성이나 범용성, 사용성등은</div> <div> 유니티가 월등히 좋죠. 최근 언리얼은 언리얼 스크립트(유니티의 C# 과 비슷한)를 버리고 블루 프린트로 대체한 이유도 스크립트 엔진의</div> <div> 낮은 퍼포먼스를 극복하려는 시도입니다.</div> <div> </div> <div> 암튼, 자바나 씨샵같은 고급언어는 C /C++에서 나타난 여러가지 문제를 보완하여 생산성을 향상시키려는 의도로 만들어 졌습니다.</div> <div> 건설회사로 치면 C++로 건물을 만들려고 회사에 들어갔더니 이론이나 자료, 거푸집같은 재료는 풍부한데 일단 레미콘하고 포크레인을 만들어야 하는</div> <div> 상황인 겁니다. 신입이 일일이 다 만들고 이해하고 관리하면서 쓰기에는 생산성이 낮았고 진입장벽이 너무 컸던 것이죠.지금도 C++ 은 생산성이</div> <div> 낮아서 고급 프로그래머나 쓰는 언어가 되어가고 있습니다. (유니티도 내부 코어는 전부 C++로 빌드되었음).</div> <div>그래서 C#은 공통적인 건설장비인 레미콘이나 포크레인같은 것을 표준으로 삼아 지원을 해줍니다. 표준 지원을 해주니 C++ 처럼 일일이 프로그래머가</div> <div>관리를 할 필요가 없어 남는 시간에 컨텐츠 구현에 집중할 수 있습니다.</div> <div> </div> <div> 여기서 사족은 이런 멀티 플렛폼 빌드( 코드가 실행되는 장치에 의존하지 않는 컴파일 방식, C++은 심하게 의존적이라 C++자체는 환경이 다른</div> <div> 안드로이드나 IOS같은 플렛폼에서는 실행 불가)를 실현한 JAVA 가 각광을 받자 마이크로소프트에서 그 대응책으로 자바의 느린 실행속도를 보완하고</div> <div> 지원환경을 표준화하여 만든게 C# 되겠습니다. 따라서 JAVA 나 C# 이나 생산성 향상이라는 설계 목적이 같은 언어이고 유니티에서도 이 두가지 언어를 동시에 지원합니다. 필자도 C++ 로 만든 겜브리오 엔진쓰면서 진짜 힘들고 진도가 안 나가는 일을 경험했기때문에 이러한 고급언어의 등장은</div> <div>매우 반갑습니다. </div> <div> </div> <div>따라서 C / C++을 알면 JAVA나 C#도 자연히 내부 구조에 대해 알 수 있습니다. C#에서 편리하게 할 수 있는 언어적 기능은 이미 C++ 에서 개 고생</div> <div>하면서 만들었던 기능이니까요.</div> <div> </div> <div>- 이렇게 중급언어를 마스터하면서 C#과 같은 고급 언어의 오버헤드에 대해서 알게되고 이는 결국 코딩의 질을 결정하게 됩니다.</div> <div> 학원에서 C#만 배워서 온 신입은 너저분한 코드와 낮은 퍼포먼스, 가독성등의 여러 문제를 가지고 있으며 결정적으로 문제해결 능력에서</div> <div> 큰 차이를 보입니다.</div> <div> </div> <div> 특히 메모리 관련해서 많은 차이가 나는데 C++시절의 포인터를 오랫동안 사용한 프로그래머는 C# 의 모든 참조변수가 스마트포인터의 개념을</div> <div> 가지고 있다는 것을 알수 있습니다. 이는 메모리의 사용법에 대한 올바른 이해와 C#의 Boxing 과 unboxing 같은 개념을 알고 효율적인 </div> <div> 선택을 할 수 있다는 것이지요. C시절부터 String을 다뤄본 프로그래머는 C#의 String 이 얼마나 비효율적인지 Stringbuilder 를 왜 사용해야</div> <div>하는지 알고 선택하고 활용할 수 있습니다.</div> <div> </div> <div> 하지만 C# 만 배운 프로그래머는 이런거 전혀 모릅니다. 엄청난 오버헤드가 왜 발생하는지, 퍼포먼스가 뭔지도 모릅니다. 기본에 대한</div> <div>이해가 없으니 단편적인 지식만 암기하게 됩니다. 또한 객체지향이라는 개념이 왜 나오게 되었는지 모르기 때문에 활용을 못합니다.</div> <div> 활용을 못하면 결국 단순한 업무 뿐이 못하고 얼마 되지 않아 도태되겠죠.</div> <div> </div> <div>- 결론적으로 중급언어를 마스터 하시고 나서 JAVA 와 같은 고급언어를 배우는게 훨씬 당신의 인생에 도움이 됩니다. </div> <div> 요즘은 책도 매우 좋고 번역도 잘된 작품이 많아서 조금만 의지가 있다면 배우는게 어렵지 않습니다.</div> <div> </div> <div> - 끝으로 좋은 책 추천해 달라는분, 공부못하는 사람이 꼭 참고서만 까다롭게 굽니다. 그냥 책방에 가서 가장 최근꺼 아무거나 하나 사서</div> <div> 머릿속에 다 넣고 나서 또 아무거나 사서 머릿속에 넣으세요. 엄청 힘들고 고된 작업이지만 그만큼 당신의 실력이 늘어날 것이고</div> <div>그것은 면접에서 파워로 이어집니다. </div> <div> </div> <div> - C# 만 아는 신입은 부려먹고 싶지만 C++에 대해 해박한 신입은 키우고 싶습니다. </div> <div> </div> <div> </div>