프로그래밍 경험이없는 밝은 사람에게 어떻게 프로그램을 가르 칠 수 있습니까? [닫은]


100

나는 프로그래밍 경험이 없지만 똑똑하고 유능한 사람인 IT 부서의 직원을 데려와 기존 .Net 응용 프로그램을 지원하는 엔트리 레벨 개발자라고 할 수 있습니다. 나는 확실히이 사람이 그것을 할 수 있다고 믿는다. 그러나 나는 그를 속이는 가장 빠른 길을 찾고있다. 나는 많은 아이디어를 가지고 있지만 다른 사람들이 어떻게 생각하는지보고 싶었습니다. 나는 이것이 그가 배우는 방법에 크게 의존한다는 것을 알고 있지만, 나는 일반적으로 이야기하고 있습니다.

그렇다면 질문 : 비 개발자가 개발 속도를 빠르게하는 가장 좋은 방법은 무엇이라고 생각합니까 (이 경우 .Net)?



나는이 들었어요 파이썬 하드 방법을 알아 프로그래머가 아닌 시작하는 것이 좋다.
john2x

Small Basic을 살펴보십시오 . 간단하지만 초보자에게는 유용합니다.

3
나는 당신이 말하는 것에 대한 정신적 모델이없는 사람에게 프로그래밍을 설명하는 것이 쓸모 없다고 생각합니다. 어떤 언어로 이야기 할 것인지 알아 내고 튜토리얼을 습득 한 다음 손을 더 럽히십시오. 그들은 투쟁하고 학습 과정을 시작하고 가속화 할 것입니다.
머핀 남자

1
나는 그에게 Edgser Dijkstra의 글을 읽어 보라고 할 것이다. | 정말로 컴퓨터 과학을 가르치는 잔인한 상황에서, 그 기사의 이유에 대해 배우게한다. 그래서 그는 일반적으로 받아 들여질 수있는 뇌 손상에 대해 경고 할 수있다. 프로그래밍을 가르치는 방법
vfclists

답변:


125

나는 보통 프로그래밍을 배우고 싶은 사람에게 같은 순서를 처방합니다. 매우 이론적이지만 좋은 토대를 마련합니다. 풀 타임 학습에는 3-4 개월이 걸리지 만 프로그래밍은 밤새 배우는 것이 아닙니다.

이 순서를 수행 할 수 없으면 프로그래밍 할 수 없으므로 지금 포기할 수 있습니다.

  1. Charles Petzold의 코드.
  2. C 프로그래밍 언어, K & R
  3. 컴퓨터 프로그램, Abelson 및 Sussman의 구조 및 해석.

나의 규칙은 : 필요하다면,이 세 권의 책을 굉장히 힘을내어 진행하십시오. 궁금한 점이 있으시지만 스스로 알아 내기 위해 고군분투 한 후에 만하십시오. 이 세 권의 책, 축하를 통해 그것을 만들 수 있다면, 당신은 프로그래머입니다. 이제 15 분 안에 PERL을 던지거나 Java의 Big Bookcase의 서점에 쓰레기가 있으면 잘 관리 할 것입니다. 이 세 권의 책을 통해 책을 읽을 수 없다면, 포기하고 집에 가십시오. 결코 그것을 얻지 못할 것입니다.

솔직히 C와 Scheme을 배울 필요는 없다고 생각합니다. 그들은 미래 학습의 기초 일뿐입니다. 이 두 가지 간단한 책은 표면적으로 매우 간단하지만 (C와 Scheme은 매우 쉬운 언어입니다) 혼란스러운 구문에 시간을 낭비하지 않고 프로그래밍의 실제 기술에 매우 깊이 빠져 있기 때문에 다시 배선하기가 좋습니다. 당신의 두뇌는 좋은 프로그래머입니다.

C # 및 ASP.NET에서 시작하는 것과 같이 지금 바로 배우고 자하는 정확한 내용을 바로 익히고 바로 학습하려고합니다.


25
C # 능력에 대해 강력히 추천받은 "프로그래머"에 대해 책상에 머리를 대고 있었지만 매우 잘 문서화 된 기본 클래스를 구현하는 것과 같은 간단한 작업을 수행 할 수 없었던 사람은 C 및 C ++ 프로그램에서 메모리 누수를 발견했습니다. 또는 자체적으로 문제를 파악하거나 적절한 속도로 새로운 아이디어를 배우는 데 동의합니다. 이것은 엘리트주의가 아니다. 상식입니다. 포인터와 재귀를 마스터 할 수 없다면 스스로 문제를 해결할 수있는 개발자가 필요한 사람에게는 유용하지 않습니다.
Jonathan Henson

