Khi tôi học đại học, tôi từng làm gia sư cho phần giới thiệu khóa học lập trình trong số các khóa học khác. Vấn đề bạn đang mô tả không phải là hiếm. Tùy thuộc vào vai trò cụ thể của bạn là gì, bạn có thể có những cách tiếp cận khác nhau mà bạn muốn thực hiện.
Đầu tiên, nếu đây là một vấn đề phổ biến ảnh hưởng đến các phần quan trọng của các sinh viên trong lớp, nếu bạn có quyền truy cập, tôi sẽ tiếp cận giáo sư giảng dạy khóa học với phản hồi cụ thể về những khái niệm mà sinh viên không nắm bắt được, để ông hoặc cô ấy có thể kết hợp xem xét bổ sung tài liệu đó khi nó xuất hiện trở lại trong nhiệm kỳ, hoặc cải thiện chương trình giảng dạy cho các điều khoản trong tương lai.
Nếu bạn dạy một phần thảo luận cho khóa học ngoài thời gian trong phòng thí nghiệm của bạn, đó sẽ là thời gian tuyệt vời để giải thích những điều khó hiểu trong bài giảng và giúp làm cho chúng cụ thể hơn và đảm bảo các nguyên tắc cơ bản đều được hiểu.
Nếu thời gian duy nhất bạn làm việc với những sinh viên này là trong thời gian bạn ở trong phòng thí nghiệm dạy kèm, bạn vẫn có thể sử dụng thời gian này để dạy cho các sinh viên từng người một, hoặc một vài người, các khối xây dựng khái niệm mà họ cần để hiểu và hoàn thành bài tập về nhà của họ.
Họ có thể cảm thấy rất lạc lõng trong lớp, thậm chí họ không biết dừng lại và đặt câu hỏi. Nếu đó là trường hợp, trở lại những điều cơ bản với họ. Họ đã ở đâu trong khóa học khi họ hiểu những gì đang diễn ra? Nếu họ không chắc chắn hoặc "không bao giờ" hiểu, bạn có thể phải quay lại từ đầu để giải thích thế giới xin chào, dạy họ những điều như biến là gì, cách máy tính lấy danh sách "hướng dẫn" của họ và cố gắng làm theo thứ tự, nhưng máy tính không "thông minh" như chúng tôi nên bạn phải rất biết chữ và nói những điều chính xác để máy tính hiểu, v.v.
Đó thực sự là một điểm đấu tranh và thất vọng tôi đã thấy khá thường xuyên trong các khóa học lập trình không chuyên ngành. Học sinh viết một số mã. Có vẻ như "về" đúng, nhưng sau đó họ đi biên dịch nó và nó đưa ra một lỗi, một lỗi rất khó hiểu. Và họ không biết điều gì sai với nó. Và nhìn chằm chằm vào mã của họ trong nhiều giờ. Sau đó, cuối cùng tìm ra nó là một cái gì đó có vẻ tầm thường, như một dấu chấm phẩy bị mất, hoặc một cái nẹp ở sai vị trí. Sau đó, họ lại biên dịch nó một lần nữa và vẫn còn một lỗi, đó là một thứ khác. Họ đánh vần một tên biến khác nhau lần thứ hai họ sử dụng nó. Và như vậy. Vì vậy, họ nhờ một người bạn hoặc gia sư hoặc ai đó giúp đỡ, và họ có thể trả lời trên đỉnh đầu của họ "oh chỉ cần thêm cái này ở đó và sau đó nó sẽ hoạt động." Vì vậy, kinh nghiệm của họ là lập trình hơi "bí ẩn"
Đó là một khu vực như một gia sư, nơi bạn có rất nhiều phòng để giúp đỡ. Tùy thuộc vào mức độ thất vọng của họ, tôi có thể có các cách tiếp cận khác nhau để giúp họ tìm ra lý do tại sao mã của họ không hoạt động. Nếu họ sắp xếp nó, tôi có thể đưa ra gợi ý cho họ và cố gắng giúp họ tự tìm ra. Nhưng nếu họ chỉ ở cuối sợi dây về việc sẵn sàng từ bỏ sự thất vọng, tôi sẽ thường đưa cho họ một vài câu trả lời miễn phí, và sau đó cố gắng ít nhất hỏi họ những câu hỏi như "bạn có hiểu tại sao sự thay đổi này đã khắc phục chương trình của bạn không ? "
Đối với một số sinh viên, đặc biệt là những người không chuyên ngành, họ có thể không có sự chú ý có phương pháp đến từng chi tiết cần thiết để trở thành một lập trình viên giỏi hoặc thích lập trình. Bạn có thể nắm tay họ thông qua các chiến lược để giúp họ chú ý đến các chi tiết và đủ phương pháp để giải quyết các vấn đề ngay cả khi đó là một thách thức đối với họ.
Nhưng hậu môn không quan tâm đến việc các sinh viên thụt mã "đúng cách" - thông thường, các lập trình viên bắt đầu tạo ra vấn đề với lồng và phạm vi vì họ có dấu ngoặc không khớp hoặc tương tự vì họ không chú ý đến những gì được lồng trong cái gì. Đưa cho họ một danh sách kiểm tra "những điều cần kiểm tra khi chương trình của bạn không được biên dịch", như thụt lề tất cả các mã đúng và đảm bảo các dấu ngoặc khớp, đảm bảo tất cả các dòng kết thúc bằng dấu chấm phẩy, đặc biệt là xung quanh số dòng xuất hiện lỗi đầu tiên lên, v.v.
Dạy chúng biên dịch sớm và biên dịch thường xuyên. Viết mã bộ xương tối thiểu (giả sử, xin chào thế giới), biên dịch / kiểm tra. Thêm một vài dòng, biên dịch lại. Việc tìm lỗi dễ dàng hơn nhiều nếu bạn chỉ nhìn vào một nhóm nhỏ các thay đổi không phải là một nhóm lớn.
Giúp họ học cách chia nhỏ một vấn đề thành các vấn đề có thể giải quyết nhỏ hơn. Đây là điều tương tự chúng tôi làm khi các lập trình viên chuyên nghiệp giải quyết các vấn đề khó khăn hơn nhiều mà chúng tôi không biết cách giải quyết. Bạn tiếp tục chia nó thành từng mảnh cho đến khi bạn có được thứ gì đó mà bạn biết cách giải quyết hoặc có thể thực hiện một số nghiên cứu để tìm hiểu cách giải quyết. "Những bước bạn cần thực hiện để có được một giải pháp làm việc?" Chà, trước tiên bạn cần một số mã bộ xương (xin chào thế giới). Bạn có biết làm thế nào để làm điều đó? Vâng, thật tuyệt, vì vậy khi chúng ta nói xong, bạn có thể bắt đầu bằng cách làm điều đó! Sau đó, nó cần phải đọc một tập tin như là đầu vào. Bạn có nhớ đọc về điều đó trong chương 4 không? Có thật không? Tại sao bạn không đi xem cái đó sau khi bạn chạy thế giới đang chạy, và xem bạn có thể đến gần như thế nào để nó hoạt động và sau đó gọi lại cho tôi và tôi sẽ giúp bạn thêm một số khi bạn gặp khó khăn về điều đó. Một vài lần đầu tiên bạn có thể chỉ cần lập một danh sách đánh số cho họ các bước cần thiết để giải quyết vấn đề, để họ có thể học hỏi từ ví dụ về cách phân tách vấn đề.
Nếu họ đang nhận được một số nhưng không phải tất cả các tài liệu trong lớp, hãy khuyến khích họ đặt câu hỏi trong lớp, bởi vì chín lần trong số mười, họ không phải là sinh viên duy nhất không hiểu, và giáo sư có lẽ đã che đậy điều gì đó quan trọng.
Nếu họ đang dành "hàng giờ" nhìn chằm chằm vào một lỗi nhưng không phát hiện ra, đó là một sự lãng phí thời gian của họ, họ sẽ không học được nhiều từ nó. Thông thường lỗi là vấn đề sâu sắc, và vấn đề là tìm ra cái nhìn sâu sắc đúng đắn để giải quyết nó, và chúng có thể không có sở trường cho những loại vấn đề đó. Đề xuất các cách tiếp cận chung khác cần thực hiện khi họ gặp khó khăn: nhờ một người bạn khác trong lớp giúp đỡ (làm quen với một số bạn cùng lớp nếu cần thiết), bắt đầu cách làm bài tập về nhà trước để họ có thời gian dừng lại và sau đó đi vào phòng thí nghiệm gia sư và đặt câu hỏi trong giờ mở cửa, hoặc đến giờ làm việc của giáo sư. Nếu chúng được sử dụng để nhồi nhét, hoạt động tốt cho các đối tượng ghi nhớ, chúng sẽ gặp phải một bức tường thất vọng khi chúng ' lại phải đối mặt với lập trình liên quan đến giải quyết vấn đề hơn là ghi nhớ. Chỉ cho họ cách tra cứu các ví dụ về cú pháp từ sách giáo khoa, stackoverflow, v.v ... Khuyến khích họ đăng câu hỏi lên một diễn đàn câu hỏi của lớp tư nhân nếu có.
Dạy chúng cách thu hẹp nơi mã dừng hoạt động. Nhận xét nội dung cho đến khi bạn quay lại một cái gì đó chạy, và sau đó từ từ thêm lại công cụ cho đến khi bạn nhận được segfault đó một lần nữa.
Rất nhiều trong số những ý tưởng này có thể được biến thành bản phát hành nếu chúng xuất hiện nhiều. Các chiến lược thường là phần mà các giáo sư chú ý - họ dành thời gian cho cú pháp, ngữ nghĩa của cách viết vòng lặp, mảng, i / o, v.v. Nhưng không đủ thời gian cho "tôi làm gì khi tôi thử để chạy mã của tôi và nó không biên dịch hay gặp sự cố với tôi? "
Khi nói đến những điều khái niệm, đặc biệt là các nguyên tắc cơ bản, như "biến là gì" hoặc "vòng lặp là gì?" không hiểu điều đó sẽ khiến họ không thể theo kịp phần còn lại của khóa học. Trong một khóa học dựa trên bài giảng, giáo sư có thể không có thời gian để trả lời mọi câu hỏi hoặc giúp bóng đèn đó tắt cho mỗi sinh viên. Và đó là một phần lý do tại sao gia sư rất quan trọng cho việc học lập trình. Họ có thể cần hướng dẫn cá nhân với các tương tự bổ sung để làm cho một chủ đề cụ thể.
Vì bạn đang giảng dạy bằng C ++, tôi sẽ tưởng tượng các lớp học xuất hiện như một chủ đề trừu tượng mà một số sinh viên phải vật lộn để "có được". Thông thường sự trừu tượng của các lớp được dạy với các ví dụ tương ứng với một số đối tượng trong thế giới thực ngẫu nhiên, như "máy ATM", và các phép tương tự được tạo ra cho đối tượng trong thế giới thực. Bạn có thể có các biến để theo dõi số tiền bên trong, bạn có các phương thức, giống như các quy tắc cho biết máy atm làm thế nào để đáp ứng với các điều kiện cụ thể, v.v. Đôi khi, một sự tương tự là "tương tự" đối với một người cụ thể và các sinh viên khác nắm bắt một cái khác tốt hơn.
Bất cứ khi nào có thể, vẽ hình cho họ. Giống như một sơ đồ tuần tự về những gì xảy ra theo thời gian để giúp họ nhìn thấy bức tranh lớn về những gì mã họ đang viết. Người dùng nhấp vào nút này. Sau đó, chương trình sẽ đáp ứng bằng cách làm x, y và z. Vẽ một mảng giống như một loạt các Hộp thư bưu điện tại bưu điện, mỗi bưu điện chỉ có thể chứa một số và các con trỏ giống như mũi tên chỉ vào "địa chỉ" ở mặt trước của hộp. V.v.