CS는 왜 암기하도록 가르치는가? [닫은]


23

나는 지난해 고등학교에서 고급 배치 컴퓨터 과학을 복용하고 있습니다. 우리는 단순히 코드와 기능 을 암기하는 것으로 가르치고 문서화 등을 사용하는 데있어서 효율적이고 효율적이되는 방법을 배우지 않는 것처럼 보입니다.

실제로 많은 프로그래밍 작업이 문서를 넘겨보고 과거 코드와 다른 코드를 검토하여 본질적으로 선생님이 "속임수"로 간주하는 것을 수행 할 수 있다고 생각합니다.

핵심 개념이 (모든 주제에서) 암기하는 데 필수적이라는 데 동의하지만, 특히 실제로 컴파일러, 디버거, 참조가있는 경우 CS 클래스에 대한 펜 및 종이 시험을 보는 것은 불필요한 것이며 비현실적입니다. 실제 작업 상황에서 참조 할 수있는 설명서 및 전체 인터넷 .

CS가 문서, 샘플 코드, 디버거 등을 사용하고 해석하는 방법을 포함한 유용한 기술을 가르치는 대신 코드와 기능을 암기 하는 데 중점을 둔 이유는 무엇 입니까?


34
CS는 코드와 함수를 암기하는 것이 아닙니다. CS를 어디에서 공부하고 있습니까? 진짜 문제는 당신이 취하는 과정이 쓰레기라는 것입니다.
Andres F.

1
@AndresF. OP는 Advanced Placement Computer Science 에서 고등학생 (대학 이전)에 제공되는 과정입니다.

3
@GlennNelson 죄송합니다! 나는 그것을 잘못 읽었다. 그렇다면, 다음 같습니다 : esqew : 대학 수준에서, CS는 (대부분) 코드 암기에 관한 것이 아니라는 것을 알게 될 것입니다. CS 교육은 반드시 구직에 관한 것이 아닙니다 (생각한다면 실망 할 것입니다)
Andres F.

1
대부분의 대학에서는 그렇지 않다는 것을 알아야합니다. 우리 학교에서는 모든 단일 컴퓨터 과학 시험이 열린 노트 / 오픈 북이었습니다.
Casey Patton 2012

2
대답의 일부는 CS가 프로그래밍 학위가 아니라는 것입니다 . CS 클래스에서 프로그래밍을 배우기를 기대하지 마십시오. 프로그래머 와 관련 이있는 모든 종류의 기본 이론과 개념을 배우십시오 . 그리고 몇 가지 프로그래밍 언어를 배우고 약간의 기본 프로그래밍을 배우지 만, 실제로는 실제 프로그래밍은 다른 방식이 아닌 모든 CS에 집중할있도록 가정합니다. 약.
jalf February

답변:


37

고등학교 수업에서는 가장 기본적인 수준의 숙달 과정에 있습니다. 수업에서 다루는 것은 전문 프로그래머가 차가운 것을 알아야 할 종류입니다. 많은 방법으로, 이것은 "시간 테이블"을 배우는 것과 유사합니다. 물론 항상 "실제"설정으로 계산기를 잡을 수는 있지만,이 암기 기능을 사용하면보다 복잡한 작업에서 속도를 높일뿐만 아니라 기본 원리에 대한 이해도를 높일 수 있습니다.

예를 들어, 몇 가지 정렬 알고리즘, 구현 방법, 작동 방식, 가장 잘 사용되는시기 및 사용하지 않는시기를 알고 있어야합니다. 이것은 항상 찾아 볼 수는 있지만, 수학자가 6 번부터 8 번을 찾아야하는 것 이상일 필요는 없습니다.


9
정렬 알고리즘의 기본 특성을 알아야하지만 버블 정렬 이외의 다른 것을 쓸 수있는 기회는 15 년이 지났습니다. (매우 작은 N의 경우 때로는 더 나은 답입니다.)
Loren Pechtel

