2010-04-22 23 views
14

Tôi là sinh viên khoa học máy tính hoàn thành học kỳ thứ hai của các lớp lập trình. Tôi đã rất thích chúng một chút, và học được rất nhiều, nhưng có vẻ như các sinh viên khác đang đấu tranh với các khái niệm và bài tập nhiều hơn tôi. Khi một bài tập đến hạn, email nhóm không thể tránh khỏi sẽ xuất hiện trước một hoặc hai ngày trước khi mọi người cần trợ giúp hoặc với một phần cụ thể của vấn đề, hoặc đôi khi mọi người dường như khó có thể biết bắt đầu từ đâu.Tôi làm cách nào để giúp các bạn học sinh gặp khó khăn trong các lớp lập trình?

Tôi thực sự muốn có thể giúp đỡ, nhưng tôi có một thời gian khó suy nghĩ đúng cách để cung cấp cho họ sự trợ giúp mà không đưa ra câu trả lời cho họ. Khi tôi gặp khó khăn trong việc hiểu một khái niệm, đoạn mã có thể đi theo cách để giúp tôi, nhưng đồng thời nếu nó có ý nghĩa rất nhiều, có thể khó nghĩ ra một cách khác để giải quyết nó. Cộng với phần Tính toàn vẹn học tập của mỗi bài tập luôn luôn hiện ra lờ mờ cảnh báo chống lại việc chia sẻ mã với người khác. Tôi đã thử sử dụng mã giả để giúp cung cấp cho người khác ý tưởng về luồng chương trình, để họ tìm ra cách triển khai các khía cạnh nhất định của nó, nhưng tôi không nhận được quá nhiều phản hồi và không biết nó thực sự giúp họ như thế nào ra, hoặc nếu nó chỉ làm họ bối rối hơn nữa. Vì vậy, tôi về cơ bản tìm cách để xem có ai có kinh nghiệm với điều này, hay cách tốt để tôi có thể giúp đỡ các sinh viên khác để đưa họ đi đúng hướng hoặc giúp họ suy nghĩ về vấn đề một cách đúng đắn.

+5

Tôi chỉ muốn chỉ ra rằng các sinh viên đồng nghiệp không nên là nguồn lực của giáo dục, đó là những gì nhân viên giảng dạy. Bạn cũng có thể đã hiểu lầm việc chuyển nhượng là tốt, làm cho những sai lầm khủng khiếp vv vv Vì vậy, các khóa học lý tưởng của hành động là để kiềm chế không giúp đỡ và để cho họ mang nó lên với các giáo viên. Sau đó, một lần nữa có những điều nhỏ như "WTF là trình biên dịch phàn nàn về bây giờ?", Trong những trường hợp cố gắng giúp đỡ, nhưng chắc chắn rằng nó vẫn trong vòng năm phút đánh dấu. – NomeN

+2

@Nome trừ khi tất nhiên, bạn đang ở trong một lớp C++ bắt đầu và bạn đã viết> 5.000 dự án LOC trong C++ vì bạn đã chán 3 năm trước ... Đây là tình huống tôi đang ở. – Earlz

+8

@NomeN Tôi không đồng ý với điều đó. Tôi nghĩ rằng một sinh viên đồng nghiệp cảm thấy thoải mái với tài liệu cũng hữu ích - và đôi khi hữu ích hơn giáo viên. Tại sao? Bởi vì hai bạn chia sẻ một POV. Một số giáo viên chỉ là giáo viên xấu, đó là nó, và một sinh viên đồng nghiệp có thể làm một công việc tốt hơn trong giao tiếp một ý tưởng. Có, đôi khi một sinh viên thông minh nhận được một câu hỏi chuyển nhượng sai, nhưng nếu anh ta hoặc cô ấy vẫn biết các khái niệm thì họ có thể giúp bạn bè của họ nhiều hơn một giáo viên xấu làm rõ một câu hỏi trong một bài tập. – wilhelmtell

Trả lời

18

Yêu cầu họ giải thích mã của họ cho bạn.

