Tiêu chí lựa chọn ngôn ngữ cho khóa học lập trình đầu tiên


35

Là một nhà giáo dục CS cấp đại học, vấn đề dạy ngôn ngữ lập trình nào trong khóa học lập trình đầu tiên thường được đưa ra để thảo luận. Có hàng ngàn ngôn ngữ để lựa chọn, và rất nhiều cơn sốt tôn giáo (hoặc fevour) hỗ trợ trại ngôn ngữ này hơn ngôn ngữ khác. Tất cả sự thiên vị chủ quan này xung quanh mỗi ngôn ngữ lập trình khiến cho một nhà giáo dục rất khó chọn một ngôn ngữ.

Câu hỏi của tôi là:

Những tiêu chí khách quan nào mà một nhà giáo dục có thể sử dụng để chọn ngôn ngữ lập trình để sử dụng làm cơ sở cho khóa học lập trình đại học năm thứ nhất? Cơ sở cho các tiêu chí này là gì?

Lưu ý : Tôi không muốn xem danh sách các ngôn ngữ lập trình và lý do tại sao chúng là ngôn ngữ tốt nhất để sử dụng. Câu hỏi không phải là về ngôn ngữ tốt nhất, đó là về tiêu chí lựa chọn ngôn ngữ . Tuy nhiên, câu trả lời có thể được sử dụng ngôn ngữ lập trình để minh họa các điểm cụ thể.


Câu hỏi này được lấy cảm hứng từ một câu hỏi khác được coi là lạc đề: https://cs.stackexchange.com/questions/1946/criteria-for-ch Mất -a-first-program-ngôn ngữ .


1
Đã mở chủ đề meta về câu hỏi này là về chủ đề hay ngoài chủ đề: meta.cs.stackexchange.com/questions/362/ợi
Dave Clarke

7
<Lấy bỏng ngô> Để diễn giải Otto Neugebauer : Không có ngôn ngữ lập trình đầu tiên nào được biết đến bởi con người có khả năng hủy hoại tất cả mọi người.
JeffE

3
@Raphael: Tôi nghĩ rằng phản ứng của Dijkstra có thể là " Mọi ngôn ngữ lập trình đầu tiên mà con người biết đến đều có khả năng hủy hoại tất cả mọi người."
JeffE

2
@ edA-qamort-ora-y, vâng, họ nên được tiếp xúc với một số mô hình lập trình. Không, điều đó không thể được thực hiện trong khóa học đầu tiên.
vonbrand

3
Chúng tôi SMLchỉ đơn giản là vì không có học sinh nào biết ngôn ngữ đó trước khi ra tay. Điều này cân bằng mọi sinh viên ít nhiều đến cùng cấp độ để bắt đầu khóa học.
Markus Malkusch

Câu trả lời:


14

Tôi sẽ ném vào hai xu của mình mặc dù tôi tin rằng chủ đề này là một cái hố không đáy. Đừng hiểu sai ý tôi, tôi nghĩ đó là một câu hỏi hấp dẫn, nhưng có lẽ không một câu hỏi nào chúng tôi sẽ giải quyết ở đây để làm hài lòng tất cả mọi người.

Tóm lại, tôi muốn nói rằng ngôn ngữ nên làm những gì bạn muốn nó làm , một cách đơn giảnkhông mơ hồ nhất có thể, và không nhiều hơn thế .

Kinh nghiệm của riêng tôi đến từ việc dạy kèm cho nhiều thế hệ sinh viên năm thứ nhất và năm thứ hai với ngôn ngữ lập trình Oberon . Những người biết ngôn ngữ này sẽ nhận ra ảnh hưởng của nó theo ý kiến ​​của tôi. Lưu ý rằng ngôn ngữ này đã được sử dụng để dạy "Thuật toán và cấu trúc dữ liệu". Vào thời điểm đó (hồi đó), lập trình chức năng và thiết kế hướng đối tượng đã được dạy trong các khóa học riêng biệt vào năm thứ hai.

Quan trọng : Tuy nhiên, trước khi đi vào chi tiết cụ thể của bất kỳ ngôn ngữ nào, tôi muốn nhấn mạnh rằng điều quan trọng nhất là phải hoàn toàn rõ ràng, với chính bạn và học sinh của bạn, về mục tiêu của khóa học của bạn là gì. Bạn đang dạy lập trình cho mỗi người ? Hoặc các thuật toán và cấu trúc dữ liệu? Hay kỹ thuật phần mềm? Trước khi chọn một ngôn ngữ, bạn nên suy nghĩ một chút về nơi bạn sẽ đến với ngôn ngữ đó. Sự khác biệt ở cấp độ này (mục tiêu) là những gì có lẽ, theo tôi, dẫn đến hầu hết các bất đồng về chủ đề này.

Những điểm tôi cho là quan trọng có thể trùng lặp với một số điều đã được nói, nhưng tôi tin rằng hầu hết cuối cùng là tập hợp con của một trong bốn điều sau đây:

  • Đơn giản : Các sinh viên thường ở đó để được dạy lập trình, thuật toán và cấu trúc dữ liệu, chứ không phải các tính năng và sự phức tạp của bất kỳ ngôn ngữ lập trình cụ thể nào. Wirth đã sử dụng câu nói của Einstein "Làm cho nó đơn giản nhất có thể, nhưng không đơn giản hơn" như là một nguyên tắc chỉ đạo trong thiết kế của Oberon, và có một số ngôn ngữ khác cũng làm điều đó. Ngôn ngữ lập trình lựa chọn của bạn sẽ có thể thực hiện tất cả các khái niệm cần thiết trong bài giảng của bạn, nhưng nên thực hiện điều này với tập hợp các tính năng / chi tiết nhỏ nhất có thể. Ngôn ngữ lập trình thường chỉ là công cụ, không phải là mục tiêu.

  • Tính không rõ ràng : Một anh chị em thân thiết của sự đơn giản, nên có một cấu trúc cho mỗi khái niệm, với càng ít sự chồng chéo càng tốt. Hãy nghĩ về nó như chỉ có một cách "đúng" để thực hiện mọi khái niệm. Ba loại vòng lặp khác nhau mà về mặt ngữ nghĩa đều làm cùng một điều? Hoặc mười lăm cách khác nhau để tăng một biến? Không tốt. Điều này cũng làm cho việc sửa bài tập về nhà hoặc nói chung chỉ là hiểu mã của học sinh của bạn dễ dàng hơn rất nhiều . Trợ lý giảng dạy của bạn sẽ đánh giá cao nó.

  • Tính di động : Học sinh sẽ đến lớp với các máy Linux, Windows và OSX và môi trường lập trình phải giống nhau (giống hệt nhau) nhất có thể theo cả ba. Kết quả của bất kỳ chương trình nào cũng phải giống hệt nhau. Đây là một điểm khác mà các trợ giảng, chịu trách nhiệm đánh dấu bài tập về nhà và xử lý các câu hỏi / vấn đề, sẽ đánh giá rất cao.

  • Sở thích của ngành : Nghiêm túc mà nói, chúng ta nên bắt đầu lo lắng về điều này chỉ khi chính "Công nghiệp" quyết định ngôn ngữ lập trình nào nó thích nhất. Kể từ khi phát minh ra máy tính, đây là một mục tiêu không ngừng chuyển động. Hiện tại, nếu sinh viên của bạn thực sự học cách lập trình, thì nó sẽ không phụ thuộc vào ngôn ngữ. Tuy nhiên, có một số lĩnh vực mà ngành quản lý đồng ý về một tiêu chuẩn, ví dụ VHDL cho thiết kế mạch hoặc SQL cho các truy vấn cơ sở dữ liệu, vì vậy đây vẫn là một điểm hợp lệ.

