알고리즘이 프로그래밍 언어보다 더 중요합니까?


35

현재 (2013) Google Code Jam 경연 대회에서 40 줄의 코드 만 사용하여 동일한 문제를 해결 한 Python 사람들과 비교하여 C ++ 및 Java 사람들에게 200 줄 이상의 코드가 필요하다는 문제가있었습니다.

파이썬은 C ++ 및 Java와 직접 비교할 수 없지만 내가 생각한 자세한 차이는 알고리즘의 효율성에 영향을 줄 수 있습니다.

언어 선택과 비교하여 올바른 알고리즘을 아는 것이 얼마나 중요합니까? 훌륭하게 구현 된 Python 프로그램을 동일한 알고리즘을 사용하여 C ++ 또는 Java로 더 나은 방식으로 구현할 수 있습니까? 이는 특정 프로그래밍 언어의 자연 스러움과 관련이 있습니까?


16
당신이 일하는 프로그래밍 언어는 문제에 대해 생각하는 방식에 영향을 미친다고합니다. 이것은 매우 다른 프로그래밍 언어가 다른 클래스의 문제에 적합 할 수 있음을 의미합니다.
Joris Timmermans

1
이 중 다수는 전적으로 LOC 이외의 규모로 작업하고 있습니다. 일부 언어는 속도 또는 동시성 요구를 지원하지 않습니다. 알고리즘은 중요하지만 때로는 언어 x가 언어 z보다 y 배 느리면 자세한 내용에 관계없이 x를 사용할 수 없습니다.
Rig

참고로 학교에서 배운 유일한 것은 모든 사람이 코드 한 줄에 버그가있어서 사용 된 코드와 관계없이 일정하게 유지된다는 것입니다. 따라서 더 적은 수의 코드 줄로 처리 할 수있는 언어로 인해 더 적은 버그가 발생하면 더 빨리 출시 할 수 있으며 사용자가이를 사용할 때 버그가 나타날 가능성이 줄어 듭니다. 제 생각에는 회사의 모든 사람들이 해당 프로젝트를 수행하는 데 필요한 언어를 알고 싶습니다.
Travis Pessetto

5
@Travis : "SLOC 비율 당 결함은 언어에 관계없이 일정하게 유지됩니다"는 사실이 아닙니다. 요한의 대답을보십시오.
벤 Voigt

이제 F #을 언어로 사용하여 다음 콘테스트에 참가할 생각을하게되었습니다!
code4life 2016 년

답변:


73

분명히 구글 코드 잼과 같은 맥락 에서이 질문을 고려한다면 알고리즘 문제를 해결할 때 알고리즘 사고가 더 중요합니다.

그러나 일상 생활에서 약 백만 가지의 다른 요소들도 고려해야하는데, 이로 인해 질문이 검정에 비해 흰색보다 훨씬 적습니다.

반격의 예 : Java에 200 줄이 더 필요하지만 회사의 모든 사람이 Java를 알고 있다면 큰 문제는 아닙니다. 파이썬 5 줄이나 다른 언어로 작성할 수는 있지만 회사에서 유일하게 그 언어를 아는 사람이라면 큰 문제입니다. 실제로 그렇게 큰 거래는 당신이 그렇게 할 수 없으며 대신 자바로 작성해야한다는 것입니다.

한 craftman의 관점에서, 우리는 항상 작업에 적합한 도구로 접근하려고 노력하지만, 단어 바로 거기에 하나가 쉽게 오해 할 수 있도록 까다 롭습니다.

반대로, 나는 회사에서 알고리즘 사고가 거의 없다는 것을 알았습니다. 평균 조가 이미 루프, 검색 등의 런타임 복잡성을 추정하는 데 어려움을 겪고있는 반면 소수의 선택된 사람들만이 그것을 가지고 있습니다.

