C ++가 모국어로 적합합니까? [닫은]


26

지역 대학은 사전 프로그래밍 경험이없는 1 학년 대학생 (16 세)에게 C ++을 가르치고 있습니다.

첫 번째 프로그래밍 언어로 C ++이 적합합니까?


56
모든 언어는 모국어가 될 수 있습니다. 정말 중요하지 않습니다.
Adam Lear

8
이것은 당신을 관심을 가질만한 - joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Craige에게

19
@Anna Lear : 물론, 모든 언어는 모국어가 될 수 있지만 C ++이 훌륭한 모국어가 될 수는 없습니다. 귀하의 답변이 실제 답변 인 경우 도움이되지 않는 것으로 아래로 투표 해주십시오.
Ed James

6
@ Doug : 나는 생활을 위해 C ++를 프로그래밍하고 있습니다 ... 요점이 무엇입니까?
Matthieu M.

9
@Dough – 오늘날 컴퓨팅 프로젝트의 70 %는 임베디드 시스템 및 마이크로 장치 용 소프트웨어 작성과 관련이 있습니다. 그 프로젝트에 어떤 언어가 사용되는지 맞춰보세요? 엔트리 레벨 직책에 가장 적합한 사람이 누구일까요? 확실히 Java 또는 .NET 단일 트릭 조랑말은 아닙니다. 가혹하게 들리지만 학교는 전체 CS 졸업생에게 프로그래밍 직업 시장의 30 %에 대해서만 교육함으로써 큰 ​​장애를 겪었습니다. 앱 부문에 프로그래머가 많고 (30 %) 시스템 부문이 부족합니다 (70 %). 그 숫자는 어디에도 없습니다. 미래의 직업 기회? 그래 맞아.
luis.espinal

답변:


61

단호 없음 .

학생들을 위해 염두에 두어야 할 목표가 있다면 다른 언어 나 일련의 언어가 더 빠르고 좋습니다. 예.

"학생들은 저수준 개념을 이해해야합니다."

"낮은 수준"코딩은에서 객체를 가져 new와서 다시 공급 delete하고 때로는 포인터를 가리 키지 않아야하는 위치로 구성되지 않습니다. 함수, 클래스 및 템플릿은 저수준이 아닙니다. RAII 12 가지 방법이 사용하는 const, std::ostream::operator<<, protectednew낮은 수준의 개념이 아니다. 그것들은 낮은 수준의 의미를 지니고 있으며 몇 달 동안 또는 미래 수업까지 건너 뛰고 대신 C ++ 의미의 산을 가르치고 있습니다.

MIPS 또는 MMIX와 같은 좋은 환경과 교육 자료를 갖춘 어셈블러를 제안합니다. 급한 경우 C를 우회하여 최소한 어셈블러 출력을 살펴보십시오. 이렇게하면 C ++이하는 모든 저수준 이해와 더 빠른 이해가 가능합니다.

"학생들은 객체 지향을 이해해야합니다."

C ++에 내장 된 객체 지향은 OO 개념 또는 거의 모든 다른 고급 개념을 가르치기 위해 지나치게 복잡합니다. 잠재적 이유에 대한 훌륭하고 긴 목록은 C ++ FAQ 를 참조하십시오 . 여러분은 그 모든 것들을 공격해야합니다. 새로운 프로그래머에게는 매우 오랜 시간이 걸릴 것입니다. 그렇지 않으면 많은 프로그래머를 건너 뛰고 새로운 프로그래머를 어둠 속에 남겨 둡니다. 실제로 C ++을 알지 못합니다!

C ++을 전혀 가르쳐야하는 경우에는 먼저 객체 (Python, Ruby, Squeak, Common Lisp, Racket)로 더 단순하고 고급 언어를 배우는 것이 좋습니다. 그 외에도 기능 언어를 방문하여 OO와 분리 된 개념으로 다형성을 배우십시오.

"학생들은 템플릿과 템플릿 메타 프로그래밍을 이해해야합니다."

아무도 실제로 이것을 묻지 않지만 나는 그들이 원하기를 바랍니다. C ++에는 멋진 템플릿이 있고 STL은 멋지지만 C ++을 먼저 가르치기에는 우선 순위가 높지 않아야합니다. OCaml 또는 Haskell 타입 시스템을 가르치고 그 개념을 개선하는 것은 어쨌든 더 빠를 수 있습니다.

"학생들은 문제 해결을 배워야합니다."

예, 어떤 언어로든 얻을 수 있으며, 수하물이 적기 때문에 C ++ 이외의 다른 언어로 더 많이 얻을 수 있습니다. 다시 한 번 문제 해결 기술 대신 학생들이 배우게 될 모든 것들의 목록은 C ++ FAQ 를 참조하십시오 .

"위의 모든 것, 우리는 하나의 언어 만 사용하면됩니다." 또는 "고용주가 원합니다." 또는 "우리는 C 스타일 언어가 필요합니다." 또는...

여러 언어를 가르칩니다.