Một lần nữa, làm thế nào một ngôn ngữ phù hợp với danh sách này phụ thuộc rất nhiều vào những gì bạn đang cố gắng dạy!


4
Thực sự có một sự phân chia trong thiết kế mạch giữa VHDL và Verilog.
avakar

@avakar: Aw, tào lao. Tôi sẽ sửa nó trong câu trả lời của tôi, cảm ơn vì đã chỉ ra nó!
Pedro

Rất tiếc, đọc nó và nghĩ rằng đó là một trong những giảng viên của tôi. +1 cho Oberon, miễn là công tắc từ khóa chữ thường được bật tự động; thật đau đớn để viết WHILE expr DO stmts ENDvv
Callum Rogers

3
+1 cho "mục tiêu của khóa học của bạn là gì?" và một lưu ý bổ sung, một trong những mục tiêu phổ biến nhất ngay cả khi nó không được đánh vần là đưa ra những điều cơ bản cho những thứ khác (các khóa học và thực tập) có lập trình là điều kiện tiên quyết.
AProgrammer

Một điểm quan trọng (ít nhất là ngày nay) là nó cho phép sinh viên xây dựng các chương trình trực quan hấp dẫn sớm và không đau đớn. Họ tiếp xúc với rất nhiều ứng dụng và trò chơi chuyên sâu về đồ họa đến mức họ tự nhiên nghĩ rằng đó là cách máy tính được cho là tương tác với con người.
vonbrand

13
  • Phát triển tư duy thuật toán để giải quyết các vấn đề là mục tiêu chính: Một điều tồi tệ khi sử dụng mô hình hướng đối tượng trong khóa học đầu tiên là, đưa người học mới vào những thứ như kế thừa, đa hình, v.v., làm họ phân tâm khỏi mục tiêu chính đã đề cập ở trên. Trong thực tế, việc giới thiệu bất kỳ cân nhắc thứ cấp nào bên cạnh mục tiêu cốt lõi này, như công nghệ phần mềm, tính di động, tính hữu dụng của ngành, v.v ... là phản tác dụng, vì lý do đã nêu.

  • Không phải là ngôn ngữ hướng đối tượng: Ngày nay, hầu hết các trường đại học bắt đầu dạy lập trình đúng với ngôn ngữ hướng đối tượng. Tôi nghĩ đó là một lỗi sai. Có những điều trên thế giới chỉ có thể được hiểu thực sự trái ngược với điều ngược lại. Nếu không được tiếp xúc với một mô hình thủ tục của chương trình (dữ liệu và chức năng như hai khía cạnh riêng biệt của chương trình), ý tưởng cơ bản của đối tượng định hướng (dữ liệu và hành vi được xem như là bản chất gắn với nhau) có thể được bỏ qua bởi nhiều người. Và bởi vì, lập trình hướng đối tượng là rất quan trọng, thiếu ý tưởng cơ bản của nó không phải là chuyện nhỏ. Bên cạnh đó, vì hầu hết có lẽ trong các khóa học cao cấp hơn, sinh viên CS sẽ lập trình chủ yếu trong OO, họ cũng cần được tiếp xúc với khía cạnh thủ tục của mọi việc.

Vì vậy, cuối cùng, tôi sẽ tìm một ngôn ngữ thủ tục, tránh các tính năng nâng cao, tập trung vào phát triển tư duy thuật toán. Nhưng, bằng cách tránh các tính năng nâng cao, tôi không có nghĩa là tránh các vấn đề thách thức. Ý tôi là, ngay cả những vấn đề thách thức, sinh viên nên được yêu cầu giải quyết nó bằng các nguyên tắc đầu tiên, các công cụ đơn giản.


Trước tiên, bạn có thể dễ dàng bắt đầu với một tập hợp con của Java để hiển thị kiểu thủ tục. Sau đó, bạn mở hộp Pandora và cho thấy những thứ tương tự như thế nào với OOP.
Raphael

3
@Raphael: Không thể tránh public static void main()trong Java, vốn phải nằm trong ngữ cảnh của một số lớp. Điều này làm cho Java trở nên kém lý tưởng như một ngôn ngữ đầu tiên, mặc dù dĩ nhiên rào cản không quá lớn.
Dave Clarke

Một IDE tốt có thể trì hoãn public static void main()trong một thời gian rất dài. BlueJ là một ví dụ điển hình về IDE cho phép sinh viên viết chương trình mà không cần mainbất kỳ nơi nào trong đó.
Barry Brown

2
Vấn đề với OOP là đối với một loạt các vấn đề về đồ chơi được đề cập trong năm đầu tiên hoặc lâu hơn là lập trình, nó chỉ cản trở, không có bất kỳ lợi thế rõ ràng nào. OOP trở nên quan trọng (và được đánh giá cao) khi các chương trình của bạn là một ngàn dòng hoặc hơn. "Java mà không có OOP" là khủng khiếp, rất nhiều thứ hoàn toàn mờ đục mà "phải được viết theo cách này" đi ngược lại với mọi người học tập , không vẹt.
vonbrand

11

Vì chúng ta đang nói về khóa học lập trình đầu tiên trong chương trình Khoa học Máy tính, tôi muốn nói khía cạnh quan trọng nhất sẽ là những khái niệm cơ bản về CS, nó sẽ dạy cho sinh viên của bạn. Vì không có ngôn ngữ có thể dạy tất cả các khái niệm cùng một lúc, bạn cần xem xét những khái niệm nào sẽ cần thiết hơn nữa.

Tôi không đồng ý với quan điểm của @ Kaveh rằng sự liên quan trong ngành là quan trọng; nó có thể là một phần thưởng, nhưng nó có tầm quan trọng nhỏ ở đây. Với nền tảng vững chắc trong các nguyên tắc CS, việc học một ngôn ngữ "công nghiệp" trong các khóa học sau này sẽ tương đối dễ dàng.

Như một lưu ý phụ, bất kể ngôn ngữ nào được chọn là ngôn ngữ đầu tiên, điều quan trọng là phải đưa học sinh của bạn sang ngôn ngữ khác, hoàn toàn khác, ngôn ngữ càng sớm càng tốt.


1
Sự liên quan trong ngành có thể được coi là thứ yếu nhưng tôi không nghĩ đó là vấn đề nhỏ. Vì đây là phần giới thiệu về khóa học lập trình nên tôi không hiểu tại sao người ta muốn dạy tất cả các khái niệm trong đó, thường có một khóa thứ hai về lập trình và một khóa khác về chủ đề ngôn ngữ lập trình nơi các ngôn ngữ khác nhau được thảo luận, và nhiều ngôn ngữ khác các khóa học tập trung vào các lĩnh vực ứng dụng cụ thể, ví dụ lập trình cho web, v.v.
Kaveh

