C ++에 대한 깊은 지식이 다른 언어를 더 빠르고 쉽게 배우는 데 도움이됩니까? [닫은]


9

C ++의 모든 주요 측면을 익히고 언어의 기초를 잘 아는 사람이 다른 언어 (예 : Python, Perl, Java)를 더 빠르고 쉽게 배울 수있는 가능성이 있습니까?


9
C ++은 다른 언어 를 선택하는 것이 혼란 스러울 정도로 대부분의 다른 언어와 충분히 다르다고 주장합니다 (유일한 언어 인 경우). 많은 언어가 C ++ 구문을 공유하지만 거의 같은 방향으로 발전한 언어는 거의 없습니다. C ++에는 C ++에만 해당되는 많은 역사적인 균열이 있습니다. 새로운 언어를 빠르게 선택하는 가장 좋은 방법은 다른 패러다임에서 다른 언어를 배우는 데 집중하는 것입니다. 익숙한 패러다임이 많을수록 해당 패러다임에서 다른 항목을 더 빨리 선택할 수 있습니다.
KChaloux

3
C ++을 아는 것이 일반적으로 다른 언어를 배우는 데 이점이 있다고 생각하지 않습니다. 실제로 배우려는 다른 언어에 따라 다릅니다. 저의 프로그래밍 언어 교수는 우리가 일반적인 개념을 이해하는 데 집중해야한다고 말했었습니다. 이렇게하면 개별 언어를 배우는 것이 훨씬 쉬워 질 것입니다.
Giorgio

9
언어 별 노하우와 일반적인 지식을 혼동 할 수 있다는 점을 제외하고는 한 언어에 대한 깊이있는 학습은 일반적인 프로그래밍 학습을위한 좋은 시작입니다. 현대 C ++은 훌륭한 언어이지만, 중급 수준으로 올라간 후에는 다른 관점을 알게되면 막대한 이익을 얻을 수 있습니다. 심각하게 사용하지 않더라도 OCaml과 Ruby를 살펴보십시오. 꾸준한 프로그래머가되어 특정 언어와 일반 언어를 구별 할 수있게되면, 새로운 언어로 생산성을 얻는 것은 상당히 쉬운 일이지만, 숙달에는 항상 시간이 걸립니다.
amon

1
무엇에 비해? 다른 언어를 잘 배우고 C ++을 잘 알고 있지만 깊이 모르는 것은 전혀 모르고 있습니까?
Telastyn

2
그렇습니다. Ocaml 또는 Scheme을 알면 많은 C ++ 11의 새로운 기능을보다 쉽게 ​​이해할 수 있습니다
Basile Starynkevitch

답변:


12

일반적으로

프로그래밍 언어에 대한 깊은 지식은 다른 언어를 더 빨리 선택하는 데 도움이 될 것입니다. 프로그래밍이 구문을 배우는 것보다 더 생각하는 방식 이기 때문에 부분적으로 그렇게 됩니다. 대부분의 프로그래밍 실습은 대부분의 다른 프로그래밍 언어에 해당됩니다. 그렇기 때문에 사람들은 항상 두 번째 프로그래밍 언어를 첫 번째보다 빨리 배우게됩니다.

특정 조건에서

C ++은 다른 언어보다 훨씬 큰 '제어'를 허용하는 언어입니다. 이것은 좋고 나쁠 수 있습니다. 예를 들어, 실제 총은 숲에 갈 때 공기총보다 낫지 만 (실제로 무언가를 격추 할 수 있기 때문에) 자신과 주변 사람들에게 더 위험합니다. C ++에는 메모리 관리와 같은 개념이 있으며 대부분의 다른 언어에서는 걱정할 필요가 없습니다. 그러나 자동 메모리 관리 언어로 작업 할 때도 이러한 개념을 확실히 이해하는 것은 의미가 없습니다. C ++과 같은 언어를 사용하여 비트 단위 연산을 수행하고 '금속'으로 내려갈 수도 있습니다. 이러한 영역에 대한 기본적인 이해조차도 모든 언어의 프로그래머로서 많은 도움이 될 수 있습니다.

개인적인 의견

C ++을 배우기 전에 거의 3 년 동안 Java를 개인적으로 배웠으며 후회한다고 말해야합니다 (단일 코스 ...). 이것은 C ++ (나는 여전히 배우고 있습니다- '심오한'지식과는 거리가 멀다 : D)는 내가 원하는만큼 간단하지 않습니다. 내가 다른 방법으로 그것을했다면 나는 그것이 훨씬 쉬울 것이라고 말할 것입니다. 특히 WHY 를 알고있을 때 특정 방식으로 무언가가 이루어지고 언어의 자동 마법에 대해 안심할 수는 없습니다. 의견을 제시 할 수 있다면 C (기본 및 범용 프로그래밍 패러다임의 경우)-> C ++ (메모리 관리와 함께 OOP의 기본 이해를 위해)-> 다음과 같이 '실제'OOP 언어로 갈 수 있습니다 좋은 기초 또는 C ++의 고급 주제를 계속 사용할 수 있습니다.


