Ngôn ngữ giảng dạy lập trình cơ bản


8

Tôi rất thú vị trong việc dạy lập trình cho học sinh cấp hai. Tôi muốn một ngôn ngữ lập trình với các tiêu chí sau:

  1. Đơn giản - giảm xuống mức tối thiểu tuyệt đối cần thiết để hỗ trợ lập trình tinh vi mà không cần quá nhiều mã. Như vậy, đối với ngôn ngữ này, tôi không quan tâm đến các con trỏ và không thích định hướng đối tượng (mặc dù các chức năng là tốt).
  2. Mạnh mẽ - Tôi muốn có thể lập trình các yếu tố của thế kỷ 21, bao gồm đồ họa, kết nối mạng và xử lý phân tán.
  3. thể gỡ lỗi - Tôi muốn một Môi trường phát triển tích hợp thanh lịch với trình gỡ lỗi có thể đọc được của con người (nghĩa là không phải là một thông báo lỗi lạ với dấu vết ngăn xếp, nhưng một lời giải thích rõ ràng rằng một học sinh trung học bình thường có thể sử dụng để xác định mã sai) .

Các ngôn ngữ lập trình chuẩn (C, C ++, C #, Java) không đạt tiêu chí đầu tiên. Các ngôn ngữ lập trình cơ bản như Scratch không đạt tiêu chí thứ hai (và có thể thứ ba). Các ngôn ngữ script (perl, python, php) không đạt tiêu chí cuối cùng.

Tôi muốn biết nếu ai đó biết về một con thú như vậy, trước khi tôi ngồi xuống để làm cho nó lên.


2
Bạn có một ví dụ về loại đầu ra gỡ lỗi có thể đọc được mà bạn muốn không? Bạn đã loại trừ Python một cách rõ ràng, nhưng nó đơn giản, mạnh mẽ và có tích hợp IDE / trình gỡ lỗi: wiki.python.org/moin/IntegratedDevelopmentEnvirments Dấu vết ngăn xếp của nó tốt hơn nhiều, nhưng không phải ở cấp độ "Bạn đã bỏ lỡ một khung đóng trên dòng 42 "... Tôi không biết bất kỳ ví dụ nào về cái sau.
andybuckley

Nói chung, tôi muốn các thông báo lỗi rõ ràng và đủ mô tả để một lập trình viên mới có thể hiểu chúng: ví dụ: "AttributionError: 'module' object không có thuộc tính 'BufferedIOBase'" không phải là mô tả - đối tượng nào là vấn đề, và nó cần thuộc tính mong muốn ở đâu?
Ari Trạchtenberg

1
Tôi không chắc điều này a) là không phổ biến ở đây và b) có câu trả lời khách quan, nhưng trong khi chúng tôi thảo luận vấn đề này trong Trò chuyện Khoa học Máy tính, bạn có thể muốn xem câu hỏi này thảo luận về các tiêu chí hữu ích để chọn ngôn ngữ đầu tiên để dạy. Điều đó nói rằng, bạn có thể nhìn vào Scala. Đó không phải là một ngôn ngữ dễ dàng nếu bạn muốn tìm hiểu sâu, nhưng "cấp độ đầu tiên" khá đơn giản, nó mở rộng và đáp ứng các tiêu chí của bạn, tôi nghĩ vậy.
Raphael

1
Tôi không thấy Python "không thể sửa lỗi" như thế nào, chỉ cần sử dụng trình thông dịch dòng lệnh của nó. Và tôi không đơn độc trong việc "gỡ lỗi" là một cách tồi để phát triển các chương trình. Vâng, tôi cũng đang tiếp cận với một trình sửa lỗi trên quãng đường, nhưng tôi thấy rằng tôi làm tốt hơn mà không phải lúc nào cũng vậy.
vonbrand

Câu trả lời:


4

Tôi khuyên bạn nên Javascipt.

  • Theo mặc định, tất cả mọi người đang đọc đều có quyền truy cập vào môi trường phát triển theo trình duyệt của họ.
  • Đó là tha thứ cho các lập trình viên mới.
  • Nó hỗ trợ một bộ tính năng hiện đại.
  • Có một kho mã mẫu khổng lồ trên internet , mặc dù chất lượng
  • Đó là một ngôn ngữ áp dụng trong thế giới thực.

Học viện Khan dường như có một trình bao bọc đẹp cho Javascript, hầu hết những gì tôi cần.
Ari Trạchtenberg

4
Bạn đã quên liên kết đến khu vực phá hủyoftware.com / talks / wat
Andrej Bauer

