Một số bài tập tốt cho một khóa học giới thiệu, để tiếp cận sinh viên ngày nay là gì? [đóng cửa]


25

Tôi định kỳ dạy giới thiệu về khóa học lập trình bằng Java . Tôi muốn cho học sinh của mình một số bài tập thú vị mà chúng có thể liên quan hoặc thấy thú vị . Ít nhất, tôi muốn các bài tập có ý nghĩa và có sự gắn kết nội bộ (ví dụ, một số bài tập lập trình rất tệ dường như chỉ được sử dụng để bạn phải sử dụng cấu trúc lập trình gần đây nhất được đề cập).

Để cung cấp cho bạn ý tưởng về phạm vi, đây là những gì đang được đề cập :

  • Các bài tập phải bằng Java, sử dụng một số thư viện bên ngoài có thể được thực hiện, nhưng nó cần phải là một API đơn giản và không phải là một khung công tác đầy đủ
  • Biến, nguyên thủy và chuỗi
  • Bảng điều khiển đầu vào và đầu ra
  • if, for,while
  • Toán tử số học và logic
  • Đồ họa đơn giản với vẽ đường và hình
  • Phương thức tĩnh
  • Mảng một chiều

Các sinh viên sẽ không đi vào các chủ đề nâng cao (ví dụ, không đệ quy, không nhấn mạnh vào sự kế thừa). Vì vậy, tôi không tìm kiếm các dự án phức tạp: "Yêu cầu họ viết trình biên dịch C. Tôi đã làm điều đó khi tôi lên 5 và đó là cách duy nhất tôi học được!"

Nếu bạn có ý tưởng nâng cao hơn phạm vi, vui lòng gửi chúng vào câu hỏi "Thử thách" được liên kết bên dưới, chứ không phải ý tưởng này.

Thay vào đó, những gì tôi đang tìm kiếm là những ý tưởng thú vị có thể được thực hiện trong một chương trình ngắn. Ví dụ:

  • Học sinh có thể viết phiên bản giao diện điều khiển của Trình tạo "Tên Chiến tranh giữa các vì sao" . Đây là cách đọc hiệu quả Chuỗi và sử dụng substring, nhưng tôi nghĩ nó rất vui. Một biến thể tương tự sẽ là một chương trình " Mad Libs ". Tôi đã sử dụng cái này năm năm trước và có lẽ nó đã "cũ".

  • Sử dụng một số trig cung cấp cho họ, sinh viên có thể vẽ các đa giác thông thường và tạo ra các hình xoắn ốc thú vị.

  • Cũng không nằm ngoài câu hỏi sử dụng một số lớp hoạt hình đơn giản với hầu hết các mã được cung cấp cho chúng. Và nếu bạn biết một dịch vụ Twitter hoặc Facebook có thể được truy cập bằng API đơn giản, tôi sẽ rất muốn biết.

Xin lưu ý rằng câu hỏi này khác với Câu hỏi " Thử thách Java cho người mới bắt đầu ". Tôi không tìm kiếm thử thách cho mỗi se, chỉ thú vị. Tôi nghĩ rằng nếu sinh viên làm việc trên một cái gì đó mà họ có thể dễ dàng trả lời "tại sao mọi người sẽ muốn lập trình điều đó?" sau đó họ sẽ học tốt hơn

Ngay cả những vấn đề đơn giản như tính toán Miles per Gallon cũng có thể tốt. Mặc dù, nếu có một cách để cập nhật nó để phù hợp hơn, thì tốt hơn hết. Nếu bạn có một bài tập từ một nơi khác (một cuốn sách hoặc một trang web), vui lòng trích dẫn nguồn.

Để giúp bạn suy nghĩ về sinh viên năm nhất điển hình hiện nay, hãy xem danh sách Tư duy Beloit , để biết nhiều ví dụ chắc chắn sẽ khiến bạn cảm thấy già.


Vì tò mò, bạn đang dạy học sinh ở cấp độ nào mà bạn nghĩ rằng các chủ đề như đệ quy và thiết kế hướng đối tượng là quá tiên tiến? Những chủ đề này đã được đề cập sâu trong học kỳ đầu tiên của tôi, lớp lập trình giới thiệu. Tôi nghĩ rằng bạn đang làm cho sinh viên của bạn một sự bất đồng nếu bạn cố gắng giữ cho các khóa học quá đơn giản.
Mayra