그러나 알고리즘 경쟁의 관점에서, 몇 년 동안 경쟁에서 얻은 개인적인 경험은 한 언어를 고수해야한다는 것을 분명히 알려줍니다. 속도는 중요한 요소이며 시간 제한 내에서 문제를 해결하는 데 전념해야 할 때 도구에 시간을 낭비 할 여유가 없습니다. 또한 생각없이 200 줄의 Java 코드를 작성하는 것이 많은 생각을 필요로하는 50 줄의 복잡한 파이썬 코드를 직접 제작하는 것보다 훨씬 빠르지 만 둘 다 동일한 문제를 해결하는 것을 고려하십시오.

마지막으로 알고리즘 경쟁 코드와 회사 프로덕션 코드의 주요 차이점을 이해해야합니다. 나는 환상적인 알고리즘 코더를 보았습니다.


1
+ "백만 다른 요소를 고려"에 대 한 +
ozz

1
나는 당신이 해결하려고하는 기능적 문제라면 하늘을 위해서 기능적 언어를 사용하십시오! 따라서 주요 프로그래밍 패러다임 당 하나의 언어를 실제로 사용해야한다고 주장합니다.
Martijn Verburg

6
마지막 문장 +1
Shivan Dragon

4
+1 코드 줄 자체는 끔찍한 지표입니다. 코드 줄이 아닌 유지 관리 성 을 측정해야합니다 . 200 줄의 형식 안전 코드는 50 줄의 Python보다 유지 관리가 훨씬 쉬울 수 있습니다.
Phil

2
@ 필 : 그리고 200 줄의 파이썬은 50 줄의 타입 안전 코드보다 훨씬 유지 관리가 쉬울 수 있습니다. 잘 작성된 코드를 가정 할 때 형식이 안전한 언어에서 그처럼 명확한 이점을 본 적이 없습니다.
David Thornley

17

경쟁이 아닌 경우에도 특정 언어에 대한 모든 트릭을 아는 것보다 알고리즘 사고가 더 중요하다고 주장합니다.

물론, 당신은 가능한 한 함께 일하는 언어를 알고 싶어하지만 언어는왔다 갔다하면서 알고리즘의 관점에서 추상적으로 생각하는 능력은 전이 가능한 기술입니다.

예를 들어, 내가 올바르게 기억한다면 프로그래머에 대한 게시물이 얼마 전에 인터뷰에서 FizzBuzz 실패에 대해 불평하고 Java의 모듈러스 연산자에 대한 지식이 부족하다고 비난했습니다. 이 결론은 잘못되었습니다. 모듈로 작동 방식에 대한 지식이 없기 때문에 전용 모듈로 연산자가 없어도 문제에 대해 알고리즘 적으로 생각하고 해결할 수 없었습니다. 더 나아가 : Java에는 Tree 클래스가 있습니다. 나중에이 클래스를 구현하지 않는 언어로 작업해야한다면 어떻게해야합니까? 다시 말하지만, 문제에 대한 생각은 언어 별 세부 사항보다 우선합니다.

나는 예제가 단순하다는 것을 인정하지만, 요점을 이해하는 데 도움이된다.


14

언어 문제.

DARPA와 미 해군은 거의 20 년 전에 총격전 실험을 실시했습니다. 다크호스 런 어웨이 우승자는 하스켈이었습니다. Ada와 C ++는 모두 표현되었습니다. 자바는 아니었다.

같은 시간에 Pratt & Whitney 는 제트 엔진 컨트롤러 프로젝트에 대한 데이터 마이닝 연구를 수행하여 타임 카드 및 버그 추적기 데이터를 조사했습니다. 그들은 Ada가 프로그래머의 생산성을 두 배로 늘리고 사용중인 다른 언어의 결함 밀도를 1/4로 줄인 것을 발견했습니다.

Atari는 FORTH를 사용하여 비디오 게임을 개발했으며 FORTH를 사용하고 있다는 사실은 독점적이었습니다.

LISP 사용에 대한 Paul Graham의 의견 은 잘 알려져 있습니다. JPL의 LISP에 대한 Erann Gat의 의견 은 잘 알려져 있지는 않지만 똑같이 강력 합니다.

