Tại sao Python được đề xuất làm ngôn ngữ lập trình cấp nhập cảnh? [đóng cửa]


16

Tôi đã đọc ở đây trên P.SE nhiều câu hỏi hơn trong đó các lập trình viên mới bắt đầu nên chọn Python làm ngôn ngữ lập trình đầu tiên của họ.

Đừng hiểu lầm tôi, tôi thích Python. Tôi rất thích nó! Nhưng triết lý của nó xoay quanh "Tất cả chúng ta đều đồng ý người lớn ở đây".

Từ quan điểm kinh nghiệm / kiến ​​thức, một lập trình viên mới bắt đầu không phải là một người trưởng thành. Điều đó có nghĩa là việc bắn vào chân bạn sẽ dễ dàng hơn và từ bỏ một số thói quen xấu ngay cả khi bạn sống sót sau vết thương.

Tôi nghĩ rằng trong một ngôn ngữ "tĩnh hơn" sẽ khó bắn vào chân mình hơn vì nó sẽ hạn chế hơn.

Quay lại câu hỏi của tôi. Tại sao Python được đề xuất làm ngôn ngữ lập trình cấp nhập cảnh?

Các điểm làm cho nó tốt cho việc dạy một ngôn ngữ lập trình là gì. Hay ... đó là sở thích cá nhân của người cố vấn?


17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot- tốt, C và C ++ được gõ tĩnh và bạn sẽ rất ngạc nhiên, cực kỳ ngạc nhiên khi thấy có bao nhiêu cách khác nhau bạn có thể thổi bay chân mình bằng cách sử dụng chúng ...
Péter Török

@ Péter Török: Vâng, và nó sẽ mất toàn bộ bước chân của bạn (c ++: D). Tôi đã nói "tĩnh hơn" khi cố gắng tránh các cuộc chiến nảy lửa vì một cái gì đó như ... Tôi không biết ... Java?!?! ... mà mọi người dường như ghét vì nó được nghĩ ở trường / trường đại học và mọi người có một số sợ từ nó ...
JohnDoDo

1
Tôi nghĩ C ++ là ngôn ngữ khởi đầu tốt hơn, bởi vì nó đã giúp tôi hiểu rõ hơn về những điều trong các làn đường khác.
systemovich

1
Tôi có thịt bò với python là ngôn ngữ bắt đầu sau khi TAing một lớp lập trình học kỳ đầu tiên sử dụng nó. Các sinh viên không hiểu 'loại' và sự phụ thuộc vào khoảng trắng đã giết chết họ. Họ cũng đã có một thời gian khó hiểu các đối tượng với việc 'tự' tham chiếu doanh nghiệp OO đó. Nó có giá trị nhưng nó chắc chắn cũng có những kẻ gièm pha.
Rig

2
@MahmoudHossam Tôi đồng ý. Tôi chỉ làm nổi bật một số điểm gắn bó từ kinh nghiệm của tôi. Java, C #, Lisp, v.v ... đều có vấn đề của họ. Đó chỉ là những vấn đề chính mà tôi gặp phải khi dạy python cho các lập trình viên lần đầu tiên.
Giàn khoan

Câu trả lời:


30

IMO, những điểm nổi bật nhất nói về Python như một ngôn ngữ cấp nhập cảnh là:

  • nó có một đường cong học tập nông cạn - đi từ không có gì đến "Hello world" nhanh hơn nhiều so với hầu hết các ngôn ngữ khác
  • nó là trực quan - cú pháp được thiết kế theo nguyên tắc ít gây ngạc nhiên nhất và nó rất nhất quán về tổng thể (thật không may, các thư viện tiêu chuẩn không luôn tuân theo tính nhất quán này)
  • nó đòi hỏi rất ít nồi hơi : một "Hello world" điển hình là một dòng mã và các chương trình đơn giản có thể được viết mà không có bất kỳ tiếng ồn nền nào cần được giải thích (như từ khóa khai báo hàm, câu lệnh nhập, cấu trúc lớp, chỉ thị tiền xử lý, Vân vân.)
  • có những công cụ tuyệt vời, đơn giản để làm việc với mã python, đặc biệt là trình thông dịch tương tác; bạn không cần phải học một hệ thống xây dựng, IDE, trình soạn thảo văn bản đặc biệt hoặc bất cứ thứ gì khác để bắt đầu sử dụng python - một dấu nhắc lệnh, trình soạn thảo tương tác và trình soạn thảo văn bản đơn giản, là tất cả những gì bạn cần
  • nó sử dụng kiểu gõ động , nhưng không giống như nhiều ngôn ngữ gõ động khác, các kiểu trong suốt và các cạm bẫy liên quan đến kiểu rất hiếm