@Mayra: Đây là phần giới thiệu về khóa học lập trình, khóa học đầu tiên cho chuyên ngành CS. Tôi đang tìm kiếm các vấn đề thú vị cho sinh viên sử dụng trong 5 tuần đầu tiên (hoặc thậm chí là ngày đầu tiên), và không chỉ ở cuối. Đó là một thách thức thực sự để làm việc trong các yêu cầu này (và tin tôi rằng một số vấn đề nằm ngoài tầm kiểm soát của tôi), do đó tôi chuyển sang các bạn để được giúp đỡ.
Macneil

Câu trả lời:


9

Đưa ra các ràng buộc, tôi khuyên bạn nên triển khai phiên bản Hangman. Nó sẽ cho phép các sinh viên thể hiện tất cả các kỹ thuật mà bạn đang giới thiệu cho họ, mà không quá phức tạp.

Nó cũng có thể được sử dụng như một dự án đang phát triển khi khóa học tiến triển. ví dụ: một khi bạn đã bao gồm các chuỗi và các biến bắt đầu như một phiên bản văn bản

ví dụ

You have 10 guesses left.      * * * E * * T
What is your next guess?

sau đó giới thiệu các vòng lặp để loại bỏ phần tử cắt và dán khỏi mã khi 10 lần đoán đếm ngược ... xây dựng để có đồ họa đường và người dính được treo / lưu vào cuối khóa học 5 tuần.

Giống như hầu hết những người khác có kinh nghiệm tuyển dụng và phỏng vấn lập trình viên, điều đó thực sự khiến tôi chùn bước rằng mức học phí này là cần thiết ở trường đại học, nhưng than ôi, có lẽ nó sẽ tiếp tục cần thiết cho đến khi các trường coi chương trình là một môn học nghiêm túc ngang tầm toán học hay khoa học


Ý tưởng tuyệt vời! Tôi nghĩ rằng tôi sẽ sử dụng cái này. :-) BTW, ý nghĩa của "mức học phí" là gì? Như trong chi phí?
Macneil

Nó hơn một nắm bắt về việc thiếu học phí lập trình trước khi học đại học. Hãy tưởng tượng đến Đại học để làm hóa học và dành thời hạn đầu tiên được nói về các nguyên tử, phân tử và điện tử. 3 năm chỉ là một khoảng thời gian quá ngắn để hiểu về khoa học máy tính.
Michael Shaw

Tôi thực sự thích ý tưởng này, không cần đồ họa phức tạp, có thể được thực hiện trên một dòng lệnh một cách hợp lý. Đó là niềm vui và chưa phải là một người giải toán.
Joppe

7

Âm thanh như một trò chơi phiêu lưu văn bản có thể là một nhiệm vụ tuyệt vời ở đâu đó giữa học kỳ. Tôi đã có một lớp học khiến chúng tôi chơi Colossal Cave Adventure và sau đó tạo ra trò chơi của riêng mình. Nó đã dạy tôi rất nhiều về các cấu trúc cơ bản từ rất sớm, và thật vui khi mọi người tham gia vào nó.


2
Âm thanh vui vẻ, nhưng giữ cho nó nhỏ.

7

Làm thế nào về việc sử dụng một hoặc hai vấn đề từ http://projecteuler.net/ Một số trong số này khá thú vị và người ta có thể thấy lợi ích của việc viết một chương trình để giải quyết chúng. Chúng đủ nhỏ để một số có thể được thực hiện như bài tập. Một cách khác mà tôi muốn sử dụng là tìm kiếm $ 1 từ. Mỗi chữ cái trong alaph.us có giá trị vị trí của nó bằng đồng xu tức là a = 1, b = 2. Bạn có thể tìm được bao nhiêu từ 1 đô la? Điều này có thể liên quan đến tập tin i / o (đọc trong từ điển), mảng, vòng lặp, v.v.


1
+1 cho Dự án Euler. Rất tuyệt. Mặc dù một số vấn đề hơi quá cao, nhưng có nhiều vấn đề không xảy ra.
Macneil

