C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[11738] 닷넷과 네이티브의 생산성에 대한 생각...
박지훈.임프 [cbuilder] 2555 읽음    2006-05-09 12:02
방금 델마당 자유게시판에 델파이와 C# 중에서 어느쪽이 생산성이 높을까, 라는 글이 올라와서 댓글을 썼는데...
제 개인의 의견입니다만, 우리 포럼 분들께도 소개하고 싶어서 다시 퍼올립니다. 웃샤~

遠野 님이 올리신 글-----------------------
> 둘다 쓰고 있는데.. .net 플랫폼을 사용해도 전혀 문제가 없는상황이라면...
>
> Delphi-Win32 를 쓰는것과 C#.net 을 쓰는것중 어떤쪽이 생산성이 좋다고 생각되시나요?
>
> 델마당 여러분들의 의견을 듣고싶습니다


제 생각으로는... 생산성만 따지면 당연히 C#이 낫다고 생각합니다.
그리고 C#보다는 자바가 낫다고 생각하고요.

생산성은 해당 언어나 환경에서 지원하는 편의 기능이 얼마나 많으냐보다는 얼마나 개발자를 제한하느냐에 많이 좌우된다고 봅니다. 생산성을 극대화하자면 개별 개발자가 권장되고 일반적이고 예상되는 기법만 사용해서 개발하는 것이 좋지요.

델파이나 C#이나 편의 기능은 거의 비슷하다고 생각하지만, 닷넷 환경에서는 포인터처럼 여러가지 저수준 접근을 제한하고 있지요. 이런 저수준 접근의 가능성은 개별 개발자의 자유도를 높여줍니다. 이게 개발자 개인의 입장에서는 좋은 일이겠지만, 프로젝트 전체를 보면 일정 준수에 마이너스가 될 여지가 많습니다.

예를 들어 포인터를 잘 이용하면 멋지게 성능을 높일 수 있지만 대신 버그의 가능성은 그만큼 더 높아집니다. 딱 거기서 버그가 발생한 경우가 아니라도 일반적으로 저수준 접근은 코드가 더 길어지는 경향이 있으므로 리뷰해야 할 코드의 양도 더 많아지고요.

자바와 닷넷이 저수준 접근을 제한한 이유도 바로 이것입니다.
저수준 접근을 제한해서 개발자의 자유도를 제한하는 만큼 생산성이 더 높아집니다.

가비지 컬렉션 같은 기능은 개발자에게 메모리 리크의 걱정을 없애주므로 생산성 면에서는 좋지만,
개발자가 스스로 적절한 메모리 관리를 했을 때만큼 성능이 높아질 수는 없습니다.

업무 개발에서 디자인 패턴이 환영받는 것도 같은 이유로 볼 수 있습니다.
검증된 패턴을 이용해서 코딩하면 당장 코딩할 때의 생산성도 높아지고, 제3자가 코드를 보더라도 해당 부분의 버그 가능성을 금방 판단하고 넘어갈 수 있으니까요.

따라서 생산성만을 고려한다면 자바가 닷넷보다 더 나은 환경입니다.
닷넷의 경우에는 자바를 따라가면서도 개발자들을 끌어들이려고 자바보다는 저수준 접근을 열어주었기 때문에 역시 자바보다는 예상치 못한 버그의 가능성이 높습니다.

프로젝트 전체의 생산성만 따지자면 그렇지만... 역시 개별 개발자의 입장에서는 또 별개의 문제입니다. 자바나 닷넷처럼 생산성을 개발자의 자유도보다 우선한 환경에서는 개발자가 쉽게 코더로 전락합니다. 개발자가 구사 가능한 코딩의 방법이 한정되어 있기 때문에 정형화된 업무에서는 어느 개발자가 투입되더라도 코딩이 상당히 비슷비슷할 수밖에 없습니다. 개발자가 불만을 품고 튀어나가도 또 새 개발자를 뽑아서 채워넣으면 금방 땜빵이 가능하니 업체나 관리자의 입장에서 개발자를 중시할 이유가 없습니다. 당연히 개발자 대우는 꽝이 됩니다.