Chỉ muốn nhấn mạnh tính trực giác của ngôn ngữ. Tôi đã thấy những người có 0 kinh nghiệm lập trình nhanh chóng học Python. Điều này phần lớn là do cú pháp / ngữ pháp rất gần với tiếng Anh nói.
Stephen Gross

12
Ở điểm cuối cùng của bạn: mọi người thường trộn lẫn kiểu gõ dinamic với kiểu gõ yếu. Python được gõ động (các loại được liên kết với các giá trị thay vì các biến) nhưng cũng được gõ mạnh (vì vậy các chương trình bị sập thay vì âm thầm nuốt lỗi chuyển đổi)
hugomg

@missingo Tôi thứ hai - Mắt đại bàng bạn có;)
yati sagade

@missingno: Tôi biết sự khác biệt. Một ví dụ về các loại không trong suốt là các khóa mảng của PHP - các mảng hoạt động khác nhau đối với các khóa số nguyên so với bất kỳ loại nào khác; nếu bạn thêm hai số nguyên đủ lớn, bạn có thể kết thúc bằng một số float. Và đó chỉ là một ví dụ - đặc biệt là PHP và javascript (hai ngôn ngữ động phổ biến nhất trong phát triển web) có đầy đủ các trường hợp gõ khó hiểu.
tdammers

Đánh giá từ nhận xét của bạn, bởi "các loại là minh bạch", ý bạn là các quy tắc quản lý các loại có dễ hiểu không? Chính xác thì bạn định nói gì?
phant0m

8

Thế giới xin chào trong trăn:

 print "Hi there"

xin chào thế giới trong Java:

 class HelloWorldApp {
  public static void main(String[] args) {
    System.out.println("Hello World!"); // Display the string.
    }
  }

xin chào thế giới trong C:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

Ném vào việc phải nói về việc biên dịch cho hai người kia, và python thì đơn giản hơn nhiều. Tôi chỉ phải nói về ý tưởng duy nhất mà tôi quan tâm, tất cả các máy móc làm phức tạp vấn đề chỉ biến mất trong con trăn. Tôi có thể đợi cho đến khi họ sẵn sàng nói về các mô-đun, không cần phải vội vàng để có được stdio.h cho các chương trình đơn giản. Tôi có thể đợi cho đến khi họ sẵn sàng cho các chủ đề như các lớp học không cần phải gấp rút cho các chương trình đầu tiên của họ. Nó có REPL để đánh lừa xung quanh dòng lệnh. Python rất giỏi trong việc tối thiểu về mặt khái niệm. Đây là một điều tốt vì nó giúp người mới bắt đầu tập trung vào nhiệm vụ trong tầm tay.


15
Bạn đã quên "trả về 0;" tuyên bố trong triển khai C của bạn :) Cảnh báo trình biên dịch!
Stephen Gross

2
Đây là lý do tại sao BASIC tồn tại ở nơi đầu tiên. 10 IN "Xin chào thế giới!" 20 KẾT THÚC Để có thêm tín dụng, chương trình Python không thành công "Đã nói 'Xin chào thế giới!'?" kiểm tra đơn vị :-)
Ross Patterson

3
Tương tự trong F #: printfn "Xin chào thế giới!". Yay, F # là tốt cho người mới bắt đầu!
Den

7

Đó là một quan điểm khác thường.

Điều người lớn đồng ý là một phần rất nhỏ trong triết lý của Python. Nó chắc chắn không "xoay" xung quanh đó. Nó thậm chí không phải là một phần của "Zen of Python" mà bạn nhận được nếu bạn làm import thistrong trình thông dịch.

Những thứ khác, như "rõ ràng là tốt hơn ngầm", "Đơn giản là tốt hơn phức tạp" và "Số lượng khả năng đọc" tập trung hơn nhiều vào Python và cho thấy tại sao Python là ngôn ngữ đầu tiên tốt.

Dù sao, "người lớn đồng ý" thực sự chỉ nói về việc thiếu các đối tượng riêng tư trong Python. Theo ý kiến ​​của tôi, đó là một dấu hiệu khác về lý do tại sao nó tốt cho người mới bắt đầu: bạn không cần phải lo lắng về những thứ như giao diện khi bạn mới bắt đầu.