+1, tôi sẽ thêm rằng nếu bạn muốn các lớp thực (trái ngược với kế thừa đối tượng) và các kiểu tĩnh tùy chọn, Kiểu chữ của Microsoft có sẵn trong Visual Studio Express (với tất cả các chuông và trình gỡ lỗi.) (Tôi không nghĩ là Bản mô tả là đủ khác với Javascript để đảm bảo câu trả lời của chính nó.)
Logic lang thang

8

Có lẽ bạn nên nhìn vào vợt (chính thức được gọi là Scheme, một dẫn xuất của Lisp). Đó là ngôn ngữ được dạy cho sinh viên CS năm thứ nhất tại trường đại học của tôi. Vì là ngôn ngữ lập trình chức năng, cú pháp và khái niệm khá đơn giản so với C / C ++, có một số thư viện có thể thực hiện một số thao tác vẽ cơ bản hoặc liên quan đến mạng, và Tiến sĩ Rquet như một số tính năng gỡ lỗi ... bao gồm cả Stepper ( tức là nó sẽ hiển thị và thực hiện một lần thay thế tại một thời điểm khi bạn nhấp vào nút "tiếp theo"). Tôi nghĩ rằng nó có thể đáng để xem xét: http://racket-lang.org/ . Nó có một số tính năng khác mà bạn có thể thích, chẳng hạn như các mô-đun giảng dạy (người mới bắt đầu, trung cấp, nâng cao, cấp độ sinh viên đầy đủ) và các tài liệu và ví dụ khá hay. Cuốn sách: Cách thiết kế chương trình ( http: //www.htdp.) là một tài liệu tham khảo giảng dạy tuyệt vời cho ngôn ngữ này có một vài ví dụ hay sử dụng một số thư viện tôi đã đề cập ở trên.


5
Tôi không đồng ý. Lập trình chức năng là khó khăn hơn nhiều để quấn đầu của bạn hơn là bắt buộc, ngay cả đối với sinh viên đại học. Tôi sẽ không muốn dạy cho học sinh cấp hai về các cấu trúc dữ liệu đệ quy (một điều tuyệt đối phải có đối với Vợt và đồng).
Patrick Collins

2
@PatrickCollins: Tôi dường như nhớ các nghiên cứu rằng sinh viên (ở mọi lứa tuổi) học lập trình hàm nhanh hơn lập trình mệnh lệnh nếu tâm trí của họ trước đây không được liên kết với / bị ô nhiễm bởi mô hình liên tục bắt buộc không trực quan (nghĩa là họ là người mới tuyệt đối ). Tôi chắc chắn có thể xác nhận rằng đối với trường đại học: chúng tôi dạy lập trình hàm trước và những người không có kinh nghiệm lập trình sẽ gặp ít rắc rối hơn những người khác.
Raphael

5
@Raphael, tôi biết khá nhiều người là những người lập trình mệnh lệnh / OOP có năng lực (ngay cả trong số những người không được đào tạo như vậy), và một số ít người biết cách xoay quanh lập trình chức năng. Vâng, đệ quy là tự nhiên nếu bạn đang chìm đắm trong tư duy toán học . Mặt khác, nó chỉ là một cách cực kỳ kỳ lạ để thực hiện "lặp lại ... cho đến khi hoàn thành" thực sự tự nhiên. Thôi nào, cảm ứng không thực sự được hiểu cho đến khoảng thời gian của Fermat, mọi người đã xác định / áp dụng thuật toán trong vài trăm nghìn năm trước đó.
vonbrand

1
Người chơi vợt đã phát triển tài liệu giáo dục cho học sinh cấp hai và đã sử dụng thành công: bootstrapworld.org
Dave Clarke

3

Nếu bạn quyết định Python có thể phù hợp với bạn, tôi sẽ xem xét Môi trường Jython dành cho sinh viên (JES). Có một số công cụ gỡ lỗi tiện lợi bao gồm "trình theo dõi" cho phép bạn chọn các biến để xem. Bạn có thể kiểm soát các bước hoặc để nó đi nhanh chóng. Tôi đã sử dụng IDE này với các học sinh trung niên trong một chương trình hè thành công, nhưng tôi cũng sử dụng nó trong một khóa học giới thiệu ở cấp Đại học. Các thư viện tính toán phương tiện truyền thông là niềm vui, quá. Học sinh trong các khóa học của tôi đã thích chỉnh sửa hình ảnh và âm thanh. Có hỗ trợ để làm cho hình ảnh động quá.

Tôi đã không sử dụng nó cho mạng và xử lý phân tán. Có những ví dụ trong sách giáo khoa tính toán truyền thông của Guzdial và Ericson cho các chủ đề như cơ sở dữ liệu và lập trình chức năng, bao gồm các thủ tục bậc cao hơn. Bạn có thể thực hiện những điều Python thông thường trong JES, nhưng nó có hỗ trợ thêm cho những thứ truyền thông.