này hoàn thành một vài điều:

  • Thứ nhất, nó cho thấy rằng họ thực sự có mã để cho bạn thấy. Làm thế nào họ có thể không hiểu một cái gì đó nếu họ thậm chí không mở ra một trình soạn thảo văn bản chưa?
  • Tiếp theo, nó chứng tỏ rằng họ hiểu mã ở cấp độ cơ bản. Họ có thể sao chép nó từ đâu đó. Nếu họ không biết điều đầu tiên về mã họ có, đó là một lá cờ. (Nếu họ đã sao chép mã, nhưng vẫn mất thời gian để hiểu mã, thì điều đó vẫn còn không trung thực về mặt học thuật nhưng đó là một kỹ năng có giá trị để sử dụng sau khi học đại học.)
  • Cuối cùng, bây giờ chúng ta đang ở nơi họ thực sự có thể nhận được nó, với sự giúp đỡ của bạn (hoặc thậm chí không có!) Nếu họ đến nơi mà lỗ hổng trong sự hiểu biết của họ là (khi họ giải thích mã của họ cho bạn) và nó nhảy ra ngoài họ, sau đó họ đã giải quyết vấn đề riêng.Nếu họ không nhận ra lỗ, thì đây là nơi bạn có thể cho họ gợi ý nhắm mục tiêu.
+0

Lời khuyên tốt, tôi thực sự muốn họ giải thích mã của họ. Âm thanh như một cách thực sự tốt để bắt đầu và tìm ra những gì họ thực sự làm và không nhận được. Lời khuyên hay về tất cả xung quanh, tôi đánh giá cao tất cả các đầu vào. –

+6

Đồng ý, một cách tiếp cận tốt. Về cơ bản vịt cao su nơi bạn là vịt cao su của họ. – derivation

+0

@derivation, tôi nghĩ rằng đó là từ Pragmatic Programmers hoặc Code Complete nhưng tôi không thể nhớ cái nào. – John

0

Một trong những vấn đề phổ biến nhất trong giảng dạy là xác định xem học sinh có hiểu bạn hay không. Một cách dễ dàng và hiệu quả để xác định xem bạn có nên tiếp tục hay nói lại là để học sinh thể hiện sự hiểu biết của mình bằng cách làm một cái gì đó liên quan chặt chẽ nhưng không giống nhau.

Ngoài ra, vì lập trình cơ bản là vấn đề về từ, điều quan trọng là học sinh chia nhỏ mọi thứ thành các bước. Tôi muốn được hỏi xem họ đã vượt qua những bước đầu tiên của họ trước khi tôi giới thiệu cho họ bất cứ điều gì. Quá nhiều người nhận được hung lên trong cú pháp và không bao giờ thực sự móng tay xuống những gì họ đang cố gắng để làm trước khi lặn trong

3

Vài suy nghĩ:.

  1. Đừng ghép chương trình

    Có học sinh (các người bạn đang giúp đỡ) ngồi trên ghế và mã hóa một cái gì đó. Có thể là một đoạn mã, có thể là một phần của một dự án, bất cứ điều gì, miễn là nó đại diện cho một cái gì đó mà họ gặp rắc rối. Khi họ đi, chỉ ra (không thô lỗ) những nơi mà họ có thể đã làm điều gì đó không chính xác, hoặc cái gì đó có thể được cải thiện.

  2. việc xét thực hiện

    Một trong những điều đó đã giúp tôi nhiều nhất là phải có một giao thức peer (như trái ngược với một giáo viên hoặc phụ tá sinh viên) xem xét mã của tôi. Hầu hết thời gian đồng đẳng có thể chỉ ra những nơi mà họ có thể đã làm một cái gì đó khác nhau.

  3. Làm cho chúng lặp lại bạn.

    Tôi thường làm cho mọi người tôi đang giúp học lặp lại những gì tôi vừa nói để xem họ có hiểu hay có bất kỳ câu hỏi nào. Bạn sẽ ngạc nhiên khi mọi người thường không lên tiếng khi họ không hiểu điều gì đó.

  4. Trợ giúp phiếu mua hàng trước khi dự án đến hạn.

    Cố gắng hoàn thành dự án vào đêm trước khi đến hạn là một cách chắc chắn, ít nhất, không học các khái niệm kỹ lưỡng như bạn có thể có.

  5. Không tự viết mã cho mình

    Các đồng nghiệp của bạn sẽ không biết gì nếu bạn làm điều đó cho họ.

  6. Tìm các nguồn lực khác

    Một phụ tá, một giáo sư thân thiện, một người đồng nghiệp của bạn có thể là nguồn vô giá. Nếu bạn thấy rằng phong cách giảng dạy của bạn không phù hợp với phong cách học tập của đồng nghiệp của bạn, hãy chỉ cho họ biết ai đó có thể giúp họ nhiều hơn.

  7. Hy vọng cho điều tốt nhất

    Bạn chỉ có thể đi xa đến khi dạy ai đó; họ phải muốn học.