1
Có, nhưng về những phần "riêng tư" đó, vì bạn có quyền truy cập vào chúng, bạn có thể bị hack một số cách giải quyết / phím tắt xung quanh chúng mà không biết rõ hơn.
JohnDoDo

@JohnDoDo Nó có gì khác biệt nếu trong C # hoặc Java, tôi quyết định chuyển đổi privatecác trường publicthành hack xung quanh? BTW, trong Python, bạn có thể đặt tiền tố thuộc tính bằng dấu gạch dưới để đặt ở chế độ riêng tư (mặc dù không thực sự bị ẩn)
OnesimusUnbound

4

Có hai điểm khác nhau. Khi nuôi dạy một đứa trẻ, bạn có nên đặt chúng vào một bong bóng chỉ có những thứ an toàn trong đó hoặc để chúng chơi trong sân nơi chúng có thể vấp ngã?

Ở trong bong bóng rất hạn chế. Bạn phải viết mã của bạn theo một cách rất cụ thể để nó chạy. Khi mọi người lần đầu tiên bắt đầu, bất cứ điều gì không có ở đó để làm những gì người đó muốn đều bị coi là lãng phí. Điều này cũng có thể dẫn đến "Tôi không biết tại sao lại có ở đó, nhưng ai đó nói với tôi rằng nó cần thiết."

Trong Python, điều đó không tồn tại. Nếu bạn muốn nói "Xin chào thế giới", bạn chỉ cần print "Hello World". Sử dụng Python làm điểm vào cho phép ai đó bắt đầu chạy và chỉ cần viết mã họ cần để thực hiện điều họ muốn. Một lập trình viên lần đầu tiên không thể hiểu được giá trị của đóng gói trước khi họ hiểu những điều cơ bản của lập trình.

Ngoài ra, trong các chương trình nhỏ, loại an toàn không phải là vấn đề lớn. Bất kỳ mã nào một nhà phát triển bắt đầu viết sẽ nhỏ và chứa. Mãi cho đến khi bạn có một cơ sở mã lớn hơn, với rất nhiều phần bạn sử dụng làm lớp trừu tượng và không chủ động nghĩ đến, khi an toàn kiểu cho thấy lợi ích của việc đảm bảo bạn làm những gì bạn cần. Khi tất cả các mã nằm trong cùng một tệp, sẽ dễ dàng hơn khi chỉ nhìn vào hàm và xem bạn đã làm gì sai.

Lợi ích khác:

  • Rất nhiều thư viện làm nhiều việc
  • Linh hoạt để dạy cả các kỹ thuật lập trình hướng đối tượng và chức năng mà không làm cho nó có vẻ như bị buộc phải phù hợp với ngôn ngữ được thiết kế để làm ngôn ngữ khác.

3
Tương tự truy cập: Dạy con bạn về việc không chơi với lửa. 1) Bạn có thể nói chuyện với anh ta, giải thích lửa là gì và lửa là gì, hiển thị các slide PowerPoint bất cứ điều gì .. hoặc 2) để anh ta chơi với lửa và bị đốt cháy. Phương pháp thứ hai thực sự hiệu quả hơn nhiều. Điều tôi quan tâm là khả năng anh ta có thể đốt cháy nhà hoặc thậm chí thích nó và trở thành một pyromaniac vì không có biện pháp an toàn nào được thực hiện. Một loại tình huống cực đoan nhưng thực sự không thể diễn tả bằng lời.
JohnDoDo

1
@JohnDoDo - Vậy hãy để anh ta bị bỏng ... đó là ngôi trường tốt nhất và ai đã không bị thiêu trong trận đấu khi còn bé? Nó sẽ không giết anh ta ...
Rook

1
@JohnDoDo: Chỉ vì ngôn ngữ cho phép bạn chơi với lửa không có nghĩa là giáo viên không chỉ ra rằng lửa rất nguy hiểm và giải thích một số cách để tránh nó. Tôi nghĩ một điều khác mà bạn đang thiếu là ai đó không bị ràng buộc với ngôn ngữ. Sau khi có được sự hiểu biết cơ bản về lập trình, họ có thể sử dụng một ngôn ngữ khác để học các khái niệm lớn hơn (như không đốt cháy tòa nhà).
unolysampler

3

