Python là một ngôn ngữ đồ chơi

Một số người cho rằng ``chiến tranh ngôn ngữ'' đã kết thúc và (duy nhất) các lựa chọn hợp lý là. C, C++, Java, Ada (và có thể cả Eiffel). ([chú thích cuối trang] Đây dường như là sự đồng thuận của cuộc thảo luận nhóm ``Tương lai khả thi cho CS2'' tại SIGCSE '98. ) Tôi tin rằng tuyên bố chiến tranh kết thúc là thừa nhận thất bại quá sớm. Thời điểm mà có rất ít sự đồng thuận về một ngôn ngữ đầu tiên dường như là thời điểm thích hợp để quay lại các nguyên tắc đầu tiên và xem xét ngôn ngữ đầu tiên nên là gì. Trên đường đi, chúng ta có thể phát hiện ra rằng một số ứng cử viên tốt nhất thậm chí còn chưa được xem xét

Trong bài báo này, tôi lập luận rằng các ngôn ngữ kịch bản cấp cao như Python, Perl, Tcl, Rexx và Visual Basic là những ứng cử viên tốt hơn cho ngôn ngữ đầu tiên. Một đặc biệt, Python, có vẻ gần như lý tưởng

2 tiêu chí cho một ngôn ngữ đầu tiên

2. 1 Giả định về CS1 và CS2

Nhận thấy rằng có sự bất đồng đáng kể về tài liệu nào nên được dạy trong CS1 và CS2, bất kỳ cuộc thảo luận thông minh nào về ngôn ngữ nào phù hợp nhất đều phải bắt đầu bằng các giả định cơ bản về bản thân các khóa học. Các giả định sau đây phản ánh một cách tiếp cận khá phổ biến, nhưng tôi hiểu rằng chúng không hoàn toàn không gây tranh cãi

Đầu tiên, trình tự CS1/CS2 về cơ bản là về lập trình máy tính. Mặc dù các khóa học này chắc chắn giải quyết các vấn đề rộng lớn hơn về lý thuyết và thực hành khoa học máy tính, cốt lõi của khoa học máy tính và của các lớp đầu tiên này vẫn là giải quyết vấn đề, thiết kế và lập trình. Học lập trình phần lớn là hoạt động thực hành và các lớp này liên quan đến các dự án thiết kế và lập trình ở nhiều quy mô khác nhau trong môi trường phòng thí nghiệm mở hoặc phòng thí nghiệm kín

Thứ hai, bản thân ngôn ngữ lập trình không phải là trọng tâm của các lớp này. Mặc dù sinh viên của chúng tôi thường gọi các lớp này là ``lớp C++'' hoặc ``lớp Java'', các khóa học được thiết kế để giới thiệu về lĩnh vực khoa học máy tính. Ngôn ngữ đang được sử dụng thực sự là một vấn đề thứ cấp. Xu hướng coi CS1 là phần giới thiệu về một ngôn ngữ cụ thể là dấu hiệu cho thấy sự phức tạp của các ngôn ngữ thường được sử dụng

Thứ ba, các lớp này giới thiệu cho sinh viên các mô hình chính để thiết kế và giải quyết vấn đề được sử dụng ngày nay, cụ thể là các phương pháp hướng đối tượng và có cấu trúc được triển khai bằng ngôn ngữ mệnh lệnh (hướng câu lệnh). Trong khi có những người ủng hộ mạnh mẽ cho các cách tiếp cận khác (e. g. sử dụng ngôn ngữ chức năng trong lớp đầu tiên), phần lớn các lớp giới thiệu có xu hướng đi theo con đường truyền thống hơn

Thứ tư, và có lẽ gây tranh cãi nhất, tôi cho rằng mục tiêu của CS1 là thu hút và giáo dục các chuyên ngành khoa học máy tính và có lẽ tuyển dụng những người mới. Với nhu cầu hiện tại đối với sinh viên tốt nghiệp của chúng tôi và nhu cầu của tất cả các cá nhân được giáo dục để hiểu về công nghệ thông tin, việc coi CS1 là một lớp học `` bị loại bỏ '' là một điều bất lợi lớn. Lập trình rất khó, nhưng chúng ta nên cố gắng làm cho nó không khó hơn mức cần thiết

2. 2 hàm ý cho việc lựa chọn ngôn ngữ lập trình

Nếu các lớp giới thiệu thực sự là về khoa học máy tính hơn là các chi tiết của một ngôn ngữ cụ thể, thì ngôn ngữ được chọn nên có cú pháp và ngữ nghĩa đơn giản. Tất cả chúng ta đều đã trải qua sự thất vọng của một khóa học CS1 bị sa lầy trong cuộc thảo luận về lỗi cú pháp và cấu trúc ngôn ngữ. Trong phạm vi có thể, chúng ta nên chọn một ngôn ngữ giảm thiểu những phức tạp này để có thể dành nhiều thời gian hơn cho việc phát triển các kỹ năng thiết kế. Hệ quả tất yếu của triết lý này là những vấn đề đơn giản nên được giải quyết một cách đơn giản. Một ngôn ngữ đòi hỏi chi phí công chứng đáng kể để giải quyết các vấn đề ngay cả tầm thường buộc ngôn ngữ thay vì các kỹ thuật giải quyết vấn đề trở thành đối tượng nghiên cứu

Bản chất thử nghiệm, thực hành của các khóa học giới thiệu cũng có ý nghĩa đối với việc lựa chọn ngôn ngữ. Một ngôn ngữ cho phép thể hiện các thiết kế với chi phí tối thiểu khuyến khích thử nghiệm và viết lại. Do đó, ngôn ngữ phải ở mức rất cao và linh hoạt, cho phép học sinh nhanh chóng và dễ dàng thử nghiệm các thiết kế thay thế. Điều này tạo điều kiện cho việc suy nghĩ về các vấn đề về thuật toán và thiết kế hơn là các chi tiết triển khai ở mức độ thấp. Trong phạm vi có thể, ngôn ngữ cũng nên cung cấp sự an toàn cho thử nghiệm. Chúng ta nên ủng hộ các ngôn ngữ bảo vệ khỏi các sự cố bí ẩn do con trỏ hoặc lỗi giới hạn mảng. Học sinh ở cấp độ này chỉ đang học các kỹ thuật để theo dõi và sửa lỗi;

Điều quan trọng nữa là ngôn ngữ hỗ trợ các phương pháp thiết kế hiện đại liên quan đến các kỹ thuật trừu tượng hóa, đóng gói và hướng đối tượng. Mặc dù các thiết kế dựa trên đối tượng có thể được triển khai bằng bất kỳ ngôn ngữ nào, nhưng làm như vậy bằng ngôn ngữ hỗ trợ các đối tượng sẽ trực quan và đơn giản hơn nhiều. Một lần nữa, điều này cho phép khóa học tập trung vào các vấn đề khái niệm cấp cao hơn là các chi tiết triển khai

Cuối cùng, có những cân nhắc thực tế trong việc lựa chọn một ngôn ngữ. Rất mong muốn ngôn ngữ này được phổ biến rộng rãi trên nhiều nền tảng khác nhau. Tương tự như vậy, một ngôn ngữ được sử dụng bởi những người hành nghề bên ngoài học viện sẽ thích hợp hơn một ngôn ngữ ``chỉ dành cho việc giảng dạy'', miễn là nó đáp ứng các tiêu chí khác được thảo luận ở trên. Dạy ngôn ngữ X đơn giản vì nó là ngôn ngữ được sử dụng phổ biến nên bản thân nó không phải là một cân nhắc quan trọng. Học sinh của chúng tôi sẽ học và sử dụng nhiều ngôn ngữ trong sự nghiệp của họ. Điều quan trọng trong các khóa học đầu tiên là cung cấp cho họ nền tảng tốt nhất có thể về các nguyên tắc và kỹ thuật cốt lõi sẽ cho phép họ áp dụng và thích ứng với các ngôn ngữ khác nhau mà họ sẽ đối mặt trong ``thế giới thực. ''

3 Lợi thế của Python

3. 1 Trường hợp ngôn ngữ kịch bản

Ousterhout (1998) đưa ra sự khác biệt giữa các ngôn ngữ lập trình hệ thống (e. g. C, C++, Pascal, Ada, Java) và các ngôn ngữ kịch bản (e. g. Perl, Tcl, Python, Rexx, Visual Basic). Cái trước được nhập tĩnh, thường được biên dịch và thể hiện sự trừu tượng khiêm tốn từ máy bên dưới. Cái sau được gõ động, thường được giải thích và ở mức rất cao. Ngôn ngữ kịch bản thường được mô tả là ``ngôn ngữ keo dính'' để kết nối các thành phần độc lập vào các ứng dụng quy mô lớn hoặc làm công cụ tạo mẫu để phát triển ứng dụng nhanh chóng. Tuy nhiên, như Ousterhout (1998, 23) chỉ ra
một số xu hướng gần đây, chẳng hạn như máy nhanh hơn, ngôn ngữ kịch bản tốt hơn, tầm quan trọng ngày càng tăng của giao diện người dùng đồ họa và kiến ​​trúc thành phần, và sự phát triển của Internet, đã làm tăng đáng kể khả năng ứng dụng của ngôn ngữ kịch bản. Những xu hướng này sẽ tiếp tục trong thập kỷ tới với ngày càng nhiều ứng dụng mới được viết hoàn toàn bằng ngôn ngữ kịch bản và ngôn ngữ lập trình hệ thống được sử dụng chủ yếu để tạo các thành phần

Theo truyền thống, các chương trình khoa học máy tính đã nhấn mạnh ngôn ngữ lập trình hệ thống hơn ngôn ngữ kịch bản. Tuy nhiên, các ngôn ngữ kịch bản dường như mang lại một số lợi ích, đặc biệt đối với trình tự lập trình giới thiệu. Ngôn ngữ kịch bản thường có cú pháp và ngữ nghĩa đơn giản hơn ngôn ngữ hệ thống. Do tính năng nhập và giải thích động nên chúng rất linh hoạt và khuyến khích thử nghiệm. Bản chất cấp cao cho phép sinh viên xây dựng các dự án phức tạp và thú vị hơn với ít nỗ lực thực hiện hơn

Có lẽ, sự thiếu quan tâm đến ngôn ngữ kịch bản xuất phát từ nhận thức rằng chúng là ngôn ngữ ``đồ chơi'' và không phù hợp với lập trình mục đích chung. Trong khi điều đó có thể đúng với các ngôn ngữ kịch bản đầu tiên (e. g. tập lệnh shell Unix), điều này chắc chắn không đúng với các biến thể hiện đại

3. 2 Một chút trăn trở

Trong số các ngôn ngữ kịch bản phổ biến khác nhau, Python có lẽ gần giống nhất với các ngôn ngữ hệ thống truyền thống (Laird & Soraiz, 1998b). Nó cũng được cho là có chòm sao tính năng tốt nhất để giới thiệu nó như một ngôn ngữ lập trình đầu tiên. Mục đích của bài viết này không phải là hướng dẫn Python; . ([chú thích cuối trang] Có thể tìm thấy nhiều tài nguyên Python tốt trên Internet tại http. //www. con trăn. tổ chức. ). Thay vào đó, tôi sẽ tập trung vào các tính năng của Python khiến nó trở thành một lựa chọn đặc biệt tốt trong số các ngôn ngữ kịch bản với tư cách là ngôn ngữ lập trình máy tính đầu tiên. Trong quá trình thảo luận, tôi sẽ so sánh Python với C++, ngôn ngữ đầu tiên phổ biến nhất hiện nay và Java, ngôn ngữ thường được liệt kê là `` đang xem xét. (McCauley và Manaris, 1998)''

3. 2. 1 Python rất đơn giản

Nói chung, các ngôn ngữ kịch bản đơn giản hơn nhiều so với các ngôn ngữ hệ thống như C++ và Java (Laird & Soraiz, 1998b). Python có cú pháp đơn giản, thông thường. Các câu lệnh được kết thúc ở cuối dòng và cấu trúc khối được biểu thị bằng dấu thụt đầu dòng. Các chương trình Python trông giống như mã giả thực thi. Điều này giúp loại bỏ một loạt lỗi rắc rối cho những người mới bắt đầu lập trình, đặc biệt là vị trí của dấu chấm phẩy, dấu ngoặc và thụt đầu dòng. Ví dụ, một lỗi phổ biến trong C++ và Java là không thể đặt một khối trong dấu ngoặc nhọn như.
if (x < 0)
   cout << "x was negative";
   x = -x;

Trong Python, mã tương ứng thực thi như mong đợi, vì chính vết lõm xác định khối

if x < 0:
    print "x was negative"
    x = -x

Python hỗ trợ sử dụng hàm và lớp nhưng không bắt buộc. Các chương trình đơn giản thực sự đơn giản. Ví dụ, hãy xem xét chương trình ``Xin chào thế giới'' phổ biến trong Python

print "Hello World!"

C++ yêu cầu chương trình này phải được bao bọc trong một hàm và trước một chỉ thị tiền xử lý

#include  
int main()
{  
   cout << "Hello World!"; 
}

Trong Java, tình hình thậm chí còn tồi tệ hơn, vì tất cả mã phải nằm trong một lớp

public class helloWorld
{  
   public static void main(String [] args)
   { 
     System.out.println("Hello World!");
   }
}

Về mặt ngữ nghĩa, Python cũng đơn giản. Python được gõ động nên không cần khai báo biến. Điều này làm giảm số lượng mã mà sinh viên phải viết và cũng loại bỏ các lỗi phổ biến do hiểu sai sự khác biệt tinh tế của khai báo, định nghĩa và sử dụng. Ví dụ, sinh viên học C++ và Java thường ``vô tình'' khai báo lại các biến mà họ thực sự chỉ muốn sử dụng chúng (nhập int count = 0; khi chúng có nghĩa là count = 0). Những sai lầm như vậy có thể khó theo dõi

Python có một bộ cấu trúc điều khiển đơn giản tối thiểu nhưng đầy đủ. một cấu trúc lựa chọn (if-elif-else), một vòng lặp xác định (for) và một vòng lặp không xác định (while). Python cũng có một cơ chế xử lý ngoại lệ hiện đại tương tự như trong C++ và Java. Tuy nhiên, không giống như Java, bạn không cần phải hiểu cơ chế ngoại lệ để viết các chương trình đơn giản. Từ góc độ sư phạm, vòng lặp for của Python mang tính minh họa. Nó cho phép một biến điều khiển nhận các giá trị liên tiếp theo trình tự. Nó có thể được sử dụng để lặp qua bất kỳ chuỗi nào, chẳng hạn như danh sách (mảng) hoặc chuỗi. Ví dụ: các mục trong danh sách có thể được in như sau

for item in List:
    print item 

Phép toán phạm vi tạo ra một dãy số trong một phạm vi nhất định. Ví dụ: phạm vi (5) tạo danh sách [0,1,2,3,4]. Điều này có thể được sử dụng để cung cấp các vòng lặp được điều khiển bằng số. Mã trước đó có thể đã được viết (ít rõ ràng hơn) là

for i in range(len(List)):
    print List[i]
Vòng lặp for đơn giản và an toàn, cho phép nó được giới thiệu từ rất sớm mà không sợ vòng lặp vô hạn

Python có một mô hình dữ liệu thống nhất đơn giản. Các biến luôn là tham chiếu đến các giá trị (đối tượng) được cấp phát trong heap. Mô hình nhất quán, tránh nhầm lẫn giữa heap với biến tự động trong C++ hoặc kiểu nguyên thủy với kiểu đối tượng trong Java. Cả hai ngôn ngữ này đều yêu cầu dạy nhiều mô hình phân bổ để thực hiện các chương trình tương đối đơn giản

Tương tự, Python chỉ có một cơ chế truyền tham số duy nhất (theo giá trị). Truyền tham số chỉ đơn giản là gán tham số thực tế cho tham số chính thức tại thời điểm gọi. Khi học sinh hiểu mô hình chuyển nhượng đơn giản, họ sẽ được truyền tham số miễn phí

3. 2. 2 Python an toàn

Python cung cấp đầy đủ tính năng kiểm tra kiểu thời gian chạy động và kiểm tra giới hạn trên các chỉ số mảng. Python sử dụng bộ sưu tập rác nên không có vấn đề gì với con trỏ lơ lửng hoặc rò rỉ bộ nhớ. Mã người dùng trong Python không thể tạo ra vi phạm phân đoạn. Về mặt này, Python tương tự như Java và cả hai đều an toàn hơn nhiều so với C++

3. 2. 3 Python hỗ trợ lập trình hướng đối tượng

Mặc dù người ta không phải sử dụng các lớp để viết chương trình Python, nhưng Python hỗ trợ lập trình hướng đối tượng thông qua cơ chế lớp tương tự như cơ chế được cung cấp bởi C ++ và Java. Mô hình lớp của Python là sự đơn giản hóa của mô hình C++ và hỗ trợ đa kế thừa. Vì Python được gõ động, nên không cần các lớp trừu tượng như C++ hoặc cơ chế giao diện của Java. Về mặt này, Python thực sự gần với mô hình đối tượng thuần túy do Smalltalk cung cấp

Một điểm yếu của Python từ góc độ phát triển hệ thống là tính đóng gói chỉ được thực thi thông qua quy ước. Không có cơ chế để chỉ định rằng các thành viên lớp là riêng tư. Về mặt sư phạm, đây dường như không phải là một điểm yếu lớn, vì vẫn có thể dạy các nguyên tắc ẩn dữ liệu; . Ngôn ngữ này cung cấp một cơ chế tao nhã nhưng giữ cho nó đơn giản, tránh sự phức tạp của các ``chế độ hiển thị'' khác nhau phải được thảo luận trong C++ hoặc Java

Mô hình gõ động của Python đặc biệt thuận tiện cho việc thảo luận về các lớp vùng chứa trong khóa học cấu trúc dữ liệu. Ví dụ, một lớp ngăn xếp có thể được sử dụng để lưu trữ bất kỳ loại đối tượng nào. Nó có thể là một ngăn xếp int, ngăn xếp float, ngăn xếp chuỗi hoặc hỗn hợp các loại. Điều này được thực hiện mà không cần phải giới thiệu chung chung (mẫu) hoặc thực hiện truyền kiểu động. Hình 1 cho thấy một định nghĩa ví dụ về một lớp ngăn xếp giới hạn đơn giản


class Stack:   
   def __init__(self,size):
       self.data = [None]*size
       self.size = 0

   def push(self,item):
      self.data[self.size] = item
      self.size = self.size + 1    

   def pop(self):
      self.size = self.size - 1
      return self.data[self.size]    

   def is_empty(self):
      return self.size == 0

   def is_full(self):     
      return self.size == len(self.data)
Hình 1. ngăn xếp. py--một ngăn xếp giới hạn đơn giản

Python cũng cung cấp một hệ thống mô-đun sạch sẽ tự động tải các tệp trong thời gian chạy tương tự như Java (trừ các hạn chế tổ chức gói cồng kềnh). Điều này cho phép dễ dàng quản lý các dự án mô-đun (Laird & Soraiz, 1998a) mà không cần các tệp tiêu đề và chỉ thị tiền xử lý của C++. Việc triển khai ngăn xếp có thể được sử dụng thông qua câu lệnh nhập

________số 8

Có thể thay thế một triển khai khác bằng cách thay đổi tên mô-đun trong câu lệnh nhập

3. 2. 4 Python rất thú vị

Sự đơn giản của Python khiến nó dễ học. Ngoài cấu trúc dữ liệu danh sách (mảng động), Python cung cấp bộ dữ liệu (danh sách bất biến) và từ điển (bảng băm). Cùng với cơ chế lớp, chúng có thể được sử dụng để nhanh chóng xây dựng các cấu trúc dữ liệu phức tạp cho các dự án thú vị. Việc không khai báo kiểu làm cho ít mã hơn và lập trình linh hoạt hơn. Ngoài ra còn có một thư viện khổng lồ gồm các mô-đun tiêu chuẩn và đóng góp cung cấp các thành phần để lập trình GUI, ứng dụng máy khách-máy chủ, trình xem html, cơ sở dữ liệu, hoạt ảnh, v.v. Sự phổ biến ngày càng tăng của các ngôn ngữ kịch bản trực tiếp là do các ứng dụng tinh vi có thể được xây dựng dễ dàng bằng cách kết hợp các thành phần có sẵn. Các dự án thú vị có thể được phát triển chỉ với một phần mã được yêu cầu trong ngôn ngữ hệ thống. Nếu chúng ta nghiêm túc về việc thiết kế các khóa học giới thiệu hấp dẫn, thì Python có vẻ là một lựa chọn tự nhiên

3. 2. 5 Python là thực tế

Các ngôn ngữ chữ viết nói chung đang trở nên phổ biến ([chú thích] Xem, ví dụ, số ra tháng 2 năm 1998 của Dr. Tạp chí Dobbs, một phiên bản đặc biệt có các ngôn ngữ kịch bản. ). Theo một số tài khoản, nhiều phần mềm được viết bằng ngôn ngữ tập lệnh hơn là bằng ngôn ngữ hệ thống truyền thống hơn. Mặc dù Python có phần mơ hồ hơn so với những người anh em họ của nó (Perl, Tcl, Visual Basic), nhưng nó là một ngôn ngữ trưởng thành và được sử dụng rộng rãi trong công nghiệp (Laird & Soraiz, 1998a). Python có sẵn cho tất cả các nền tảng chính (Windows, MacOS, Linux, Unix, BeOS, Java). Và nó hoàn toàn miễn phí

4 Một số trở ngại (Có thật và tưởng tượng)

Với những lợi thế của việc sử dụng ngôn ngữ kịch bản như Python cho các lớp khoa học máy tính nhập môn, câu hỏi còn tồn tại là tại sao không phải tất cả mọi người (bất kỳ ai) đều làm điều đó? . Trong phần này, tôi thảo luận về một số phản đối tiêu biểu

4. 1 Thiếu kiểm tra thời gian biên dịch

Một số nhà giáo dục phản đối các ngôn ngữ động vì chúng thiếu kiểm tra thời gian biên dịch, đặc biệt là kiểm tra kiểu. Tôi đã từng nghĩ rằng gõ tĩnh mạnh là điều cần thiết cho ngôn ngữ đầu tiên. Lý thuyết của tôi là trình biên dịch nên bắt càng nhiều lỗi càng tốt cho sinh viên. Tất cả chúng ta đều biết sự khôn ngoan trong phát triển phần mềm rằng các lỗi sẽ dễ sửa hơn khi chúng được phát hiện sớm hơn.

Kinh nghiệm giảng dạy các ngôn ngữ như Pascal, C++ và Java đã thuyết phục tôi rằng những lợi ích được cho là của việc kiểm tra lỗi thời gian biên dịch đối với các lập trình viên mới vào nghề là viển vông. Đầu tiên, phần lớn các lỗi được phát hiện bởi trình biên dịch là hoàn toàn dành cho người đi bộ (e. g. sự thiếu phổ biến ";"). Một ngôn ngữ như Python loại bỏ nhiều lỗi phổ biến này thông qua một cú pháp đơn giản hơn. Hơn nữa, hầu hết các lỗi cú pháp thuần túy còn lại cũng sẽ được báo cáo ngay lập tức bởi trình thông dịch Python, trình thông dịch này sẽ phân tích cú pháp của chương trình khi tải. Thứ hai, có rất ít lợi thế trong việc phát hiện các lỗi tinh vi hơn (e. g. loại không tương thích) tại thời điểm biên dịch. Một lỗi loại phổ biến là do sự không phù hợp giữa khai báo và sử dụng. Nhiều lỗi trong số này chỉ đơn giản là lỗi trong khai báo. Trong một ngôn ngữ không có khai báo, những lỗi này không xảy ra. Khi lỗi là một lỗi thực sự trong cách sử dụng một loại, lỗi sẽ vẫn được bắt gặp trong ngôn ngữ được nhập động. Sự khác biệt là nó sẽ được bắt và chẩn đoán trong thời gian chạy. Đối với các loại chương trình thường được viết trong hai lớp CS đầu tiên, việc kiểm tra thời gian biên dịch không có nhiều lợi thế. Tính đơn giản của chu trình diễn giải chỉnh sửa vượt xa bất kỳ lợi ích nào của việc tìm ra nhiều lỗi tại thời điểm biên dịch

Kiểm tra thời gian biên dịch thực sự có thể gây bất lợi cho một số sinh viên theo một số cách. Đầu tiên, nó làm mất tinh thần. Học sinh phải có một chương trình hoàn chỉnh đúng cú pháp trước khi họ nhận được bất kỳ kết quả nào. Biên dịch một chương trình và nhìn chằm chằm vào một màn hình đầy những tin nhắn cằn nhằn là một hoạt động buồn tẻ và bực bội. Với một ngôn ngữ được thông dịch, ít nhất cũng có điều gì đó xảy ra; . Học sinh thấy chương trình đang hoạt động (một phần) và chỉ có một lỗi cần sửa tại một thời điểm. Mỗi lần sửa mang lại nhiều tiến bộ hơn. Đây là một tình huống đáng khích lệ hơn nhiều

Nhược điểm thứ hai của việc kiểm tra thời gian biên dịch mở rộng là nó mang lại cho sinh viên ảo tưởng về sự thấu đáo. Họ tin rằng một khi chương trình được biên dịch, nó phải khá chính xác. Một triệu chứng của điều này là thử nghiệm không đầy đủ. Một vấn đề khác là nó trì hoãn việc phát hiện lỗi thiết kế. Theo kinh nghiệm của tôi, không có gì lạ khi sinh viên đầu tư thời gian đáng kể vào một chương trình và cảm thấy họ gần như đã hoàn thành chỉ vì có một lỗi nhỏ mà họ không thể tìm ra. Chỉ hóa ra một lỗi nhỏ vẫn là lỗi biên dịch. Còn lâu mới ``sắp hoàn thành'', bài tập sẽ đến hạn trong vài giờ nữa và họ thậm chí còn chưa biên dịch được chương trình. Họ chưa có cơ hội phát hiện ra những sai sót lớn trong logic của giải pháp của họ. Trong một ngôn ngữ được giải thích, việc tìm lỗi đi đôi với kiểm tra;

4. 2 ngôn ngữ kịch bản quá kém hiệu quả

Đúng là ngôn ngữ thông dịch sẽ chậm hơn (thường là 10 lần) so với ngôn ngữ biên dịch. Nhiều ngôn ngữ kịch bản ban đầu thậm chí còn tệ hơn nhiều so với điều này. Tuy nhiên, một ngôn ngữ kịch bản hiện đại như Python, Perl hoặc Tcl đủ nhanh để xây dựng các ứng dụng chính. Ví dụ: cả Python và Tcl đều được sử dụng để triển khai các trình duyệt web đồ họa đầy đủ tính năng. Chắc chắn đối với các loại chương trình được phát triển trong CS1 và CS2, ngôn ngữ kịch bản, thậm chí chạy trên phần cứng khiêm tốn, là quá đủ

Trong mọi trường hợp, mối quan tâm này đối với hiệu suất thực thi bị đặt nhầm chỗ. Lập trình viên mới bắt đầu thường không viết mã sản xuất. Các chương trình của họ thường không có hạn chế về thời gian và sẽ chỉ chạy một vài lần. Mối quan tâm hiệu quả thực sự là lượng thời gian dành cho việc phát triển chương trình. Đây là nơi ngôn ngữ kịch bản tỏa sáng. Chu trình biên tập/giải thích nhanh, không cần khai báo và bản chất cấp cao của ngôn ngữ kịch bản khiến chúng trở thành một công cụ hoàn hảo cho môi trường này

4. 3 Sinh Viên Cần Học Một Ngôn Ngữ Hệ Thống

Đúng là không sinh viên chuyên ngành khoa học máy tính nào tốt nghiệp mà không học ít nhất một ngôn ngữ lập trình hệ thống như C++, Java hay Ada. Trên thực tế, sẽ rất tốt nếu học nhiều hơn một. Ngôn ngữ kịch bản không thay thế ngôn ngữ hệ thống; . Ngày càng có nhiều hệ thống phần mềm được xây dựng từ các thành phần được lập trình bằng ngôn ngữ hệ thống và được dán lại với nhau bằng ngôn ngữ kịch bản. Do đó, cũng đúng là học sinh cũng nên học một ngôn ngữ kịch bản. Bằng cách này, họ được trang bị một bộ công cụ để họ có thể áp dụng công cụ phù hợp nhất cho một nhiệm vụ nhất định

Sau đó, câu hỏi trở thành, ngôn ngữ nào sẽ là ngôn ngữ của (các) lớp đầu tiên? . Lập luận này làm cho nó ngược lại. Các lớp học đầu tiên không phải là về ngôn ngữ, mà là về khoa học máy tính và về cơ bản là thiết kế. Cố gắng dạy một ngôn ngữ phức tạp vốn đã làm giảm mục tiêu đó, vì học sinh phải dành nhiều thời gian hơn để nắm vững ngôn ngữ và do đó, ít thời gian hơn để nắm vững các tài liệu khác. Đây là lý do tại sao một số nhà giáo dục xem Java như một giải pháp thay thế đơn giản hơn cho C++, nhưng ngay cả Java cũng rất phức tạp so với Python

Một cách tiếp cận hợp lý hơn là dạy thiết kế trước, bắt đầu học sinh với một ngôn ngữ đơn giản nhưng mạnh mẽ. Với sự hiểu biết vững chắc về lập trình và thiết kế, việc hiểu các khái niệm như gõ tĩnh, khả năng hiển thị, tổng quát và đa hình sẽ dễ dàng hơn nhiều. Như một thử nghiệm suy nghĩ, hãy tưởng tượng thực sự giải thích ý nghĩa của từng phần của chương trình Java helloWorld cho một lập trình viên mới làm quen. Hãy tưởng tượng việc giải thích public, class, static, void và String [] cho một sinh viên đã hiểu các hàm, lớp, biến đối tượng, biến lớp, kiểu dữ liệu và mảng sẽ dễ dàng hơn biết bao nhiêu. Các cấu trúc phức tạp hơn của ngôn ngữ hệ thống (e. g. Mẫu C++, phương thức ảo, diễn viên động) thực sự là cơ chế để đạt được một số tính linh hoạt được cung cấp bởi ngôn ngữ động bên trong khung được gõ tĩnh. Tại sao không dạy các khái niệm trước tiên bằng một ngôn ngữ không đòi hỏi sự phức tạp như vậy để diễn đạt chúng?

4. 4 Python không quen thuộc

Một số giảng viên có thể phản đối Python là ngôn ngữ đầu tiên vì nó không quen thuộc. Tuy nhiên, các ngôn ngữ kịch bản rất đơn giản và bất kỳ ai đủ điều kiện dạy khoa học máy tính đều có thể học Python trong vài ngày, nếu không muốn nói là vài giờ. Trên thực tế, tôi muốn nói rằng sau một vài ngày chơi với Python, nhiều giảng viên hiện đang dạy C++ sẽ hiểu Python hơn. C ++ đã phát triển trong quá trình tiêu chuẩn hóa và phần lớn những gì người ta thấy trong sách giáo khoa đã lỗi thời. Các chuyên gia thực thụ về C++ hiện đại tương đối hiếm

4. 5 Học sinh của chúng tôi muốn Ngôn ngữ X

Học sinh (và phụ huynh và nhà tuyển dụng) có định kiến ​​về những gì nên được dạy trong chương trình giảng dạy. Tuy nhiên, không ai nên tranh luận rằng việc có được nền tảng vững chắc nhất có thể về lập trình và thiết kế không phải là lợi ích tốt nhất của họ. Như đã thảo luận ở trên, bắt đầu với một ngôn ngữ kịch bản không có khả năng làm chậm tiến độ của học sinh trong việc học ngôn ngữ X (bất kể X là gì). Thay vào đó, nó có khả năng giúp họ trở thành những lập trình viên giỏi hơn trong bất kỳ (các) ngôn ngữ nào mà họ sử dụng. Khi tôi giới thiệu Python ở các lớp cấp cao hơn, phản ứng gần như phổ biến là ``Tại sao chúng ta không sử dụng nó ngay từ đầu?''

4. 6 Không có sách giáo khoa

Một khó khăn lớn trong việc cố gắng dạy một ngôn ngữ không chuẩn theo trình tự giới thiệu là thiếu sự hỗ trợ của sách giáo khoa. Một tùy chọn có thể là sử dụng một cuốn sách không có ngôn ngữ và phát triển các phòng thí nghiệm hỗ trợ bằng cách sử dụng một trong các tài liệu tham khảo Python có sẵn. Điều thực sự cần thiết là một số người tiên phong dạy các lớp nhập môn sử dụng ngôn ngữ chữ viết và phát triển các ghi chú thích hợp có thể trở thành sách giáo khoa. Nhiều nhà giáo dục đã lao vào Java trước khi có văn bản;

Bài viết này là lời cảnh tỉnh cho những ai đang cân nhắc việc chuyển sang Java. Nếu bạn có thể chuyển đổi ngôn ngữ, hãy xem xét cẩn thận động cơ chuyển đổi của bạn. Các cân nhắc về mặt sư phạm tranh luận về việc chuyển từ ngôn ngữ hệ thống sang ngôn ngữ kịch bản và Python là một lựa chọn rất tốt. Điều cần thiết là một vài linh hồn mạnh mẽ để lao vào Python và phát triển các vật liệu thích hợp. Có lẽ một số tác giả hiện tại cũng có thể bị thuyết phục để phát triển các phiên bản Python của các văn bản phổ biến

4. 7 Đề án thì sao?

Đối với những người đã sử dụng Scheme trong lớp nhập môn, việc gọi một ngôn ngữ đầu tiên đơn giản không có gì mới. Lược đồ có nhiều đặc điểm chung với các ngôn ngữ kịch bản ở chỗ nó nhỏ, năng động và tương tác. (Trong thực tế, nó thường được sử dụng như một ngôn ngữ kịch bản. ) Lược đồ là một lựa chọn tốt cho ngôn ngữ đầu tiên vì nó đơn giản và mạnh mẽ. Đề án cho phép thảo luận về các mô hình lập trình khác nhau và có một số sách giáo khoa rất hay về CS1 sử dụng Đề án. Nó có vẻ là một sự lựa chọn lý tưởng

Điểm yếu của Đề án là nó được coi là một ngôn ngữ bên lề hoàn toàn khác với các ngôn ngữ hệ thống được sử dụng ở những nơi khác trong chương trình giảng dạy. Điều này đã hạn chế sự phổ biến của nó trong CS1. Python cung cấp nhiều ưu điểm của Scheme trong khi vẫn tương tự như các ngôn ngữ như C++, Java và Ada, do đó dễ dàng chuyển đổi sang các ngôn ngữ đó. Đối với những người muốn khám phá nhiều mô hình lập trình trong các khóa học đầu tiên, Python có hỗ trợ cho kiểu chức năng bao gồm các hàm bậc nhất, bản đồ, áp dụng, lambda và bao đóng

5. Kết Luận

Sự xuất hiện của các ngôn ngữ kịch bản như Python, Tcl và Perl như những công cụ chính trong phát triển phần mềm thể hiện một sự thay đổi có khả năng mang tính cách mạng trong lập trình máy tính. Hiện tại, ngôn ngữ kịch bản ít được trình bày trong chương trình giảng dạy khoa học máy tính. Điều này thật đáng ngạc nhiên, vì từ quan điểm sư phạm, các ngôn ngữ kịch bản có vẻ phù hợp lý tưởng cho kiểu lập trình thường được thực hiện trong các lớp nhập môn

Một trong những nguyên tắc chính mà chúng tôi cố gắng truyền cho học sinh của mình là ý tưởng sử dụng công cụ thích hợp cho một công việc nhất định. Nếu một khách hàng đến gặp tôi và gợi ý rằng cô ấy cần một chương trình được viết trong một khung thời gian rất ngắn, rằng chương trình đó không bị hạn chế về thời gian hoặc bộ nhớ, và sau khi hoàn thành, nó sẽ chỉ chạy một vài lần, tôi sẽ ngay lập tức đề xuất một kịch bản. . Đây chính xác là những điều kiện theo đó việc lập trình diễn ra trong hầu hết các lớp CS1 và CS2. Với sự tồn tại của các ngôn ngữ kịch bản như Python cũng hỗ trợ tốt cho thiết kế chương trình hướng đối tượng và mô-đun, không có lý do chính đáng nào để không sử dụng chúng. Ngôn ngữ kịch bản là công cụ thích hợp nhất cho các khóa học giới thiệu của chúng tôi. Với sự thiếu đồng thuận hiện tại về một ngôn ngữ đầu tiên duy nhất, có vẻ như đây là thời điểm lý tưởng để bắt đầu chuyển sang ngôn ngữ kịch bản. Cân nhắc sử dụng Python trong các lớp giới thiệu của bạn

Người giới thiệu

Laird, C. , Soraiz, K. , (1998). Bắt đầu với Python, SunWorld Online, Tháng 2, http. //www. mặt trời. com/sunworldonline/swol-02-1998/swol-02-python. html

Laird, C. , Soraiz, K. , (1998). Nắm vững các tập lệnh, Byte, tháng 6, trang. 89-96

Lutz, M. , (1996). Lập trình Python, O'Reilly & Associates, Inc

McCauley, R. và Manaris, B. , (1998). Chương trình Khoa học Máy tính. Họ trông như thế nào? . 15-19

Ousterhout, J. , (1998). viết kịch bản. Lập trình cấp độ cao hơn cho thế kỷ 21, Máy tính IEEE, tháng 3

Watters, A. , van Rossum, G. , Ahlstrom, J. , (1996). Lập trình Internet với Python, M & T Books, New York, New York

Python có phải là một ngôn ngữ thú vị không?

Một trong những lợi ích hàng đầu của Python là dễ học và thú vị khi sử dụng . Cú pháp của nó, không giống như hầu hết các ngôn ngữ máy tính, đọc như tiếng Anh, vì vậy nó không gây căng thẳng khi học như các ngôn ngữ lập trình khác.

Ngôn ngữ lập trình đồ chơi là gì?

Ngôn ngữ đồ chơi đề cập đến bất kỳ ngôn ngữ lập trình máy tính nào không được coi là phù hợp hoặc không có khả năng xây dựng phần mềm và ứng dụng có mục đích chung và cao cấp. It can be any programming language that lacks the advanced features, capabilities, programming constructs and paradigms of high level language.

Python có phải là một ngôn ngữ lười biếng không?

Hầu hết mọi người biết Python là ngôn ngữ có ngữ nghĩa đánh giá háo hức và bạn có thể đã biết rằng Python 3 thay đổi hầu hết các trình vòng lặp tích hợp sẵn như bản đồ và bộ lọc để trở nên lười biếng, but that's not what lazy, non-strict evaluation is about in functional programming context, and also not what we're talking about here.

Python có phải là ngôn ngữ chơi game không?

Khung của Python cung cấp khả năng phát triển trò chơi cho các nền tảng Windows, Mac, Linux, iOS và Android . Ngôn ngữ này thường được sử dụng để tạo các trò chơi điện tử có thể chơi trên PC cũng như thiết bị di động. Thật dễ dàng để tạo toàn bộ trò chơi điện tử bằng một ngôn ngữ này.