보잉 777 개 항공 전자 소프트웨어는 거의 모든 에이다입니다. 한 주요 하청 업체가 미드 스트림에서 다시 시작해야했지만 그들의 경험은 매우 좋았습니다.

언어 문제.


분명히, 당신이 연결하고있는 실험 후에 java가 릴리스되었습니다.
toasted_flakes 12

기사는 1994 년에 출시 된 자바의 첫 공개 버전은 1995 년이었다
알레산드로 TERUZZI

요점은 당신이 좋아하는 특정 언어가 특정 실험에서 표현되지 않았거나 표현되지 않았다는 것입니다. 요점은 그 언어가 중요하다는 것입니다. 많은 일화 연구가 있었는데, 이것은 꽤 결정적으로 보여줍니다. 또한 Ada는 미국 프로그래머에 의해 대부분 거부 당했지만 유럽에서는 특히 고 신뢰성 시스템에 여전히 많이 사용되고 있으며 미국의 특정 현장 시스템에도 여전히 사용되고 있습니다.
John R. Strohm

7

일부 요점 :

  • 최상위 위치는 코드와 다른 언어의 차이가 몇 줄인지에 관계없이 C ++ / C / Java 인 경향이 있습니다. 이것은 최고 코더가 아마도 원시 속도 때문에 다른 언어보다 이러한 언어를 선택하는 경향이 있다는 것입니다.
    불행히도 Google Code Jam에서 프로그래밍 언어를 쉽게 볼 수는 없지만 가장 많이 사용되는 프로그래밍 언어를 다운로드했으며 대부분 기억하는 한 C / C ++입니다. 인기있는 온라인 프로그래밍 경연 대회 호스팅 사이트 인 TopCoder의 결과는 대부분 비슷합니다.

  • 그것들은 꽤 낮은 수준이기 때문에 원시 실행 시간 측면에서 C / C ++을 쉽게 이길 수는 없을 것이라고 확신합니다 (Java는 너무 뒤지지 않습니다 ). 내 경험상, 동적으로 입력 된 언어는 정적으로 입력 된 언어보다 상당히 느린 경향이 있습니다. 일부 언어에서는 최적의 솔루션이 충분히 빠르지 않을 수도 있지만 일반적인 규칙은 아닙니다.

  • 올바른 알고리즘이 중요합니다. 처음부터 모든 문제를 세부적으로 해결하는 방법을 알고 있고 빠르고 빠른 코더라면 코딩하는 언어에 관계없이 승리 할 가능성이 높습니다 (해당 언어의 최적 솔루션 가정) 충분히 빠릅니다).

  • 직선 수는 그리 큰 문제가 아닙니다. 프로그래밍 경험이 충분 해지면 10 라인 또는 200 라인을 프로그래밍하는 데 10 분을 소비 할 수 있다는 것은 라인이 얼마나 복잡한 지에 달려 있습니다. 또한 비슷한 코드를 수백 번 코딩하면 매우 빠르게 수행 할 수 있습니다. 최고 C / C ++ 코더가 종종 코딩 시간을 최적화하기 위해 사용하는 모든 매크로를 언급 할 필요는 없습니다.

  • Frank는 (프로그래밍 경쟁을 제외하고) 전체 코드 기반이 C 또는 그 밖의 언어 인 경우 회사의 Python 코딩에 대해 갈 수 없습니다. 언어를 준수해야합니다.

  • 언어를 전환하는 것은 합리적으로 쉽지만 수년간의 알고리즘 사고 지식을 쌓는 것은 쉽지 않습니다. 나는 거의 모든 훌륭한 프로그래머가 일주일 안에 다른 (모호하게 유사한) 언어로 바꿀 수 있다고 확신합니다. 어쩌면 그 언어로 프로그래밍 경쟁에서 이기기에는 충분하지 않을 수도 있지만 (2 주 더 주면), 기본은 떨어질 것입니다.


Falsehood : 일부 코드 콘테스트 사이트에서 여러 솔루션을 다운로드하는 것은 최고의 위치가 어떤지 실제로 알고 있다는 결론을 내리기에 충분한 과학적 연구입니다.
거짓말 라이언

