IT새 글

개발자를 희망하는 학생입니다

fDbef명 읽음5개 덧글
PHP(웹은 아주 모르고 CLI/백엔드?로서)로 프로그래밍 공부 시작해서, Python도 나름 열심히 공부하고 Rust 배우려다가 이건 영 아닌거같아서 Go 배우고 있습니다.

아무래도 주변에서 Java/C는 꼭 배우라고 하는 사람이 적지는 않던데, Java는 생산성이랄지 범용성 때문에 (싫지만) 배워야 하겠다는 생각도 들고 납득이 가는데, C를 꼭 배워야 하는지는 잘 모르겠습니다. 임베디드쪽으로 나갈 생각은 없는데, C를 공부해야 할까요?

자료구조/알고리즘 때문이라면 어쩔 수 없지만, Go로도 비슷하게 구현이 가능할 거 같기도 하고... 포인터 연산이 안 되니 제한이 크려나요.
http://ilwar.com/it/224037
Java는 현업에서 많이 쓰이지요 서버,안드로이드..

C 의경우 다양한 산업전반에 걸쳐 사용됩니다. 저희회사의 경우 PC,모바일,임베디드프로세서 에서 같이사용할 공통 모듈을 설계할때 많이씁니다. 또 성능이 중요하기도 했구요

결국 루비,php,파이썬,java,C#,go 등등 다양한 언어를 사용하다가도 성능이슈가 큰부분은 C로 재개발한 뒤 다양한방법으로 (java의경우 jni로 C#은 dll 마샬링 등등) 붙여서사용합니다. 물론 설계상의 결함때문에 느리거나 간단한 최적화를 통해 혹은 알고리즘적인 부분을 보완하면서 성능을 높이는게 좋은경우가 많습니다. 다만 어쩔 수 없는 경우가 있어서..

이것 외에도 그동안 c를 통해 성능 좋은 라이브러리가 많이 만들어졋기 때문에 (크로스플랫폼 ui,다양한게임엔진,비디오코덱,영상처리,수학연산,........) 사용하는걍우도 많습니다. 이야기 하신 go언어에서도 다양한 라이브러리를 보시면 c/c++ 라이브러리를 바인딩한 경우가 다수 있습니다.

Rust의 경우 go에비해 인지도가 낮은편이지만. 메모리 오류,누수를 방지하기 위한 설계방식이라던지 여러가지로 좋은 언어입니다. 포스트 C++로 회자되고 있는 언어기에 배우는 것이 나쁘다고 볼 수 없습니다.
오히려 약간 마이너한 언어를 배우는 것이 개발능력 향상에 도움이 되기도 하구요(웃음.)

참고로 Go에서도 unsafe 기능 쓰면 포인터 연산이가능합니다.

감사합니다 ^^ 그런데 Go가 C에 비해서 성능 손해가 적잖은 편인가요?
Go의 현재 성능은 Java 와 비슷한정도로 알고 있습니다. Java와 비슷해도 메모리는 적게들죠..
아무래도 Go가 컴파일되는 언어다 보니 C/C++ 과 비교가 되는데 잘최적화된 C/C++ 라이브러리는 이기기 힘듭니다.

또 C/C++ 계열 컴파일러는 오랜시간동안 최적화되어왔구요. Go의 장점은 "적당히 빠른성능 + 빠른컴파일속도 + 가비지콜렉터 + 스크립트언어같은  쉬운 문법 + 고루틴" 으로 봐야지요. 대체로 GC(가비지콜렉터) 가 있는경우 메모리를 많이 잡아먹고 성능이 빠른 컴파일계열 언어들은 컴파일 속도가느리고. 배우기 쉬운 스크립트언어 계열은 느립니다(상대적으로) 

다만 Go언어도 이제 1.5까지 왔고 버전업중이기 때문에 성능이 빠르게 좋아지고 있습니다.
최근까지는 GC성능을 끌어올리는데 주력한걸로알고있습니다.

결론은 : Go의 목표는 C와 동급 혹은 비슷한 성능이지만 아직은 아니다. 하지만 충분히 쓸만한 성능을 내고있고 필요한경우 C라이브러리를 바인딩해서 쓰면 될듯하다.
손에 익은 랭귀지로 일단 알고리즘이나 자료구조를 먼저 공부하시면 됩니다. 어느 분야 개발을 생각하시는지는 모르겠지만, 언어는 그냥 도구일뿐입니다..
언어도 대체로 쓰던 사람들이 만드는거라 기본을 탄탄히 갖추면 완전히 새로운 개념으로 창조된게 아니면 익히는데 큰 어려움이 없을겁니다.
운영 후원하기