하나의 언어 만 가르치거나 학습함으로써 시간이나 에너지를 절약한다는 생각은 말도 안됩니다. 주어진 언어를 배우는 데 정확히 X man 개월 ( HINT! HINT! ) 이 걸린다는 아이디어를 기반으로합니다 . 여기서 X는 언어 당 하나의 숫자 또는 하나의 숫자입니다. 이것은 '요구 사항'과 '테스팅'쓰레기를 모두 건너 뛰어 시간과 비용을 절약 할 수 있다는 생각과 거의 동일합니다.

여러 구문의 경우 모든 언어에서 C 구문을 다른 언어에 대해 치우치게하여 C 언어를 기대하도록 가르치면 학생들을 위험에 빠뜨릴 수 있습니다.

C ++로 시작하는 것보다 거의 모든 경로가 더 빠르고 좋습니다. 간단한 고급 언어를 배우면 C ++이 더 빠릅니다. 학습 어셈블러를 사용한 다음 C ++이 더 빠릅니다. C ++ 이외의 다른 것들은 학생들을 더 빨리 데려다 줄 것이고 더 많은 부팅 방법을 알게 될 것입니다. C ++을 먼저 가르치지 마십시오.


4
좋은 답변입니다! 실제로 많은 C ++ 기능은 저수준 프로그래밍과 전혀 관련이 없습니다.
Marco Mustapic

7
+1, 훌륭한 답변. 때때로 C ++의 변덕이 실수로 "낮은 수준"과 동일하다는 것은 사실입니다. C ++ FAQ에 링크되어 있지만 사람들이 C ++ FQA (또는 "자주 묻는 질문": P)를 살펴 보는 것이 좋습니다 .
Andres F.

2
와우. 즉, 생각 나게 자바 IAQ ...
제시 밀리칸에게

완전히 동의하십시오. Malbolge조차도 초보자에게는 C ++보다 낫습니다.
rightfold

2
나의 유일한 예약-도서관을 개발하는 사람들과 주로 관련된 세부 사항에 들어 가지 않고도 많은 것을 가르 칠 수 있습니다. 기본 C ++ 만하고 있다는 것을 분명히하는 한 ... 어쨌든 누군가에게 무엇을 가르쳐 주었습니까?
Steve314

54

아니요, C ++는 숙련 된 C ++ 개발자에게도 어려운 언어입니다. 가장 간단한 알고리즘이라도 많은 언어 미묘함을 설명해야합니다. Hello World 예제를 고려하십시오.

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

#include명령은 무엇입니까 ? 무엇입니까 std::cout. 왜 ::? 무엇입니까 <<? 오, 오버로드 된 연산자입니다! 과부하 된 운영자는 무엇입니까? Sooo의 경우 ints비트 이동을 수행하지만 무엇이든 std::cout콘솔에 물건을 출력합니다. 오, std::cout스트림이며, 스트림은이 <<>>연산자 오버로드되었습니다.

파이썬에서 같은 샘플을 보자 :

print("Hello World!")

그게 다야, 알고리즘을 코딩 해 보자.


15
파이썬은 7 학년 학생들에게 적합합니다. 대학생이 훨씬 더 많이 파악할 수 있습니다.
굴샨

13
물론, 우리는 첫 번째 언어에 대해 이야기하고 있습니다. C ++은 다른 언어에 비해 배우고 익히기가 어려운 것으로 알려져 있습니다. 프로그래밍을 가르치는 데 왜 사용합니까? 학생은 프로그래밍 기본 사항을 알면 나중에 C ++을 배울 수 있습니다.
Marco Mustapic

8
<< :)의 인수 의존적 조회에 대해서는 언급하지 않았습니다.
MetricSystem

6
언어를 시작하기 위해 모든 것을 완전히 알 필요는 없습니다. cout << 뭐든지; "그냥 작동", 나중에 작업자 과부하 등을 다루기 전까지는 세부적인 내용을 다루지 않아도됩니다.
Colen

6
나는 요일에 C ++보다 파이썬을 입문 언어로 받아 들였다.
jprete

21

복잡한 구문, 많은 규칙, 오래된 언어, 오류가 발생하기 쉬운 메모리 관리와 같은 첫 번째 언어는 아닐 것입니다. 학생들에게 스몰 토크와 같은 OO, 파이썬과 같은 프로그램 또는 Haskell과 같은 기능을 가진 프로그램을 가르치는 것이 좋습니다.

더 나은 언어를 배운 후에는 나중에 C ++을 배울 수 있습니다 (도움이되지 않는 경우).


5
모국어로서의 Haskell은 흥미로운 실험이 될 것입니다.
래리 콜먼

Cambridge University의 CS 과정 @Larry는 SML을 첫 번째 언어로 가르치고 있습니다.
피터 테일러

1
함수형 프로그래밍은 당신의 두뇌를 뒤흔들고 있습니다. MIT는 초기에 Scheme으로 시작한다는 것을 알고 있지만 학교에서 2 년간의 하이브리드 절차 / OO 스타일이 끝나기 전까지는 함수형 프로그래밍을 시작하지 않은 것이 기쁩니다.
justkt

11
@justkt : 모든 언어는 당신의 두뇌를 왜곡시킵니다. 그것은 당신이 그것을 어떻게 꼬기를 원하는지의 문제입니다.
David Thornley