@LieRyan True, 그러나 가장 유명한 사이트 (TopCoder)에서 수십 개의 프로그래밍 경쟁에 참여하고 있으며 (C / C ++ / Java와 같은) 대부분의 최상위 위치를 보는 것이 다소 중요합니다. 또한, 나는 "항상 그런 것은 아니다"라고 말했다.
Dukeling

"직선 수는 그리 큰 문제가되지 않는다"는 것에 동의하지 않는다. 코드는 적이다
jk.

6
@jk. "그런"을 강조 했어야합니까? 중요하지만 알파와 오메가가 아닙니다. 가독성보다 몇 줄을 더 선호합니까? 확실하지 않습니다. 나는 매우 혼란스럽고 읽을 수없는 비트 쉬프팅, 곱하기, 나누기, 더하기, 빼기, XORing, ANDing, 다중 조건 표현식에 대해 몇 가지 간단한 if 문을 취할 것입니다. 아마도 당신이 말한 것이 아닐 수도 있지만, 줄 수를 줄이는 것이 때때로 발생합니다. 그리고 몇 줄로 복잡한 것을 구현하거나 여러 줄로 간단한 것을 구현하는 것에 대해 더 많이 이야기했습니다. 후자는 종종 시간이 덜 걸립니다.
Dukeling

5

C ++에서 동일한 논리를 더 잘 구현할 수 있습니까? 물론 더 좋으면 더 빠르고 효율적인 메모리를 의미 할 수 있습니다. 문제는 그렇게하기 위해 필요한 노력의 양이 상당히 높다는 것입니다. 또한 이론적으로는 더 낮은 수준으로 가서 순수한 C 또는 ASM으로 구현할 수 있지만 훨씬 더 오래 걸리지 만 더 최적화 된 코드를 가질 수 있습니다.

물론 Code Jam 또는 TopCoder와 같은 경쟁의 경우 40 줄 대 200 줄이기 때문에 큰 문제는 아닙니다. 반면에 이러한 유형의 경쟁에서 가장 중요한 것은 알고리즘의 시간 / 공간 복잡성입니다. 실제 응용 프로그램 인 YMMV에서는 이러한 유형의 경쟁 에서 가장 느린 언어로 작성된 O (n) 알고리즘이 항상 가장 빠른 언어로 작성된 O (n²)를 능가 합니다. 특히 최악의 시나리오 인 여러 테스트가있을 것입니다.

그러나 경쟁사를 제외하고 우리가 실제 큰 프로젝트를 이야기하고 있다면 더 이상 40 줄 대 200 줄이 아닙니다. 큰 프로젝트에서는 거대한 코드 기반이 문제가되기 시작합니다. 어느 시점에 도착합니까?

C ++ 대 파이썬?

여기에 이미지 설명을 입력하십시오

순수한 파이썬은 느립니다. 표준 파이썬 인터프리터 (CPython과는) 쉽게 (를 통해 C 라이브러리와 함께 사용할 수있는 최적화 된 C. 파이썬으로 작성 기능 내장으로 실질적으로 모든 C로 작성되는 이유 하는 ctypes 또는 기본 CPython의 모듈 ) 및 C와 ++ 라이브러리 Boost :: Python을 통해 . 이렇게하면 유연한 언어 인 Python으로 고급 로직을 작성할 수 있으므로 프로토 타이핑 및 적응이 신속 해집니다 (알고리즘을 조정하고 개선하는 데 더 많은 시간을 할애 할 수 있음). OTOH, 하위 레벨 라이브러리 함수를 C 또는 C ++ 모듈로 작성할 수 있습니다. 이러한 접근 방식의 좋은 예는 Python 라이브러리 인 SciPy이지만, ATLAS, LAPACK, Intels MKL 또는 AMD의 ACML과 같은 고도로 최적화 된 숫자 라이브러리를 사용합니다.


