ANSI C가 새로운 프로젝트에 적합하지 않다는 것을 상사에게 어떻게 확신시킬 수 있습니까? [닫은]


64

몇 달 전, 자체 개발 한 테스트 장비를 제어하고 일련의 측정 값을 기록하는 앱을 개발하기 시작했습니다. UI가 단순해야하며 연속 레코딩으로 인해 스레드가 필요할 수 있습니다. 이 응용 프로그램은 몇 년 동안 사용되며이 기간 동안 많은 컴퓨터 과학 학생들이 관리해야합니다.

우리의 상사는 약 30 년 전에 졸업했으며 (범죄로 간주되지 않음; 저도 반 시간 이상 남았습니다) ANSI C에서이 응용 프로그램을 개발하도록 의무화했습니다. 그 근거는 그가 유일한 사람이라는 것입니다. 전 시간 내내있을 것이므로, 우리가하고있는 일을 이해할 수 있어야합니다. 그는 또한 추상 데이터 유형을 사용해서는 안된다고 판결했다. 그는 심지어 우리가 사용하고자하는 전역 변수 (한숨)의 이름을 가진 목록을 우리에게주었습니다.

실제로 그 방법을 잠시 시도했지만 모든 포인터 작업이 안전하고 모든 문자열의 크기가 올바른지 확인하기 위해 속도가 느려졌습니다. 또한 실제로 문제와 관련된 코드 줄 수는 코드 기반의 일부에 불과했습니다. 며칠 후, 나는 전체를 폐기하고 C #을 사용하여 새로 시작했습니다. 우리 상사는 이미 프로그램이 실행되는 것을 보았고 작동 방식을 좋아하지만 다른 언어로 작성된 것을 알지 못합니다.

다음 주에 우리 둘은 소스 코드를 검토하기 위해 모일 것입니다. 나는 무서워서, 내 결정을 뒷받침하는 데 사용할 수있는 주장을 너희들에게서 듣고 싶습니다.

겁쟁이


220
"아니요.이 버전은 최종 버전이 아닙니다. 요구 사항을 이해하고 UI를 미세 조정하기 위해 프로토 타이핑 및 테스트를 위해 며칠 안에 신속하게 작성한 C # 버전입니다. ANSI C에서이를 구현하는 데는 또 다른 X 주, 우리는 모든 멋진 데이터 구조를 갖지 않기 위해 노력해야하기 때문에 .... 글쎄, 이제 언급 했으므로 C # 버전 이미 최종 프로그램이해야 할 모든 것을 수행합니다. 당신은 ANSI C에서 필요합니다. ... 좋아, 만약 당신이 주장한다면,이 버전을 유지합시다 ... "
Heinzi

8
@Heinzi : 같은 경험을했습니다 : 2 일 만에 라이브러리의 C # 프로토 타입을 작성하고 C로 다시 작성하는 데 몇 주를 소비했습니다. 다행히도 그 프로젝트가 끝난 후 더 많은 팀원들과 함께 다른 팀으로 옮길 기회가있었습니다 현명한 언어 선택.
dan04

49
전역 변수와 스레드? 사용하는 프로그래밍 언어에 관계없이 친구입니다.
Nemanja Trifunovic

16
당신이 정말로 필요한 논쟁은 당신이 직업을 유지해야하는 이유입니다.
epo

11
가정이 잘못되었습니다. ANSI C는 거의 모든 프로젝트에 적합 합니다. 그렇기 때문에 몇 년이 지나도 여전히 인기가 있습니다. 최적인지 아닌지는 다른 질문입니다.
Mark Ransom

답변:


108

(가) "내가 확신이처럼 마십시오 것을 알 나는 그것을 유지할 수 있습니다"실제로 아주 좋은 요구 사항입니다 - 대부분의 프로그램은 더 이상 지출 작성 및 알려진 기술의 솔루션을 유지하는 것은 일반적으로 좋은 생각되지 않고 유지된다.