+1이지만 C ++ 이외의 언어를 반드시 "더 나은"것으로 분류하지는 않습니다.
greyfade

18

짧은 대답 : 그렇습니다!

나는 모든 언어가 적절한 시작이지만 특히 C ++ (또는 동등한)이라고 말합니다. 요즘 C #과 Java는 API 및 IDE에 의존하는 방법을 빠르게 배우고 C ++을 사용하면 성능 최적화 등을 포함하여 프로그래밍을 처음부터 배울 수 있습니다.

.Sort ();에 내장 된 언어에 맹목적으로 의존하기 전에 프로그래밍, 반복 및 정렬의 기본 사항을 배우는 것은 결코 나쁜 생각이 아닙니다.


11
루핑과 정렬, 예. 어떤 언어로든 그렇게 할 수 있습니다. 그러나 왜 피할 수있을 때 포인터와 이상한 구문으로 작업을 시작합니까? 더 많은 프로그래밍 경험이 있으면 나중에 모든 것을 배울 수 있습니다.
Marco Mustapic

4
@Marco : Stroustrup의 입문 교과서 "프로그래밍 : C ++을 사용한 원리와 실습"은 책의 중간에 포인터를 소개합니다. 포인터를 도입하지 않고도 C ++에서 많은 작업을 수행 할 수 있습니다.
David Thornley

4
“…… 전에 기본을 배우는 것은 결코 나쁜 생각이 아닙니다.” 이 주장을 뒷받침 연구가 있습니까? 나는 많은 똑똑한 사람들이“하단”이 유일한 교수법이라고 상식으로 선포하지만 이것은 매우 논란의 여지가있는 점이며, 내가 알고있는 유일한 (단지 매우 제한된) 교훈적 연구는 반대 결론을 지적합니다.
Konrad Rudolph

1
@David : 문제는 포인터없이 "C ++에서 많은 것들"을하는 것이 훨씬 더 나쁘다는 것입니다. 포인터가 없으면 모든 객체가 스택에 선언되며 이는 최악의 프로그래밍 아이디어 중 하나입니다. 가치 유형과 상속 / 다형성은 혼합되지 않으며, 혼합하려고하면 더 나은 디자인 언어에는 존재하지 않는 전체 범주의 오류가 발생합니다.
메이슨 휠러

9
맙소사! 왜 C ++의 불필요한 특질에 제한된 두뇌주기를 구울 수 있습니까? 프로그래밍의 기본 개념을 배우는 것이 목표 인 경우 메모리 관리와 같은 관련없는 저수준에 집중해야하는 이유는 무엇입니까? 왜 깊은 곳으로 뛰어?
Maglob

14

실제로 나는 이것이 실질적인 이유로 제 1 언어로서 좋은 선택이라고 생각합니다. C ++를 배우고 나면 다른 언어는 배우는 바람처럼 보일 것입니다.


10
Dijkstra의 모든 학점은 C ++에 사전 노출 된 학생들에게 좋은 프로그래밍을 가르치는 것은 사실상 불가능합니다. 잠재적 인 프로그래머로서 그들은 재생의 희망을 넘어 정신적으로 절단됩니다. ;)
Mason Wheeler

3
그들은 C ++에서 많은 나쁜 습관을 배워야 할 것입니다. 다른 예제를 사용하려면 어셈블러를 아는 것이 더 나은 Java 프로그래머가됩니까? 나는 그렇지 않다고 말하고 싶습니다.
Andres F.

16
@ Andrés F .: 동의하지 않습니다. 어셈블러를 알면 작성중인 내용에 상관없이 더 나은 프로그래머가 될 수 있습니다. 실제로 무슨 일이 일어나고 있는지 이해할 수 있기 때문입니다.
메이슨 휠러

2
@Andres : 너무 많은 Java / C # 프로그래머가 다른 언어로 와서 모든 것을 객체에 넣는 것을 보았습니다 ... 많은 경험이 부족합니다.
Matthieu M.

3
@Andres F.-Java를 수행하는 12 년 동안 리소스 할당, RAII와 같은 문제에 전혀 노출되지 않아서 gc 친화적 인 응용 프로그램을 프로그래밍하는 방법을 모릅니다. 자동 가비지 지원이없고 OO 이외의 패러다임 (C, C ++, Ada 또는 Algol 제품군의 컴파일 된 언어에 대한 지원)을 지원하지 않는 어셈블리 및 컴파일 된 언어 이해 는 Java로 효율적 이고 큰 시스템 을 작성하는 방법을 알려줍니다 . C #, Python, 이름을 지정합니다. 또한 C ++의 객체 모델은 전혀 Java와 비슷하지 않습니다.
luis.espinal

10

나는 15-16 세 때 C ++을 가르쳤다.

다른 사람들에게 마법을 남기고 사물의 내부 작용을 배우는 것이 좋습니다.


엔트리 레벨 C ++ 구문과 의미를 파악할 수 없다면 컴퓨터에 능숙하지 않습니다. 그렇게 어렵지 않습니다. "클래스가있는 C"를 피할만한 이유가 없습니다.

