C# 생산성에 대한 질문

C++ 대비 C#에서 개발을 빠르게 하는 대표적인 특징들에는 어떤 게 있나요?
대강은 알지만 고수분들의 안목이 필요합니다.

7개의 좋아요

정확히 말하자면, 가장 애용하고 있는 생산적인 특징이 무엇인지 궁금해서 그럽니다.
LINQ일수도 있고, 프로젝트 참조 지원이 잘된다는 것 일수도 있고, GUI 지원이 잘 된다는 것일수도, dynamic 일수도 있지만 뭘 가장 우선적으로 생각해야할지 궁금합니다.

5개의 좋아요

가비지 컬렉터를 쓸 수 있다는것, 그리고 LINQ가 아닐까 생각합니다. ㅎㅎ

6개의 좋아요

LINQ와 MVC 레이저 덕분에 개발이 편합니다.

5개의 좋아요

많은 기본 기능 제공이 한 몫하죠!

쓰레드 구현 개꿀!
병렬 프로그래밍 개꿀!
오? 이제 Iterator 안써도 되네? 개꿀!
메모리 할당, 해지 안해도 되어서 메모리 누수 걱정을 덜 해도 된다고? 개꿀!
소켓통신? 개꿀!
UI? WinForms, WPF 개꿀!
콘솔? C#을 사용하면 글짜색도 한줄이면 바꿀 수 있네?!? 개꿀!
DB접근? 개꿀!
누겟 패키지 개꿀!

이여서 C# 사용합니다ㅋㅋ

8개의 좋아요

좀 다른 얘기지만 생산성이란 게 무슨 의미가 있나 싶어요
웹페이지, RAD툴 폼 막 찍어내던 시절에나 의미 있지
10줄짜리 한 줄로 써서 다른 이점 포기하고 생산성이 좋으면 과연 좋은 건가?
당연한 얘기지만 가장 익숙한 언어가 생산성이 좋겠죠
네이티브 언어 쓰다 GC 쓰면 첨엔 편한데 최적화에서 오히려 불편하고 답답하던데요

7개의 좋아요

10줄짜리를 한 줄로 쓰면
9줄 마저 고민 할 시간에 커피를 한잔 더 마실수 있지 않을까요? ㅎㅎㅎ;;
스트레스를 덜 받는다 라고 적당히 봐주시면 될 것 같습니다.

아무래도 최적화가 필요한 분야에서 작업하시다 보니 갑갑하다고 느끼신게 아닐까 제 짧은 식견에 추측을 해보았는데,
막상 또 그렇게 치명적인 분야가 아닐 경우에는 경우가 다르지 않을까 싶습니다.

//
본 주제와 연관 지어서 생각하자면
치명적일 수도 있는 부분에 대해 안전함을 보장해줘서
특정 기능을 구현할 때 어렵게 생각할 부분을 어느 정도 생략하고 진행해도
최저점은 보장해준다 가 아닐까 생각됩니다.

4개의 좋아요

대학생 때 c언어 잠깐 만져보고 취업하고서는 c#만 하다 이제 c++을 공부하고 있는데 라이브러리 참조부터 뭔가 아 하는 느낌이더라구요. c#에선 nuget 패키지 찾아서 설치하든 dll 참조해서 p/invoke 하면 되는데 c++은 디렉토리를 따로 지정하고 또 뭐하고…

비주얼 스튜디오의 인텔리센스도 차이가 좀 있구요.

언어 자체의 기능도 물론 차이점이 크지만 c++로 꽤 깊이까지 들어가진 않아서 그런지 언어 외적인 지원에서 느끼는 차이점이 꽤 컸던 것 같아요 저는

7개의 좋아요

프로젝트 성격에 따른 차이도 큰 거 같아요
저는 실시간 고속 연산 및 바이너리 데이터 취급해서 C++외 다른 언어는 힘들어요
Rust 오너쉽은 코드양은 더 많고 꼭 이렇게까지 해야 돼? (익숙하지 않은 탓도 있지만…)
대부분 코드 복붙하고 직접 생각하며 코드 타이핑 할 때는 1줄이나 10줄이나 차이 없을 것 같고요

6개의 좋아요

저는 생산성을 2가지 측면에서 보고 있습니다.

  1. 제품을 처음 개발할 당시의 생산성
  2. 유지보수의 생산성

사실 2가지 모두 같은 맥락입니다.
하지만 굳이 2가지로 나눈 이유는 Expert Beginner의 존재 때문인데요.