53
아니요, 좋은 프로그래머가되는 유일한 방법은 아닙니다. 그러나 만약 3 권의 책이 "놀라운 목록"이라면 프로그래머가하는 일을 과소 평가하는 것일 수 있습니다.
Joel Spolsky

32
당신은 때때로 너무 손이 닿지 않습니다, Joel.
Robert S.

46
죄송합니다. 신문을보기 전에 발렛으로 다림질해야하기 때문에 신문이 제 프라이빗 클럽에 도착하는 데 며칠이 걸립니다.
Joel Spolsky

19
불행히도이 답변은 실패합니다 up to speed quickly.
rlb.usa

30

개발자가 아닌 사람이 빠르게 속도를내는 가장 좋은 방법은 그들 에게 영감주는 것입니다 !

성공하기 위해서는 응시자가 플랫폼에 관계없이 프로그래밍에 대해 열정적이지 않더라도 적어도 호기심이 있어야합니다 .

이상적인 후보의 경우 Joel에 동의하지만 너무 많은 이론을 약한 마음에 넣지 않도록주의해야합니다. 그들이 영감을 받고 호기심이 많고 열정적으로 열정적이라면 마술을 본 후에 이론을 이해하고 싶을 것입니다.

나는 @karudzo에 완전히 동의합니다-자기 성취와 건설적인 리뷰는 매우 고무적 일 수 있습니다.


29
"배를 만들고 싶다면 사람들을 drum 아서 나무를 모으고 그들에게 임무와 일을 할당하지 말고 바다의 끝없는 광대 함을 그리워하도록 가르치십시오." - 앙투안 드 생 텍쥐페리
줄리앙 Chastang

줄리앙-좋아! 바로 그거죠!
jkoreska

나는 이것에 대해 당신에게 완전히 동의합니다! 나는 경험이 없었고 때때로 프로그래머가 될 줄 몰랐던 많은 개발자들을 멘토링 / 교습했습니다. 나는 단순히 길을 따라 그들을 안내함으로써 ... 자신의 호기심과 열정이 그들을 최종 결과로 이끌었습니다. 그들이 그 두 가지 속성을 가지고 있지 않았다면, 그들이 달성 한 것을 성취 할 수 있었을 것이라고 생각하지 않습니다. 나는 그 속성 중 하나 또는 둘 다가 부족하고 사용할 수있는 많은 작업이 있기 때문에 그 안에있는 너무 많은 프로그래머와 함께 일합니다 ... 끔찍합니다!
Jeach

동의한다. 나는 프로그래밍 학습의 문제가 문자 그대로 대답된다고 생각합니다. 사람들은 사유로 사물을 배웁니다. 사람들은 문제를 해결하고, 사람들을 돕고, 아이디어를 현실로 바꾸는 프로그램을 배웁니다. 나는 길을 따라 이것을 잊은 사람들을 만났고 그들이 그것을 재발견했을 때 그들은 프로그래밍에 대한 그들의 사랑을 재발견했다. 배우는 것을 실제로 누리면 배우는 방법을 찾게되고 더 나아질 것입니다.
Luis Perez

12

나는 그를 속일 수있는 가장 빠른 방법을 찾고있다.

가장 빠른 방법은 1 년에서 2 년 정도 걸리지 시간이 걸리는 것 입니다.