학생들이 템플릿 메타 프로그래밍, 다형성 호출을 추론하고 다중 상속 계층 구조를 풀기 시작할 것을 기대한다면, 사용하는 모든 종류의 언어에 대한 엔트리 레벨 클래스에있어 우스운 일입니다.

학생들에게 복잡한 프로그래밍을 숨기려는 경향이 있습니다. 그것은 잘 끝나지 않습니다 (cf Spolsky의 Java Schools 에세이 참조). 그 사람들은 머리를 똑바로하지 않으면 DailyWTF에 끝납니다. 추상화가 누출되고 추상화가 누출되는 경우 (그렇지 않은 경우),이를 처리하는 것보다 더 나쁩니다. 저는 엔트리 레벨 C ++ 학생들을위한 TA로 일했습니다 . 모든 것이 숨겨져 있거나 조사를 위해 빛으로 가져와야합니다. 마술은 학습자의 적입니다.

머신 코드로 컴파일 된 시작 언어를 추천해야한다면 파스칼 변형이 가장 좋은 방법 일 것입니다. 내가 기억하는 것에서 C 패밀리보다 더 규칙적이고 구조적인 접근 방식이 있습니다.


1
@Ed :별로. 나는 QBASIC에서 If and Goto를 습득했으며, 그 정도였습니다. 포인터, 배열, 함수, 클래스 등은 모두 C ++ 미래에있었습니다. 재귀도 이해할 수 없었습니다.
Paul Nathan

5
잠깐, 아무도 C ++을 먼저 이해 하지 않고 누군가 C ++을 사용하여 프로젝트를 진행할 것으로 기대하지 않습니다 ! 그것은 실제로 TheDailyWTF에 합당한 코드로 이어질 것입니다. 그러나 귀하의 주장과 달리 C ++을 배우는 것은 사소한 일이 아니며 "클래스가있는 C"도 아닙니다. C ++에는 거대하고 복잡하며 때로는 의미가없는 구문과 문법, 무한한 키워드와 규칙이 있습니다. 처음에는 끔찍한 언어입니다. 교육 언어로서 학생들이 C ++의 결함이 프로그래밍 세계에서 자연스럽고 피할 수 없다고 생각하도록하기 때문에 끔찍합니다.
Andres F.

1
Andr : "~ C ++ 또는 All C ++"라는 잘못된 이분법을 고집하고 있습니다. 잘못입니다.
Paul Nathan

1
@Paul : 충분히 공평합니다. 그러나 이것을 고려하십시오 : 단순화 된 C ++의 구문 및 문법조차도 전체 언어의 모든 기능을 지원해야하기 때문에 복잡합니다. 따라서 간단한 형태로 가르치더라도 추악한 언어를 사용하는 것에 대해서는 이미 타협했습니다. 나는 당신이 단지 C로 코딩하는 것이 아니라, 일부는 syntatic sugar (일명 "class with C")로 코딩하는 것이 아니라고 가정합니다.
Andres F.

2
@Andr :별로. C ++는 C89에 비해 구문 상 단순화를 상당히 제공합니다. 또한, 엔트리 레벨 목적을 위해, 내가 생각할 수있는 모든 경우에 대해 상황이 매우 간단합니다.
Paul Nathan

8

나는 '아니오'라고 말할 것입니다. 저는 프로그래밍을 배우고 싶어했고 열망하는 C ++로 대학에서 내년에 바로갔습니다. C ++을 다른 언어 (언어 나 실제 응용 프로그램의 개념이 아니라 반드시 이해하는 개념) 인 것처럼 C ++을 가르치고있는 교사와 함께 매주 우리에게 닥친 프로젝트와 충돌하면서 화상을 입었습니다. 반의 절반. 내가 가르치고있는 것을 소화하고 실험하고 적용 할 수있을 때까지, 나는 시험 과제의 두 배가되는 프로젝트 숙제로 어려움을 겪었다. 나는 그것이 100보다 200 레벨 코스라고 주장합니다.

나는 정말로 최선을 다했다. 나는 동정을 요구하지 않았고, 그것이 도전이 될 것이라는 것을 알았지 만 선생님은 나를 도와 주지도 않았습니다. 내가했던 것처럼 교과서를 읽으 러 가라고 말해줘.

루비 나 파이썬은 누군가를 프로그래밍 세계에 빠뜨릴 수있는 훨씬 더 나은 언어라고 주장합니다. 깨끗하고 간결하며 읽기 쉽고 명확한 구문.


8
잘못 배운다면 모든 언어는 나쁜 언어입니다.
David Thornley

3
@David Thornley : 그러나 올바르게 가르친 경우에도 일부 언어는 모국어로는 적합하지 않습니다. 예를 들어, Cobol입니다.
Andres F.

나는 더 나은 선생님, 다른 사람들을 참여시키고 번개 속도로 강의 자료를 배우는 것이 아니라면 결과가 다를 수 있다고 생각합니다. 나에게 너무 빨리 굴렸다.
케빈

@ Andrés F .: 나는 그것에 동의하지 않습니다. 그러나 Kevin의 설명은 나쁜 선생님에 관한 것이었고, 나쁜 선생님은 Python 또는 Scheme을 제 1 언어 (좋은 제 1 언어의 두 후보자)로 망칠 수 있습니다.
David Thornley