물론 델파이에서도 세부적인 개발 및 코딩 지침을 마련하고 잘 관리하면 같은 생산성을 낼 수 있을 겁니다.
하지만 그만큼 더 능력있는 관리자가 필요하거나 관리자의 노력이 더 많이 들어가겠지요.

또 성능 최적화의 문제는 더욱 더 그렇습니다.
자바나 닷넷에서는 상황에 따른 최적화 방법이 네이티브보다 제한되어 있기 때문에 성능 면에서 네이티브와 같은 수준이 될 수가 없습니다. 가끔 Hello world 예제 수준이나 단순한 for문 반복의 속도만 측정해서 네이티브와 같은 수준의 성능이다, 라는 식으로 개발자를 현혹하는 걸 보는데, 실무에서 매번 Hello world만 개발하는 것이 아니잖습니까. 보통 성능 최적화는 전체 코드에 대해 하는 것이 아니라 중요한 병목지점마다 적절한 최적화 코딩을 해주는 것인데, 여기서 저수준 접근이 이용되는 경우가 많습니다. 따라서 성능 최적화의 면에서 자바나 닷넷은 결코 네이티브를 따라올 수가 없습니다.

요약하자면, 생산성이 중요하기는 하지만 전부는 아니라는 겁니다.
그리고 관리자의 능력과 노력에 따라 델파이에서도 비슷한 생산성을 낼 수 있습니다.

극단적인 예를 들자면, 업무 프로젝트에서 일반적으로는 동적 할당 등 포인터의 사용을 개발자들에게 금지시키고, 꼭 필요한 경우 관리자의 사전 승인하에만 사용하도록 제한하는 것도 가능할 것입니다. 또 화면 작업에서 사용을 허용한 컴포넌트와 데이터 처리 방식을 세세하게 지정하고 다른 방법이나 컴포넌트를 사용할 때는 역시 사전 승인이 필요하도록 할 수도 있습니다.

개별 개발자의 입장에서 이런 극단적인 제한에서 개발하기가 갑갑하겠지만 델파이와 비교하자면 자바와 닷넷의 개발 환경이 실제로 그렇습니다. 그러니까 코더지요. 관리자의 승인 여부와 무관하게 환경의 제한 때문에 아예 사용 자체가 불가능한 경우가 더 많으니 더 나쁘지요.

굳이 엄밀히 따지자면, 자바와 닷넷이 어떤 경우에도 무조건 생산성이 높은 것이 아니라, 고만고만한 관리자와 고만고만한 개발자들, 고만고만한 개발 방법으로 대충대충 개발하는 경우에 생산성이 월등한 것입니다. 관리자와 개발자가 뛰어날 수록, 또 더 노력할 수록 그 차이는 줄어들 겁니다.
둘리 [dooly386]   2006-05-09 13:32 X
동감..