C # 응용 프로그램을 작성하라는 요청을 받았을 때 일부 새로운 컴퓨터 사용자가 2 일 안에 Haskell에 작성하여 "이봐, 작동합니다.

15 년 전에 ANSI C 응용 프로그램을 작성하라는 요청을 받았을 때 일부 새로운 컴퓨터 사용자가 이틀 안에 Visual Basic 6로 응용 프로그램을 작성했다가 떠났다고 상상해보십시오. 이제 유지 관리해야하며 설치 미디어를 삽입 할 때 Windows 7에서 이미 불평을 시작합니다 .

Heinzi가 논평에서 암시했듯이 이것은 "C #으로 작성된 빠른 프로토 타입이며 C와 매우 비슷하게 생겼다. 우리가 생산을 준비하거나 ANSI C로 다시 구현할 것인가?" "라고 질문 한 다음 지금 토론하십시오. 실제로 볼 수있는 소스를 갖는 것이 "이봐, 우리는 Haskell에서 다음 애플리케이션을 더 빨리 작성해서는 안된다"보다 훨씬 낫습니다.

다시 말해, 이제 새로운 플랫폼이 고려 될 수 있음을 보여줄 기회가 있습니다. 코드 검토 전에 프로토 타입을 작성 했는지 확인하십시오. 그러면 레이더 아래에서 C #을 몰래 들여다보고 있다는 인상을 제거하는 데 도움이됩니다. ANSI C로 작성된 모든 기존 코드를 C # 내에서 사용할 수 있음을 보여줄 것을 제안합니다. 개인적으로 나는 단일 플랫폼에 머무르기 위해 목표가 ANSI C로 남아 있다고 들었습니다.


26
+1 : 요구 사항을 지적하기 위해 "이런 식으로 유지해야합니다". C #은 (일반적으로) C보다 개발하기가 훨씬 쉽고 빠르지 만 C는 지난 15 년 동안 C #이 변경 한 것보다 지난 30 년 동안 변경되었습니다. 따라서 수년에 걸쳐 유지되어야하는 제품의 경우 C가 더 적합 할 수 있습니다. 프로젝트의 복잡성 (C #이 더 나은 선택 일 수 있음), 장기적인 유지 관리 (C가 더 안정적인 것 같음), 유지 관리를 수행 할 사람 등 모든 요구 사항 사이에서 타협해야합니다.
Giorgio

4
@Ramhound VB6 지원에 대해 이야기하는 것이 아니라 Visual Basic 6 개발 환경을 지원하는 것에 대해 이야기하고 있습니다 . Windows 7 사본은 설치 미디어를 삽입 할 때 이것이 좋지 않다는 것을 명시 적으로 알 렸습니다.

12
좋은 점이지만 보스가 코볼로 작성하도록 요청한 경우 어떻게해야합니까? 아니면 6502 어셈블리? 당신의 상사에 어떤 시점 당신이 말할 수에서, "그 언어는이 목적을 위해 사용되지 않습니다, 그리고 일단 당신이있어 사라가 없을 것입니다 아무도 왼쪽 이 물건을 이해한다"?
앤트

6
@Alex : 일관성은 훌륭합니다. 그러나 부서에서 작성한 다른 웹 이외의 소프트웨어가 모두 C로 작성된 경우 C로 새 웹 시스템을 작성 하시겠습니까? 작성중인 시스템에 적합한 기술과 팀의 기존 기술을 선택하는 것 사이의 균형에 달려 있다고 생각합니다. 심의없이 언어를 선택하는 것은 항상 사용하는 것이 해로울 수 있기 때문입니다.
개미

8
@ant, 밴드를 지불하는 사람은 음악을 선택할 수 있습니다. (그리고 우리는 COBOL 상점입니다-그것을 지원하는 데 아무런 문제가 없습니다)

35

이 경우 귀하의 상사는 귀하의 고객 인 것처럼 보이며, 그의 주요 요구 사항은 귀하가 계속해서 애플리케이션을 유지할 수 있어야한다는 것입니다. 이것은 상당히 합리적입니다.