1
나는 모든 컴퓨터 과학 수업이 그렇게 좋다고 말할 수 있기를 바랍니다. 고등학교에서 그들은 1 년 내내 자바의 기본 문법을 가르쳤습니다. 많은 사람들은 Bubble sort와 Dijkstra 알고리즘의 차이점을 설명 할 수 없었을 때 "프로그래머"라고 자랑했습니다.
Daniel Gratzer

2
예를 들어, 사전에서 단어를 찾을 수 있다고하면 이론적 으로는 이 문서를 의미 하는 사람에 대해 이해할 수 있어야합니다 . 그러나 우리의 뇌는 제한된 수의 내포 된 이해 부족만을 처리합니다.
Benjol

1
그리고 내 시간표를 외우는 것은 전혀 소용이 없었습니다. 일반 소프트웨어 엔지니어는 정렬 알고리즘을 구현하는 데 시간이 얼마나 걸립니까? 아 잠깐-아마도 0 . 환경이 제공하는 종류로는 당신에게 충분하지 않은 극단적 인 원격 기회조차도 더 적합한 알고리즘을 작성하기 위해 한 사람 만 필요하며 Wikipedia와 같은 사소한 정보를 사용하여 선택하고 구현할 수 있습니다 최적의 알고리즘-그리고 당신은 나머지 시간 동안 그것을 재사용 할 수 있습니다.
DeadMG

2
@ kaoD : 그리고 참조를 암기하는 것은 그 작은 도움이되지 않습니다. 아무것도 고안하지 않고 단지 복사 붙여 넣기 일뿐입니다. 메모리 응답과 Wikipedia 복사 복사의 유일한 차이점은 하나는 RAM에 저장되고 하나는 두뇌에 저장된다는 것입니다. 여전히 복사 붙여 넣기입니다.
DeadMG

14

교사들은 일반적으로 이해를 테스트하는 다른 방법을 모르기 때문에 종종 이런 식으로 가르쳐집니다. 당신의 느낌은 이와 같이 가르쳐 질 가치가 없다는 점에서 완전히 정확합니다. 사람들이 일반적으로 교육받는 방식은 필사적으로 개혁이 필요합니다!

적어도 UIUC에서는 인생이 나아졌습니다. CS 수업에 더 많이 갈수록 설명하는 시험의 방향이 적어지고 대부분의 과정에서 모든 쓰레기에 대한 치트 시트가 허용됩니다. 실제로 컴퓨터에 앉아 있다면 구글에있을 것입니다.

즉, 수업 시간에 많이 올라 갈수록 실제로 언어 또는 무언가를 구현하는 방법에 대해 가르치지 않습니다. 실제로 나는 그들이 프로그래밍에 관해 우리에게 실제로 가르쳐 준 클래스가 하나 밖에 없었습니다. 그것은 대부분 추상적 인 수학적 개념이었고 우리는 프로그래밍 부분을 우리 스스로 알아낼 것으로 기대되었습니다. 시험에 아무 것도 없습니다).


2
아멘 +1 저는 대학 수준에서 프로그래밍을 가르 치곤했으며, 학생들의 목표는 가능한 한 빨리 자신의 고유 한 프로젝트를 수행 할 수있는 지점으로 학생들을 옮기는 것이 었습니다. 나는 선생님들이 그것을 "올바른 길"을 암기하거나 일을 처리하는 것으로 싫어. 제가 시도한 것은 학생들의 창의력을 발휘할 수있는 충분한 기술을 갖추는 것입니다.
Mike Dunlavey 2013

... 나는 매우 똑똑하고 암기하는 학생들이있었습니다. 내가 암기하는 것이 아니라 프로그래밍을 배우기 위해 프로그램을 작성해야한다는 것을 전달할 수 있기 전에 한두 번의 시험이 필요하다.
Mike Dunlavey 2013