물론, 간단한 언어 (C #, .NET 작업을 수행하는 경우 C)를 가르치는 것이 쉬운 것처럼 보이지만 언어를 배우는 것은 프로그래밍을 배우는 것이 아닙니다.

만약 그가 프로그래밍하지 않았다면, 적어도 하나의 언어의 구문과 라이브러리 외에, 배열, 링크 된 목록, 그가 배우는 언어의 컴파일 모델, 모듈화, 리소스 관리, 패러다임, 패턴, 빅-에 대해 배워야합니다. O- 표기법 ...-전체 엔칠 라다. 그것은 쟁기질이 많으며, 대부분의 사람들은 이러한 기본 사항을 배우기 위해 몇 년이 걸렸으며, 진정한 전문 프로그래머가되기 위해 더 많은 시간을 보냈습니다.

C ++ 언어를 가르치기보다는 C ++를 사용하여 프로그래밍 을 가르치는 Stroustrup의 최신 책 과 같은 많은 내용을 다루는 자료 가 있지만 그다지 많지는 않으며 그 전부를 다루는 것은 없습니다. 따라서 그 사람은 기꺼이 배우고 많은 책과 기사를 읽어야합니다.

이 작업을 수행하는 방법에 대해서는 여기에 붙여 넣을 수있는 본격적인 커리큘럼이 없습니다. (죄송합니다.)
하지만 제가 추천하는 것은 그에게 하나의 프로그래밍 언어를 가르치는 것부터 시작하여, 빠른 초기 발전을 이루고 고무적인 결과를 얻을 수있는 기회를 갖도록하는 것입니다. 그러한 언어를 가르 칠 책이 많이 있습니다. 익숙한 책을 고르십시오. 이 책에 많은 연습 문제가 있고 기꺼이 그 일을 기꺼이한다면, 그 일을 돕는 데 많은 시간을 할애 할 준비를하십시오. 만약 책에 (m)이 없다면, 자신의 책을 미리 생각하기 시작하지만, 자신의 수준 / 이해 속도에 적응할 수 있도록 준비하십시오.
만약 첫 언어가 C 나 C ++이 아니었다면, IMO는 다음 중 하나를 배워야합니다. K & R은 Stroustrup의 TCPL과 마찬가지로, 또는 가파른 학습 곡선 인 Koenig / Moo를 처리 할 수 ​​있다면 가능합니다. 내가 이것을 추천하는 이유는 일단 C 또는 (IMO 바람직하게) C ++를 알고 나면 C #, Java, ObjC와 같은 C 파생물을 비교적 쉽게 선택할 수 있기 때문입니다 ...

나머지는 좋은 책과 기사를 끊임없이 제공하십시오. 1) 회사 문화에 맞아야하고 2) 그 내용을 배우라고 편안하게 말해야하기 때문에 너무 많은 것을 제안하면 도움이되지 않는다고 생각합니다.


1
"기존 .Net 애플리케이션을 지원하는 엔트리 레벨 개발자"... "배열, 링크 된 목록, 그가 배우는 모든 언어의 컴파일 모델, 모듈화, 리소스 관리, 패러다임, 패턴, 비트 -O- 표기법에 대해 배워야합니다." 모든 것이 '좋아요'지만 코드 를 작성한 개발자들 에게는 그러한 기술이 없다고 확신합니다 .
커크 브로드 허스트

1
@ KirkBroadhurst : 그렇다면 회사에 문제가있는 것입니다.
sbi

@ sbi 많은 회사에서 무언가 잘못되었다고 생각합니다. OP의 회사는 프로그래머가 아닌 사람 (그러나 그는 '스마트 사람'입니다!)은 응용 프로그램 지원을 수행하는 역할로 옮겨 질 것을 제안하고 있습니다. 어디 몰라 당신이 일을 ...하지만 '현실 세계'는 내 경험에있어 그. 대부분의 산업에서와 마찬가지로 대부분의 사람들은 지나칠 정도로 충분히 능숙합니다.
Kirk Broadhurst

1
@ KirkBroadhurst : 내가 일하는 곳은 내 결정입니다. 나는 무능하다고 회사를 도망 쳤고, 개발자들 중 최소한 이것들에 대해 아는 사람이 없으면 도망 칠 것입니다.
sbi

7

.NET에서 시작하지 않습니다. 나는이 실수를 너무 많이했다. 시간 때문에 무능한 프로그래머를 만들도록 고용주에게 압력을 가하지 마십시오. .NET은 빠른 개발 플랫폼 일 수 있지만 개발자가 프로그래밍을 배우도록 강요하지는 않습니다. C #에서만 개발자가 참조 유형, 객체 수명에 갇히고 엄청난 메모리 누수 (예 : .NET에서 가능)를 남기고 디자인이 좋지 않습니다. C 또는 C ++ (OOP 개념을 사용해야하기 때문에 아마도 C ++)에서 시작하고 다음과 같이 말하는 것이 훨씬 낫습니다. "이러한 포인터를 다룰 필요가 없었습니까?" 여기 C #과 JAVA가 있습니다. 만약 그들이 c ++를 마스터했다면, 그들은 일주일에 한 두 번을 정복 할 것입니다. 나는 Joel의 연대를 추천합니다. 이것이 CS 101 선생님이 나에게 준 목록으로, 수치 분석을했을 때 훨씬 나아졌습니다. 또한 후보자가 머스타드를자를 지 여부를 더 일찍 알 수 있습니다. 또한 c와 c ++를 받으면 책 소개를 읽은 후 c #과 java를 자동으로 이해하게됩니다. 당신은 그것들을 이해할뿐만 아니라 c와 c ++를 모르는 사람보다 더 잘 이해할 것입니다.