Tôi yêu Project Euler nhưng tôi không chắc nó có vui không nếu tôi phải tập thể dục ở trường đại học.
Oliver Weiler

Không phải tất cả trong số họ sẽ vui vẻ nhưng một số tôi nghĩ chúng ta là lựa chọn tốt
Gratzy

6
  • Thực hiện một trò chơi độc quyền. Độc quyền có một trình tự rõ ràng và cho vay để phân chia thành funcitons rất dễ dàng. Nó cũng chỉ yêu cầu một mảng một chiều và một vài lớp cơ bản. Logic đủ đơn giản để các sinh viên sẽ suy nghĩ nhiều hơn về "làm thế nào" hơn là "cái gì", và nó dẫn đến một cái gì đó có thể được chứng minh cho người khác.

  • Cung cấp cho họ một tệp được mã hóa được mã hóa với một số quy tắc có thể đảo ngược và yêu cầu họ viết một bộ giải mã (làm cho nó đủ đơn giản). Điều này mang lại một động lực bổ sung để giải quyết nó vì sự bí ẩn về nội dung của tin nhắn.

  • Tôi không biết tại sao bạn chỉ bao gồm các mảng một chiều chứ không phải ma trận (chúng thực sự không khác nhau lắm), nhưng nếu bạn sẵn sàng đưa điều đó vào trò chơi Cuộc sống của Jon Conway cũng tương đối dễ dàng và kết quả là một điều gì đó vui vẻ.

  • Một trò chơi như cờ vua đòi hỏi một số suy nghĩ nhưng vẫn nằm trong giới hạn của những gì người mới bắt đầu có thể làm với sự kế thừa tối thiểu (các phần cụ thể được kế thừa từ một mảnh chung chung và bảng giữ các đối tượng thuộc loại Mảnh) và mảng 2D (bạn có thể chọn đơn giản hóa nó bằng cách không yêu cầu thực hiện các công cụ cứng như phát hiện stelmate hoặc không có khả năng vào lâu đài nếu quân địch đang đe dọa con đường đúc).


+1 cho đề xuất trò chơi Monopoly. Đối với mảng 2D, tôi hoàn toàn đồng ý rằng chúng có thể dẫn đến các bài tập rất thú vị. Tuy nhiên, có những hạn chế khiến cho mảng 2D không khả thi (ví dụ: sách giáo khoa đã được sửa và hàng tỷ vấn đề chính trị khác của khoa mà tôi sẽ không làm bạn chán, tôi cũng không chán bạn về những ý kiến ​​cá nhân của tôi về những điều này vấn đề ngoài tầm kiểm soát của tôi).
Macneil

Ah, chúng tôi phải tạo ra một trò chơi độc quyền ở trường. Và một bộ ngắt mã hóa.
Carra

+1 cho độc quyền. Một khi các sinh viên đã mã hóa nó, yêu cầu họ tạo ra xác suất hạ cánh trên các thuộc tính khác nhau. Kiến thức đó thực sự giúp ích về mặt chiến lược.
joshdick

4

Chúng tôi đã tạo ra một vài dự án chỉ với i / o, các hàm và toán tử có điều kiện trong trường. Tất cả được thực hiện trước khi chúng ta học về lập trình hướng đối tượng. Những dự án tiến triển chậm để ngày càng khó khăn hơn. Có thể nói, 4 giờ chúng tôi có mỗi tuần gần như không đủ cho đến cuối năm.