따라서 선택은 그가 요구하는 것을 수행하거나 개발을 완료하고 시간 제약과 저렴한 비용으로 C # 응용 프로그램을 유지하는 방법을 가르쳐 줄 수 있음을 보여주는 것입니다. 그렇게 할 수 없으면 프로젝트의 요구 사항을 충족하지 않는 것입니다.


21
OP는 통지 나 토론없이 요구 사항을 명시 적으로 무시했습니다. 상사는 상인으로서 지불을 거부하고 시간 낭비로 인한 비용을 청구 할 수있었습니다. 역할을 반대로 바꾸십시오. 예를 들어 맞춤 양복을 주문했는데 재단사가 자신이 선택한 색상으로 조용히 대체 한 천으로 작업하는 것을 좋아하지 않는다면 어떻게해야합니까? OP의 문제는 이제 긴밀한 감독 없이는 프로젝트를 신뢰할 수없고, 사람들의 기술이 부족하며, 경영진에 대한 존 중심이 없다는 것입니다.
epo

1
@ epo 나는 보스가 요청한 것을하지 않았기 때문에 OP가 신뢰할 수 없다는 주장을 이해한다고 생각합니다. 그러나 그가 합리적인 관리자라면 그런 일은 일어나지 않아야합니다. 개발자가 원래 고려했던 것보다 더 나은 솔루션을 사용하여 관리자에게 접근 한 경우 관리자에게 공개되기를 바랍니다. 예를 약간 수정하면 구매자가 유형을 요청했지만 요청한 것보다 더 새롭고 내구성이 뛰어나고 더 나은 느낌의 천으로 원하는 색상 / 패턴으로 양복을 만드는 것과 같습니다 그들이 익숙한 천의.
테일러 가격

또한,이 경우 유지 관리가 중요한 요구 사항이라는 데 동의합니다. 이제 OP는 관리자가 유지 관리를 빠르고 효과적으로 배울 수있는 방식으로 나머지 요구 사항을 해결했음을 관리자에게 증명해야합니다.
Taylor 가격

26

많은 정보를 제공하지는 않았지만 C가 절대적으로 올바른 선택이라고 생각합니다. 저는 산업 플랜트에서 엔지니어로 일하고 대부분의 코드가 C로 작성되었습니다. 장치 (유량계 또는 열전대 또는 이와 유사한 것으로 가정하고 있음)를 실시간 C 근처에 표시하는 것이 좋습니다.