들으세요! 재미 있고 자라서 학교에서는 결코 좋지 않았다. 나쁜 ACT 점수, 나쁜 성적 등. 그러나 CS에 소개되면 모든 것이 의미가 있습니다. 나는 확실히 특정 분야에서 어려움을 겪지 만 CS 수업에서 배운 개념을 이해함으로써 나를 방해했던 것들을 극복하는 법을 배웠습니다.
rudolph9

10

학교가 교육에 방해가되지 않도록하십시오.

-- 마크 트웨인

멕시코에서는 최소한 공립 교육에서 (어느 수준에서든) 교육을하기에 좋은 곳이 아니기 때문에 멕시코에 있습니다.

글쎄, 내 경력 (CS)의 중간에 나는 당신이 느끼는 것과 똑같은 느낌을 느낍니다. 그래서 나는 스스로 배우기 시작하고 알고리즘, 리눅스, 스크립팅, 컴퓨터 작동 방식, 약간의 관계 학습에 1 년을 보냅니다. 데이터베이스, HTML, CSS 등 (약 모두). 물론, 수업을 건너 뛰고 * 배우고 1 년 후에 학업을 마치고 * 졸업했습니다 *.

그 후, 나는 "정상적인"일상으로 돌아가 정규 수업, 숙제, 시험 및 프로젝트로 돌아갑니다. 수업은 여전히 ​​지루했고 배울 것이 없었습니다. 모두 동일했습니다. 그래서 UVA 온라인 판사 , 코드 셰프프로젝트 오일러 와 같은 프로그래밍 콘테스트 사이트에 입장하기로 결정한 후 MIT Open Course Ware 에서 강의를 보았지만 여전히 혼자서 배우고 있었지만 다른 방식으로 배우고있었습니다.

교훈 : 일이 일어나지 않게하고 일이 일어나게하십시오. 배우는 방식이 마음에 들지 않으면 변경하십시오!

내가 한 가장 현명한 결정은 아닙니다.


4
"일을 일어나게하지 말고 일을 시키십시오."
GrandmasterB

견적은 +1입니다. 나는 <거의> 나머지 답변을 읽을 필요가 없었습니다
Chani

3

그것은 당신이 암기하려는 것에 달려 있습니다 ...

예를 들어 수학을 공부하려면 대수학에 익숙해야하고 방정식을 단순화하기 위해 대수 조작을 수행하는 방법에 대해 다소 창의적이어야합니다. 그러나 흥미로운 부분에 집중하려면 특정 구성 요소를 기억해야합니다. 예를 들어 곱셈표를 마음에 알아야하고, 그 항등을 사용하기 위해 방정식을 조작하는 방법을 인식 할 수 있도록 일부 항등을 알아야합니다.

컴퓨터 과학을 연구하려면 기본 빌딩 블록 데이터 구조와 알고리즘에 대해서도 잘 알고 있어야합니다. 상위 레벨 문제에 적용해야하기 때문입니다. 예를 들어 실제 환경에서 자체 링크 목록 구현을 작성했을 가능성은 거의 없으며 라이브러리에서 제공하는 것을 사용하기 만합니다. 그러나 연결 목록이 구현되는 방법과 자신의 구현 방법을 알면 상위 수준의 문제에 대한 작업을 시작할 때 연결 목록을 사용할 위치와 사용 여부를 추론 할 수 있습니다. 마찬가지로 자체 이진 검색 함수를 작성하지는 않지만 데이터베이스가 인덱스를 사용할 수있는 위치와 사용할 수없는 위치에 대해 추론 할 수 있도록 작동 방식을 이해하는 것이 중요합니다.

일단 기본 구성 요소가 기억되면 문서 해석과 같은 작업을 훨씬 쉽게 수행 할 수 있습니다. 문서는 목록이 사용 중임을 나타내며 프로그래머가 삽입이 O (1)이고 검색이 O (n)임을 암시 적으로 알고 있다고 가정합니다. 또한 빌딩 블록은 시간이 지남에 따라 훨씬 더 안정적입니다. 몇 년마다 새로운 디버거를 사용할 가능성이 높으며 전체 경력에서 동일한 이진 검색을 사용할 것입니다.