Tất cả các dự án này đã được thực hiện chỉ với các chức năng & i / o:

  • Một trò chơi mà học hỏi. Bạn lấy một số gậy, máy tính lấy một số gậy. Nói lại. Người cuối cùng giữ một cây gậy mất. Chúng tôi phải tạo ra một chương trình tự học đơn giản, tốt hơn sau mỗi trò chơi. Ví dụ tốt để tìm hiểu mảng 2D.

  • Một bộ ngắt mã. Bạn biết mã hóa Caesar, chọn một chữ cái và thêm giá trị của chữ cái vào mỗi chữ cái trong từ của bạn. Ví dụ: key = 'a' và từ = "bí mật". Điều này sẽ trở thành "tfdsfq". Có thể được thực hiện bằng cách đọc trong tệp và sau đó tạo bảng tần số cho mỗi chữ cái. Bạn cũng đọc trong một cuốn kinh thánh tiếng Anh. Sau đó, bạn có thể thấy rằng chữ cái được sử dụng nhiều nhất trong bảng chữ cái tiếng Anh là một chữ 'e' và giải nó. Đã thêm thử thách: sử dụng khóa như 'ab', đó là nhiệm vụ của chúng tôi. Bài tập tốt để hiểu i / o.

  • Một nhà sản xuất mã vạch. Chương trình này là một bài tập để gọi một thư viện bên ngoài. Bạn có một mã và phải tạo một hình ảnh với mã vạch. Một thư viện bên ngoài đã được sử dụng để tạo ra hình ảnh.

  • Một thuật toán di truyền để giải quyết vấn đề nhân viên bán hàng đi du lịch. Đây là một dự án tiên tiến hơn cho 2 hoặc 3 người. Bạn bắt đầu với một tuyến đường ngẫu nhiên và tuyến đường này sẽ cải thiện mọi lúc cho đến khi bạn có một "tuyến đường tốt". Phần thưởng: tạo bản đồ với lộ trình.

  • Một chương trình nén lzw làm việc . Đây là dự án cuối cùng, 4 người. Các thông số khá đơn giản. "Zip file.txt file.zip" hoặc một cái gì đó tương tự. Dự án thú vị nhưng hiểu được thuật toán lzw mất một thời gian.


Rất thú vị ... Bạn đã học trường nào? Đây có phải là tất cả trong năm đầu tiên của bạn?
Macneil

Đó là một khóa học để làm ấm người cho chuyên ngành kỹ thuật tin học. Bạn vẫn có thể thay đổi chuyên môn của mình sau năm đó. Các sinh viên đã biết các vòng lặp cơ bản, một số i / o cho màn hình / tập tin và chức năng.
Carra

3

Một máy tính sẽ là một dự án tốt cho việc học các phép toán số học. Bạn có thể biến nó thành một ứng dụng bảng điều khiển dựa trên menu đơn giản hoặc GUI. Bốn hàm (+, -, *, /) để bắt đầu, có thêm điểm cho những thứ phức tạp hơn như căn bậc hai, v.v.

Để xử lý chuỗi, tôi đề nghị một số vấn đề xác nhận. Các địa chỉ email xuất hiện trong tâm trí - khiến chúng không được kiểm tra có thể dẫn đến các lỗ hổng SQL hoặc các thứ khác và chúng tương đối đơn giản để xác thực. Để nối thêm, có thể có một chương trình có thể lấy tên, tên đệm và tên cuối cùng và xâu chúng lại với nhau bằng khoảng trắng, đồng thời lấy một tên đầy đủ và phân tích nó thành từng thành phần. Cái đầu tiên được sử dụng nhiều hơn cái thứ hai trong đời thực, nhưng tôi không thể nghĩ ra một kịch bản phân tích cú pháp nào đủ đơn giản.

Để thể hiện các phương thức tĩnh, bạn có thể chỉ định một vấn đề tra cứu email. Có một tệp tên và email, và hàm tạo tĩnh có thể đặt tên / email vào danh sách, với một phương thức tĩnh để tìm email cho một tên cụ thể.

Hy vọng những điều này cung cấp cho bạn một số ý tưởng! Chúc may mắn với lớp học của bạn.


1
+1 Cảm ơn! Đây chính xác là loại câu trả lời mà tôi đang tìm kiếm.
Macneil

Trò chơi thú vị hơn máy tính.

3

Một điều rất thú vị và hấp dẫn cho một nhiệm vụ là viết một triển khai Trò chơi Cuộc sống của Conway dưới dạng 2D. Nó ánh xạ rất tốt đến các cấu trúc dữ liệu mảng cơ bản, nó thú vị và khá dễ thực hiện, nhưng vẫn đòi hỏi một số suy nghĩ. Nó có thể mở ra một số sự tò mò và thử nghiệm là tốt (AI).

Học sinh tiên tiến có thể viết một phiên bản trong 3D để có thêm điểm.


3

Tôi sẽ lặp đi lặp lại trên một trình tạo số nguyên tố.