빠르고 이식성이 뛰어납니다 (C #으로 작성된 적이 없지만 특정 버전의 프레임 워크가 설치되어 있지 않으면 작동하지 않으며 일반적으로 Windows 기반이라고 생각합니다).

꼭 다른 언어를 사용하여 GUI를 수행 할 수 있습니다. 그러나 노력을 아끼고 기존 트렌드 패키지를 사용할 수 있습니다 (좋은 오픈 소스 패키지가 있습니다).

요약하면 하드웨어 파트 C와의 기본 인터페이스가 올바른 선택입니다.


7
C ++ 코드보다 C # 코드를 Windows에서 Linux로 (모노를 사용하여) 포팅하는 데 더 많은 성공을 거두었습니다.
dan04

8
@ dan04 : C ++에 어떤 문제가 있었습니까? 나는 C ++이 이식성이 좋을 것이라고 생각했다. 또한 C ++은 C가 아닙니다. 나는 항상 GNU C 라이브러리와 함께 이식성이 뛰어납니다 (예 : GNU Linux와 cygwin 사이).
조르지오

4
@ dan04 C! = C ++.

2
@Giorgio : 성가신 부분은 문자열이었습니다. 우리는 모든 Windows 관련 TCHAR쓰레기 (일관되게 사용하지 않았던)를 꺼내야 하고 Linux 전환과 동시에 UTF-8 을 사용하는 팀 표준을 채택했습니다 . 불행히도, 이것은 boost::nowide당시에는 존재하지 않았지만 Windows에서 표준 라이브러리의 큰 덩어리를 다시 구현 해야했습니다.
dan04

3
@ dan04 : 앞서 말했듯이 C는 C # (또는 C ++)만큼 표현력이 없지만 1997 년부터 GNU C 라이브러리 ( gnu.org/software/libc )를 사용하고 있으며 실제로 안정적이며 이식 가능합니다. C ++의 경우 Qt (또는 부스트 및 표준 라이브러리)는 이식성이 뛰어나므로 살펴볼 것입니다. 가능한 경우 Windows 관련 항목을 피하려고합니다. AFAIK 고객 잠금은 마케팅 전략의 일부이기 때문에 휴대용 소프트웨어를 제작하는 것이 Microsoft의 목표는 아닙니다.
조르지오

24

이런. 이것은 실시간 응용 프로그램입니까? 장비를 실시간으로 제어합니까? 실시간으로 데이터를 수집합니까? 가비지 수집기와 함께 언어를 사용하십니까? 이런.

더 짧은 시간 안에 더 현대적인 언어로 앱을 만들 수 있다는 데 동의하지만, 그것은 주요 기준이 아닐 것입니다. 당신의 프로그래밍은 다른 상사보다 중요하지 않을 것입니다. 예를 들어 상사가 말한 것, 응답 시간, 결정 론적 행동입니다.

주요 기능과 UI를 테스트하기 위해 C # 또는 Python으로 프로토 타입을 만들 것을 제안했을 것입니다. 그런 다음 앱이 많은 데이터로 인해 며칠 동안 지속적으로 실행되는 경우 실제 대기 시간과 응답 시간을 측정하여 도대체 테스트합니다. VM 또는 가비지 수집기가 시작될 때 앱이 임의의 시간에 너무 느리거나 뒤쳐 질 수 있습니다.

PROTOTYPE으로 수행 한 작업을 제시하는 것이 좋습니다.

C로 코딩하는 것은 그리 어렵지 않습니다. 그렇지 않다면 그렇게 말하십시오. 도전을 위해 우리가 많이 있습니다. (저는 수십 년 동안 실시간 C 코딩을 해왔습니다.)


3
첫 번째 비트를 다르게 표현할 수 있습니다. 이런. 이것은 실시간 응용 프로그램입니까? 장비를 실시간으로 제어합니까? 실시간으로 데이터를 수집합니까? 비 실시간 스레드 환경에서 실행 중입니까? 이런. 장치 경계를 넘을 때는 항상 샘플링해야합니다. '실시간'은 짚맨 논쟁이며 정의가 잘 안된 요구 사항입니다. C #은 괜찮습니다.
Gusdor

당신은 Joe Duffy의 작품에 대해 들어 보지 못했습니다 . 2013 년부터 C # 에서 시스템 프로그래밍 작업을하고 있습니다. Roslyn 컴파일러는 네이티브 코드 (UWP 작동 방식)로 컴파일 할 수 있으며 가비지 수집은 수행중인 작업에주의를 기울이면 문제가되지 않습니다.
RubberDuck

14

가장 먼저해야 할 일은 상사에게 가서 배를 채우는 것입니다. 당신은 그의 분명한 요구를 무시하고 몇 달 동안 그렇게하고있었습니다. 나는 당신이 이것에 얼마나 많은 시간을 가졌는지 모르지만, 프로젝트를 완료하는 데 할당 된 시간이 대부분이라고 가정하면 곧 새로운 일자리를 찾고 있다는 사실에 직면해야합니다.

더 빨리 처리할수록 좋습니다.

둘째, ANSI C가 부적절하다는 것을 확신 할 수 없다고 생각합니다. 당신이해야 할 일은 (1) c #이 적절하다는 것, (2) C #을 유지하는 법을 쉽게 배울 수 있다는 것입니다. ) 귀하 가 C로 작성하는 데 부적절하다고 생각합니다.이 프로젝트를 수행 할 직업과 파트가 ​​여전히 있다고 가정하면, 2와 c와 c #의 유사점을 강조합니다.

의견에 대한 인용으로 인용 ...

몇 달 전에, 우리는 앱을 개발하기 시작했습니다 ...]