Python là một ngôn ngữ tuyệt vời cho người mới bắt đầu bởi vì nó làm cho những điều đơn giản trở nên đơn giản trong khi tạo ra đủ những thứ phức tạp đến mức nó không được coi là ngôn ngữ đồ chơi vô dụng và ngay cả các lập trình viên tiên tiến cũng thấy nó là công cụ phù hợp cho một số công việc. Cụ thể, những điều đơn giản bao gồm:

  • Một mức tối thiểu tuyệt đối của mã soạn sẵn cho các chương trình đơn giản.

  • Thu gom rác thải.

  • Gõ động.

  • Cú pháp gọn gàng, đơn giản.

So sánh điều đó với ví dụ Java hoặc C ++ và khó khăn trong việc giải thích tất cả các khái niệm liên quan đến chương trình "Xin chào, thế giới". Những điều phức tạp bao gồm:

  • Hướng nội (Python tương đương với sự phản chiếu).

  • Khỉ vá.

  • Những điều có thể được thực hiện với thư viện tiêu chuẩn khổng lồ.

Điều đó nói rằng, không ai chỉ biết Python là một lập trình viên giỏi bởi vì không ai chỉ biết một ngôn ngữ hoặc một phong cách ngôn ngữ là một lập trình viên giỏi. Bất cứ ai nghiêm túc về lập trình cuối cùng cũng nên học một cái gì đó ở cấp độ thấp hơn, chỉ trong khi anh ấy / cô ấy vẫn đang cố gắng kiểm soát dòng chảy, đệ quy và các điều cơ bản khác.


2

Tôi thấy Python là một lựa chọn tốt. Thông thường đối với lập trình cấp "mục", bạn muốn một cái gì đó đơn giản nhưng hiệu quả. Nhận phản hồi nhanh chóng hỗ trợ cả động lực và tốc độ học tập. Tôi dám nói không phải là học "đúng cách" mà là "bị cuốn hút và yêu lập trình suốt đời". Phần còn lại sẽ đến cùng sau này thông qua kinh nghiệm, giáo dục trung học, bất cứ điều gì.


1

IMHO, dạy mọi người viết mã bằng các ngôn ngữ "an toàn" là một ý tưởng rất tồi. Mọi người cho rằng mọi thứ đều dễ dàng và chỉ nghĩ về việc thêm các lớp và lớp mã. Và mất bất kỳ cơ hội để có thể gỡ lỗi / sửa chữa các vấn đề khi chúng phát sinh.

Lập trình viên giỏi hoàn toàn phải biết C / C ++ hoặc thậm chí lắp ráp. Và suy nghĩ của họ cũng phải đến từ phía đó. Và không - "Ồ, GC, nó thật kỳ diệu (tm), chúng tôi rất tuyệt, và tại sao C ++ không có GC, điều đó thật ngu ngốc." Thái độ.


1

Đối với một lập trình viên mới bắt đầu, thiếu các loại tĩnh là một tính năng, không phải là một lỗi!

Khi học lập trình ngay cả những điều rõ ràng nhất có thể khó hiểu. Các hệ thống loại động rất đơn giản và thoát khỏi các chủ đề cấp bách hơn trong một khóa học giới thiệu, như mô đun hóa, dòng điều khiển, v.v.

Ngoài ra còn có một số lợi thế về khái niệm để gõ động trong môi trường giáo dục:

  1. Các loại được liên kết với các giá trị, không phải các biến. Điều này được cho là trực quan hơn vì nó phản ánh lý do các chương trình thực sự sụp đổ.

  2. Thông báo lỗi là ngay lập tức và cụ thể hơn nhiều. Trong Python bạn nhận được một dấu vết ngăn xếp đáng yêu và một thông báo cho biết những gì thực sự đã sai. Trong một ngôn ngữ gõ tĩnh, bạn nhận được một cảnh báo trình biên dịch nói điều gì sẽ sai.

    Sinh viên làm việc với trình biên dịch chỉ có thể làm việc trên các chương trình họ hiểu đầy đủ, vì sợ họ phải đối mặt với lỗi biên dịch mà họ không thể giải quyết.

  3. Kiểm tra lỗi thời gian chạy cho phép bạn chạy các chương trình không đầy đủ. Điều này cho phép các chương trình gia tăng hơn trong đó trước tiên sinh viên có thể lo lắng về việc bắt đầu chương trình chính xác và chỉ sau đó mới thấy điều gì xảy ra.

  4. Một số khái niệm quan trọng, như đa hình tham số và gõ vịt, miễn phí trong một ngôn ngữ động nhưng yêu cầu các hệ thống loại phức tạp hơn trong một ngôn ngữ tĩnh.