4
""메모리가 당신을 위해 관리된다면 모든 것이 객체 지향적이었고,이 모든 불쾌한 포인터를 다룰 필요가 없었습니까? "STL이 있습니다. 처음부터 C ++에서 STL을 사용하도록 가르쳐주지 않은 이유는 무엇입니까?
Raynos

STL은 달콤합니다. Windows 프로그래밍이 진행되는 한 Windows API에 대해 더 많이 언급하고 있습니다. Windows API는 OOP를 염두에두고 설계되지 않았습니다. C ++에서 API를 사용하여 가난한 챕터가 응용 프로그램을 작성하는 것이 훌륭한 연습이라는 것을 알았습니다. 그런 다음 Window 클래스를 작성하고 이벤트 루프를 캡슐화하여 객체 지향으로 만듭니다. 그런 다음 마침내 작동하면 Windows Forms를 보여줍니다. 실제로 .NET으로 뛰어 들어도 누군가가 얻을 수없는 몇 가지 기본 개념 (예 : Windows 응용 프로그램 작동 방식)을 처리해야합니다.
Jonathan Henson

4
왜 누군가가 막대기로 Windows API를 만질까요? 내 말은 hWND80 년대 말이야? 분명히 좋은 추상화를 대신 사용하십시오 (추상화는 완전히 다른 토론입니다). 물론 그것이 어떻게 작동하는지 아는 것은 좋지만 추상화를 위해 C # .NET이 필요하지 않습니다
Raynos

2
Windows API는 놀랍습니다. 어쨌든, 나는 그것을 교육 도구로만 사용합니다. 예를 들어, 사람들은 일반적으로 Windows 프로그램에서 이벤트가 마술처럼 어떻게 발생하는지 이해하지 못합니다. 이벤트 루프를 통해 장난을 치는 것이 도움이됩니다. 또한 XID를 사용하는 방법을 모른 채 유닉스에서 무엇인가를하는 데 어려움을 겪는 것처럼 프로그래머는 그래픽과 관련이있는 API를 다루는 경우 특히 hWND에 대해 잘 알고 있어야합니다. 어쨌든, 그들은 Windows 프로그램이 어떻게 작동하는지 배우도록 강요합니다. 또한 완료되면 Windows.Forms의 작동 방식을 알게됩니다.
Jonathan Henson

일반적으로 .NET으로 C # btw로 전환 할 필요는 없습니다. @Joel은 프로그래머가 프레임 워크를 사용하기 전에 후드를 살펴 보는 것이 왜 좋은지에 관한 Leaky Abstractions의 Law에 대한 좋은 기사를 가지고 있다고 생각합니다.
Jonathan Henson

6

그들에게 간단하지만 해결할 수있는 무언가를주십시오. 그들이 조금 엉망으로 만들고 그것을 닦도록 도와주십시오. 박차를 가하는 데 도움이되는 작은 업적과 같은 것은 없습니다.


6

페어 프로그래밍. 당신이 당신의 자신의 코드를 작성하는 동안 당신을 가리게하십시오-모든 코드. 몇 시간 안에 코드를 입력하도록하고, 필요한 경우에도 키 입력으로 키 입력을 지시합니다. 그들의 몇 가지 질문에 대답하십시오. 그러나 너무 많이 느려지면 속도가 느려지 게됩니다. 그것들을 모두 담그십시오. 그들은 또한 오타와 생각보다 많은 버그를 찾을 수 있습니다. 며칠 안에 그들은 이전에 보았던 것과 비슷한 작업에 어떤 코드를 입력해야하는지 알려주는 '탐색'을 시작할 수있을 것입니다.