+8

Ồ, và 8: Không cung cấp trợ giúp trừ khi bạn chắc chắn bạn biết mình đang làm gì. Lời khuyên xấu thường tồi tệ hơn không có lời khuyên nào. –

8

Tôi đã làm việc như một NVHTGV và tại bàn trợ giúp của bộ phận CS (và giúp bạn bè). Đây là những gì tôi làm ...

Tóm tắt vấn đề, tìm một vấn đề liên quan, sau đó làm việc thông qua các vấn đề liên quan với họ. Nếu họ không thể thực hiện kết nối, bạn thực sự không thể giúp họ.

Chỉnh sửa: và từ chối giúp đỡ nhiều hơn cú pháp cơ bản trần nếu họ đang tìm kiếm trợ giúp ngày hoặc ngày trước đó. Mọi thứ nên được xử lý lâu trước thời hạn. Việc nạng người vào ngày không phải là một thực hành tốt cho bạn.

+0

Chắc chắn là một cách tốt để đi. – justkt

2

Một điều có thể hữu ích cho các bạn sinh viên của bạn là chỉ đến mã tương tự trong ghi chú bài giảng (hoặc nếu bạn không nhận được ghi chú bài giảng được đưa ra, trong ghi chú của riêng bạn). Bằng cách đó, bạn chỉ cho họ thấy những gì giáo sư nói, nhưng làm theo cách hữu ích.

Nếu học sinh khác mở cửa, hãy đặt câu hỏi cho họ về mọi thứ họ đã thử và tại sao lại hữu ích.

Cuối cùng, hãy cân nhắc đến giáo sư của bạn và hỏi ý kiến ​​của họ về những gì bạn được phép làm và cách họ có thể đề nghị bạn giúp đỡ người khác. Xét cho cùng, các giáo sư có nhiều năm kinh nghiệm trong việc dạy học sinh. Thậm chí nhiều hơn, bạn sẽ có cơ hội làm đại học để trở thành một NVHTGV trong những năm tới? Tôi đã trở thành giáo viên đại học, và điều đó đã giúp tôi sử dụng năng lực của mình một cách hiệu quả để hỗ trợ người khác mà không vi phạm bất kỳ mã danh dự nào. Nếu bạn có cơ hội việc làm đại học như vậy, cho phép các giáo sư nhìn thấy bạn bây giờ như là loại hữu ích sẽ giúp bạn có được chúng.

0

Trải nghiệm chung trong việc giải thích nội dung cho người khác là tìm hiểu vị trí của họ trước tiên. Cố gắng không cung cấp cho họ các giải pháp cho các vấn đề mà họ thậm chí không có (ngay cả khi bạn chắc chắn rằng họ sẽ đi qua chúng sau này). Nói cách khác, đừng đi trước hai bước. Nếu họ gặp khó khăn trong việc hiểu sự gọi theo giá trị, đừng giải thích cho họ đệ quy.

-1

TÂM LÝ TIẾP CẬN

cho họ thấy một số ứng dụng thế giới thực phổ biến (như là một ví dụ) mà họ sử dụng ngày này sang ngày ... viết bằng ngôn ngữ lập trình mà bạn đang cố gắng để dạy .....

  1. giải thích tất cả mọi thứ với nền
  2. cung cấp cho mỗi học sinh, tầm quan trọng đáng kể
  3. alwaysss sử dụng mã màu cú pháp
+0

Mọi người không phải là pokemon. –

0