Cuối cùng, trong khi bạn vẫn phải xử lý sự phức tạp tương tự, bạn không nhận được tất cả lợi ích của việc gõ tĩnh khi bắt đầu lập trình:

  • Các chương trình dành cho người mới bắt đầu rất nhỏ và không có nhiều đường dẫn mã (vì vậy bạn không phải lo lắng nhiều về lỗi loại trong các đoạn mã hiếm khi được truy cập)

  • Các chương trình Begginer không sử dụng nhiều giao diện và chức năng cấp cao, do đó cũng không có nhiều thứ để đạt được trong bộ phận "sử dụng hệ thống loại để thiết kế chương trình".


1

Có một cái rất, rất , rất quan trọng về Python đối với những lập trình viên mới bắt đầu mà mọi người dường như đã bỏ qua: Buộc thụt lề hợp lệ.

Giống như một số người bình luận khác, tôi đã dạy người mới bắt đầu trong một vài năm. Thật là phổ biến khi thấy những thứ như thế này:

#include <stdio.h>

int main(char *args[])
                                                                     {
   int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
   printf("%d\n", A);
C = B + A;
      A = B;  B = C;
}
        }

Bây giờ hãy tưởng tượng sự không nhất quán khủng khiếp này trong khoảng một trăm dòng mã. Đối với một số sinh viên, toàn bộ các dự án của họ trông như thế này.

Tôi không biết làm thế nào họ quản lý để làm điều đó, và nó không bao giờ làm phiền họ. Mỗi lần tôi hỏi, câu trả lời của họ là đại loại như "Chà, không thành vấn đề vì trình biên dịch sẽ tìm ra nó." Ngay cả khi tôi chỉ cho họ một lỗi rõ ràng bằng cách sửa lỗi thụt lề, họ vẫn không bao giờ có manh mối.

Trong Python, loại thụt lề này chỉ đơn giản là không hợp lệ. Họ buộc phải sử dụng thứ gì đó ít nhất có thể đọc được, ngay cả khi nó không nhất quán. Nó cho họ một thói quen, hy vọng, sẽ tiếp tục khi cuối cùng họ học một số ngôn ngữ khác.


0

Python là ngôn ngữ đầu tiên tuyệt vời cho hầu hết các lý do đã nêu ở trên. Cụ thể, một yêu cầu của ngôn ngữ đầu tiên là một đường cong học tập nhẹ nhàng, mà Python có. Bạn không cần phải biết tất cả về các lớp, ví dụ, để bắt đầu. Về mặt này, nó giống như Cơ bản mà nhiều người trong chúng ta đã bắt đầu.

Một điều mà chưa được làm nổi bật cho đến nay là nhiều ngôn ngữ có đường cong học tập nhẹ nhàng, nhưng nhanh chóng chạy vào một bức tường gạch khi cố gắng làm những thứ cao cấp hơn. Old-school Basic là một ví dụ tốt về điều này. Với Python, bạn có thể tham gia vào một số nội dung rất tiên tiến trước khi cảm thấy rằng một số ngôn ngữ khác có thể là lựa chọn tốt hơn.

Vào thời điểm đó, một người mới bắt đầu có thể hiểu thêm về các lựa chọn và sự đánh đổi, và sẵn sàng cho C / C ++, Java, Assembler, Prolog, Lisp, v.v. Thật ra, Lisp cũng có thể là một ngôn ngữ tốt !


-1

Vấn đề chính với Python là ngôn ngữ đầu tiên là kiểu gõ động và thiếu khai báo biến. IMHO họ là vấn đề lớn duy nhất với ngôn ngữ.

Việc bổ sung đơn giản một dòng nói rằng tôi sẽ chỉ lưu trữ một chuỗi trong biến foo cho phép lập trình viên, môi trường phát triển, ngôn ngữ (và cho "mã chuyên nghiệp" kẻ ngốc nghèo phải chịu lạnh và hỗ trợ nó sau đó) làm việc cùng nhau. Đối với các nhà phát triển và người mới bắt đầu bình thường, đặc biệt là không có ý nghĩa khi sử dụng một biến cho nhiều loại. Nó khá ổn trong trường hợp hiếm hoi khi sử dụng loại var / object rõ ràng cho phép gõ động.

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.