@Kaveh: Nghe có vẻ giống như chương trình giảng dạy của một trường đại học kỹ thuật đối với tôi.
Raphael

6
"điều quan trọng là phải đưa học sinh của bạn sang ngôn ngữ khác, hoàn toàn khác, ngôn ngữ càng sớm càng tốt." -- chuẩn xác. Chúng tôi đặt ra những người mới nghĩ rằng họ có thể lập trình thẳng bằng cách giới thiệu lập trình chức năng trước tiên: hầu như tất cả đều mới đối với mô hình này và C (++) càng khiến bạn gặp nhiều khó khăn hơn.
Raphael

3
@Kaveh: Các ngôn ngữ được thiết kế để hoàn thành công việc trong thế giới thực không nhất thiết phải tối ưu cho việc dạy các khái niệm hoặc phát triển các kỹ năng. Các mục tiêu rất khác nhau.
JeffE

1
@Kaveh: Tôi chưa bao giờ viết rằng kiến ​​thức về ngôn ngữ được sử dụng trong công nghiệp là không quan trọng. Ý tôi là, với một ngôn ngữ lập trình đầu tiên vững chắc, các khóa học sau này sẽ không gặp vấn đề gì khi dạy sinh viên điều gì đó về những gì họ thực sự sẽ làm khi tốt nghiệp. Bản thân tôi đã từng tham gia giảng dạy một số khóa học giới thiệu (với tư cách là một TA), tôi muốn nói rằng các kỹ năng bạn học được không có gì giống như những kỹ năng cần thiết trong công nghiệp (có quá ít thời gian cho việc đó). Nếu đây là trường hợp, thì tôi thấy tốt hơn là cung cấp cho họ các khái niệm vững chắc để họ có thể trở thành lập trình viên tốt hơn, không chỉ là lập trình viên $ LANGUAGE.
evilcandybag

8

Mối quan tâm chính của tôi là tính phổ quát , theo nghĩa là học ngôn ngữ lập trình này sẽ khiến sinh viên có thể xử lý hầu hết các ngôn ngữ lập trình.

Nhiều như tôi rất tiếc, tiêu chí này không bao gồm các ngôn ngữ chức năng thuần túy. Nó cũng áp dụng cho khóa học không nên sử dụng các tính năng kỳ lạ của ngôn ngữ.

... nhưng đây chỉ là lẽ thường.


1
Với các đơn nguyên như trong Haskell, người ta cho rằng tiêu chí này không còn áp dụng được cho các ngôn ngữ chức năng thuần túy nữa.
Dave Clarke

@DaveClarke: monads là một cách rất hay để làm những thứ không có chức năng. Nhưng không phải là quá mạo hiểm khi lần đầu tiên học thứ này với chi phí đơn nguyên thay vì trực tiếp sao? (Có lẽ không phải vậy, tôi không biết!)
jmad

2
@jdam: Có lẽ bạn đúng. Vấn đề không nằm ở các đơn nguyên, mà là về tính tổng quát và khó khăn trong việc đưa ra các thông báo lỗi tốt cho lập trình viên. Biến thể Helium Haskell giải quyết những vấn đề này và đã được sử dụng thành công với sinh viên năm thứ nhất.
Dave Clarke

@DaveClarke: wow tôi không nghe nói về điều đó. Điều đó thật ngầu! Thật không may, mặc dù điều đó rất hữu ích cho việc học Haskell, nhưng điều đó không giải quyết được vấn đề rằng nó có thể không giúp học các ngôn ngữ khác.
jmad

4
@Ben: cảm giác của tôi là quản lý bộ nhớ thủ công là một thứ gì đó hiện đang dành riêng cho một số ngôn ngữ (và bạn học trong những trường hợp cụ thể này) hơn là một điều cơ bản của lập trình. Nếu bạn không đồng ý với điều đó thì tôi đoán nó sẽ trỏ đến C (hoặc C ++).
jmad

8