Theo cách trợ giúp các sinh viên khác nói chung, tôi thường sử dụng cách tiếp cận "chơi ngu ngốc". Tôi giả vờ rằng tôi không biết gì về nhiệm vụ cụ thể của họ, và tôi yêu cầu họ giúp tôi tăng tốc về những gì họ có nghĩa vụ phải làm. Tôi cũng yêu cầu họ cho tôi một cách nhanh chóng chạy xuống những gì họ đã học được trong lớp về bất cứ khái niệm nào về nhiệm vụ. Điều này thường mất khoảng 5 phút và khoảng 95% thời gian, các sinh viên khác đã trả lời câu hỏi của riêng họ vào thời điểm họ kết thúc giải thích cho tôi. Nếu họ đã không giải quyết nó vào thời điểm này, tôi yêu cầu họ đưa tôi qua giải pháp của họ để phân công. Khi làm điều này, họ thường bắt gặp nơi giải pháp của họ lệch khỏi những gì họ vừa nói họ học được trong lớp.

Theo như trợ giúp dành riêng cho chương trình, đôi khi tôi yêu cầu học sinh khác gửi cho tôi mã của họ và tôi chạy nó qua một kịch bản lệnh đơn giản mà tôi đã viết. Tập lệnh đó điền vào tất cả mọi thứ trong tệp mã là không phải là nhận xét và tôi cung cấp kết quả cho sinh viên khác đọc. Tệp kết quả thường đọc giống như một phác thảo mã của họ và rất nhiều lần họ có thể thấy mã của họ bị lỗi một cách đơn giản bằng cách lấy mã ra khỏi đường. Nếu cách tiếp cận của họ là hoàn toàn sai, tôi bảo họ viết một phác thảo về những gì mã được cho là phải làm (trong các điều khoản cấp cao) bằng cách sử dụng các bình luận; sau khi hoàn thành việc này, họ điền vào từng phần của đường viền bằng mã thực hiện bước phác thảo đó (kiểm tra từng đoạn "khi chúng đi"). Điều này giúp rất nhiều người tách mã khỏi thuật toán (nhiều vấn đề phổ biến mà tôi thấy xuất phát từ việc thiếu cách tiếp cận có hệ thống hoặc kỷ luật để giải quyết vấn đề và bài tập này giúp họ đi đúng hướng).

Phương pháp khác là trả lời các câu hỏi bằng ngôn ngữ lập trình khác. Ví dụ, tôi đã giúp một số sinh viên của tôi về các dự án Matlab bằng cách giải thích các khái niệm sử dụng C, Ruby, hoặc thậm chí cả mã giả (đọc nhiều hơn như tiếng Anh đơn giản hơn mã). Tôi biết rằng họ có nhiều kinh nghiệm hơn với các ngôn ngữ khác, vì vậy tôi đã sử dụng những gì họ biết rõ nhất để minh họa các khái niệm và khuyến khích họ cố gắng giải quyết vấn đề bằng ngôn ngữ mẹ đẻ của họ trước tiên. Một khi họ tin tưởng rằng họ hiểu các khái niệm, họ có thể làm việc để tìm ra cách để thực hiện chúng bằng ngôn ngữ đích. Phải học các khái niệm mới trong khi bạn vẫn đang học một ngôn ngữ làm cho cả hai khó khăn hơn. Cách tiếp cận này cũng giúp xác định xem họ có gặp khó khăn trong việc tìm hiểu cách giải quyết vấn đề hoặc cách mã hóa giải pháp.

2

Tôi không nghĩ bạn nên giúp họ. Tôi nghĩ nó không trung thực về mặt học thuật. Ngoài ra, họ không giúp bạn đưa ra câu trả lời cho họ, hoặc thậm chí là bạn có mặt để trả lời câu hỏi, kể từ khi họ đến kỳ thi (hoặc thế giới thực), bạn sẽ không ở đó cho họ.Họ không chỉ cần học cách tự lập trình (mà có lẽ bạn đang giúp họ làm), mà còn tự mình trả lời câu hỏi của họ. Điều đó có nghĩa là đăng trên những nơi như StackOverflow. Bạn có thể muốn đề nghị rằng họ xây dựng một câu hỏi cụ thể (luôn luôn là một bài tập tốt) và đăng nó vào đây với thẻ "bài tập về nhà".