Bài tập

  1. Số nguyên tố in từ 1 đến 100.
  2. In các số nguyên tố từ input1 đến input2.
  3. Ghi và in dữ liệu hiệu suất của thế hệ chính.
  4. Dữ liệu hiệu suất đồ thị của thế hệ chính.
  5. Lặp lại về tối ưu hóa thuật toán của trình tạo số nguyên tố.

2

Tôi đang sử dụng Thư viện ACM để giúp sinh viên giới thiệu làm các trò chơi và đồ họa đơn giản. Chúng tôi đã có thể thực hiện các trò chơi dựa trên nhấp chuột hai người cơ bản mà không có gì nhiều hơn các kỹ năng bạn đã vạch ra. Tuần này họ đang làm trò chơi Fox and Hound .

Tôi đã cố gắng tránh xa I / O console càng lâu càng tốt. Ngày nay, đó là một khái niệm xa lạ với nhiều sinh viên, vì tất cả họ đều đã lớn lên với GUI. Vì vậy, tôi tập trung vào MVC, làm cho mô hình chính xác và chỉ thêm GUI sau khi họ đã thử nghiệm mô hình của họ. Kiểm tra được thực hiện thông qua kiểm tra đơn vị tự động và Mã Pad trong BlueJ . Không public static void main()cần thiết, bao giờ hết.


hấp dẫn. Có lẽ bạn sẽ viết kinh nghiệm của bạn lên trong một bài viết hoặc một mục blog?

2

Tôi đã dạy cách giới thiệu vào thế kỷ trước, và đó là CƠ BẢN, nhưng giống như bạn, tôi muốn đưa các sinh viên thực hiện một dự án thú vị theo cách riêng của họ. Vì vậy, tôi đã đề xuất một loạt các khả năng:

  • Trò chơi phiêu lưu đơn giản, như Wumpus
  • Mô phỏng thể thao (chỉ văn bản, đồ họa cho tham vọng) cho bóng chày hoặc bất cứ điều gì
  • Khoa học, giống như mô phỏng tiến hóa di truyền
  • Thể thao / khoa học, như đua thuyền buồm
  • Tài chính, như có ngân hàng riêng của bạn cho những người trong gia đình hoặc đầu tư
  • Âm nhạc hoặc trò chơi đồ họa đơn giản

... Hoặc bất cứ điều gì học sinh nghĩ về. Họ sẽ đến gặp tôi và nói "làm thế nào về một chương trình để làm XYZ?" và tôi sẽ luôn nói "Tuyệt vời", và sau đó có thể hướng dẫn họ một chút để không làm cho nó quá phức tạp.

Thông thường các dự án của họ kết thúc là vài trăm dòng mã, và họ luôn thích nó.

PS Tôi đã giao nhiệm vụ này sau khi các sinh viên có năng lực với các cấu trúc điều khiển cơ bản, I / O, mảng và các tệp tuần tự. Đó là một dự án dài hạn, một phần quan trọng của lớp của họ, và tôi đã có các bài tập cột mốc trung gian, giống như một phần phác thảo, vì vậy họ đã không cố gắng thực hiện tất cả vào cuối và đập vào tường. Tôi muốn đưa họ vào điều này càng sớm trong học kỳ càng tốt, khi họ có đủ kỹ năng để bắt đầu, thường là vào khoảng tuần 6 hoặc 8.


1

Tôi đã có một giáo viên viết một chương trình mà bạn đã viết các mô-đun cho. Về cơ bản, đó là một trò chơi và bạn phải viết một thuật toán để giải quyết nó, mọi thứ đều ở đó để làm cho nó có đồ họa và đẹp và hoạt động độc đáo. Có lẽ bạn nên viết khung trò chơi của riêng mình và cung cấp cho họ các công cụ cơ bản là phiên bản ngu ngốc của những thứ hay ho mà họ có thể làm sau này bên ngoài hộp bạn đã đặt chúng vào.


1

Trong khóa học giới thiệu của tôi, ba dự án mắc kẹt với tôi

Viết chương trình hiển thị bức tranh Mondrian ngẫu nhiên
Viết phần đầu tiên của trò chơi BrickBreaker, đưa bóng nảy xung quanh bên trong khu vực đã đặt
Viết trò chơi phiêu lưu dựa trên văn bản

