해야 우리가 가르치는 포인터에서는"프로그래밍의 기초"물론?

StackOverflow https://stackoverflow.com/questions/660538

  •  20-08-2019
  •  | 
  •  

문제

나는 가르치는 것입니다 과정의 기초 프로그래밍을 다음,가을 먼저 올해 컴퓨터 과학 물론입니다.어떤 장점과 단점을 가르치는 포인터에서 이러한 코스?(내 위치:그들이 그 가르쳐야한다).

편집: 나의 문제는"수용"청중을 인수는 처음 몇 년 동안 대학에서,우리는(profs)알 수 없는 경우 학생들이 될 것 같은 과학자 또는지...우리는 우리가 알고 있었지만,우리가 사는 사람들이 학교에 남아(4 년까지 허용하지 않습니다.과학자들에게),그리고 사람들이 될 것입 엔지니어 있습니다.

최종 결정: 적어도를 참조하지만,가능한 점이 없이는 포인터 연산입니다.

도움이 되었습니까?

해결책

최소한 참고 문헌이나 동등한 개념을 가르쳐야합니다. 포인터 산술, C 배열 및 문자열과 같은 것들에 대해 쉽게 가져 가야한다고 생각하지만 간접은 컴퓨터 과학에서 매우 중요한 개념이므로 학생들이 소개해야합니다.

다른 팁

예.

포인터는 다른 고급 언어로 수많은 개념을 뒷받침하며, 나는 우리가 왜 우리가 더 높은 수준의 어떤 것을 귀찮게하는지에 대한 좋은 이해를 촉진하기 위해 일정량의 하위 수준의 것들을 가르쳐야한다는 의견을 확신합니다. 모두.

메모리가 할당되는 방법과 포인터로 해결되고 조작되는 방법에 대해 조금 이해하면 다른 많은 구성을 설명하는 것이 더 쉬워집니다. 예를 들어, 설명 a NullPointerException Java 또는 그러한 언어로 된 참고 문헌의 개념은 C에서 포인터를 이해하는 사람이 있다면 어린이의 놀이입니다 (그리고 C ++에서 참고 문헌을 잡으면 여전히 더 나은 경우).

절대적으로 그들을 가르치십시오. 포인터, 참조, 동적 바인딩 또는 기타 여러 가지 가든 프로그래밍에 간접 이해를 이해하는 것이 필수적입니다. 이제 분명히 그들과 시작하지는 않지만 간접을 이해하는 것은 적어도 제어 흐름 아이디어를 이해하는 것만 큼 중요합니다.

물론 사기꾼은 어떤 사람들은 그것을 얻지 못하고 제대로하지 않거나 탈락한다는 것입니다. 이것이 CS 메이저가 되고자하는 사람들을위한 과정이라면, 당신은 그들에게 나중에 전공을 일찍 전환 할 동기를주기 때문에 땀을 흘리지 마십시오. 프로그래밍에 관심이있는 사람들을위한 일반적인 ED 과정이라면, 아마도 여전히 소개되어야하지만 가혹하거나 무겁게 등급이 매겨지지 않아야합니다.

CS 학생으로 첫 해에, 나는 가을에 Java 코스를 수강했으며, 이는 일반적인 소개였습니다. 교수는 포인터를 직접 가르치지 않았지만, 참고 문헌의 개념과 논쟁에서 전달 될 때 프리미티브가 아니라 객체를 수정할 수있는 이유를 가르쳤다.

2 학기 동안 나는 C에 관한 시리즈의 다음 코스를 차지 했으며이 수업은 포인터에 크게 의존했습니다.

프로그래밍 수업에 대한 소개를 위해서는 참고 문헌을 언급했지만 직접 포인터는 말하지 않습니다.

"프로그래밍의 기초"코스는 최소한 기본 프로세서 아키텍처 및 어셈블리 언어를 다루어야한다고 생각합니다. 그렇다면 실제로 포인터를 논의하지 않는 경우를 만들 수는 없습니다. 더 높은 수준의 (바이트 코드) 언어 만 가르치면 포인터가 청중을 혼란스럽게 할 것이라고 생각합니다.

장점:한 이해의 방법으로는 메모리가 사용하는 기계 사이의 차이(그리고 함정의)포인터를 데이터 힙에 대포인터를 데이터 스택에 전달하는 방법으로 주소,등등.

단점:복잡한 관객이 아직 지식(또는 충분한 시간이 없을 동화의 개념)의 컴퓨터 아키텍처,무엇을 포함하여 스택은 무엇인지,등록,전화 컨벤션,등등.