연결 목록 사용 위치 및 사용 여부는 다양한 작업의 복잡성 및 메모리 성능과 같은 사항을 기반으로합니다. 그중 하나를 알기 위해 구현할 필요는 없습니다. 데이터베이스는 이진 검색을 어디에서 사용할 수 있습니까? 비교 방법을 알고있는 키 글쎄, 그것은 쉬웠다.
DeadMG

3

"유용한 기술을 가르치는 것과는 대조적으로 CS가 왜 암기에 초점을두고 가르치는가?" 디버거를 사용하여 코드 작성, 설명서 해석, 연습을 암기해야합니다.

API 참조로 자주 이동하거나 많은 디버거 명령을 찾을 필요가 없다면 얼마나 효율적일 수 있는지 놀랄 수 있습니다.

내가 고등학교에서 배운 가장 좋은 것 중 하나는 수업 중 메모를 한 적이없는 친구를 관찰하는 것이 었습니다. 그의 주장은 중요한 것을 기억할 수 있다는 것이었다. 나는 똑같은 일을 시작했으며 모든 API 참조를 쉽게 사용할 수 있어도 매일 기억에 남는 암기 기술을 향상 시켰다고 생각합니다.


2
API를 찾을 필요가없는 것은 API를 공식 교육으로 가르치지 않고 연습을 통해 이루어집니다.
DeadMG

@DeadMG : 더 많은 것을 기억할 수 있다는 것은 다른 모든 것과 마찬가지로 실습과 함께 제공됩니다. 특정 API를 기억하도록 요구하는 것은 그 자체의 목표는 아니지만 정보를 유지하도록 머리를 훈련 시켜서 자주 조회하지 않아도되도록하는 수단입니다. 그리고 API에 대해서만 이야기하는 것이 아닙니다. 추가 사항을 기억할 수 있다면 Google / MSDN / 다른 소스 파일을 만드는 데 필요한 여행이 적습니다. 실제로 작업 속도가 크게 달라집니다. .
DXM

해당 API로 연습하십시오 . 일반적으로 암기하지 않습니다. 그리고 교육에 소요되는 시간은 전문 시간과 비교할 때 작은 각주입니다.
DeadMG

2

펜과 종이 시험은 실제로 목표에 대한 완전한 이해를 테스트하는 것이 목표라면 의미가 있습니다. 나는 거의 10 년 전에 Computer Science AB 시험을 보았고 펜과 종이 방법에 동의합니다.

대상 언어로 구현 코드를 작성하는 방법을 추론 할 수 있도록 하위 수준의 컴퓨터 과학에서 학습 한 알고리즘을 충분히 알고 있어야합니다. 학생들은 또한 대부분 올바른 구문으로 직접 코드를 작성할 수 있어야합니다. 우리는 모두 세미콜론이나 괄호가 때때로 누락됩니다 :). 또한 유용한 IDE에서 유추하지 않고 디버깅 및 디자인 기술을 테스트 할 수 있습니다.

만약 학생이 이것을 할 수 없다면, 그 주제에 대한 숙달을 갖지 못하고, 아마도 지나친 친숙 함일 것입니다.


-1 : 구문 적으로 올바른 코드를 작성하는 모든 손은 사람이 컴파일 가능한 프로그램을 작성할 수 있음을 나타냅니다 (아마도 가장 느린 컴퓨터보다 약 백만 배 느림)-의도 한대로 작동하지 않을 수 있습니다. 더 나쁜 것은, 그들은 단지 좋은 기억력을 가지고 있으며 아마도 요청하면 Shakespare를 암송 할 수 있습니다. 개발자로서의 기술을 나타내는 데는 거의 도움이되지 않습니다.
mattnz