당신이 쓰고있는 것은 단지 표면을 긁는 것입니다. 모든 사람이 공유하지 않는 '더 나은'개념을 가정하고 있습니다. 품질은 항상 목표에 대한 적합성의 문제입니다. C ++로 프로그래밍하는 것이 항상 모든 목표에 적합한 것은 아닙니다.
reinierpost

1
@reinierpost : 이것이 제가 더 높은 노력에 대해 쓴 이유입니다. C ++이 적합하지 않지만 언급 할 수 없기 때문에 언급 한 경우. 너무 많은 개발자 리소스가 필요하기 때문에 적합하지 않습니다.
vartec

더군다나 그 경우에는 더 나아지지 않습니다.
reinierpost

2
사실 이것은 많은 산업에서 일어나는 일입니다. 예를 들어 게임은 성능과 생산성을 위해 C ++ 코드를 서로 연결하는 많은 Lua 코드를 가지고 있습니다.
gbjbaanb

4

제 생각에 사람들이 구어체로 "프로그래밍 언어"를 고려하는 것은 실제로 세 가지입니다.

  1. 언어 유형 및 구문
  2. 언어 IDE
  3. 언어에 사용 가능한 라이브러리

예를 들어 누군가가 토론에서 C #을 가져올 때 언어 구문에 대해 이야기하고 있다고 생각할 수 있지만 (1) 토론에 .Net 프레임 워크가 포함될 것이라고 95 % 확신합니다 (3). 새로운 언어를 디자인하지 않는다면 (1)을 무시하고 (2)와 (3)을 무시하는 것은 어렵고 무의미합니다. IDE와 표준 라이브러리는 특정 도구 사용 경험에 직접적인 영향을 미치는 "편안한 요소"이기 때문입니다.

지난 몇 년간 Google Code Jam에도 참여했습니다. 처음으로 C ++을 선택했습니다. 입력을 읽는 데 도움이되기 때문입니다. 예를 들어 C ++의 표준 입력에서 3 개의 정수를 읽는 방법은 다음과 같습니다.

int n, h, w;
cin >> n >> h >> w;

C #에서 다음과 같이 보일 것입니다.

int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);

단순한 기능을 위해서는 훨씬 더 정신적 인 오버 헤드입니다. 여러 줄로 입력하면 C #에서 상황이 훨씬 복잡해집니다. 어쩌면 나는 그 당시 더 나은 방법을 찾지 못했을 것입니다. 어쨌든, 나는 라운드가 끝나기 전에 수정할 수 없었던 버그가 있었기 때문에 첫 번째 라운드를 통과하지 못했습니다. 아이러니하게도 입력 판독 방법으로 버그가 난독 화되었습니다. 문제는 간단했습니다. 입력에 32 비트 정수에 비해 너무 큰 숫자가 포함되었습니다. C #에서는 int.Parse(string)예외가 발생하지만 C ++에서는 파일 입력 스트림이 특정 오류 플래그를 설정하고 의심의 여지가없는 개발자가 문제를 인식하지 못하도록 자동으로 실패합니다.

두 예제 모두 언어 구문 대신 라이브러리가 사용 된 방식을 보여줍니다. 첫 번째는 자세한 정보를 보여주고 다른 하나는 신뢰성을 보여줍니다. 많은 라이브러리는 여러 언어로 포팅되며 일부 언어는 특별히 빌드되지 않은 라이브러리를 사용할 수 있습니다 (C 라이브러리를 사용하는 Python에 대한 @vartec의 답변 참조).

이것을 마무리하려면 올바른 알고리즘을 아는 것이 도움이됩니다. 코딩 경쟁에서, 특히 실행 시간 및 메모리와 같은 리소스가 의도적으로 제한 될 때 중요합니다. 응용 프로그램 개발에서는 환영하지만 일반적으로 중요하지는 않습니다. 유지 관리 성이 더 중요합니다. 올바른 설계 패턴을 적용하고, 우수한 아키텍처, 읽을 수있는 코드 및 관련 문서를 가지고 있으며, 이러한 모든 방법은 사내 및 타사 라이브러리에 크게 의존합니다. 그래서, 나는 어떤 종류의 바퀴가 이미 발명되었고 어떻게 그것들을 내 자신의 것으로 만드는지 이해하는 것이 더 중요하다는 것을 알게되었습니다.


