초보자 프로그래머를 도울 때 적합한 어휘


9

나는 초보자 프로그래머를 상대적으로 자주 돕는다. 질문 할 때 코드가 작동하지 않는 이유를 설명하고 솔루션 등을 제안합니다. 내가 돕고있는 사람들은 Java의 1 학년 수준 모듈에서 프로그래밍에 대한 공식 교육을 받았지만, 그들과 의사 소통이 잘되지 않는 것 같습니다.

예를 들어, 함수를 작성할 수 있지만 왜 함수가 호출되지 않았는지 깨닫지 못하고 왜 실행되지 않는지 이해할 수 없습니다. 내가 같은 문구를 사용 "(make a) call (to) the function/it"하고 "pass it the.."빈 모습을 얻는 다면 .

내 정상적인 프로세스는 코드에서 언어에서 함수를 호출하는 위치를 찾아서이 다른 함수를 호출 한 것과 같은 방식으로 자신의 함수를 호출 할 수 있음을 알리는 것입니다. 때로는 그조차도 텅 빈 것처럼 보입니다.

초보자 프로그래머를 돕는 데 더 적합한 다른 어휘가 있습니까? 아니면 이것은 의사 소통의 문제가 아닌가?


5
스프레드 시트 사용자는 함수를 호출하는 방법을 알고 있습니다. 많은 사람들이 자신의 글을 쓸 수 있습니다. 여기에는 근본적으로 잘못된 것이 있습니다.
JeffO

@JeffO 나는 뭔가 잘못되었다고 느끼고 있었지만 그 모듈과 그 사람들에게 의심의 혜택을주고 싶었습니다
Andy Hunt

7
무엇을 기다립니다? 함께 일하는 프로그래머는 '함수 호출'과 인수 전달이 무엇을 의미하는지 모르십니까? 그것은 그림을 그리거나 고양이와 개와 관련된 은유를 사용하지 않고 갈 수있는만큼 기본적입니다. 이것은 의사 소통 문제를 넘어서서 불행히도 지식이 부족한 문제 일 수 있습니다. 나는 당신의 질문을 다시 읽었으며 기본적으로 입문 수준의 과정을 밟은 것 같습니다.
wkl

3
@AndyBursh : 그런 학생들은 어떻게 2 년째에 그것을 얻었습니까? 시험에 합격하지 않고 소프트웨어 개발 이외의 직업을 선택하기를 바랍니다.
Doc Brown

3
양말 꼭두각시가 도움이 될 것입니다.
MattDavey

답변:


15

그들은 적절한 용어를 결국 배워야할수록 더 빠를수록 좋습니다.

그것들을 올바르게 사용하고 빈 응시가 생길 때마다 설명하십시오. 올바른 신호를 보내려고하면 이해하지 못하는 것에 대해 물어도 괜찮습니다. 어리석은 질문은 요청하지 않은 것입니다.


2
나는 당신의로드 된 것과 거의 똑같은 응답을 게시하려고했습니다. :) +1
Tom Squires 9:24에

설명을 수준으로 낮추지 말고 수준을 높이십시오.
Bent

2

일반적으로

사람이 당신을 이해하지 못하면 두 가지 대안이 있습니다.

  1. 사람이 알고있는 것에 따라 어휘를 적응 시키십시오.

  2. 그녀가 이해하지 못하는 용어를 그 사람에게 설명하십시오.

첫 번째 경우는 사람이 이미 기술 용어를 잘 알고 있지만 도메인에 충분하지 않거나 충분하지 않은 경우에 효과적입니다.

예를 들어 C # 또는 Java에서 method 라는 용어를 사용할 수 있으며 대부분 다른 언어를 사용하는 사람은이 용어를 이해하지 못합니다. 그런 다음 C # 또는 자바 것을 설명 할 것이다 방법은 우리가 일반적으로 부르는 참조되는 기능 (C에서 예를 들어)을, 그 와 같은 어떤 그런 일이없는 기능 C #이나 자바는 . 예를 들어, PHP 에서는 메소드와 함수가 모두 존재하며 다른 의미를 갖습니다 . 차이가 사람에게 너무 고통 스럽다면 단순성을 위해 기능 에 대해 이야기 할 것 입니다.