3
대학에서 파스칼로 시작하게되어 기쁘다. 그런 다음 C (메모리 관리 및 비트 작업 부분)로 진행하고 마침내 oop를 위해 java로 진행했습니다 (물론 다른 언어가있을 수는 있지만). 솔직히 말해서, 얼마나 많은 대학 이 자바로 시작 하는지 혼란스럽게 생각합니다 . 실제 OOP 너무 여전히 차이로 어려움을 겪고 초보자를위한 복잡하기 때문에 당신은 필연적으로, 자바 (그리고 더 중요한 것은, OOP) 잘못을 배울 ORAND
Lovis

2
@Doval : 가비지 콜렉션은 메모리 관리에 대해 걱정할 필요 없다는 환상을 줍니다 . 관리 코드 프로그램이 얼마나 자주 메모리 누수를 일으키는 지 살펴보면 예상치 못한 장소에서 일부 참조가 유효하게 유지되므로 (컬렉션은 다년생 범죄자 임) 이것이 실제로 얼마나 환상적인 지 알 수 있습니다.
메이슨 휠러

1
@ Doval : 잘못된 크기, 위치, 정렬 : 적절한 크기가 컴파일러에 알려지고 할당자가 배치 및 정렬을 처리 할 때 객체 지향 언어로 이러한 작업을 정확히 어떻게 수행합니까? 일찍 풀기 : 이것은 GC가 막아야 할 것이므로이 논의와 관련이 없다고 말하는 것은 사실이 아닙니다. 그러나 모든 할당을 메모리 누수로 바꾸는 비용이 발생합니다. 그리고 다른 객체의 데이터를 스톰 핑 하지 않는 것은 가비지 수집 문제가 아닌 범위 검사 문제입니다.
메이슨 휠러

2
C ++은 C ++ 구현에 특화된 많은 학습을 필요로하지만 C ++의 끝없는 단점, 라이브러리 및 다양한 시스템으로 인해 C ++ 외부에서는 절대 사용되지 않습니다. 내 경험상 C ++을 쓰는 모든 사람은 기본적으로 모든 C ++가 제대로 작성되지 않았으며 대부분 C ++에 특유한 기발한 점과 이상한 점으로 가득하다는 데 동의합니다. 대부분의 언어에 C ++의 문제가 거의없는 경우 해당 지뢰밭을 둘러 보는 방법으로 다른 언어로는 유용하지 않습니다.
Jimmy Hoffa

2
@ Doval : 예, 그것은 내 요점입니다. 이러한 것들은 일반적인 경우 알고리즘 적으로 결정할 수 없으므로 올바르게 처리하려면 알고리즘이 아닌 지능적인 사람이 처리해야합니다. "누수가 아니라 비효율적 인 프로그램"이라고 말하는 것은 의미 론적으로 머리를 쪼개는 것입니다. 외부 관찰자에게있어, 프로그램의 동작은 메모리를 누수하는 프로그램의 동작과 동일합니다. 특히로드시 메모리 압착이 심각한 문제를 일으킬 수있는 멀티 태스킹 시스템과 관련하여 더욱 그렇습니다.
메이슨 휠러

9

불행하게도. 프로그래밍 클래스, 특히 초보자 수준의 클래스에서 C ++을 가르치는 경우 실제로 큰 문제입니다. 한 학기 수업의 범위!

C ++에서 시도 된 많은 것들이 결국 관성 관성을 통해 언어에서 관용적이되었으며, 그 이후로 거의 모든 다른 언어는 큰 실수로 밝혀 졌기 때문에보고 거부했습니다. 주요한 것은 C ++의 템플릿과 C ++의 객체 모델입니다 (값 유형으로서의 객체는 Liskov 대체 및 수천 개의 OOP 자체를 손상시키기 때문에 결코 좋은 것은 아닙니다).

따라서 C ++에 대한 깊은 지식을 얻은 다음 다른 프로그래밍 언어를 배우고 싶다면 다른 프로그래밍 언어에서 효과적이기 위해서는 배우지 말아야 할 많은 해롭고 비생산적인 크루 드가 있습니다.


4
Java와 C #이 템플릿 시스템을 엄격하게 약화시키는 이유는 있지만 모든 것에 대한 완전한 메타 데이터가 필요하기 때문입니다. 그리고 저는 가치로서의 물체가 어떻게 부서 지는지에 대한 설명에 관심이 있습니다. 특히 참고 문헌이 있다는 것을 고려하면 ...
중복 제거기