Từ lớp thuật toán của tôi
Thực hiện tam giác Serpinki

Bốn dự án này đã cho tôi một sự hiểu biết lớn về xử lý chuỗi, ngẫu nhiên, đồ họa, đệ quy và hoạt hình.


1

Có phải tất cả các sinh viên trong lớp CS chuyên ngành? Tôi đoán là không. Tôi sẽ đưa ra các bài tập phù hợp với chuyên ngành trong lớp.

Ví dụ:

  • Sinh viên mỹ thuật có thể viết một chương trình lấy kích thước của một mảnh vải và khung để tính toán số lượng vải sẽ không có sẵn để vẽ (do bọc và ghim khung vải xung quanh khung).

  • Sinh viên kinh tế có thể tính lãi kép trên một mặt hàng.

  • Học sinh toán có thể chọn các vấn đề từ Project Euler.


1
Lớp học dành cho chuyên ngành và không chuyên ngành. Nhiều người trong sinh học.
Macneil

Hấp dẫn. Ý tưởng: tìm một hình ảnh của các sinh vật đơn bào bơi xung quanh trong nước. Chuyển đổi hình ảnh sang B & W. Viết chương trình đếm số lượng sinh vật trong nước. Điều này sẽ đưa ra tất cả các loại chủ đề thảo luận thú vị: phát hiện cạnh, phân biệt giữa nước và không nước, loại bỏ bụi, v.v.
Barry Brown

tốt cho sinh học, điều rõ ràng mà lò xo để tâm là automata di động. Bạn có thể loot tại bioquest.org để có một vài ý tưởng.
Kavet Kerek

1

Ở trường trung học, tôi học một lớp lập trình giới thiệu, và chúng tôi đã sử dụng Karel J. Robot . Nó cung cấp một gui để xem robot của bạn, và có một bộ cảm biến và phương pháp di chuyển rất cơ bản mà bạn phải mở rộng để làm cho nó làm những điều thú vị. Tôi nghĩ điều đó tốt bởi vì robot rất dễ hiểu đối với những người chưa phát triển nắm bắt được sự khác biệt giữa các phần mềm.

Ngoài ra còn có Xử lý , mà tôi vừa phát hiện ra, ban đầu được thiết kế để dạy lập trình, và nó cũng có trong java.


0

Tôi sẽ trở thành người bất đồng ở đây. Tôi nghĩ bạn nên cung cấp cho họ các vấn đề về loại hình kinh doanh hợp lệ để giải quyết không phải trò chơi. Nếu họ không đủ nghiêm túc để quan tâm và có động lực với loại công việc họ sẽ thực sự làm như một chuyên gia, tôi muốn bạn bỏ qua chúng trong khóa học giới thiệu. Công việc thực tế không phải là tạo ra những thứ hay ho, mà là đáp ứng nhu cầu của khách hàng. Tôi cũng đã thấy rất nhiều người không thể thực hiện bước nhảy vọt giữa những gì họ học được trong một trò chơi và sử dụng cùng một công nghệ trong lập trình kinh doanh.

Mỗi nhà phát triển và quản lý tuyển dụng cao cấp mà tôi biết đều chán ghét chất lượng của sinh viên tốt nghiệp gần đây. Hãy thử tập trung vào những gì họ cần học để làm việc trong thế giới thực và quên đi việc làm cho nó vui vẻ.


Tôi nghĩ rằng nhiều sinh viên sẽ tìm thấy một vấn đề kinh doanh thú vị. Nếu bạn có thể đề xuất một cái gì đó cụ thể và cải thiện câu trả lời của bạn sẽ hữu ích. Tôi đang tìm kiếm chi tiết cụ thể.
Macneil

1
Nó phải là một vấn đề mà họ không thể làm (dễ dàng) trên máy tính TI-83 của họ. Một máy tính thuế khác sẽ không cắt giảm.
Barry Brown

1
Những sinh viên này mới lập trình và cần phải có những người giữ trẻ trong khóa học này. Làm cho nó nhàm chán có lẽ không phải là cách hiệu quả nhất để dạy họ cách lập trình và chúng ta nên nhìn vào các giáo viên tốt nhất thay vì chỉ bắt họ đọc thuộc đặc tả Java từ đầu đến cuối.