정확한 경우에는 첫 번째 것을 거의 선택할 수 없습니다. "함수를 호출하십시오"는 더 간단한 방식으로 재구성 할 수 없습니다. 전화는 전화입니다. 이것을 더 단순화 할 수 없습니다.

즉, 두 번째 방법을 선택해야합니다. 각 기술 용어를 개인에게 설명하십시오.

  1. 기본 개념과 용어에 매우 적합한 사전 또는 위키 백과 를 가리 킵니다 .

    나는 일반적으로 사용되는 용어로 이것을 선택합니다 . 예를 들어, 나는 다형성 (polymorphism)이 무엇인지, 공분산 (covariance)과 반공 (contravariance)이 무엇인지 이해하기 위해 Wikipedia를 읽도록 권유한다. 이러한 용어는 이미 잘 설명되어 있으므로 여기서 바퀴를 다시 만들 필요는 없습니다.

  2. 또는 자신의 말로 설명하십시오 .

    문맥에 특정한 용어 및 / 또는 광범위한 정의를 수용하는 용어에 대해 이것을 선택합니다 . 예를 들어 Wikipedia는 Microsoft의 클라우드 컴퓨팅 비전을 이해하는 데 크게 도움이되지 않으며 Windows Azure 응용 프로그램을 사용하는 사람에게 클라우드가 무엇인지 설명하고 싶습니다.

특별한 경우

당신이 말하는 사람들은 프로그래밍에 사용되는 가장 기본적인 개념과 용어가 부족합니다. 그들은이 핵심 어휘를 배우지 않고도 계속할 수 없습니다 . 그들은 전혀 의사 소통을 할 수 없기 때문입니다 . 그들은 프로그래밍이나 블로그에 관한 책을 읽을 수없고, 동료의 말을들을 수없고, 실제로 질문을 할 수도 없습니다. 아무도 자신이 요구하는 것을 이해하지 못하므로 Stack Exchange 웹 사이트.

귀하의 경우 적합한 어휘를 검색하기보다는 핵심 프로그래밍 개념과 일반적으로 사용되는 용어를 가르치는 데 며칠 또는 몇 주가 소요 됩니다 . 며칠 후, 당신은 끊임없이 "그들에게 그림을 그리고 고양이와 개와 관련된 은유를 사용" 할 필요없이 그들과 대화 할 수있을 것 입니다.


1

함수 대신 서브 루틴으로 시작하십시오 . 그들에게 프로그램은 단지 명령 목록 일 뿐이며 컴퓨터에게 무언가를하는 방법을 알려주는 레시피 라고 말하십시오. 그리고 그것은 명령을 차례대로 실행합니다 (일부 단계를 병렬로 만들 수 있지만 나중에 더 자세히 설명 할 수 있음).

일부 작업은 매우 일반적이고 반복적이므로 항상 반복해서 다시 작성해야하는 경우에는 끔찍할 수 있습니다. 따라서 한 번만 작성하고 "더 작은 프로그램"을 만들어서 서브 루틴 으로 재사용 할 수 있습니다. 프로그램의 다른 부분. 두 번 이상 실행할 수 있도록 프로그램에서 의미있는 이름을 지정 합니다. 우리가, 더 큰 하나의 일환으로 "작은 프로그램"을 실행 할 때 우리는 그 이름을 사용할 수 있습니다 호출 그 이름하여.

서브 루틴을 호출 하는 것은 해당 악마 의 이름 으로 해당 작업을 수행하는 방법을 알고 있는 악마소환하는 것과 같습니다 . 우리가 프로그램에서 특정 작업을하고 싶을 때, "Argoth라는 악마를 불러라"라고 쓰고, 악마가 지시 한대로 악마가 나타나서 우리를 위해 일을 한 다음, 우리는 계속해서 일.