그래서,요약, 그것에 많이 의존하는 관객과 언어(들)당신은 낚시 도구 (포인터는 것이 무의미의 컨텍스트에서 패키지 또는 Java),뿐만 아니라 얼마나 깊이에 당신은 기꺼이의 방향으로 가는 무엇입 힙,무엇을 쌓는 방법을 범위의 번역으로 스택(i.e왜 못하는 포인터를 반환하는 지역 변수),등등.

때 나는 가르치는 포인터가 엔지니어링 등 궁극적으로 발사하거에 간단한'hello world'프로그램을 보여 학생들이 실제 기계 코드 값을 등록하고 해당 메모리 덤프로,스택 조작하고 전달하는 매개변수,etc., 하지만 그들은 준비가 되어 있었습니다.당신의 관객 수용하는 드릴다운 탐험을 보장하기 위해,이해하고 뒤에서,그리고 당신 기꺼이 같은 갈 길이는?:)

나는 당신이 그것을 가르쳐서는 안된다고 생각합니다 첫 번째. 그러나 나중에 일단 프로그래밍의 기본 개념이 얻어집니다.

좋은 예는 마지막 Stroustrup 책입니다. 프로그래밍 - C ++를 사용한 원칙 및 연습 그가 파서를 만드는 방법을 가르치는 곳, I/O (스트림) 사용 및 GUI 사용을 포인터에 대해 이야기하기도합니다!

소프트웨어를 만들기 위해 동시에 처리 해야하는 제약 조건 (예 : 메모리 관리) 대신 아이디어를 구축하는 방식을 이해하는 것이 더 자연 스럽기 때문에 가르치기위한 좋은 참조가 될 것이라고 생각합니다. 나는이 책이 프로그래밍의 기초를 가르치는 것에 대한 새로운 관점을 가지고 있다고 정말로 추천합니다.

그것은 당신의 과정의 목표에 달려 있습니다 - 교육 프로그래밍과 컴퓨터 과학 교육은 두 가지 별도의 목표이며, 상호 배타적이지는 않지만 입문 수업은 일반적으로 똑같이 잘 가르치지 않습니다. 차이점의 예는 다음과 같습니다. 목록을 정렬하는 방법을 배우고 싶다고 가정 해 봅시다. C ++의 프로그래밍 과정은 std :: 정렬 함수 템플릿의 구문을 사용하도록 가르치고 숙제는 몇 가지 비교 함수를 작성하고있을 수 있습니다. 컴퓨터 과학 과정은 병합 정렬의 점, 알고리즘이 의사 코드에서 어떻게 보이는지, 성능/공간 특성 및 숙제는 정렬 기능 자체를 작성하는 것입니다.

따라서 입문 프로그래밍을 가르치고 있다면 그렇습니다. 학생들에게 포인터에 대해 가르쳐야합니다.

컴퓨터 과학을 가르치고 있다면 아니요, 입문 수준에서 포인터를 이해할 필요가 없습니다.

자신을 좋은 프로그래머라고 부르는 사람은 포인터가 어떻게 작동하는지 알아야합니다. 좋은 프로그래머가되면 단일 프로그래밍 언어 만 알지 못하지만 프로그래밍 언어가 일반적으로 어떻게 작동하는지 알고있어 이전에는 보지 못한 프로그래밍 언어에 적응할 수 있음을 의미합니다.

그러나 프로그래밍 과정의 기초가 포인터를 가르쳐야한다는 의미는 아닙니다.

  • 당신의 목표가이 사람들에게 일반적으로 프로그래밍 언어에 대한 완전하고 잘 둥근 친숙 함을주는 것이라면, 그렇습니다.
  • 프로그래밍에 소개하는 방법이 처음에는 하나의 프로그래밍 언어를 사용하는 것이고, 후속 코스에서 다른 언어를 다루려고하는 것이며, 포인터는 해당 언어와 관련이 없다면 아직 포인터에 대해 이야기 할 필요가 없습니다.

나는 한 번에 모든 스타일의 언어를 다루기보다는 한 언어로만 사람들을 시작함으로써 말할 것이 많다고 생각합니다.

첫 번째 입문 프로그래밍 과정은 Haskell을 사용했습니다. C를 사용하는 후속 코스가 진행되기 전까지는 포인터가 소개되었을 때까지 (나는 코스를 수강했을 때 이미 좋은 C 및 C ++ 프로그래머였으며, 그 과목은 필수였습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top