1
Không. Những dự án này nên được vui vẻ. Dự án vui có thể khó khăn. Trên thực tế, hầu hết các dự án thú cưng của tôi khó hơn chương trình hàng ngày tôi làm trong công việc.
Carra

2
Tôi thấy quan điểm của bạn, nhưng tôi không đồng ý, ít nhất là một phần, và ít nhất là cho một khóa học giới thiệu. Có rất nhiều con đường lập trình người ta có thể học, và tôi nghĩ một khóa học như thế này sẽ bao gồm những điều khác nhau mà các chương trình có thể làm. Cho học sinh thấy rằng máy tính chỉ tốt cho các vấn đề mà chúng tôi cho là "cần thiết cho doanh nghiệp" không phải là một lập trình viên sáng tạo, bởi vì nó giới hạn suy nghĩ của họ. Tôi nghĩ rằng một khóa học được thiết kế tốt sẽ thách thức sinh viên giải quyết các vấn đề trong thế giới thực, ngoài việc thể hiện những điều thú vị mà máy tính có thể làm, như lập trình một trò chơi
Nick Donohue

0

Một nhiệm vụ để xây dựng một widget ngớ ngẩn trên điện thoại di động của họ. Một cái gì đó mà họ có thể cho bạn bè của họ. Tôi có một điện thoại AT & T giá rẻ và nó có các tệp jar.


0

Nhiệm vụ quan trọng nhất tôi từng thấy buộc mọi người phải suy nghĩ về điều gì đó mà họ sẽ không xem xét. Một cái gì đó hoàn toàn bên ngoài các tài liệu khóa học đơn giản, một cái gì đó dường như không thể. Một cái gì đó có nhiều giải pháp hợp lệ.

Một số ít đã gây ấn tượng với tôi:

  1. Roshambo AIs (được sử dụng trong khóa học AI tại UOA). Một hàm đơn giản trả về -1, 0, 1 cho đá, giấy, kéo. Các AI đang đối đầu với nhau và các số liệu thống kê được thu thập bởi một chương trình tiện ích tổng hợp. Nhiệm vụ này liên tục gây ngạc nhiên cho mọi người về việc có bao nhiêu cách tiếp cận khả thi (và bao nhiêu cách thực hiện kém như vậy).

  2. Vấn đề sắp xếp đơn giản với các đặc điểm không thể. Sắp xếp một tệp có độ dài vô hạn với bộ nhớ hữu hạn. Vấn đề này làm lung lay nền tảng tư duy của tôi trong các thuật toán. Có nhiều vấn đề liên quan: trung bình cửa sổ trên dữ liệu có độ dài vô hạn, v.v., mỗi lực lượng buộc một giải pháp cho điều gì đó dường như là không thể.

  3. Vấn đề mô phỏng xuất hiện tầm thường. Mô phỏng giao thông (xe, mạng), mô phỏng xe đua (trái, phải, nhanh hơn, chậm hơn), mô phỏng cửa hàng tạp hóa.

  4. Vấn đề về mạng (một điểm yếu lớn trong số sinh viên tốt nghiệp tôi đã làm việc trong vài năm qua). Các vấn đề về mạng ngang hàng với thiết bị cầm tay, ví dụ, chứng minh sự phức tạp của các vấn đề đồng bộ hóa n, cập nhật ngang hàng, tin cậy ngang hàng, v.v.

  5. Ít ngôn ngữ (một điểm yếu khác trong các lớp gần đây). Phát triển một ngôn ngữ nhỏ cho một trò chơi AI đơn giản (cờ đam, roshambo, xe tăng, CSS mojo, bot Twitter). Suy nghĩ về các khái niệm thiết kế ngôn ngữ, giải thích và hành động là cơ bản.


Làm giấy, đá, kéo AI làm quen với kết quả, hoặc xem lịch sử là gì?
Macneil

Có, lịch sử có sẵn thông qua các mảng trong ví dụ C (nhưng nó sẽ áp dụng như nhau cho Java, Ruby, v.v.). Kiểm tra trang cạnh tranh ban đầu: webdocs.cs.ualberta.ca/~dude/rsbpc.html
Bruce Alderson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.