그가 몇 달 동안 C # 버전을 개발했다고 언급 한 곳은 없습니까?
익명

1
@Anonymous-며칠 또는 몇 달이 지났더라도 관리자의 지시를 따르지 않았습니다. 저자는 분명히 ANSI C로 응용 프로그램을 개발하는 데 필요한 기술이 없었습니다.
Ramhound

1
@Ramhound-나는 그가 매니저의 지시를 따르지 않았다고 주장하는 것이 아니라, jmoerno가 마치 접선에서 몇 달을 보낸 것처럼 만드는 것입니다. 또한, 며칠 안에 프로젝트를 구성하여보다 안정적인 C 버전을 기반으로 작업 프로토 타입으로 사용한다면 완벽하게 이해됩니다. 계획 단계의 일부입니다.
익명

@jmoreno-사과합니다. 질문을 잘못 읽었을 것입니다.
익명

2
@jmoreno-물론입니다. 추가 한 견적을 본 후 마지막 의견을 게시했습니다. 다시 사과드립니다.
Anonymous

12

우리는 ANSI C로이 응용 프로그램을 개발해야한다고 주장했습니다. 그 근거는 그가 전 시간 동안있을 유일한 사람이므로 우리가하는 일을 이해할 수 있어야한다는 것입니다.

이것은 꽤 합리적인 요구 사항입니다.

그는 또한 추상 데이터 유형을 사용해서는 안된다고 판결했다.

이것은 말이되지 않습니다. 언어 요구 사항이 아니라 프로그램 설계 요구 사항이기 때문에 이제 조금 의심스러운 냄새가납니다. 코드를 유지 관리하기 쉽거나 ADT를 구현하거나 잘 테스트 된 기존 코드를 사용하는 것이 우선 순위가되어야합니다.

그는 심지어 우리가 사용하고자하는 전역 변수 (한숨)의 이름을 가진 목록을 우리에게주었습니다.