2
@Chris : 저는 Cobol로 프로그램했고 당신을 불쌍히 여깁니다 :)
Andres F.

8

아니.

교육 언어로서 C ++은 C보다 약간 우수합니다.이 언어는 최악의 교육 언어 중 하나입니다. 처음에는 많은 복잡성을 소개하고, 언어의 일부는 직관적이지 않으며, 대부분 프로그래밍에 대한 것보다 C ++에 대해 더 많이 배우고 있습니다.

C ++ (또는 C)가 나쁜 언어이거나 학습 할 가치가 없다고 말하는 것은 아닙니다. 파이썬과 같은 더 나은 교육 언어가 있다는 것입니다.


1
C는 가르치기 어려운 언어이지만 확실히 최악의 언어입니다. COBOL과 Java는 케이크를 C보다 훨씬 더 나쁜 것으로 간주합니다. C에 대한 좋은 점은 내부 금속을 앞쪽으로 처리해야한다는 것입니다 (어셈블러에 깊이 관여하지 않아도 됨). 사람들은 C를 기본 언어로 성공적으로 가르쳤습니다. 물론 파이썬이나 루비 (또는 다중 패러다임이며 가장 간단한 작업을 위해 OO를 미리 요구하지 않는 언어)와 같은 다른 더 우아한 옵션이 있습니다 .C는 최악의 가르침 중 하나가 아닙니다. 긴 선택이 아닌 선택.
luis.espinal

1
조금 더 나은? 당신은 어떻게 알아? C ++는 C에 대해 나쁜 모든 것을 받아들이고 그 위에 빌드합니다 !
메이슨 휠러

1
@MasonWheeler : C ++에서 정직 - 투 - 하나님 제공하기 때문에 주로 string과부하 운영자가 좋아하는 데이터 형식을 +, =그리고 ==일을하는 그 학생 다소 나마 기대, 문자열 처리 요구가 C.에서 할 수 방법에 비해 따라서 "변두리" . 나는 가르치는 언어로 권장하지 않습니다.
John Bode

7

고등 교육의 두 가지 필수 유형이 있습니다 : 대학과 무역 학교. 차이점은 졸업 후 무엇을하고 싶은가에 있습니다. 자동차 분야에서는 정비사 또는 기계 엔지니어가 될 것입니다.

즉, C ++은 엔지니어가되고 싶을 때 훌륭한 첫 번째 언어이며 정비사와 동등한 프로그래밍이되고 싶을 때는 형편없는 언어입니다.

C ++의 소개 클래스는 데이터 형식, 정의, 선언, 포인터, 메모리 할당 등에 대해 많은 시간을 할애합니다. 여러 학기 동안 유용한 것을 할 수 있도록 건물을 짓는 데 훌륭한 기초이지만, 일단 거기에 도착하면 어느 정도의 복잡성을 처리 할 수있는 기초가 있음을 알고 싶습니다.

다른 한편으로, 당신이 더 유용한 무언가를 더 빨리 할 수 ​​있기를 원하지만, 도메인과 복잡성이 제한 되어도 상관 없다면, 저수준 개념에 모든 시간을 소비하는 것은 낭비가 될 것입니다. 훌륭한 html form validator를 작성할 수있는 많은 프로그래머가 있지만, 장치 드라이버를 설계하는 방법에 대한 실마리는 없습니다.


5

확실한. 내 첫 번째 언어는 C 였지만 실제로는 클래스를 C ++로 쉽게 만들었습니다. 대학에 도착하면 Java를 훨씬 쉽게 처리 할 수있었습니다. C ++은 약간 가파른 학습 곡선을 가질 수 있지만 올바르게 학습되면 괜찮습니다.


4

아니오, C ++는 모국어로 적합하지 않습니다. 여기에 나와있는 것처럼 많은 전문 프로그래머가이 의견을 공유하지만 이것은 또한 전문 교사의 의견이기도합니다.

다음은 Carnegie Mellon University 학장의 보고서 에서 신입생을위한 프로그래밍에 대한 입문 과정을 위해 C ++을 사용하는 것에 대해 말한 내용입니다.

C 또는 C ++와 같은 표준 언어는 복잡성과 결함으로 인해 비공식 및 기계화 된 추론 기법을 모두 방해하므로이 과정에 적합하지 않습니다.

CMU는 두 가지 입문 과정, 즉 필수 과목과 기능 과목을 제공합니다. 기능 프로그래밍을 위해 SML이 선택되었습니다. 나는 필수 코스를 위해 무엇을 선택했는지 모르지만 보고서는 C의 하위 세트를 사용한다고 언급합니다.


2

확실한. 1 학년 학생들이 이해하기 쉬운 다른 언어가 있습니다. 그러나 교사가 C ++에서 개념을 천천히 소개 할 수있는 방법이 있습니다.


2

확실히 C ++는 첫 번째 언어가 될 수 있습니다. 그러나 그것은 얼마나 잘 가르쳐 지는가에 관한 것입니다.