1
가능하면 준비가 중요합니다. Google Code Jam을 사용하면 입력을 읽고 원하는대로 출력을 표시하는 작은 라이브러리가 있으며 제출시 해당 코드를 포함시킵니다.
Mark Hurd

두 번째로 비슷한 프로젝트 프로젝트를 수행했습니다. 아래에 입력 클래스가 Main있고 Main메소드 내부에 몇 가지 사항 이있는 소스 파일을 만듭니다 (내 입력 클래스 및 출력 스트림 및 케이스 루프의 인스턴스).
Orionii 황제

stdin에서 마지막으로 읽은 시간을 기억할 수 없습니다. JSON 파서에 꽂을 수있는 파일을 제공해주세요.
gnasher729

2

정시 프로그래밍 경쟁에서 경쟁하려면 경쟁에서 허용되는 가장 표현적인 언어를 배워야합니다. 펄이 가장 좋을 것이고 루비 나 파이썬이 뒤따를 것입니다. 여전히 알고리즘을 갖춘 좋은 기능이 필요하지만 적어도 다음과 같은 것을 작성하는 데 어려움을 겪지 않을 것입니다

Integer prev = b.get(k)
if (prev == null) prev = 0
Integer v = a.get(k);
if (v == null) v = 0;
b.put(prev + v);

대신에

b[k] += a[k]

여러 라이브러리를 배우는 것에 대해 걱정하지 마십시오. 그것들은 모두 매우 유사하며 문서는 온라인입니다. 보다 표현력이 풍부한 언어에 능통하면 표현력이 낮은 언어로 더 나은 (하지만 실망스러운) 프로그래머가 될 것입니다. 그 반대입니다.

NB

200 줄의 코드와 40 줄의 코드의 차이는 크며, 200,000 줄 프로그램과 40,000 줄 프로그램의 차이 일 때 훨씬 더 큽니다. 그렇다면 5 명으로 구성된 팀과 관리자, 1 ~ 2 명으로 구성된 팀의 차이점입니다.


3
(a) C / C ++ / Java가 프로그래밍 경쟁에서 최상위 위치에있는 경향이 있다는 사실을 알고 있습니다. (b) C / C ++는 많은 사람들 (Perl / Ruby / Python 이상)에서 "가장 강력한 언어"로 간주됩니다. (c) 연산자 오버로드로 인해 C ++ 코드는 두 번째 예제와 거의 동일하게 보일 수 있습니다. (d) 다음과 같은 경우에만 이러한 광범위한 검사 (Java로되어 있습니까?)가 필요합니다. (2) 데이터의 특성상 이것이 필요하다 (코딩 경쟁에서는 일어나지 않음). (3) 다른 사람이 사용할 코드를 작성하고 있습니다 (해당 없음).
Dukeling

1
@Dukeling :이 연구에 따르면 ( page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf ) 스크립팅 언어는 더 빠른 개발과 더 작은 소스 코드를 허용합니다. 다른 연구 ( flownet.com/gat/papers/lisp-java.pdf ) 에 따르면 Lisp는 스크립팅 언어보다 훨씬 더 많은 생산성을 제공합니다. 위에서 인용 한 두 번째 연구에 따르면 Lisp 코드는 C ++ 코드만큼 빠르며 작성하는 데 시간이 덜 걸립니다.
Giorgio

"200,000 라인 프로그램과 40,000 라인 프로그램 사이": 당신이 구별해야한다고 생각합니다. 프로그래밍 언어 상세 성 (구문)으로 인한 차이는 코드에 복잡성을 추가하지 않으므로 필요한 유지 관리 노력에 거의 영향을 미치지 않습니다. 반면에 언어 기능이 다르기 때문에 다른 라인 수를 가질 수 있습니다. 예를 들어 Python에서는 메모리를 관리 할 필요가 없지만 C에서는 모든 메모리 관리를 직접 구현해야합니다. 그런 다음 C 코드에는 더 많은 기능이 있으며 추가 유지 보수 시간이 필요하다는 데 동의합니다.
Giorgio