때때로 악마는 수행해야 할 작업이나 실제로 우리가 원하는 것을 결정할 수없는 추가 정보가 필요합니다. 예를 들어, 악마가 성을 짓기로되어 있다면, 어디로 지어 질 것인지, 얼마나 큰지 등 을 알아야 할 수도 있습니다 . 그것들은 악마에게 전달 된 인수입니다. 매개 변수화 됨 .

매개 변수 는 작업을 수행하기 위해 누락되었지만 필요한 정보입니다. 서브 루틴이 수행 할 수있는 작업을 약간 변경합니다. 그것들은 우리가 그것을 실행하기 전에 채워 져야 할 레시피의 빈 슬롯과 같습니다.

반면에 인수 는 이러한 매개 변수에 제공하는 실제 정보 (값)입니다.

병렬 실행에 관해서는, 우리는 이것을 다음과 같이 생각할 수 있습니다 : 프로그램을 실행하는 누군가 (또는 무언가 )가 항상 있습니다 (명령 목록). 그것은 또 다른 인간이거나 ( "컴퓨터"는 한때 계산을 수행 한 사람 의 이름 이었다는 것을 알고 있습니까?) 기계입니다. 프로그램은 명령 목록 일 뿐이며 자체적으로 작동하지 않습니다. 계산 과정을 수행 할 사람이나 무언가가 있어야합니다(목록에서 이러한 조치를 수행하십시오). 때로는 이러한 작업을 병렬로 수행 할 수도 있습니다. 목록의 사본을 여러 사람에게 배포하고 서로 방해하지 않거나 방해하지 않는 한 각 목록에서 다른 작업을 수행하도록 할 수 있습니다. 다른 사람의 작업 결과를 기다릴 필요가 없습니다. 그것은 당신을위한 멀티 스레딩 입니다.)

차이점에 관해서 기능서브 루틴 (또한 절차 ), 통상의 차이는 기능 특정 계산하도록 호출되고 있다는 것이다 이지만, 그 실행 결과로서 반환 절차가 재미로 실행되는) AKA "부작용"– 목록에서 수행 된 작업을 위해.

그러나 프로시 저나 함수를 호출 하면 처음에 문제가 발생하면 한 번 인기가 있었던 다른 용어 인 jump 을 사용할 수 있습니다 . 하나는 서브 루틴으로 점프 할 수 있습니다. 즉, 현재 수행중인 작업을 중지하고 해당 작업을 수행하기 위해 목록의 다른 위치 (또는 다른 목록) (서브 루틴)로 "점프"합니다. 그런 다음 완료하면 "뒤로"즉, 중단 된 장소로 돌아와 이전 작업을 계속할 수 있습니다. 소명과 점프의 차이점은 이제 당신 이 악마라는 것입니다.

에 관해서는 방법 사람이 여기에 언급, 또는 일부 언어는 "기능이없는, 유일한 방법"사실 - 방법이 있기 때문에, 매우 정확 아니다 있습니다 기능! – 특별한 종류 : 그것들은 객체 안에 캡슐화 된 일부 정보를 검색하거나 그것들을 조작하는 데 사용되는 함수입니다. 그것들은 "해당 데이터를 조작하는 방법"입니다. 이름은 데이터가 객체로 묶여 있고 "메소드"라는 특수 기능에 의해서만 직접 조작 될 수없는 객체 지향 패러다임에서 유래되었습니다.

방법은 다른 방식으로 특별하다 : 어떤 특정 객체 ( "this"객체)가 작동 / 호출되어야 하는지 알아야 한다. 그렇기 때문에 메소드가 호출 된 객체 ( "this"포인터)에 대한 정보를 저장하는 숨겨진 매개 변수를 추가하여 메소드를 구현하는 것이 일반적입니다. 이것은 함수가 조금 불려지는 방식을 복잡하게하지만 프로그래머가 자신이하는 일을 알고있는 한 크게 신경 쓰지 않아야하는 "구현 세부 사항"입니다.

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