모든 사람들은 모국어를 이해하기가 매우 쉬워야한다고 말합니다. 그러나 제 요점은 대부분의 사람들이 학부 수준에서 프로그래밍을 시작한다는 것입니다. 그래서 당신은 그들이 파악할 수있는 것을 가르 칠 수 있습니다. 그리고 C ++을 사용하면 더 낮은 수준에서 더 높은 수준의 프로그래밍으로 이동할 수 있습니다.


그러나 왜 더 높은 수준의 프로그래밍 에서 시작하지 않습니까? 그것은 우리가 대부분의 문제를 해결하는 수준입니다 (물론 특정 도메인 특정 문제는 제외). 그런 다음, 금속에 더 가까이 다가 가야한다면 C ++, 어셈블러 등을 배울 수 있습니다.
Andres F.

나는 그것이 얼마나 잘 가르쳐지고 있는지에 동의합니다!
Gary Willoughby

2

아뇨.

내가 길을 가졌다면 학계에서 거의 전적으로 사용하는 것을 금지 할 것입니다. 이미 만들어진 것과 상반되는 이유가 아니라 너무 많은 사람들이 C ++ (또는 변형)이 거의 모든 상황에서 사용할 수 있기 때문에 거의 모든 문제에 대한 해답이라고 생각하기 때문입니다. 프로그래밍의 드라이버입니다.

어떤 사람들은 나사를 조여서 작업에 완벽하게 적합한 도구를 사용합니다. 다른 사람들은 프라이 바처럼 그것을 사용하지만 종종 효과적이지만 실제로는 이상적이지 않습니다. 아버지가 당신에게 말할 수 있든지 스크류 드라이버가 프라이 바가 아니며 생크 구성이 의도적으로 만들어지지 않았기 때문에 오용으로 인해 치명적으로 실패 할 수 있기 때문입니다 prybar가 만나게 될 힘의 종류. 또 다른 사람들은 그것을 펀치 나 끌로 사용하려고 시도 할 수 있으며, 드라이버의 손잡이는 펀치 나 끌이 견딜 수 있도록 고안된 심한 학대를 위해 만들어지지 않았기 때문에 거의 항상 문제가 발생합니다.

내 의견으로는 프로그래머의 임무는 일반적으로 실제 문제를 자동화로 변환하여 어느 정도의 효율성 향상 (작업에 대한 자원 투입 감소), 속도 (작업 수행 시간 감소), 예측 가능성 (반복성 증가) 작업) 또는 조직 (작업 간의 관계에 대한 인식 증가).

프로그램을하는 모든 사람이 컴퓨터의 낮은 수준의 작동, 특히 장치 IO 및 메모리 할당에 대한 일반적인 지식을 가져야한다는 것은 이해할 만하지 만 실제로는 그 지식을 어느 정도까지 활용해야한다는 것은 명백한 일입니다. 대부분의 작업. 더 넓은 범위의 문제를 이해하지 않고 그렇게하려고 시도하면 불필요한 위험이 발생합니다.

C와 그 파생어가 해결하는 문제의 종류가 현재와 미래의 문제 중 일부에 임의로 적절하지 않기 때문에 첫 번째 프로그래밍 언어는 C / C ++ 또는 유사 변형이어야합니다. 이전에 스크루 드라이버 프로그램), 실제로는 다가오는 문제의 작은 세트에 지나지 않습니다. 대부분의 프로그래머는 상호 연결된 소형 모바일 장치의 보급률이 높아지고 있음에도 불구하고 핵심 OS 기능 또는 직접 장치 인터페이스를 개발하지 않습니다. 대부분 우리처럼 일하고 살 것입니다. 이미 2 세대 이상인 코드를 수정하고 단계적으로 폐지 한 경우, 이미 오래된 기술을 구현하거나 킬러 (x + 1) 앱의 기술을 다루고 있습니다.

첫 번째 언어로는 가벼운 의무이지만 다양한 기능의 LabView 변형 인 Lego NXT를 살펴 보겠습니다. 레고 NXT는 상업 벤처에 널리 사용되지는 않지만 "센서가 풍부한"방식으로 프로그래밍하는 것이 근본적인 특성을 나타냅니다. Javascript 또는 TCL / TK와 같은 플랫폼 중립적 스크립팅 언어와 쌍을 이룰 수 있습니다. 두 가지 모두 매우 기본적이지만 효과적인 작업을 수행하기 위해 발견해야 할 사항에 있어서는 상대적으로 영향이 적으며, 피드백 루프 측면에서 높은 수익률과 다양한 수준의 문제 복잡성을 도입하고 해결할 수있는 유연성을 제공합니다. 또한 학생들이 미리 준비된 환경에서 제공되는 것 이상의 잠재력을 탐색 할 수있는 좋은 기회를 제공합니다.

4 개의 실린더를 자동으로 구동하는 법을 배우고 나서 실제로 관심이 있고 동기가있는 경우 큰 v8 수동 핫로드로 단계를 올립니다. Joel이 발 밑의 돌 아래에서 록 스타 프로그래머를 찾지 못하면 다른 곳을 계속 보거나 도구 상자에 여러 드라이버가 필요한 이유를 다시 생각해야 할 수도 있습니다.


1

초보자가 C ++에서 쉽게 실수를 저지르는 몇 가지 사항은 다음과 같습니다.