단 C#의 class 객체는 기본적으로 포인터 연산(주소연산이라고 하죠) 입니다.
단지 컴파일러가 스스로 할당되지 않은 녀석을 골라주는거죠..
struct 와 class가 단적으로 갈려진 형태라 C++ 프로그래머들이 의아해 하는 상황이 발생하기도 하죠 처음에는..
a 와 b 가 class 객체이면 a = b; 하면 b 가 a 에 복사되는게 아니고 a 의 메모리 위치가 b로 이동하는 것이죠.. struct 는 b 가 a 에 복사 되는 것이고요.
물론 주소연산에는 이런 주소의 대입 뿐 아니라 다른것도 있지만요... 그런 부분은 막혀있죠 C#이...
아무튼 C#은 Windows의 단점(메모리 잘못 건드려 OS가 죽어 버리는 상황)을 어떻게하면 빠져 나갈까 고민하는 언어이기도 하죠.ㅎㅎ
김호광 [testcode]   2006-05-10 02:35 X
어느 정도 동감이지요... 포인터 있다고 어려운 언어라는 편견은 버려야할 듯 싶네요 자바 역시 리퍼런스라는 것이 있는데 이 놈이 사실상의 포인터이지요. 워낙 포인터 공포증(저는 포인터 포비아라 칭하지요)이 있는 개발자들이 많아서 새 언어가 그 트랜드를 맞추는 것이라 생각합니다.
김호광 [testcode]   2006-05-10 02:38 X
개인적으로 C#의 생산성이라는 부분에서 상당히 부정적인 입장을 가지고 있습니다! C#으로 대규모 사이트가 제대로 만들어졌다는 이야기를 들은 적도 없고 MS의 말로 이야기하던 폭넓은 이식성 또한 공수표였지요... 델파이의 경우 개발의 static한 면에 있어서 상당한 생산성이 있다고 생각됩니다. 디비나 클라이언트 업무용 프로그램쪽에서의 생산성은 최고라 생각됩니다.
김호광 [testcode]   2006-05-10 02:38 X
차라리 자바의 생산성이 더 높다고 생각되는군요
박지훈.임프 [cbuilder]   2006-05-10 03:51 X
레퍼런스는 C++에도 있지요. 똑같지는 않습니다만... 레퍼런스를 잘 활용하면 포인터를 그대로 쓰는 것보다 훨씬 버그 가능성도 줄이고 명료하게 되지 않습니까. 그러니 레퍼런스도 어차피 포인터니까 똑같다고 보기에는 무리가 있다고 생각됩니다.

본문에서도 말씀드렸다시피, 저도 자바가 C#보다 생산성이 더 좋다고 생각합니다. 하지만 C#과 델파이를 생산성 면에서 비교를 하려고 하는 상황 자체가, 분야가 업무 개발 분야라는 것을 암시하는 거거든요. 그래서 (업무 개발에서는) 생산성 면에서 C#이 더 낫다고 말한 것입니다.

그동안 C#과 닷넷의 허상에 대해서는 여러번 다른 글에서도 썼습니다만... ^^
제가 봐도 C#은 어정쩡한 실패작입니다. 말씀하신대로 대규모 사이트에서 자바와 비교될만큼 검증된 사례가 아예 없습니다. 그나마 돌아가고 있는 레퍼런스 사이트들마저도 불완전한 상태에서 어째어째 운영만 하고 있는 상태라고들 하더군요.
김태선 [jsdkts]   2006-05-10 09:41 X
VS 2005가 나오면서 .NET 프레임웍이 2.0으로 업글이 되었는데 그간 1.1에서의 개발자와 현장의 요구를 수용한 대폭적인 개선이 있었습니다.
C# 언어도 C++의 장점을 취하는 언어적 진보가 있었고요.

VS 2005의 업글에 대한 책을 한권 보고난 소감은, 2.0은 성공의 가능성이 높다는 것입니다.
아직 실무에 적용된 사례가 거의 없는 실정이라 어떤 문제가 있을지 모르겠으나,
전체 스펙이 2.0으로 업글되면서 상당한 경쟁력을 갖춘 것으로 판단됩니다.

.NET 1.1 로 개발을 해왔던 개발자 이야기를 들어보면 1.1만 해도 자바에 밀리는 것이 아니라 자바가 선점한 시장을 공략하는데 실패했을 뿐 기능상은 밀릴 것이 없다라고 하던데, 2.0은 경우는 1.1에서의 많은 고민이 해결되어 있다고 놀라워 하더군요.

개인적으로 2.0으로 개발해볼 생각을 가지고 있습니다.

+ -

관련 글 리스트
11738 닷넷과 네이티브의 생산성에 대한 생각... 박지훈.임프 2555 2006/05/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.