3
@Deduplicator : Java와 C #은 완전히 다른 제네릭 시스템을 가지고 있습니다. 경험에 따르면 템플릿은 모든 종류의 심각한 문제를 유발하며 템플릿 시스템이 처음에는 잘 계획되지 않았기 때문에 발생합니다. ( 실수로 명확한 예제를 제공하기 위해 실수 로 완료 합니다 !) 그리고 부모가 Base 인 Derived 클래스가 있고 Base의 가상 메서드를 재정의하고 기본적으로 전달하여 Base를 사용하고 가상 메소드를 호출하는 함수는 파생 버전을 호출하지 않습니다.
메이슨 휠러

2
@MasonWheeler : 아, 당신은 슬라이싱을 언급하고 있습니다.
Fred Larson

2
@ FredLarson : 그런 널리 퍼져있는 악의적 인 문제는 특정 이름을 가질 것이라고 추측했을 것입니다. (그리고 이것은 바보 같은 이름 인 C ++입니다. C ++ 세계 외부의 프로그래머가 "슬라이스"를들을 때, 그는 어레이 슬라이싱 을 생각할 것입니다 ! : P
Mason Wheeler

4
나는 당신이 쓴 많은 것에 동의하지만, 당신은 매우 편견이 있다고 생각합니다. ;-) IMHO 학습 C ++는 사람들을 어리석게 만들지 않습니다.
Doc Brown

8

아니요. C ++을 잘 알고 있으면 C ++과 같은 다른 언어를 더 쉽게 배울 수 있습니다. 그러나 그것은 지루할 것입니다. 왜 같은 두 언어를 알고 싶습니까? 그것은 당신에게 아무것도 사지 않습니다. (이것은 C ++에만 국한되지 않습니다. 모든 언어에 적용됩니다. 자연어와 비교 : 이탈리아어를 배우면 다른 언어를 배우기가 쉽지 않습니다. 스페인어, 프랑스어 또는 포르투갈어를 배우고 3 가지를 배우기가 쉬워집니다. 이 중 네 번째는 쉽게 배울 수 있지만 모든 로맨스 언어를 배우더라도 핀란드어, 중국어, 힌디어, 히브리어, 아랍어, 파슈 투어, 그리스어 등을 배우는 데 도움이되지는 않습니다.)

프로그래밍 언어는 패러다임을 구현합니다. Peter van Roy는 34 가지 주요 프로그래밍 패러다임의 포스터를 수집 했습니다 .

패러다임은 개념으로 구성됩니다. 이 포스터에는 약 18 개의 개념이 나와 있습니다.

모든 패러다임 (또는 적어도 포스터에있는 패러다임)은 이러한 개념으로 구성됩니다. 모든 언어는 이러한 개념으로 구성된 하나 이상의 패러다임을 구현합니다. 따라서 이러한 개념을 배우면 어떤 의미에서든 모든 프로그래밍 언어를 한 번에 배울 수 있습니다.

물론 여전히 많은 언어 별 특징이 있습니다 (구문 중 구문). 또한, 그 포스터는 타이핑을 완전히 무시하고 , 의존형 시스템 은 물론 System F <: ω 스타일 타입 시스템, 스칼라 스타일 타입 시스템 또는 동적 오리 타입 타입 시스템 사이에는 상당한 차이가 있습니다. à la Idris, Agda, Coq, Guru 또는 ATS.


힌두교가 아닌 힌디어 . 이탈리아어 나 C ++ ;-) +1은 물론 "힌두 학습"에 도움이 되지 않습니다 .
PKG

실제로, 다른 언어를 배우는 것은 실제로는 비슷하지만 여전히 마음을 넓히고 더 멀리있는 언어에 도움이됩니다.
염료 염료

C ++은 자연 언어와 달리 다중 패러다임 언어이므로 자연 언어와의 비교에 동의하지 않아야합니다. 또한 언어 기능을 자세히 배우면 해당 기능의 디자인 결정을 알고 다른 구현의 장단점을 이해할 수 있습니다. 예를 들어, 이점과 단점과 동적 제네릭을 배우지 않고 c ++ 템플릿을 심층적으로 학습 해보십시오. C #에 대해 언급하지 않아도 (현재는 어려움), 여전히 동적 제네릭이 무엇인지 알고 나중에 그에 대해 배울 때 C # 제네릭 제한을 즉시 알 수 있습니다.
Rado

5

프로그래밍 언어를 깊이 아는 것은 다른 가족, 적어도 같은 가족에 속한 다른 언어를 배우는 데 도움이 될 것입니다. 예를 들어, C ++ 지식은 LISP 나 Haskell에 큰 도움이되지 않지만 객체 지향 절차 언어의 경우에는 도움이됩니다. 저의 접근 방식은 언어의 각기 다른 가족 (절차, 기능, 객체 지향 등)에서 언어를 잘 배우려고 노력한 다음 지식이 그 가족의 다른 언어로 이어질 수 있다는 것입니다. 반면에 APL에 대한 깊은 지식은 다른 어떤 것도 도움이되지 않습니다 ...