1번의 경우 C#의 여러가지 장점이 있습니다.
초보자가 개발을 처음 배울때 굳이 개발자가 되지 않더라도 자신 업무의 자동화를 달성할 수 있는 경우입니다.
cpp에 비해 비교적 문법이 어렵지 않은 것도 한몫할 것입니다.
또한 GC의 존재도 있습니다.
초보적인 수준으로 덕지덕지 기워 만든다고 가정했을때 cpp보다 c#이 더 빠르게 만들 수 있습니다.

많은 개발자들이 여기에서 그치는 경우가 많이 있습니다.
사실상 거기서 멈춰도 상관은 없습니다.
C#은 객체지향을 100% 지원하는 것이지 객체지향만 가능한 것은 아니기 때문입니다.
많은 사람들이 C#을 절차지향으로 개발했다고 타인의 코드를 비하하는 이유가 여기 있다고 생각합니다.
하지만 코드의 완성도라는 것은 추상화에는 끝이 없기 때문에 비효율적인 코드는 있으나 확실한 오답은 없다고 생각합니다.

그러나, 경향을 보면 많은 고급 개발자들의 코드가 추상화라는 이념으로 통일되고 있는 것을, 우리는 개발하면서 보고 배우고 느낍니다.
그리고 그렇게 점점 코드를 바꿔갈 때 단순한 for, if 문이 아닌 여러 추상화 문법을 도입하면 나와 함께 소스코드를 유지보수하는 나와 내 동료들의 시간을 줄여 줄 수 있다는 결론에 도달하게 됩니다.

여기서 2번인 유지보수로서의 생산성이 보여진다고 생각합니다.
객체지향을 하면 SOLID 이론을 처음 접하는 것이 감히 일반적이라고 말할 수 있습니다.
여기서 더욱 파생되는 것들이 우리가 아는 MVC, MVP, MVVM, MVU 등의 아키텍쳐 패턴이라고 생각합니다.
위 패턴들에서 M이 의미하는 모델이란 객체지향 원칙에서 자기 할 일을 책임을 갖고 능동적으로 처리할 수 있는 개체이기 때문입니다.
객체를 추상화해서 클래스로 정의하고 클래스의 코드를 재사용하는 방향이 효율적이라고 생각합니다.
클래스를 설계할 때의 여러 문법과 제약조건들이 명시적으로 개발할 수 있게끔 하는 것 같습니다.
또한 delegate로 부터 파생되는 함수형 문법을 부분부분 적용하여 동작을 추상화할 수 있는 부분도 강력하다고 생각합니다.


하나 짚고 갈 것은 위에 말한 모든 것이 cpp나 java나 python, ruby, go, js 같은 언어들에서 결코 안되는 것은 아닙니다.
다만 언어의 방향이 1번과 2번 그 어딘가에서 가중치를 두고 왔다갔다 하며 선택의 문제라고 생각합니다.

7개의 좋아요

c++,c언어랑은 궤는 같지만 생산성을 논하기에는 다른 세대인것 같습니다.
제가 보기엔 c#은 생산성 보다 유지보수에 중점을 더둔 언어 같아서요
그리고 팀단위 개발로 단위 개발이 용이하다는 장점이 있는것 같습니다.
근데 ef scafolding 같은것 때문에 db crud 는 압도적으로 훌륭하죠

5개의 좋아요

잘 아는 분야는 아니지만…
VisualStudio를 이용해서 C++로 된 프로젝트 컴파일하면… 5분정도 걸리는 거 같아요 ㅋㅋㅋ
너무 생산성이 떨어집니다!!! 빌드 시켜놓고 화장실 후딱 다녀와도 아직도 빌드 중일 때도 있는… :rofl:

3개의 좋아요

템플릿 빌드 타임이 극악으로 느린 게 단점이죠
10만 라인 넘는 프로젝트 풀빌드 해도 1분 좀 더 걸립니다.
precompiled header 쓰면 일반적으로 몇 초 내로 끝납니다.
라이브러리로 쪼개거나 하면 빌드타임은 별 문제가 안 돼요

3개의 좋아요

모두 한 곳에서 만난다… 이지 않을까 싶습니다.

C# 의 강점은 풍부한 프레임워크에 있는데, 대부분 비슷비슷한 개념의 객체와 구조를 바탕으로 하기에, 하나만 제대로 익히면 나머지 프레임워크에 적응하는게 크게 어렵지는 않은 것 같습니다.

Action 를 요구하는 빌더 패턴으로 된 설정 메서드들.
이벤트와 이벤트 핸들러
비슷비슷한 사용자 구현부를 제공하는 추상 객체들
어디서나 동일한 비동기 호출
편리하고 안정적인 개발환경
편리한 패키지 사용 등

4개의 좋아요