이 답변은 제시된 의견에 대한 추론을 제시하지 않습니다. 왜 누구나 선호하는 언어로 정렬 알고리즘에 대한 구현을 작성할 수 있어야합니까?
DeadMG

요점은이 사람이 훌륭한 개발자라는 것이 아니라 수업에서 가르친 컴퓨터 과학 자료를 알고 있다는 것입니다. 학생이 함수를 그래프로 그리는 방법을 배운 경우, 시험에서 그 기능을 기대하는 것이 합리적입니다. 좋은 테스트는 또한이 데이터 구조에 대해 여러 키를 사용하여 거품 정렬을 구현하는 것과 같은 개념적 이해가 필요한 질문을 요구함으로써 암기력을 능가합니다.
피터 스미스

-2

내 경험상 암기에는 간단한 연습이 포함되어 있으며 전혀 가르 칠 필요가 없습니다. 더 중요한 것은,이 접근법은 선생님이 당신이 원하고 항상 원치 않는 임의의 쓰레기가 아니라, 당신이하고있는 모든 일에서 실제로 기억 해야 할 것을 외우는 것만을 의미합니다 . 일부 알고리즘의 구현을 암기하는 데 걸린 시간은 다른 원인에 훨씬 더 잘 맞을 수 있습니다.

결국, 왜 알고리즘 작성을 연습해야합니까? 당신이 한 번 작성하면, 당신도 다른 사람이 이미 당신의 선택의 언어에 대해 무료로 사용할 수 구현을 작성하지 않은 것을 대단히 원격 기회에 모든 시간 - 그것을 다시 사용할 수 있습니다 사용자 환경이 이미 제공하지 않습니다 정렬 알고리즘과 같은 대부분의 간단한 알고리즘에는 해당되지 않는 알고리즘입니다. 처음부터해야 할 가능성이 거의없는 일을하고 심지어 그렇게해도 한 번만해야하는 일이 있습니까? 귀중한 시간 사용이 아닙니다.

Heapsort에 대해 알아야 할 중요한 것은 그것을 구현하는 방법이 아닙니다. 최상의 경우와 최악의 경우 운영상의 복잡성과 유사한 것들입니다. 그러나 Wikipedia에는 ​​편리한 정보를 제공하는 편리한 테이블이 있습니다. 다시 한번, 그 지식을 갖는 데 아무런 가치가 없습니다 . 지금부터 끝까지 효과적으로 비용없이 원하는 때에 즉시 사용할 수 있습니다. 그렇다면 왜 암기하고 싶습니까? 무의미합니다.

내 경험상 학생이 아무것도 외우도록 요구할 이유가 전혀 없다. 참조 소스에서 답변을 얻을 수있는 질문을하는 경우 답변 할 수있는 곳에 가치가없는 질문을합니다.


2
저런, 얘들 아, 귀찮게하지 않습니다 설명 .... 당신의 downvotes 또는 같은 것을
DeadMG

힙 정렬을 알아야 할 유일한 시간은 수정 가능한 우선 순위 대기열이 필요할 때였습니다 (힙 정렬은 우선 순위 대기열로 훌륭하게 작동합니다). 알려진 알고리즘을 적용 할 수 있기 때문에이를 구현하는 방법을 알아야합니다.
David Thornley

@David : 힙 정렬이 어떻게 작동하는지 알 필요가 없습니다. 정렬 알고리즘을 사용하는 구현이 좋습니다.
DeadMG

이 특별한 경우에는 그렇지 않습니다. 이미 과도하게 스트레스를받는 시스템에서 많은 이벤트를 처리해야했습니다. 그 프로젝트를 위해서는 효율성이 필요했고 그것을 얻었습니다. 문맥 상, 그것은 오랜 경력에서 한 번 일어 났으며 오랜 시간 동안의 모든 분류는 SQL ORDER BY및 C ++의 std::sort가족 과 같은 것들 이었습니다.
David Thornley

@David : 따라서 모든 프로그래머에게 필요한 것은 거의 없습니다.
DeadMG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.