3
C ++을 모국어로 배운 사람이 작성한 Self 또는 Smalltalk 또는 Ruby 코드가 어떻게 보이는지 보았습니다. 실제로 C ++을 아는 것은 OO를 배우는 데 오히려 해롭다는 것을 말하고 싶습니다. 나는 Self 또는 Newspeak가 훨씬 더 적합 할 것이라고 생각합니다. APL에 대한 깊은 지식을 갖춘 BTW는 최소한 J 및 K와 같은 언어에 도움이 될 것입니다. 또한 MapReduce 또는 Hadoop 스타일 프로그래밍에 도움이 될 수있는 상위 수준의 컬렉션 추상화 및 liftig에 대한 생각과 Functors에 대한 생각에도 도움이됩니다. , 응용 프로그램, Monads 및 범주.
Jörg W Mittag

1
@ JörgWMittag : 어떤 언어로든 COBOL을 작성할 수 있다는 것은 잘 알려진 사실입니다. 요점은 무엇입니까?
중복 제거기

@Deduplicator 모국어가 COBOL 인 경우 다른 언어로 COBOL을 작성할 가능성이 훨씬 높습니다.
Doval

실제로 COBOL에 동의해야합니다. 파스칼에서 COBOL을 쓴 사람이 몇 년 전에 일한 적이 있습니다.
Jim Nutt

5

나는 여기서 다른 해석을 할 것입니다.

C ++는 메모리 및 데이터 구조에 대해 배우기에 좋은 언어입니다. 객체 소유권 및 수명과 같은 개념에 대해 신중하게 생각해야하기 때문입니다. 또한 메모리 및 데이터 구조에 대한 학습은 모든 소프트웨어 엔지니어링 커리큘럼의 필수 부분 중 하나입니다.

그러나 데이터 구조에 대해 배워야합니다. "C ++을 배우기"만하면 실제로 많은 것을 얻지 못하고 단기적으로 다른 언어를 배우는 과정이 느려질 수 있습니다.

내가 대학에있을 때, Data Structures는 CS1 (수업 중 절반 이상이 배제) 이후에 요구되는 신입생 수준의 과정이었습니다. 그거 어려웠 어. 이 과정의 형식은 기본적으로 "[예 : 좌파 힙 ] 이전에는 본 적이없는 데이터 구조 입니다. 일주일 안에 C ++로 구현하고 출력을 예상 출력과 정확히 바이트 단위로 맞 춥니 다. 따라서 자동으로 등급을 매길 수 있습니다. " 다음 주에는 새로운 데이터 구조와 새로운 과제가 주어집니다. 다른 코스를 합친 것보다 한 코스에서 더 많은 것을 배웠을 것입니다.

이것이 C ++을 소중하게 만들기 위해 필요한 학습입니다.


2

배우는 모든 언어는 특히 동일한 패러다임 내에서 다음 언어를 배우기 쉽게 만듭니다. 그것들은 서로를 많이 빌리고, 잠시 후에 새로운 언어가 다른 언어의 기능 모음처럼 보이지만 몇 가지 독특한 비틀림이 생깁니다.

나는 C ++이 다른 언어보다 낫거나 더 나쁘지 않다고 생각합니다. 그것은 내가 아는 가장 장황한 언어 중 하나이며, 대부분의 다른 언어에서는 쉽지만 다음 언어를 배우기 쉽도록 해석 할 필요는 없습니다 . 그러나 일반적으로 다음 언어를 사용 하기 쉽게 만듭니다 . 차이가 있습니다.


0

아니요. C 또는 "기본적으로 C"인 C ++의 하위 집합에 대한 깊은 지식은 다른 언어를 학습 할 때, 적어도 구현이 수행해야 할 작업을 파악할 때 도움이됩니다. 반면에 C ++에 대한 깊은 지식은 다른 언어를 배울 때 혼란 스럽거나 관련이없는 정보 일 것입니다. 예를 들어 Perl / Python / Ruby로 이동할 때 C ++의 객체 방향을 표면 수준 이상으로 배우면 해당 언어의 객체가 완전히 다른 방법C ++보다. 대부분의 다른 언어와 다른 언어 기능 (예를 들어, C ++ 템플릿과 Haskell 다형성은 완전히 다른 구현으로 기본적으로 동일한 기능 임)에 대해서도 마찬가지입니다. 따라서 C ++에 대한 깊은 지식은 대부분 C ++에 따라 다릅니다.


이 게시물은 읽기 어렵습니다 (텍스트의 벽). 더 나은 형태로 편집 하시겠습니까 ?
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.