당신이 테스트하고 싶었던 곳에 할당하기 = vs ==

누락;

중괄호의 판독성 vs. 예를 들어 파스칼 시작-끝

그리고 혼동 할 모든 포함 파일, 매크로, 메모리 관리 등이 있습니다.

따라서 C ++은 시작하기에 가장 적합한 언어가 아니라고 말할 수 있습니다. 그러나 배울 때 매우 유용 할 것입니다.

다른 사람들도 제안했듯이 C #, Java 또는 VB를 사용하고 구문 강조 표시, 디버거 등을 갖춘 좋은 IDE를 사용하여 오류를 쉽게 복구 할 수 있습니다.


1

내가 대학에있을 때 C ++는 대학 1 학년 동안 가르친 기초 언어였습니다. 이론에는 복잡한 프로그래밍 개념이 포함되어 있으므로 마스터 할 수 있으면 다른 언어를 선택할 수 있습니다. 그것은 좋은 기초가되었습니다.

저는 고등학교 1 학년 동안 핵심 언어를 Java로 전환할지 여부를 결정하기 위해위원회에서 활동했습니다. 몇몇 저명한 고용주와 부서의 동창들과 이야기를 나눈 후, 자바로의 전환이 학생들의 가장 큰 관심사라고 판단되었습니다. 우리가 말한 고용주는 사람들이 고용하기 위해 사용하고있는 언어로 경험하기를 원했습니다. 저는 10 년이 지난 지금도 여전히 Java를 핵심 언어로 사용하고 있다고 생각합니다.

비슷한 메모에서, 우리는 정말 좋은 C ++ 기술을 가진 두 명의 최근 대학 졸업자를 고용하려고했습니다. 우리는 찾을 수 없었습니다.


1

나는 그렇습니다라고 말할 것입니다. 그러나 모든 언어는 실제로 첫 번째 언어가 될 수 있습니다. C ++은 복잡하고 때로는 어렵지만 실제로 할 수있는 작업 (제한 없음)을 보여주기 때문에 C ++이 좋습니다. 또한 다른 언어를 사용할 준비를하는 데 도움이되는 객체 지향 디자인이 있습니다.

C ++은 제 첫 언어 였고 기뻤습니다. OOP 사고 방식을 일찍 생각하게해서 고맙습니다. 그러나 결국, 그것은 실제로 당신이하고 싶은 일에 달려 있습니다. 한 언어를 능숙하게 사용하면 다른 언어를 선택하는데 아무런 문제가 없을 가능성이 있기 때문에 언어는 그다지 중요하지 않습니다. 뭐하고 싶어? 게임을합니까? 휴대폰 프로그램? 각각에는 더 적합한 도구와 언어가 있습니다.


1

C ++은 초보자가 아닌 전문가 언어입니다 ... Java 또는 C # 또는 Python이 아닌 C를 먼저 말할 것입니다 ... 왜? C는 당신에게 당신의 기억과 모든 언어에 의해 숨겨져 있지만 어디에나 존재하는 포인터와 같은 까다로운 개념들에주의를 기울 이도록 가르치기 때문입니다. 메모리가 때때로 해제되어야하는 이유를 이해하지 못하는 가비지 수집가가 모든 코딩 쓰레기를 청소하는 작은 드워프가 아니라고 생각하는 많은 젊은 개발자를 보았습니다. RAM ... 그러나 그들은 왜 가비지 컬렉터가 단순히 마술처럼 모든 것을 청소하지 않는지 이해하지 못합니다! 그리고 나는 C ++로 코딩하는 이런 종류의 개발자 (그리고 Corba에서는 더 미친 듯이)를 보았고 도살했습니다 !!!!!!!!!! 그래서 C로 코딩을 배우고 객체 개념과 모든 설탕에 대해 Python / Java / C #로 이동하는 것이 좋습니다. 그런 다음 모든 것을 이해하면 C ++로 이동하여 C ++의 힘을 느끼지 만 모든 위험과 다른 사람이 사용하지 않아야하는 이유를 발견합니다.)


1

아니. C ++에는 너무 많은 것들이있어 초보자가 이해하기 어렵습니다. "모든 프로그래밍 언어가 동일하다"라는 오류에 빠지지 마십시오.

C / C ++ / Java / C # / Perl을 사용하여 Basic 또는 Pascal ( "사용되지 않음"항목 무시)로 시작하십시오. 또는 기회가 있다면 먼저 Logo & Karel을 사용한 다음 Basic 또는 Pascal을 사용하십시오.

PD 일부 대학 및 동료는 프로그래밍 언어 사용 및 비교 수업을 가지고 있으며, 해당 수업을 가르친 경우가 있습니다.


0

프로그래밍의 기초를 배우기 위해 모든 언어를 선택할 수 있습니다. 나는 C / C ++에서 물건을 배웠다. 그러나 7 년 후, 학교에서 도구 / 언어가 바뀌었고 java / C #을 선호합니다. 언어는 단순한 도구입니다. 더 나아 져야하는 것은 기본입니다. 예를 들어 MIT에서 사람들은 파이썬을 사용하여 알고리즘 기초를 배웁니다. 예를 들어 Java는 웹 프로그래밍에 적합 할 수 있습니다. 그러나 C / C ++는 서비스 및 고성능 응용 프로그램에 적합합니다. 따라서 상황에 따라 다릅니다.