Khi tôi học các lớp CS ở đại học, có một số sinh viên không thể viết mã hoặc thiết kế (và tôi đang nghĩ đến lớp kỹ thuật phần mềm cấp cao nói riêng). Họ cũng không biết phải làm thế nào để giải quyết vấn đề, hoặc nơi để tìm kiếm mọi thứ, nơi để có được câu hỏi được trả lời, hoặc những câu hỏi để hỏi. Họ hoàn toàn bất lực bởi vì họ đã dành phần lớn thời gian học của mình để làm bài tập về nhà/dự án theo nhóm và có các thành viên nhóm tài năng hơn nắm tay họ. Đừng kéo dài điều này. Điều cuối cùng mà ngành công nghiệp cần là những người lập trình không đủ năng lực, những người tốt nghiệp với điểm số cao để đưa vào sơ yếu lý lịch của họ.

+0

Bạn thực hiện một điểm rất tốt. Giúp họ viết chương trình là những gì tôi muốn tránh, Nếu tôi sẽ giúp đỡ một học sinh khác, tôi muốn đảm bảo rằng sự giúp đỡ của tôi sẽ giúp họ nhận ra cách tự giải quyết vấn đề. Một trong những điều tôi thấy là mọi người dường như không được mô đun hóa. Tôi cảm thấy có một số lĩnh vực như thế này một số người có thể sử dụng một hướng dẫn để giúp làm cho ý tưởng nhấp chuột. Rất tốt, mặc dù phản ứng, Nếu tôi giúp đỡ trong tương lai tôi cần phải chắc chắn rằng đó là một người tìm kiếm để tìm hiểu, không tìm kiếm câu trả lời. –

+0

Tôi không đồng ý. Giúp họ không giống như cho họ câu trả lời. Giúp đỡ họ là giống như việc dạy lại một khái niệm mà họ có thể không học được cách nó được dạy trong lớp. Sử dụng nó để giải quyết vấn đề của họ vẫn còn tùy thuộc vào họ. Bạn nói rằng họ cần phải học cách "tự mình trả lời các câu hỏi của họ", nhưng không phải là những gì họ đang làm bằng cách yêu cầu bạn giúp đỡ? Tôi đồng ý rằng việc kéo trọng lượng chết của người khác xung quanh là một ý tưởng tồi tệ cho tất cả mọi người liên quan, nhưng tôi sẽ không nói đó là một lý do để tránh giúp đỡ các bạn học sinh hoàn toàn. – bta

1

Bất cứ khi nào tôi cố gắng dạy bạn gái của mình cách lập trình, tôi hầu như chẳng làm gì ngoài việc đặt câu hỏi. (cô ấy đã nhận được tuyên bố .each trước khi chán)

Yêu cầu họ đặt câu hỏi về cách mã của họ hoạt động và cách họ nghĩ rằng họ có thể hoàn thành nhiệm vụ. Cung cấp cho họ small nudges theo đúng hướng. Và không bao giờ EVER nhập nội dung nào đó cho họ. Nếu bạn có một máy tính khác và gõ mã vào nó để hiển thị chúng và hiển thị cho họ kết quả, điều đó là tốt nhưng đừng làm thế.

1

Dưới đây là lời khuyên tôi cung cấp cho giáo viên của học sinh: tránh đưa ra câu trả lời cho học sinh. Thay vào đó, hãy đặt câu hỏi cho họ. Và đảm bảo rằng đặt câu hỏi mà họ có thể tự hỏi mình trong tương lai. Đối với tài liệu tôi dạy, dưới đây là một số câu hỏi mà tôi muốn tất cả các sinh viên tự hỏi mình:

  • Sự trừu tượng của bạn là gì?

  • Ví dụ về cách trừu tượng của bạn được cho là hành xử như thế nào? Bạn có thể chỉ cho tôi một ví dụ khác không?

  • Có bất kỳ ví dụ nào về nơi bạn trừu tượng được phép không thành công không? Làm thế nào nó sẽ thất bại trên ví dụ đó?

  • Bạn đã thử nghiệm các ví dụ này chưa?

  • Đại diện cho sự trừu tượng của bạn là gì?

  • Biểu diễn có liên quan như thế nào đến trừu tượng? Bạn có thể chỉ cho tôi một bức tranh? Bạn có thể chỉ cho tôi trong toán học không?

  • Các chức năng nào được phép xem biểu diễn? Hợp đồng của từng chức năng là gì? Liệu các đại diện đáp ứng một bất biến mà các chức năng có thể giả định? Mỗi chức năng có đảm bảo rằng bất biến được bảo tồn không?

  • valgrind nói gì?

Các vấn đề liên quan