좋아, 이제 냄새가 난다. 이제 우리는 상사가 다양한 프로그래밍 언어뿐만 아니라 일반적으로 프로그래밍 경험이 제한적이라고 말할 수 있습니다. 숙련 된 베테랑 프로그래머는 언어 선호에 상관없이 그러한 진술을하지 않을 것입니다. (내가 생각할 수있는 유일한 예외는 대부분의 코드가 상당히 작은 임베디드 시스템에서 실행되도록 의도 된 것이므로 코드에 필요한 모든 작업 메모리가 사전 할당 될 것으로 예상됩니다. 동일한 코드라는 아이디어 그러나 화면 수준의 UI를 사용하는 것이 좋습니다.

나는 당신의 상사가 대규모의 미션 크리티컬 소프트웨어 프로젝트에 참여한 적이 없다고 생각합니다. 그러나 그는 다양한 저품질 프로젝트에 더 많이 떠 올랐을 것입니다.

따라서 이것은 프로그래밍 언어 C와는 아무런 관련이 없습니다. C #에서도 동일하게 icky 프로그램을 쉽게 작성할 수 있습니다. 좋은 프로그램 디자인이 언어에 달려 있다고 믿는 것은 매우 흔한 실수입니다. 그것은 단순히 사실이 아닙니다!

C #은 확실히 C보다 예쁘고 깨끗하며 모호하지 않은 구문을 가지고 있습니다. C보다 훨씬 많은 OO 관련 키워드를 가지고 있기 때문에 많은 프로그램 디자인 지원이 있습니다. 그러나 그 외에도 프로그램 작성 방법 을 알려주지는 않습니다 . C로 작성된 모든 것이 기본적으로 끔찍하고 C #으로 작성된 모든 것이 기본적으로 천국이라고 생각한다면, 나는 그것을 깨닫지 않고 오히려 끔찍한 C # 프로그램을 작성하고 있다고 확신합니다.

내가 제안하는 것은 다른 언어보다 먼저 추상적이고 언어 독립적이지만 상세한 프로그램 디자인을 만드는 것입니다. 일반적인 객체 지향 접근 방식을 사용하십시오. 어떤 객체가 있고 서로 통신하는 방법, 필요한 종속성 등은 무엇입니까? 프로그램 디자인에 충분한 생각을하고 종이에 적어 놓았을 때, 당신이나 상사에게 큰 문제는 아닙니다. 당신이 그것을 구현하기로 선택한 언어.


1
+1 "C #에서도 동일하게 icky 프로그램을 쉽게 작성할 수 있습니다."
Javier

11

해결해야 할 첫 번째 문제는 감정적이고 비이성적 인 문제입니다. IT 산업은 끊임없는 변화의 산업이며, 모든 것을위한 장소가 있지만 변화를 개선하거나 수용하는 것을 거부하는 것은 문제입니다.

상사가 왜 ANSI C에 집착하고 있습니까? 그것이 그 또는 그녀가 아는 유일한 언어라면, 아마도 변화의 시간이지만 아마도 합리적인 논쟁은 불충분 할 것입니다. 익숙하지 않은 언어로 강요 받으면 상사가 저평가를 받거나 해고 당할 것입니까? 그가 가진 경험과 그가 가져다주는 다른 이점을 강조하십시오.

이 문제를 해결하지 않으면 가져올 수있는 모든 합리적인 주장이 낭비됩니다. 부하 직원으로서, 당신은 그와이 토론을 할 수있는 사람이 아닐 수도 있습니다. 아마도이 주제를 다른 관리자 중 한 명에게 옮겼을 것입니다.

또한 당신의 관점에서 그것을 고려하십시오. C #을 왜 사용 하시겠습니까? 새롭고 멋진 것을 사용하려는 욕구가 얼마나됩니까? 자신에게 정직하십시오. 이것을 인식하면보다 효과적으로 논쟁하는 데 도움이됩니다.

두 번째 문제는 위험과 비용 중 하나입니다. 소프트웨어 작성은 비용이 많이 들고 언어 선택은 중요한 요소입니다. 치다:

  1. C #과 C로 쓰는 데 얼마나 걸립니까? 더 쉬운 객체 지향과 더 나은 가비지 수집으로 C #이 더 쉬울 수 있습니다. 그러나 애플리케이션이 관리되지 않는 API 호출을 많이 사용하는 경우 C가 더 쉬울 수 있습니다.
  2. C #을 사용하는 경우 추가 도구를 구매해야합니까? 이미 Visual Studio를 사용하고있는 것 같지만 지역화, 코드 검토 및 분석, 디버깅 등을위한 추가 도구가 필요합니까?
  3. 유지 관리가 얼마나 쉬운가요? 버그를 발견하면 얼마나 빨리 해결할 수 있습니까? C #은이 객체 방향을 줄일 수 있습니다. 자동 가비지 콜렉션은 또한 대부분의 메모리 누수 및 포인터 문제를 방지합니다.
  4. 지원하기가 얼마나 쉬운가요? 지원 담당자가 있으면 충돌 덤프를 읽는 방법을 알고 있지만 SOS와 함께 windbg를 사용하는 방법을 알고 있습니까? 대상 컴퓨터에 적절한 버전의 .Net 프레임 워크가 이미 설치되어 있습니까?
  5. 직원 채용을 고려하십시오. C와 C #을 아는 사람들은 몇 명입니까? 둘 중 하나 또는 둘 다 조직을 떠난 경우 얼마나 쉽게 교체 할 수 있습니까? C 개발자는 C # 개발자보다 저렴하거나 비쌉니까?

나는 계속할 수 있지만 요점은 언어의 기술적 장점에 대해서만 논쟁을 멈추는 것입니다. 기술적 장점은 오직 당신과 당신의 상사가 이해하는 것입니다. 비즈니스 영향에 대해 이야기하기 시작하면 훨씬 더 많은 사람들을 끌어 들이고 훨씬 더 설득력있는 주장을합니다.

아마도 C가 더 나은 선택 일 것입니다. 모든 상황에서 C #이 자동으로 더 나은 것은 아닙니다. 어쩌면 C를 사용 하여이 프로젝트를 수행하지만 다음 프로젝트에 대해 C # 개념 증명을 수행 할 수 있습니다. 당신은 전투에서 져도 여전히 전쟁에서 이길 수 있다는 것을 기억하십시오.


5
C #이 기본적으로 ANSI C보다 더 나은 선택이라는 암시적인 가정에 동의하지 않습니다. 예를 들어 플랫폼 독립적으로 유지하려는 경우 C #은 좋지 않은 선택 일 수 있습니다.

@ ThorbjørnRavnAndersen 동의합니다. 마지막 단락을 참조하십시오. 비 관리 코드 호출과 같은 경우도 언급합니다. 플랫폼 독립성이 OP에서 C #을 제외했을 것이라고 가정합니다. 아마도 이것은 잘못된 가정 일 것입니다.
akton

1
플랫폼 독립성은 한 가지 가능한 이유 일뿐입니다. "ANSI C에 집착"과 같은 표현은 내 의견으로는 편견을 나타냅니다.

@akton-언제부터 C #에서 관리되지 않는 코드를 호출 할 수 없습니다. 물론 래퍼가 필요하며 지원 문제가 발생하지만 가능합니다. 또한 원하는 경우 다중 플랫폼에서 C #을 지원할 수 있습니다. Mono는 모든 주요 데스크탑 플랫폼 (OS X, Windows 및 Linux)에서 지원됩니다. Microsoft Windows 기반 .NET Framework가 발전함에 따라 Mono의 기능 기반이 정확히 일치하지 않으며 (이미 WPF의 경우) Linux에서 실행되는 Metro 응용 프로그램을 개발할 수 없습니다. 물론이 경우에는 불가능할 것입니다.
Ramhound

@Ramhound C #에서 관리되지 않는 코드를 호출 할 수 없다고 말하지는 않았지만 그 중 많은 부분이 고통 스러울 수 있습니다. 마찬가지로 C #에서 크로스 플랫폼 개발을 수행 할 수 있지만 Thorbjorn은 C가 거의 보편적이라고 말합니다.
akton

7

어쩌면 또 다른 주장 : 실수없이 C 코드를 작성하는 데 충분한 경험이있는 컴퓨터 과학 학생을 찾는 것은 매우 어렵습니다. ANSI C는 오늘날 사람들이 가장 먼저 배우는 것이 아닙니다.

이제 모든 컴퓨터 과학 학생들이 나를 죽일 것입니다.


ANSI C는 실제로 제가 대학에서 배운 첫 번째 것 중 하나였습니다. 저는 2004 년에 시작했습니다. 그래서 지난 10 년 동안 여전히 가르치고있었습니다. 늦은 밤을 SSH를 통해 유닉스 환경에 연결하여 코드를 컴파일하는 데 많은 시간을 보냈습니다.
Ramhound

1
웃긴, 나는 대학에서 마지막 해까지 ANSI C를 배우지 못했습니다. 가르친 첫 번째 언어는 파스칼 (Pascal)이어서 내가 보호 받고 있습니다.
tehnyit

최근 졸업생; 우리는 C와 C ++에 모두 노출되었지만 C는 임베디드 컨텍스트에 있었고 최소였습니다. 둘 다 마지막 해에 순전히 C #과 Java였습니다.
Ross

2
C는 단순히 제대로 프로그래밍하기 어려운 것이 아마도 C를 사용하는 것에 대한 최고의 포인트 일 것입니다.
Paul Nathan

7

ANSI C가 부적절하다는 사실을 완전히 확신하지 못했습니다. C는 당신이 묘사 한 종류의 작업에 적합한 훌륭한 언어입니다. 작업에 대한 간단한 설명 (언어 요구 사항 제외)으로 C를 추천 할 수도 있습니다 (또는 갈 수도 있습니다).

문제는 C #으로 생각하면서 C로 프로그래밍하고 있다는 것입니다. Perl에서 C 또는 java로 전환 할 때 비슷한 문제가 있습니다. 당신은 언어에 적응하는 법을 배워야하며, 당신의 사고 방식에서 오늘의 언어로 번역하는 법을 배우지 않아야합니다.

문제는 당신의 상사 나 C 언어가 아니며, 다른 사고 방식으로 당신의 마음을 여는 것입니다. 프로그래밍 언어를 변경하면 도움이됩니다.


4
스택 교환 프로그래머에 대한 첫 번째 질문에 답변 해 주셔서 감사합니다. 그러나 "완전히 실패했습니다", "문제는 마음을 여는 것"과 같은 문구를 사용하지 않음으로써 미래의 답변을 조금 덜 개인적으로 만들고 싶을 수도 있습니다. FAQ programmers.stackexchange.com/faq#etiquette를 검토하십시오 . 중립 언어로 요점을 잘 설명 할 수 있다고 생각합니다.
DeveloperDon

2

먼저, 상사에게 다른 언어로되어 있다고 말해야합니다. 통지없이 요구 사항에 대해 의도적으로 무언가를 가져 오면 그는 이해할 수 있습니다.

이제 상사 / 관리자에게 이러한 것들을 설명하는 가장 좋은 방법은 시간과 돈을 고려하는 것입니다. 그러한 프로젝트가 ANSI C에서 소요되는 시간을 추정 한 다음 C #과 같은 상위 레벨에서 소요되는 시간을 추정하십시오. 나는 현대가 아니라 더 높은 수준이라고 말했다. 이것은 일을 부드럽게하는 데 도움이 될 수 있습니다. 작은 페인트 브러시로 방을 페인트 칠하지 않고 롤러와 다른 스트로크를 사용하여 각 스트로크 (코드 라인)를 프로젝트의 더 많은 영역을 차지하게합니다. 또한 귀하 또는 귀하의 팀원 중 하나가 C를 알지 못하거나 C로 대규모 프로젝트를 작성하는 것을 편안하게 생각한다면 시간 문제를 더 빨리 해결해야합니다.

또한 상사가 미세 관리하려고하는 것처럼 들립니다. 나는 다른 답변 중 하나가 상사에게 그렇게 적게하는 방법을 설명하려고 노력할 것입니다.


경제성은 가능한 논쟁으로 보인다. 상사 (고객으로서 @MatthewFlynn의 제안에 따라)는 C로 작성 되지 않은 프로그램을 감당할 수 없다고 주장하지만, OP는 상사가 프로그램과 관련된 구현 및 유지 보수 비용을 감당할 수 없다고 주장 할 수 있습니다. 어느 쪽이든, 일이 일어나게하려면 타협이 필요하다.
rwong

1

ADT에 대한 감독자 혐오감은 개발자가 GC 비용을 알지 못하는 것처럼 다른 곳에서 해결되었으므로 "스레드"에 중점을 둘 것입니다.

아마도 .NET (또는 JVM (sodoctrinated) 스레드) 스레딩의 관점에서 생각하기보다는 프로세스 간 통신 (IPC) 메커니즘을 사용하여 여러 프로세스간에 통신하는 다중 프로세스가 필요할 수 있습니다. 예-Windows 메시지, 공유 메모리, 메모리 매핑 파일 버퍼, 명명 된 파이프 등 작은 프로세스는 장치 또는 장치의 측면과 상호 작용하고 업데이트를 확인하고 요청을 확인하기 위해 IPC를 검사하는 데 전념하고, 선택한 IPC를 사용하여 GUI를 유지하고 장비 "모니터"와 통신하는 다소 큰 프로세스를 갖습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.