0

"적합한"이 "가능한"을 의미한다면, 그렇습니다. "좋은"경우에는 절대 아닙니다.

C ++을 좋아하고 좋아할 수도 있지만, 여러 언어를 배우고 청록색 썩은 코드베이스로 10 년 동안 일하고 "실제로 작동하는 중요하지 않은 소프트웨어 제작"에 대한 경험을 얻으십시오. 그러면 C ++에 매력이 생길 것입니다.

처녀 일 때는 작지 않고 작지만 단순하지만 흥미롭고 재미있는 문제로 바이올린을 연주하십시오.

파이썬으로 시작한 다음 SICP (scheme) 또는 이와 유사한 것으로 시작합니다. 반전되거나 인터리브되었을 수 있습니다. 그것들을 사용하면 문제를 해결할 수 있습니다. 시스템과 싸우는 대신, 깊은 진흙 속에서 걷고 모든 종류의 비논리적 기발과 역사적 이유를 배우십시오.

나중에 종이 봉지에서 나갈 수있는 방법을 이미 프로그래밍 할 수있는 경우 베어 메탈로 전환하십시오. 조립 방법과 여러 아키텍처, Knuth 's Mix를 배우십시오. 메모리, 레지스터, ALU, 캐시, 인터럽트를 이해하고 읽기 수준을 얻기 위해 opcode를 암기하거나 많은 실제 작업을 수행한다는 의미는 아닙니다.

그런 다음이 기초를 통해 C ++을 포함한 다른 언어에 노출 될 수 있습니다. 아마도 그 사이에 "역사와 언어의 진화"를 추가하는 것이 좋습니다.


0

중학교에서 C ++로 시작했습니다. :이 책의 사본을 집어 Deitel과 Deitel에 의해 프로그램에 C ++ 어떻게 . 이 책은 아주 좋습니다.

솔직히 여기에 옳고 그른 대답이 없으며, 개인적으로 C ++이 파악 가능하다는 것을 알았습니다. 나는 OOP에 이르기까지 그것을 배웠습니다 (이제 "내가"어떻게 그것을 얻을 수 없었는지 이해하지 못합니다 "). 시험해보고 낙심하지 마십시오. 문제가 발생하면 다른 언어를 확인하고 새로운 언어를 계속 배우십시오. 아이디어는 2-3 개의 다른 형태로 동일한 개념을 볼 때 더 잘 이해할 수 있다는 것입니다. 내가 말했듯이 "this"포인터의 개념은 혼란 스러웠지만 파이썬에서 같은 것을 보았을 때 (자체라고 명명) C ++에서 이해했기 때문에 바로 이해가되었습니다. 많은 대학에서 가르 칠 수 있다면 Java를 배우십시오. 파이썬이나 루비를 배우는 언어이기 때문에 Clojure (및 다른 모든 lisp), Haskell, Scala와 같은 틈새 / 새로운 것을 탐험 할 수 있다면 ...


-1

아니요. Java 또는 C #으로 시작합니다. C ++을 배우고 싶다면 클래스가 무엇인지, 루프와 포크를 수행하는 방법 (if, then statement) 등과 같은 기본 사항을 익힌 후에 더 쉬울 것입니다. 문제 나 수학 방정식을 프로그래밍하고 메모리 나 다른 것을 모두 풀 었는지 알아내는 것보다 프로그래밍하십시오.


2
파이썬이 더 단순 할 때 왜 Java 또는 C #입니까?
David Thornley

-3

이 질문의 배후에있는 가정은 "C ++이 너무 복잡해 보인다. 16 살짜리가 그것을 첫 번째 (컴퓨터 프로그래밍) 언어로 선택할 수 있을까?"

우리가 4-5 세가 될 때까지, 우리는 모국어로 대부분의 구조물을 집어 들었습니다. 훌륭한 문장을 만드는 것은 인생의 시간이 필요합니다.

C ++는 대부분의 인간 언어보다 훨씬 덜 복잡하고 복잡합니다. 16 세의 어린이는 반드시 그것을 픽업 할 수 있어야합니다. 그들은 좋은 코드를 작성합니까? 기다려보고있어.


4
휴먼 언어는 문법이 복잡 할 수 있습니다. 그래머가 잘못되거나 틀리면 사람들이 여전히 나를 이해할 수 있기 때문입니다. 컴퓨터 언어로는 그렇지 않습니다.
dan04

-3

초보자는 먼저 '프로그래밍'에 감사해야합니다. 초보자 클래스를 훈련시킨 경험에서 그들은 가장 많이 이해 한 것을 먼저 감사했습니다. 파이썬과 C #처럼 파이썬은 매우 높은 수준을 지니고 있으며 C #처럼 기호를 사용하지 않기 때문에 파이썬에 감사합니다. 이는 인간 언어와 매우 밀접한 영어를 의미합니다. 따라서 높은 수준에서 낮은 수준으로 프로그래밍을 배우는 것이 좋습니다.

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