@Giorgio 저는 개발 시간이나 소스 코드의 크기에 대해 논쟁하지 않고 있습니다. 순수한 경험을 바탕으로 프로그래밍 경쟁에서 실제로 일어나는 일 입니다.
Dukeling

1
나는 두 가지 과학 논문 (IMO가 살펴볼 가치가 있음)을 인용하고 있었으며 웹 페이지의 사람들이 그것에 대해 어떻게 생각하는지에 대해서는 말하지 않았습니다. 의견이 널리 퍼졌다는 사실이 그 의견이 유효하다는 것을 자동으로 암시하지는 않습니다. :-) 최소한 엄격한 방법으로 확인해야합니다.
Giorgio

2

모든 알고리즘은 모든 프로그래밍 언어로 구현 될 수 있습니다. 결국, 그것은 중요한 구문이 아닙니다. 그러나 파이썬과 같은 고급 언어를 사용하면 나름의 장점이 있습니다. 적은 작업과 적은 양의 코딩. 따라서 파이썬에서 알고리즘을 구현하려면 C와 같은 저수준 언어에서 필요한 것보다 적은 행이 필요합니다.

파이썬에는 대부분의 데이터 구조가 라이브러리에 내장되어 있습니다. 그러나 C에서는 처음부터 시작하여 구조를 사용하여 모두 구축해야합니다. 확실히 고급 언어와 저급 언어 사이에는 차이가 있지만 언어가 알고리즘 구현을 방해해서는 안됩니다.


2

"40 LoC vs 200 LoC"예제를 추정하면서 "글쎄, 전체 LoC의 5 분의 1만이 쓰기 속도가 빠르기 때문에 더 좋아야한다"고 유혹하는 것처럼 보일 수 있지만, 실제로 거기에는 찾아 볼만한 진실이 거의 없다고 생각합니다.

내 의견으로는 가장 적은 LoC를 최적화하는 것은 결코 좋은 생각이 아닙니다. 예, 작성된 모든 LoC는 버그의 가능성이 있으므로 작성한 적이없는 것 등을 디버그 할 필요가 없습니다. 요점은 가독성과 분리 성을 최적화하는 것입니다. 1k LoC 모듈을 작성하는 대신 20 줄 큰 정규식을 사용하여 문제를 해결하더라도 문제가되지 않습니다. 정규 표현식은 불투명 한 벽으로 버그가 매우 발생하기 쉽고 이해하기 어렵고 변경 불가능한 방식으로 동작을 변경하지 않고 악몽을 꾸미고 있습니다.

가치를 추가하지 않는 상용구 및 자세한 정보를 제거하는 것은 모두 훌륭하지만 좋은 반면 Java 또는 C #과 같은 것을 사용하면 디자인 패턴 및 resharper와 같은 도구에 대한 지식이 있으면 코드를 리팩토링하는 데 많은 유연성이 있습니다. , 시간이 지남에 따라 정리, 정리 등을 훨씬 더 작은 파이썬 스크립트 또는 루비 앱으로 작성하면 훨씬 어려울 것입니다.

매우 중요한 비교 : 전략적인 패턴, 팩토리 등과 같은 "오버 킬 (overkill)"항목으로 채워진 100k LoC의 테스트 커버 드 디커플링 된 C # 코드를 사용하는 것입니다. 5 배 더 많은 코드의 유무에 관계없이 아키텍처가 매일 이깁니다.

일부 언어에서는 어떤 종류의 작업이 더 쉽고 편리하다는 데 전적으로 동의하지만, 필요한 도구와 요구 사항 (그리고 가까운 미래에있을 수있는 도구)에 따라 언어를 선택하는 것이 더 중요하다고 생각합니다.

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