Khi chọn một ngôn ngữ lập trình đầu tiên, có nhiều vấn đề cần được xem xét. Nhiều trong số này đã được xem xét trong các câu trả lời ở trên. Tôi bao gồm 3 câu nữa vì đây là một phần câu trả lời của tôi cho câu hỏi đóng ( https://cs.stackexchange.com/questions/1946/criteria-for-ch Mất-a-first-program-ngôn ngữ ) ban đầu đã truyền cảm hứng cho câu hỏi này . Tôi đã sao chép câu trả lời của mình ở đây (và sửa đổi nó) dựa trên chính sách hiện tại là xóa các câu hỏi đóng.

Dưới đây là 3 điểm để xem xét, sử dụng một vài ngôn ngữ lập trình làm ví dụ.

Lập trình trong lớn so với lập trình trong nhỏ

Khi mới học lập trình, người ta cần học cách lập trình nhỏ , trước khi chuyển sang học các cơ chế để giúp lập trình lớn .

Bằng cách lập trình nhỏ, tôi có nghĩa là viết chương trình với ít hơn 100 dòng. Các chương trình này sẽ liên quan đến các thuật toán thao tác các cấu trúc dữ liệu đơn giản, có luồng điều khiển đơn giản và sẽ giải quyết các vấn đề đơn giản. Họ nói chung sẽ không được coi là ứng dụng .

Bằng cách lập trình lớn, tôi có nghĩa là viết các chương trình lớn được xây dựng từ nhiều thành phần / lớp, xây dựng trên API, với GUI, cơ sở dữ liệu, có thể trong cấu hình máy khách-máy chủ.

Những điều lập trình viên cần suy nghĩ khi lập trình trong nhỏ rất khác so với khi lập trình ở quy mô lớn. Lập trình lớn đòi hỏi người lập trình phải suy nghĩ về tính mô đun, giao diện tốt, thiết kế tốt, khả năng sử dụng lại và nhiều vấn đề khác. Ngôn ngữ lập trình hiện đại cung cấp nhiều cấu trúc để giúp chương trình lớn. Các cấu trúc này bao gồm các lớp, mô-đun, giao diện, ẩn thông tin, v.v. Khi lập trình nhỏ, các vấn đề này ít quan trọng hơn nhiều.

Một ngôn ngữ lập trình như C ++ có nhiều tính năng giúp lập trình lớn, nhưng việc ngồi xuống và bắt đầu viết một chương trình rất đơn giản sẽ khó khăn hơn. Java cũng tương tự.

Mặt khác, một ngôn ngữ như Python, Ruby, Scheme hoặc Haskell giúp việc viết chương trình trực tiếp dễ dàng hơn nhiều.

Cấp cao so với cấp thấp

Các ngôn ngữ như C ++ và C là ngôn ngữ cấp thấp hơn. Chúng cho phép lập trình viên thao tác trực tiếp các tham chiếu vào bộ nhớ. Mặc dù, điều này cho phép một người viết mã rất hiệu quả, các chi tiết cấp thấp có thể gây khó khăn cho một lập trình viên đầu tiên học ngôn ngữ. Một số người sẽ cho rằng những chi tiết cấp thấp này có được trong cách viết logic để giải quyết vấn đề.

Một ngôn ngữ cấp cao hơn như Python giúp dễ dàng diễn đạt các khái niệm trực tiếp hơn về mặt vấn đề.

Gõ tĩnh so với gõ động

C ++, Haskell, Java và nhiều ngôn ngữ khác được gõ tĩnh. Điều này có nghĩa là trình biên dịch tự động tìm các vị trí xảy ra lỗi tiềm ẩn dựa trên các loại giá trị dự kiến ​​tại mỗi vị trí trong mã. Có một chút chiến tranh tôn giáo về việc liệu gõ tĩnh có phải là một điều tốt hay không, nhưng tôi sẽ tránh xa điều đó. Một vấn đề với việc gõ tĩnh cho các lập trình viên mới là các thông báo lỗi được trình biên dịch báo cáo thường rất khó hiểu. Điều này đặc biệt đúng với các mẫu C ++ và các chương trình Haskell nói chung.

Python, Ruby và Scheme được gõ động. Điều này có nghĩa là các lỗi được phát hiện trong khi chương trình đang chạy. Người ta có thể lập luận rằng điều này là quá muộn để phát hiện ra các lỗi (nhưng người ta cũng có thể sử dụng thử nghiệm để tránh các lỗi đó). Một lần nữa, tránh tranh luận về tôn giáo, lợi thế của loại lỗi mà người ta gặp phải khi viết các chương trình đơn giản bằng ngôn ngữ lập trình được gõ động là loại đối tượng này không biết cách thực hiện thao tác này . Trong ngữ cảnh của một chương trình nhỏ, những lỗi này rất dễ hiểu và theo dõi.

Các ngôn ngữ như C có khả năng gõ yếu, có nghĩa là mặc dù trình biên dịch giúp khắc phục một số lỗi, nhưng thời gian chạy không thể bẫy những người khác xảy ra, chẳng hạn như truy cập bộ nhớ không hợp lệ. Kết quả là, thông báo lỗi được trả về cho lập trình viên giống như "Chương trình bị lỗi". Một ngôn ngữ được gõ động sẽ bẫy các lỗi này và chuyển chúng thành một thông báo lỗi dễ hiểu hơn.

Khác

Đối với các ngôn ngữ khác, các cân nhắc khác nhau có thể xuất hiện, chẳng hạn như hỗ trợ do môi trường lập trình cung cấp, API có sẵn, chất lượng sách và hướng dẫn trực tuyến, v.v.


Chân thành đồng ý.
vonbrand

1
Tôi cũng có sở thích riêng của mình về sự tranh chấp "kiểu tĩnh so với kiểu động". Tuy nhiên, trong một chương trình CS nói chung, miễn là cả hai được dạy như một số điểm, tôi tin rằng thứ tự không quan trọng lắm. Tuy nhiên, nếu chỉ có một mặt của đồng tiền được trình bày, đó là một vấn đề lớn đối với tôi.
chi

8

Là một nhận xét giới thiệu, xem xét khả năng trình bày nhiều hơn một ngôn ngữ (trong một khóa học). Trong thuật ngữ đầu tiên của tôi, chúng tôi đã hiển thị cả SML và Java. Sự tương phản có thông điệp rất quan trọng và riêng của nó: chọn công cụ phù hợp cho công việc.

Nhưng bây giờ cho tiêu chí, theo thứ tự tùy ý.

Khó học là một vấn đề chủ quan, nhưng quan trọng: bạn không muốn học sinh của mình lãng phí thời gian vào việc học ngôn ngữ, mà là làm mọi thứ với nó. Có thể cho rằng, các ngôn ngữ động như Ruby có thể giành chiến thắng trên mặt trận này: bạn có thể cho chúng ăn bất cứ thứ gì và có các hướng dẫn "giả" tuyệt vời trên web. Nếu tôi nhớ chính xác, cũng có những nghiên cứu cho thấy những sinh viên chưa lập trình trước đó đạt được kết quả tốt hơn với các ngôn ngữ chức năng so với những người khác.

Giàu có : ngôn ngữ phải đủ phong phú cho tất cả các khái niệm bạn muốn dạy. Ví dụ: nếu bạn muốn thảo luận về các hàm bậc cao hơn, bạn cần một ngôn ngữ trong đó các hàm là các giá trị, chẳng hạn như ngôn ngữ hàm hoặc Scala.

Khả năng mở rộng : Cơ hội là học sinh của bạn sẽ không tự học nhiều ngôn ngữ hơn những ngôn ngữ bạn thể hiện. Vì vậy, bạn muốn (các) ngôn ngữ bạn chọn mở rộng trong suốt quá trình học: họ cần viết các bài tập thú cưng của bạn ngay bây giờ, nhưng cũng có thể tấn công một dự án cỡ trung bình sau đó. Java và các ngôn ngữ có tầng sinh thái tương tự là những lựa chọn tốt ở đây.

Công cụ hỗ trợ : Điều này có liên quan đến khả năng mở rộng. Nếu bạn mong đợi / muốn sinh viên của mình làm việc hiệu quả với ngôn ngữ, thì các IDE tốt, quản lý xây dựng và thư viện phải tồn tại. Shell tương tác (Ruby, Scala) cũng là điều tốt đẹp, đặc biệt là cho người mới bắt đầu. Các công cụ phải hoạt động trên tất cả các nền tảng chính.

Tài liệu : Có lẽ bạn không muốn thực sự dạy ngôn ngữ nhưng để học sinh tự dạy với hướng dẫn (trừu tượng) của bạn. Do đó, tài liệu tốt là quan trọng. Có thể cho rằng, một ngôn ngữ càng phổ biến và được thiết lập thì tài liệu càng tốt. Ví dụ, tài liệu của Scala khá kém (nhưng đang cải thiện). Các công cụ như Hoogle là một lợi thế.

Sẵn có : Thực sự có những người dạy sử dụng Matlab hoặc Visual C ++. Hãy xem xét rằng không phải ai cũng có thể có giấy phép hoặc máy có thể chạy các chương trình cần thiết. Bạn có thể nên ưu tiên các ngôn ngữ miễn phí chạy trên nhiều nền tảng.

Sự sạch sẽ : Bạn có thể muốn định hình cách suy nghĩ của học sinh. Ngôn ngữ càng lộn xộn, họ sẽ nghĩ càng lộn xộn; Tôi sẽ không bao giờ đề xuất PHP trong một khóa học. Ngôn ngữ động nói chung có nhược điểm ở đây: chúng cho phép, đôi khi thậm chí phát huy, những thói quen xấu.

Những tiêu chí nào quan trọng đối với bạn hơn những tiêu chí khác cũng phụ thuộc vào những gì bạn muốn dạy. Đây có phải là một khóa học lập trình? Đây có phải là một thuật toán và cấu trúc dữ liệu khóa học? Đây có phải là một khóa học giới thiệu các khái niệm về ngôn ngữ lập trình trong các mô hình khác nhau? Đây có phải là một khóa học về phát triển phần mềm lớn không?


For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala. ... Hoặc C hoặc Pascal, cả hai đều có con trỏ hàm gần như mãi mãi. Thực tế, ngôn ngữ duy nhất (chính thống) mà tiêu chí này thực sự tắt là Java.
Mason Wheeler

Cố gắng dạy cho người mới một mớ hỗn độn của các cú pháp khác nhau và các khái niệm cơ bản chỉ là sự tranh giành não bộ.
vonbrand

6

Câu hỏi hấp dẫn; Tôi thích sự nhấn mạnh của bạn về tiêu chí khách quan. Chúng tôi muốn sinh viên năm nhất học hỏi:

khái niệm lập trìnhKhái : Ngôn ngữ lập trình đầu tiên phải hỗ trợ: gọi hàm, lặp, đệ quy

ý tưởng cơ bản : Ngôn ngữ lập trình đầu tiên phải hỗ trợ các mảng (cho các bước đầu tiên trong phần giới thiệu nhẹ nhàng về cách thức bộ nhớ thực sự hoạt động và cách con trỏ hoạt động)

Kỹ năng lập trình thực tế : cách sử dụng trình gỡ lỗi, cách sử dụng trình lược tả, cách giải quyết các vấn đề lớn (ngôn ngữ cấp cao), cách kết hợp các hệ thống lớn, cách khắc phục sự cố (phân tách vấn đề), cách tránh viết mã phức tạp, làm thế nào để giao tiếp với con người ý định đằng sau một loạt các câu lệnh thực thi (thường là khó hiểu).

thực tế là các thư viện viết sẵn tồn tại cho những thứ như sort () và cách sử dụng chúng - tức là thực tế là không cần thiết phải viết mọi thứ từ đầu.

Các tiêu chí khác cho ngôn ngữ đầu tiên :

diễn giải (phản hồi nhanh giúp quá trình học tập).

một môi trường tương tác giúp tăng tốc độ học tập, kiểm tra và gỡ lỗi.

mã nguồn chất lượng cao có sẵn cho sinh viên đọc bằng ngôn ngữ đó

"Dễ đọc", "cú pháp tiếp cận ngôn ngữ tự nhiên" (để dễ đọc và phân loại SourceCode hơn)

di động (chạy trên Mac OS, Windows, Unix). Ít nhất một phần mềm miễn phí thực hiện ngôn ngữ.

dạy nhanh, "vài gotchas" - ví dụ: "[Tôi] có thể nhanh hơn để dạy người mới bắt đầu Python và sau đó là Java, thay vì Java như một OOPL đầu tiên." - "So sánh các ngôn ngữ progamming hướng đối tượng"telescopeRule

Matthias Felleisen đã phát triển một ngôn ngữ lập trình với các thông báo lỗi phù hợp với khán giả mới bắt đầu. Ông nhấn mạnh rằng sự lựa chọn ngôn ngữ cụ thể không quan trọng bằng việc dạy một phương pháp thiết kế tốt. Trên thực tế, anh thấy khóa học CS đầu tiên là lớp Nghệ thuật tự do, dạy tư duy phản biện, giải quyết vấn đề và chú ý đến chi tiết.

tiêu chí cho ngôn ngữ lập trình thứ hai

Thứ chúng tôi muốn sinh viên học, nhưng có lẽ điều này có thể chờ ngôn ngữ lập trình thứ hai:

một ngôn ngữ "có liên quan" là "không quá bí truyền"; một cái gì đó "phổ biến trong ngành công nghiệp"

Lý thuyết phức tạp: làm thế nào để nhận ra các nhiệm vụ bất khả thi với công nghệ hiện tại.

công cụ cấp cao hơn: làm thế nào để chọn công cụ phù hợp cho công việc , cách sử dụng trình biên dịch, cấu trúc, lập trình hướng đối tượng, lập trình chức năng, lập trình logic, thiết kế trình biên dịch, soạn thảo và thao tác các hàm (theo nghĩa Lisp / ML), lập trình đồng thời và phân phối,

công cụ cấp thấp: số học con trỏ, kiến ​​trúc máy tính. quản lý bộ nhớ, khung ngăn xếp, lập trình lắp ráp, kiến ​​trúc máy, trình điều khiển thiết bị và thiết kế hệ điều hành (vì vậy máy sẽ không "giống như một hộp đen đáng sợ mà chúng không thể xâm nhập")

EDIT: Tôi thấy thất vọng khi đăng một bản tóm tắt về một cái gì đó mà tôi đã viết, phối hợp với nhiều người khác, "có thể không phải là một bài viết hợp pháp".

Vì vậy, tôi đang thêm một trích dẫn chính thức hơn vào liên kết không chính thức trước đây của mình, cố gắng tuân thủ sử dụng hợp lý và các vấn đề bản quyền wiki khác.

Câu trả lời này là bản tóm tắt về Ngôn ngữ đầu tiên của sinh viên năm nhất (Anon 2011) tại Kho lưu trữ mẫu Portland.

(Anon 2011) Nhiều tác giả vô danh và nhiều tác giả khác. "Ngôn ngữ đầu tiên của Freshmans". Kho lưu trữ mẫu Portland. Ngày 27 tháng 9 năm 2011 http://c2.com/cgi/wiki?FreshmansFirstL Language .


Bạn đã kiểm tra với các tác giả ban đầu xem bạn có được phép sao chép nội dung của họ không? Nguồn là một trang web của công ty và tôi không thể tìm thấy một tuyên bố rằng nội dung là miễn phí, vì vậy đây có thể không phải là một bài viết hợp pháp!
Raphael

1
@Raphael Nguồn là một wiki (vì vậy có khả năng có nhiều tác giả khác nhau). Nếu tác giả (bất kỳ đồng tác giả) của tài liệu này không muốn đưa nó vào đây, anh ta nên gửi thông báo gỡ xuống DMCA đến [địa chỉ liên hệ được liệt kê ở cuối trang này] (mailto: team+cs@stackexchange.com) . Hơn nữa, thông tin không được bảo vệ bởi bản quyền, chỉ có cách nó được thể hiện. Một chút tái cấu trúc và Loại bỏ từ chốiRunTogetherWikiWikiStyle sẽ cải thiện câu trả lời này và loại bỏ mọi nguy cơ vi phạm bản quyền.
Gilles 'SO- ngừng trở nên xấu xa'

1
+ Câu trả lời tốt, nhưng tôi có một nit để chọn - hồ sơ. Không có lý thuyết đằng sau chúng - chỉ là "kiến thức phổ biến". Nói chung, không được đánh giá cao trong giới học thuật rằng có nhiều vấn đề họ không tìm thấy, và một kỹ thuật khác thì có. Kiểm tra liên kết này.
Mike Dunlavey

5

Tôi nghĩ đơn giản và dễ học là một trong những tiêu chí chính. Trong một khóa học giới thiệu về lập trình, chúng tôi muốn tránh các rào cản lập trình không cần thiết và tập trung nhiều nhất có thể vào các nguyên tắc lập trình và giải quyết vấn đề thuật toán. Sinh viên năm thứ nhất thường thiếu khả năng suy nghĩ thuật toán về các vấn đề nên khóa học cũng là về giảng dạy tư duy thuật toán.

Một tiêu chí khác là sự hữu ích của ngôn ngữ trong ngành. Chúng tôi không muốn dạy một ngôn ngữ không có ích trong ngành. Phần lớn các sinh viên sẽ làm việc trong ngành công nghiệp vì vậy người ta nên để mắt đến những gì đang được sử dụng (và sẽ được sử dụng khi sinh viên tốt nghiệp) trong ngành.

Tiêu chí thứ ba sẽ là các khóa học mà sinh viên sẽ tham gia trong những năm sau đó. Các khóa học, đặc biệt là các khóa học bắt buộc, không được tự thiết kế mà phối hợp với các khóa học khác.

Câu cuối cùng tôi có thể nghĩ ra ngay bây giờ cũng giống như câu trả lời của jmad, ngôn ngữ sẽ giúp dễ dàng học các ngôn ngữ quan trọng khác. Nó phải đủ phong phú và chọn các ngôn ngữ quan trọng sau này sẽ dễ dàng (ở đây, quan trọng có nghĩa là quan trọng từ quan điểm của các sinh viên).

Tôi nghĩ rằng nhiều trường đại học đã chuyển phần giới thiệu chính của họ sang khóa học lập trình từ Java / C ++ / C sang Python mặc dù thỉnh thoảng họ có thể giới thiệu về lập trình bằng các ngôn ngữ khác (thường là cho các chuyên ngành khoa học máy tính, ví dụ C cho các chuyên ngành kỹ thuật điện) mặc dù họ có thể thể hiện sự linh hoạt nếu người hướng dẫn muốn thử nghiệm việc dạy ngôn ngữ khác một lần trong một thời gian.


3
Tôi sẽ không đánh giá mức độ hữu dụng trong ngành rất cao trong một khóa học lập trình giới thiệu. Một lập trình viên thành công ngoài tự nhiên có thể sẽ phải học một số ngôn ngữ trong sự nghiệp, một số trong số họ "trong công việc", vì vậy khả năng tiếp thu và học ngôn ngữ mới là một kỹ năng quan trọng cần được dạy. Do đó, tôi không mong đợi ngôn ngữ đầu tiên sẽ được dạy trong một khóa học dài đại học nhất thiết phải là ngôn ngữ mạnh nhất khi họ tốt nghiệp.
Bến

1
@Ben: Sự hữu ích trong ngành là đặc biệt quan trọng nếu sinh viên không học chuyên ngành CS. Nơi tôi đến từ nhiều người đi làm về sinh học hay khoa học khác và với cách họ wont có thời gian để học được nhiều thứ tiếng, học một cái gì đó phổ biến ở hệ sinh thái của họ như Python có thể sẽ hữu ích hơn thì ML, Java hoặc C.
hugomg

1
Nói như một người trong ngành (một ngành cụ thể, không nhất thiết phải đại diện), tôi không nghĩ rằng sự liên quan của ngành là một yếu tố khi nói đến các lập trình viên cấp 1 trong tương lai. Tiếp xúc với nhiều mô hình làm cho các lập trình viên tốt hơn, ngay cả khi trong miền của tôi (lập trình nhúng), chúng tôi chủ yếu sử dụng C. Một số ngôn ngữ có thể được học trong một hướng dẫn, các khái niệm chung được dạy tốt hơn ở trường. Đối với các lập trình viên tình cờ (ví dụ các nhà khoa học), các ưu tiên là khác nhau - nhưng tập trung quá nhiều vào Fortran có thể khiến mọi người bỏ qua Numpy khi đó là những gì họ nên sử dụng.
Gilles 'SO- ngừng trở nên xấu xa'

5

Vì vậy, tôi sẽ giải quyết ngay lập tức với phản ứng giật đầu gối của mình, đó là mọi người nên học lập trình qua SICP vì Lisp là Điều đúng đắn.

Đã có nhiều tiêu chí tốt được đưa ra để lựa chọn một ngôn ngữ ... tính đơn giảntính di động là một trong những tiêu chí quan trọng nhất. Tuy nhiên, tôi cũng nghĩ rằng điều quan trọng đối với sinh viên mới lập trình là không hiểu sai (hoặc không có ý tưởng) về những gì xảy ra đằng sau hậu trường với các ngôn ngữ hiện đại.

Mặc dù một số bài đăng khác đã đưa ra các tiêu chí tuyệt vời, tôi muốn sử dụng một ngôn ngữ cụ thể để minh họa 'đáp ứng tiêu chí' trông như thế nào.

Một số trong những lo ngại này đã được giải quyết (tốt hơn nhiều so với tôi có thể cố gắng) trong bài đăng trên blog của Joel Spolsky, The Perils of JavaSchools . Việc chọn các ngôn ngữ như Java hoặc Python sẽ đóng hai khái niệm khó hơn (và quan trọng nhất) trong CS; cụ thể là con trỏ và đệ quy.

Tất nhiên, việc giảng dạy một khóa học giới thiệu về C sẽ vô cùng dày đặc, trong khi cũng có khả năng thiếu nhiều khái niệm quan trọng liên quan đến đệ quy. Tương tự như vậy, một khóa học được giảng dạy ở Lisp sẽ phải giải quyết các con trỏ dưới vỏ bọc, carcdrngụ ý các khái niệm quan trọng liên quan đến danh sách liên kết, trong khi để ngôn ngữ xử lý các chi tiết.

Về cơ bản, những gì tôi nhận được, là sinh viên cần hiểu các nguyên tắc cơ bản của cấu trúc dữ liệu và thuật toán, cũng như triển khai thực tế.

Tôi cũng không đồng ý với đề nghị không sử dụng ngôn ngữ hướng đối tượng. Tôi nghĩ rằng tiện ích của các ngôn ngữ hướng đối tượng để mô hình hóa thế giới thực là một tài sản tích cực đối với các lập trình viên mới, miễn là sự không phù hợp trở kháng được làm rõ, và các ngôn ngữ hướng đối tượng là một trong số nhiều mô hình.

Tôi sẽ đề xuất rằng Ruby (cũng được đề xuất như một khả năng của một bài đăng khác) minh họa cho nhiều phẩm chất cần tìm trong một ngôn ngữ để sử dụng cho phần giới thiệu cho khóa học lập trình.

Tôi sẽ biện minh cho khẳng định này trong giây lát, nhưng trước tiên tôi muốn nhận xét về một xu hướng làm tôi bối rối trong các khóa học giới thiệu về CS. Tôi làm việc tại một trường đại học, giống như nhiều trường học, gần đây đã chuyển sang sử dụng Python cho các khóa học giới thiệu của nó. Tôi tin chắc rằng Python là BASIC mới và xu hướng của ngôn ngữ là chọn sự thân thiện với người mới về sức mạnh và tính biểu cảm, như tôi đã tranh luận gần đây ở nơi khác . Đây là một sự bất đồng, và chúng ta cần suy nghĩ về các lập trình viên mà họ sẽ trở thành, chứ không phải là những người mới vào lúc này.

Dù sao đi nữa, biện minh cho Ruby là ngôn ngữ giới thiệu ...

  • Ruby, mặc dù không được tối ưu hóa cuộc gọi đuôi, nhưng đệ quy khá tốt. Vì vậy, có đó.
  • Ruby là đa mô hình. Mặc dù nó là một ngôn ngữ hướng đối tượng thuần túy, nó cũng bao gồm lập trình chức năng, cũng như có một số bánh xe đào tạo có nguồn gốc từ C bắt buộc. So sánh điều này với Python, một ngôn ngữ thủ tục với một số OO đã được xử lý (mặc dù các bu lông đang hiển thị) và một số yếu tố chức năng (mà BDFL của Python đã cố gắng thực hiện nhiều lần ).
  • CRuby (còn gọi là MRI hoặc 'Ruby Classic') được viết và mở rộng, trong C. Bạn có thể dạy học sinh về con trỏ, quản lý bộ nhớ và vị thần đáng sợ malloc()bằng cách dạy chúng mở rộng ngôn ngữ trong C.
  • Thậm chí nghĩ rằng đó là một ngôn ngữ năng động, cấp cao, bạn có thể dạy rất nhiều về cấu trúc dữ liệu, loại, v.v.; có những thư viện (đá quý) cho bất cứ điều gì bạn có thể tưởng tượng, từ những cây đen đỏ đến những việc kỳ quặc bằng cách gõ vịt.

Dù sao đi nữa, không có sự thay thế nào cho việc học nhiều ngôn ngữ, từ nhiều mô hình, cho dù bạn có sử dụng chúng một cách chuyên nghiệp hay không. Về cơ bản, tôi nghĩ mọi người nên hiểu , nếu không sử dụng , C và Lisp. Ruby là sự thỏa hiệp tốt nhất mà tôi có thể nghĩ đến cho một học kỳ giới thiệu.

Nhưng dù sao ... đó là US $ 0,02. Tôi không cố gắng thuyết phục bạn sử dụng Ruby, hãy nhớ rằng bạn ... chỉ sử dụng nó như một ví dụ về phẩm chất để tìm kiếm một ngôn ngữ để giảng dạy một khóa học giới thiệu.


2
"Tôi tin chắc rằng Python là BASIC mới" - sao chép điều đó. "hai trong số các khái niệm khó hơn (và quan trọng nhất) trong CS, cụ thể là con trỏ và đệ quy" - Tôi chưa bao giờ học một ngôn ngữ liên quan đến con trỏ một cách rõ ràng, và tôi chưa bao giờ bỏ lỡ điều gì. Khi tôi học cách trình biên dịch làm việc, con trỏ nơi giải thích đủ nhanh.
Raphael

Tôi đồng ý rằng một ngôn ngữ đa mô hình có sức hấp dẫn của nó (mặc dù việc dạy hai đến ba ngôn ngữ "thuần túy" có thể tốt hơn), nhưng tôi sẽ không chọn Ruby vì lý do đó. Các ngôn ngữ khác để có một công việc tốt hơn, imho, đặc biệt là đối với thư viện cơ bản. Scala, ví dụ, có cả một thư viện các bộ sưu tập bất biến.
Raphael

3
Tôi cũng tin rằng Python là BASIC mới. Nhưng tại sao đó là một lập luận chống lại Python?
JeffE

1
@Raphael, con trỏ chỉ khó khi bạn bắt đầu với C, điều này phần nào buộc bạn phải tiếp xúc với con trỏ khi có quá nhiều thứ không ổn định và chúng có mối quan hệ khó hiểu với mảng. Con trỏ không khó với tôi khi tôi tự học Pascal. Con trỏ không khó đối với những người trong lớp tôi đã dạy chúng trong Algol 68 (chúng được đặt tên là tài liệu tham khảo ở đó, nhưng chúng là con trỏ bởi một tên khác, giống như trong Java; điều khó ở Algol 68 là các quy tắc về quy tắc tự động), con trỏ thậm chí không khó với C ++ nếu bạn không bắt đầu bằng cách dạy tập hợp con C.
AProgrammer

1
@DaveClarke: Nó thụt lề với khoảng trắng, nhiều hơn bù cho những thứ đó.
Raphael

5

Ngôn ngữ lập trình đầu tiên của tôi là ngôn ngữ lắp ráp đồ chơi. Thứ hai là Fortran. Ở giữa, tôi được dạy một ký hiệu "thuật toán", đại khái là Algol 60. Tôi thấy khá ổn. Trong thực tế, tôi nghĩ rằng những gì tôi đã được dạy là khá hoàn hảo.

Khi tôi lần đầu tiên nhìn vào lập trình chức năng, trong các tài liệu nghiên cứu mặc dù không phải bằng ngôn ngữ được triển khai, tôi đã nói "wow, điều này hoàn toàn khác. Nó khá là toán học!" Hầu hết mọi người được dạy lập trình chức năng vẫn có cùng loại trải nghiệm "wow". Tôi nghĩ điều đó thật tuyệt!

Tôi nghĩ lập trình cấp bách và lập trình chức năng là hai cách nhìn hoàn toàn khác nhau về thế giới. Chúng tôi sẽ làm mất lòng các sinh viên nếu chúng tôi cướp đi trải nghiệm đa dạng đó.

Ngôn ngữ lập trình đầu tiên tốt nhất nên là thứ gì đó đơn giản nhất có thể và rõ ràng nhất có thể, để học sinh có thể tập trung vào cách suy nghĩ rõ ràng. Thật không may, sự đơn giản và rõ ràng của lắp ráp, Fortran và Algol 60 không thể so sánh được với hầu hết các ngôn ngữ lập trình hiện đại. Haskell là một ngoại lệ tốt. Nhưng, Haskell sẽ làm cho ngôn ngữ lập trình thứ hai lý tưởng của tôi, không phải là ngôn ngữ đầu tiên. Eiffel hoặc Oberon có lẽ phù hợp với dự luật.


5

Tại trường Khoa học và Toán học Bắc Carolina , chúng tôi đã giới thiệu sinh viên với Python từ năm 2004. Chúng tôi sử dụng nó để dạy lập trình thủ tục, bởi vì chúng tôi nghĩ rằng khả năng viết các quy trình ngắn, chính xác là rất quan trọng để tiến bộ sau này với các công cụ nặng hơn, bao gồm OO lập trình.

Chúng tôi thích nó vì những lý do này.

  1. Python không phải là một ngôn ngữ định dạng miễn phí. Nó buộc các sinh viên viết mã của họ trong các khối bằng cách sử dụng thụt lề. (Như một lưu ý kỹ thuật, chúng tôi sử dụng trình soạn thảo văn bản vim và đặt [ set tabstop=4 set et] trong .vimrc để loại bỏ các vấn đề gây phiền nhiễu và để thụt mã được chú ý nhưng không gây ra sự trôi dạt quá mức xấu xí). Học sinh của chúng tôi đã quen với việc nhìn thấy cấu trúc phân cấp của các chương trình được phân định bởi khoảng trắng. Do đó, thói quen định dạng của họ có xu hướng rất tốt khi họ lập trình bằng các ngôn ngữ khác.

  2. Tính đơn giản cú pháp của Python làm cho nó bắt đầu thân thiện. Các chương trình đơn giản có thể được viết với tối thiểu các từ khóa phức tạp và câu thần chú. Chúng tôi muốn sinh viên thường không nghĩ đến lập trình để thử nó. Lưu ý sự đơn giản đáng yêu của Python hello.py; rõ ràng là những gì đang xảy ra.

  3. Python được gõ động và vịt gõ. Điều này làm cho việc giới thiệu các biến dễ dàng. Tôi nói với các sinh viên của tôi rằng các biến chỉ là nhãn. Họ chỉ vào đồ vật. Bạn gửi tin nhắn đến một đối tượng bằng tên biến, giống như ai đó gửi tin nhắn cho bạn bằng cách gọi cho bạn qua điện thoại.

  4. Python là một công cụ mà các sinh viên đầy tham vọng sẽ không vượt trội. Nó có các thư viện tinh vi làm các máy chủ hữu ích. Nó là một công cụ sáng tạo mạnh mẽ có thể truy cập cho người mới bắt đầu.

  5. Python là miễn phí và chạy trên tất cả các nền tảng chính. Trường học của chúng tôi là một môi trường HĐH không đồng nhất với đủ loại máy móc. Chúng tôi không phải lo lắng về vấn đề đau đầu như vấn đề tương thích. Nó sẽ chạy trên bất kỳ máy tính nào.

  6. Python có tài liệu tuyệt vời. Chúng tôi khuyến khích sinh viên của chúng tôi khám phá, tinker và màu sắc bên ngoài các dòng. Họ tìm hiểu về việc sử dụng tài liệu Python sớm và thường xuyên khám phá những thứ hay ho bên ngoài lớp học.

Chúng tôi đã rất hài lòng với Python.


1
Chào mừng bạn Đây là một trường hợp nghiên cứu tốt, nhưng không trả lời được câu hỏi sau khi lựa chọn tiêu chí, imho. Đọc các mục của bạn ngược có thể làm điều đó, nhưng tôi không chắc liệu bạn có dự định như vậy không.
Raphael

Không có thứ tự cụ thể đã được dự định. Đó là một "và".
ncmathsadist

3

Tôi có thể nói, ngôn ngữ (trong một số giới hạn) không quan trọng bằng, như những gì bạn làm với ngôn ngữ. Bạn có thể tìm hiểu tương tự về phát triển phần mềm, thuật toán, lập trình hướng đối tượng, phần cứng máy tính và vv trong hầu hết các ngôn ngữ. Điều quan trọng là, để phát triển một cái gì đó thú vị, trong đó sử dụng tất cả các khái niệm này.

(câu trả lời được di chuyển từ https://cs.stackexchange.com/questions/1946/criteria-for-chỉ-a-first-programming-Language / )


1

TL; DR: Không có cách nào đểtrả lời khách quan vì không cócơ sở khách quan cho các tiêu chí đằng sau nó. Thật tùy tiện khi cố gắng tranh luận nếu màu xanh, về mặt khách quan , màu "tốt hơn" so với màu đỏ, hoặc nếu kem vani là khách quan "ngon" hơn sô cô la.


Tôi nghĩ rằng đã có một số bài viết tuyệt vời đã có mặt, nhưng tôi sẽ thêm 2 xu của riêng tôi.

Những tiêu chí khách quan nào mà một nhà giáo dục có thể sử dụng để chọn ngôn ngữ lập trình để sử dụng làm cơ sở cho khóa học lập trình đại học năm thứ nhất?

Câu hỏi này giống như hỏi liệu có cách nào để lựa chọn khách quan hương vị kem đầu tiên mà người khác nên thử khi đến thăm một địa điểm kem lần đầu tiên. Không, không có cách khách quan nào để chọn thứ gì đó vốn chủ quan .

Tại sao? Bởi vì ngay cả khi chúng ta xem xét các tiêu chí hợp lý được đề cập trong câu trả lời của Pedro , mọi người vẫn sẽ có cái nhìn chủ quan về cách mỗi yếu tố "giữ vững" so với quan điểm của người khác.

Ví dụ, Ruby có khách quan "đơn giản" hơn Python không? Đơn giản hơn theo nghĩa nào? Đối với những gì? "Đơn giản hơn" có nghĩa là gì đối với bạn ? Có nghĩa là "ít dòng mã hơn"? Có nghĩa là "dễ đọc và dễ hiểu" hơn? Còn những người khác thì sao? Tại sao mọi người nên đồng ý với bất kỳ lựa chọn cụ thể ở đây? Tôi không nghĩ chúng ta có thể trả lời câu hỏi đó một cách khách quan .

Điều này dẫn đến câu hỏi tiếp theo.

Cơ sở cho các tiêu chí này là gì?

Hợp lý như một số tiêu chí có thể, tôi nghĩ rằng điều này dựa trên sở thích chủ quan hơn bất cứ điều gì khác. Ví dụ, không có lý do tại sao tôi chỉ nên chấp nhận tiêu chí đơn giản , không rõ ràng , tính di độngsở thích công nghiệp của Pedro - bất kể một số người có thể nghĩ nó hợp lý đến mức nào. Trong thực tế, ưu tiên ngành công nghiệp là chủ quan theo định nghĩa và chỉ đơn giản sẽ dẫn đến một vòng luẩn quẩn. (Mọi người đều được đào tạo về nó, vì vậy mọi người đều sử dụng nó trong công nghiệp, đó là lý do tại sao mọi người đều được đào tạo về nó, ...)

Ví dụ, tại sao không

  • Hiệu quả: Thời gian thực hiện và dấu chân bộ nhớ thực sự có thể được đo.
  • Kích thước: Số lượng từ dành riêng ít nhất có thể sẽ giúp ngôn ngữ dễ học hơn.
  • Bộ tính năng: Một tập hợp rộng hơn các tính năng được hỗ trợ (ví dụ: lambdas, generic, hướng đối tượng, quá tải toán tử, v.v.) sẽ cho phép bạn dạy thêm các khái niệm mà không phải chuyển ngôn ngữ và quay lại hình vuông.
  • Khả năng tương tác: Một ngôn ngữ giúp bạn dễ dàng làm việc với các ngôn ngữ và hệ thống gốc khác (ví dụ: API Win32 từ C # hoặc Python, v.v.) có thể được nâng lên như một khoản đầu tư dài hạn tốt hơn, v.v.

Vấn đề là, trong khi tôi có thể đưa ra một bộ tiêu chí đánh giá khác nhau và vẫn được coi là hợp lý, chúng tôi không thể khẳng định nó vượt trội về mặt khách quan / thua kém người khác.

Tóm lại, không có cơ sở khách quan cho các tiêu chí. Thật tùy tiện khi cố gắng tranh luận nếu màu xanh, về mặt khách quan , màu "tốt hơn" so với màu đỏ, hoặc nếu kem vani có vị khách quan hơn sô cô la.

Điều đó không có nghĩa là bạn không thể có lý do chính đáng để biện minh cho sở thích của mình, nhưng vào cuối ngày, chúng chỉ là sở thích của bạn .

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.