나는 한 달 안에 이런 식으로 개발자로 알고있는 것을 많이 배웠고, 다른 몇 명의 새로운 개발자들에게도 이런 식으로 가르쳤는데, 그 중 한 명은 몇 달 후에 신생 개발자로 나를 대신 할 수있었습니다. 우리가 처음 협력을 시작했을 때, 그는 한 줄의 코드를 작성하지 않았습니다.


1
페어 프로그래밍은 초보자 프로그래머를 가르치는 좋은 방법이라고 생각하지만 페어 프로그래밍은 항상 문제가 될 수 있다고 생각합니다. 초보자 프로그래머는 문제를 해결하고 자신의 능력에 대한 자신감을 키우기 위해 혼자 일할 시간이 필요하다고 생각합니다.
Helephant

페어 프로그래밍으로 진행하고 실제 작업, 작업하려는 소프트웨어에 대해 실제 작업을 수행하려는 언어로 실제 작업을 수행하여 간단한 작업을 수행하십시오. 모든 작업을 검토하고 멘토링 하면 진행됩니다.
Thomas W

2

그에게 좋은 생각을 줘라 (비주얼 스튜디오, 표현은 여전히 ​​좋다). 그에게 구문의 일반적인 60 %를 가르쳐라 (수율, linq, enum, 속성 등은 제외하고 수업, 가상 및 재정의). 디버거 (특히 콜 스택)에서 시간을 보내십시오. 그런 다음 도움이 필요할 때마다 Google "msdn functionanme"에게 알려 주면 빠른 시작이 가능합니다.

또한 그에게 예외를 포착하고 삼키지 말라고 가르치십시오. 다시 던지거나 기록해야한다고 알려주세요!

보너스 : 파일을 쉽게 읽고 쓸 수 있도록 JSON 데이터를 직렬화하는 방법을 가르쳐주십시오. db는 과도하고 배우기에는 너무 많으며 사용자가 파일 형식의 행당 하나의 항목을 허용하여 문자열 배열을 저장 /로드하도록 허용 할 수는 있지만 사용자 정의 파일 형식을 작성하지 못하게하고 싶습니다.


1

많은 사람들이 그 언어에 대한 언어와 책에 대해 이야기하고 있다는 것을 알고 있습니다. 나는 다릅니다.

프로그래밍은 분석적으로 사고하는 법을 배우는 것입니다. 무엇보다 먼저 그 사람은 문제가 무엇인지 알기 위해 종이에 사고를하고 생각할 수 있어야합니다. 그들이 올바른 사고 기술을 갖도록 그들을 안내해야합니다.

다음은 언어의 기본입니다. 선택한 언어로 시작하십시오. 프로그램에 문제를주십시오.

이 첫 번째 컷이 끝난 후에 CS 기초와 디자인 패턴을 수행하게하십시오.

이제 이러한 새로운 개념으로 이전 문제를 다시 프로그래밍하도록하십시오.


1

변수, 루프, while 루프, for 루프, 배열을 기초로 시작하십시오. 기초를 가르치고 화면에 인쇄하고 간단한 수학을하십시오. 방법과 기본 OOP로 이동하십시오. 여기서 클래스를 만드는 방법은 방법뿐만 아니라 그 이유를 보여줍니다.

언어는 중요하지 않지만, 당신이 아는 것을 고르고 메모리 관리, 포인터 등과 같은 것에 대해 걱정할 필요가없는 매우 추상적 인 것 (java, python 등)을 선택하십시오. 재귀, hanio의 타워 또는 재귀 적으로 디렉토리 검색.

프로그램 학습은 Ruby 프로그래밍에 대한 무료 리소스입니다. 재미 있고 쉽고 재미있게 만드십시오.


1

그에게 몇 가지 도전을주고 문제를 스스로 해결할 자원을 찾는 방법을 배우게하십시오.

대답을 찾고 자급 자족하는 방법을 가르쳐 줄 수 있다면 자연스럽게 잘 프로그래밍하는 방법을 배우게됩니다. 비판적 사고와 수완은 프로그래머에게는 두 가지 핵심 기술입니다.

하루가 끝날 무렵, 열정 / 관심은 그들이 빨리 배우는 데 얼마나 성공적인지에 대한 핵심 요소가 될 것입니다. 그가 "버그"를 갖지 않거나 잡지 않으면 느리고 고통스런 과정 일 수 있습니다. 그가 버그를 잡으면, 근무 시간을 늦추고 일생 동안 시간을 ​​보내면서 코딩을 늦게 할 것입니다.

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