2

Bạn có lẽ nên sử dụng Visual Basic. Rất đơn giản, bạn có thể dễ dàng tạo ứng dụng danh sách liên lạc cùng với một số trò chơi GUI đơn giản. Bạn cũng có thể gỡ lỗi nó. Nếu trường học của bạn sẵn sàng để ăn bột, bạn có thể nhận được một thuê bao dreamspark . Tôi nghĩ rằng nó sẽ giữ sự chú ý của học sinh.


2

Python là ngôn ngữ "gần như mã giả" đủ mạnh để thực hiện lập trình "thực" (hầu hết các công cụ quản trị trong ví dụ Fedora Linux được viết bằng Python), nó đơn giản để sử dụng các phần mở rộng cho giao diện đồ họa / đồ họa, nó có thể xử lý lớn các vấn đề về số (mọi người sử dụng NumPy cho việc này), nhiều chương trình web được thực hiện trong đó, một số chương trình sử dụng nó làm ngôn ngữ mở rộng. Có một thư viện rộng lớn và nhiều hệ thống lớn hơn được viết trong / cho nó. Vì vậy, nó không phải là một ngôn ngữ đồ chơi, học nó là hữu ích sau này.

Nhìn vào trang chủ của nó , có những triển khai hoàn thiện có sẵn cho hầu hết mọi nền tảng mà bạn có thể quan tâm. Nó là miễn phí (không chỉ chi phí bằng không). Có nhiều tài liệu có sẵn, một tìm kiếm Google cho "hướng dẫn python" cho hàng triệu lượt truy cập. Hướng dẫn thực hành trên web là Tìm hiểu Python . Đối với khóa học lập trình giới thiệu sử dụng Python, hãy xem xét Think Python của Downey .


OP đặc biệt đề cập đến Python khi không giải quyết các tiêu chí "trình gỡ lỗi dễ sử dụng". Câu trả lời này sẽ được cải thiện nếu bạn có thể trỏ đến một số IDE Python có hỗ trợ trình gỡ lỗi dễ hiểu.
Logic lang thang

1

bạn loại trừ vết xước do MIT phát triển dường như hoàn thành một số tiêu chí. dù sao đây là hai ngôn ngữ mới hơn đáng để xem xét.

  • Đi bằng google. được thiết kế để biên dịch nhanh. đây là những mục tiêu thiết kế

  • Swift của Apple để phát triển di động. được thiết kế để thay thế ít phức tạp hơn cho Mục tiêu C.

  • node.js mới hơn & được thiết kế cơ bản để mở rộng các khả năng của Javascript sang phía máy chủ và bao gồm các khả năng kết nối mạng.


1
Cảm ơn ... cào thiếu lập trình chức năng. Nó có thể tốt cho trẻ em tiểu học, nhưng những đứa trẻ lớn hơn nhanh chóng vượt xa nó (theo ý kiến ​​của tôi).
Ari Trạchtenberg

không phải là một chuyên gia về đầu. tuy nhiên trên skim nhanh, nó hỗ trợ các chức năng trong các khối tùy chỉnh và thậm chí hỗ trợ thông điệp truyền qua "quảng bá" và một số khái niệm đa luồng. nó dường như cũng hỗ trợ robot thô sơ thông qua giao diện
picoboard

Berkeley có một phần mở rộng để gọi là Snap có chức năng. Nó cũng có xử lý sự kiện, nhưng nó không có kết nối mạng và không dễ gỡ lỗi.
Ari Trạchtenberg

đúng. (các) trình gỡ lỗi đã tìm ra sẽ không có ở đó và sẽ thất bại với mục đó. nhưng chỉ cần thực hiện thông qua cmd-by-cmd (không khó để hỗ trợ điều đó) có thể được coi là gỡ lỗi cơ bản. với tôi gỡ lỗi là một khía cạnh triển khai hơn ... tức là người ta không thể loại trừ (các) trình gỡ lỗi cào cụ thể hóa ở đâu đó / tại một số pt trong tương lai ...
vzn

0

Bạn đã xem báo chí chưa? Drameak là một biến thể hiện đại của Smalltalk. Vì vậy, có, nó hướng đối tượng, nhưng theo nghĩa Alan Kay chứ không phải là ý nghĩa Simula 67.

Phải nói rằng, nếu tôi đang dạy lập trình cho trường cấp hai, tôi sẽ bỏ yêu cầu gỡ lỗi và dạy một cái gì đó giống như Haskell.

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.