Tôi đã dạy lập trình giới thiệu ở cấp đại học. Đó là một khóa học bánh mì, tất cả các giảng viên đã làm nó, và tôi nghĩ rằng chúng tôi đã làm nó khá tốt. Chúng tôi theo một văn bản chung và có các bài kiểm tra chung, nhưng mỗi chúng tôi đều có phương pháp lớp học riêng. Đã lâu lắm rồi, nhưng thỉnh thoảng tôi có thể dạy kèm cho một đứa trẻ lập trình, và toàn bộ bức tranh cũng giống như vậy.
Cách tôi làm là bắt đầu từ phía dưới, càng cụ thể càng tốt. Những gì sinh viên biết là một cấu trúc. Họ đã có rất nhiều khái niệm. Tôi đang xây dựng các khái niệm xa hơn trên các khái niệm đó và tôi đang loại bỏ các khái niệm mà chúng có thể tạo thành phản tác dụng. Đồng thời, tôi làm cho họ học bằng cách làm .
Tôi đã xây dựng một máy tính nhỏ với chip Intel 8008, một số EPROM và một vài mạch. Tôi đã lập trình cho nó chơi một bản song ca nhỏ khi chip I / O được kết nối với một cặp loa. Tôi sẽ giải thích cách chương trình nhỏ hoạt động, với một vòng lặp bên trong để đếm ngược một bộ đếm. Điều đó sẽ hành động như một sự chậm trễ. Sau đó, nó sẽ chuyển bit đầu ra và làm lại. Nó sẽ làm điều đó trong một thời gian, và sau đó chuyển sang một độ trễ khác, đưa ra một cao độ khác, v.v. Chip bộ nhớ có một bộ đếm thời gian nhỏ, và nếu tôi nhét một đầu tụ điện vào một trong các đầu vào bộ hẹn giờ, chương trình sẽ chạy chậm . Cả lớp có thể nghe thấy những người nói đang bấm, bấm, bấm ... Tôi muốn cả lớp hiểu rằng máy tính đang làm những việc rất đơn giản từng bước một. Sau đó, tôi sẽ bỏ nối dây dẫn tụ điện, và "âm nhạc" sẽ nổ ra. (vỗ tay)
Sau đó, tôi đã xây dựng một trình giả lập cho một máy tính thập phân rất đơn giản, có 1000 vị trí bộ nhớ, mỗi vị trí giữ một số thập phân có 4 chữ số được ký. Nó có các opcodes rất đơn giản như "thêm vào bộ tích lũy", "nhảy nếu âm", v.v. Tôi sẽ yêu cầu họ viết các chương trình nhỏ bằng "ngôn ngữ máy" này, như thêm hai số hoặc thêm danh sách các số. Sau đó, họ có thể xem nó hoạt động bằng cách bước đơn hoặc giữ phím Enter để xem nó chạy "nhanh".
Quan điểm của việc này là đưa ra khái niệm rằng máy tính chỉ có thể thực hiện một số lượng rất nhỏ các hoạt động cơ bản khác nhau và chúng thực hiện chúng cùng một lúc. Điều này là để chống lại ấn tượng họ có rằng máy tính rất phức tạp và họ làm tất cả mọi thứ cùng một lúc và đọc được suy nghĩ của bạn trong cuộc mặc cả.
Từ đó chúng tôi tiếp tục lập trình bằng ngôn ngữ "thực" (BASIC :), bắt đầu với các chương trình rất đơn giản nhưng thú vị, làm việc thông qua các điều kiện, vòng lặp, mảng, tệp, hợp nhất, v.v. Đối tượng là đặt một bộ kỹ năng đầy đủ để họ có thể thực hiện một dự án do chính họ lựa chọn, bởi vì đó là điều duy nhất làm cho việc lập trình trở nên thú vị - việc sử dụng mà bạn có thể đặt nó. Tôi sẽ đưa ra một số ý tưởng cho các dự án, và sau đó họ sẽ lấy nó từ đó. Tôi sẽ yêu cầu các ý tưởng bằng văn bản, và sau đó tiến hành báo cáo, để giữ cho chúng khỏi hoãn lại đến phút cuối cùng và sau đó hoảng loạn. Tôi nghĩ rằng các dự án là phần tốt nhất, bởi vì họ đã học dưới sức mạnh của chính họ.
Cơ sở ban đầu đó là một sự hiểu biết rất cụ thể về những gì máy tính làm cho việc dạy các khái niệm sau này trở nên dễ dàng hơn nhiều, nếu không sẽ là những cú va chạm tốc độ thực sự, như mảng hoặc (trong khóa học sau). Chúng ta có xu hướng tôn vinh khái niệm "trừu tượng" là điều tuyệt vời này, nhưng nó cần được xây dựng trên một nền tảng cụ thể, không phải trên không.