c++/c# 진로상담 이랑 몇몇 궁금증 질문드립니다^^

fauss의 이미지

안녕하세요 입문자입니다. c랑 자바 기본서 본상태입니다.

자바웹쪽보다 c계열 언어를 하고싶은데요

관심있는 쪽은 응용프로그램, hmi?같은 공장기계 자동제어 프로그램, 임베디드/로봇제어(이쪽은 전기전자 분야 공부가 필요하고 혼자공부할때 실습도 어려워 포기입니다.) 같은 쪽입니다.

1. c++로 연산이 많이 필요한부분을 만들고 c#으로 그 이외의 나머지 프로그램부분과 ui를 만든다고 하는걸 봤는데요

이게 비주얼스튜디오에서 c++로 코드를 만들고 이걸 c#코드와 결합시킨다는의미인가요?

그래서 하나의 프로그램이 c++와 c# 이 섞여서 만들어질수 있다는 것인지.

저런 결합이 어떻게 이루어지는지 개념좀 설명부탁드립니다..

2. c++/c# 으로 프로그램을 위와같이 만든다면 c++ ui만들때 필요한 mfc, c ui만들때 필요한 win32 api는 공부안해도 되나요?

3. c++/c# 프로그래머도 네트워크를 알아야하죠? c나 c++은 열혈강의 기본서 기준으로 네트워크랑 DB연동도 안나와있고 c#기본서는 조금이나마 나와있던데요. 열혈 tcp/ip 기본서 보면 충분한가요?

4. c#/c++ 이용한 프로그래머의 길을 간다고 할때 공부과정, 취업시 제시할때 좋은 포트폴리오 종류랑 c#/c++이용해서 할수있는 분야/영역 들 소개좀 부탁드립니다.

5. 오라클 사이트에서 기사를 봤는데 어떤 외국회사는 순수 자바로 무인자동차에 들어가는 프로그램을 만들고
http://www.oracle.com/kr/corporate/features/java-perrone-robotics/index.html
제임스 고슬링도 해양 드론에 들어가는 프로그램을 자바로 만들고 있다고 봤는데요.
http://www.imaso.co.kr/?p=7419

한국에서는 자바는 jsp랑 스프링 이용해서 웹프로그램만 하는 것 같던데 해외는 자바로 저런 프로그램들을 많이 만드는지 궁금합니다.

저런 프로그램이 자바로 어떻게 만들어지고 동작하는지 개괄적으로 설명해주실수 있나요? 예를들어 자바로 코드를 짜고 javaFx로 ui를 만들고 리눅스나 윈도우에 올리고 네트워크는 어떤식으로 연결해서 기계를 제어하는지.

제임스고슬링이 저런 로봇제어 프로그램을 만든다는 것은 c c++ 자바같은 프로그래밍 언어 이외에 임베디드 전자전기 지식도 있다는 것인가요?

allinux의 이미지

1. 닷넷에서 dll등 언메니지드 코드를 호출 할 수 있습니다.
즉 c++로 dll을 만들고 c#에서 dll의 펑션을 호출 할 수 있습니다.

2. 윈도우 메세지처리등 기본적인 윈도우 시스템 프로그래밍은 익혀야합니다.

3. 네트워크 관련 프로그래밍도 범위가 큽니다. 기본서를 읽고 해당 분야의 심화서적을 읽을 필요가 있습니다.

4. usermode 상의 프로그램이라면 c++없이 c#만으로 개발이 가능합니다.
c++이 필요한 경우라면 cpu 바운드가 큰 작업입니다. 예를들면 수치연산, 이미지처리 등입니다.
그런 작업인 경우 cpu 바운드가 큰 작업은 c++으로 하고 나머지는 c#으로 처리해서 성능과 생산성을 모두 충족시킬 수 있습니다.
또한 c++ 로 kernelmode 개발이 가능하므로 c/c++로 드라이버를 만들고 c#으로 프론트엔드를 만들수도 있겠습니다.

5. 아시다시피 안드로이드OS에는 달빅 jvm이 설치되어 있고 그 기반하에 app이 실행됩니다.
안드로이드 앱도 휴대폰의 카메라, 센서등을 제어하고 있습니다.
JVM은 이미 많은 임베디드 장비에서 동작하고 있으므로 순수 자바로 장비제어 프로그램을 만드는 일은 어렵지 않은 일입니다.
물론 내부적으로는 JAVA <-> NATIVE LAYER <-> OS 와 같이 논리적으로 되어 있기에 가능한겁니다. NATIVE LAYER 는 보통 C/C++로 작업(JNI)하게 되고 OS의 드라이버등과 통신하게 됩니다.

결국 순수 자바만으로 무인자동차를 제어하는 것은 불가능한것이고 이미 위에 언급한대로 NATIVE LAYER <-> OS(하드웨어) 이런 플랫폼이 존재하는 상태에서 자바만으로 개발이 가능하다는 의미입니다.

전기, 전자 지식이 없어도 임베디드 프로그래밍은 가능합니다.
이미 저렴하게 학습을 할 수 있는 아두이노등의 보드가 많이 나와 있고 관련서들도 많이 출판되어 있습니다.
또한 임베디드 영역에서 전기, 전자의 하드웨어 영역과 펌웨어의 영역은 구분되어 있기 때문에 펌웨어를 개발하는 엔지니어가 하드웨어 설계, 제작까지 하는 경우는 많지 않습니다.(물론 스타트업이나 영세한 업체는 그러기도 합니다.)

fauss의 이미지

댓글확인을 늦게했네요

세벌의 이미지

자바웹쪽보다 c계열 언어를 하고싶은데요 라고 하셨네요?
실제 일 하다 보면 이것도 하고, 저것도 하는 경우가 많습니다.
참고하셔요.