Tại sao chúng ta phải học lập trình thủ tục trước khi chúng ta học lập trình hướng đối tượng [đã đóng]


10

Bây giờ tôi đang học năm thứ 4 tại một trường đại học CNTT và khi tôi nói chuyện với giáo sư của mình về chủ đề này, anh ấy đã bác bỏ ý kiến ​​của tôi và đưa ra một lời chỉ trích rất nặng nề (ở trường đại học của tôi, chúng tôi đã được dạy C (ANSI) (theo thủ tục Lớp lập trình - năm thứ nhất tại trường đại học) trước C ++ (lớp OOP năm thứ 2) và các lớp khác ...

Nhưng ở tuổi 13, anh trai tôi đã được dạy, bởi tôi, Java trước tiên và không có gì khác. Bây giờ, anh ta có thể làm hầu hết mọi thứ mà một sinh viên năm 2 bình thường có thể làm với Java.

Đối với bạn, tôi muốn biết lý do tại sao bạn nghĩ rằng chúng ta nên được dạy lập trình thủ tục trước tiên.


8
Bởi vì Trình biên dịch không có đối tượng.

9
Giống như tại sao chúng ta nên được dạy cách tính toán hợp lý trước khi học cách sử dụng máy tính.

22
Bởi vì thiết kế hướng đối tượng là thiếu sót. Các chương trình là một tập hợp các hành vi hoạt động trên dữ liệu. Đối tượng thường giới thiệu sự phức tạp không cần thiết. Đọc "Cách thiết kế chương trình: Giới thiệu về lập trình và tính toán".

8
Như một người khác nói, "Đừng đánh lạc hướng các lập trình viên mới với OOP": prog21.dadgum.com/93.html - về cơ bản, tất cả những gì OOP đang có trong cách dạy các lập trình viên mới về các nguyên tắc cơ bản. Bạn đang dạy cho họ hai khái niệm thực sự khó khăn cùng một lúc.
John Ripley

7
@juxstapose - nói lập trình hướng đối tượng giới thiệu sự phức tạp không cần thiết cũng giống như nói rằng chúng ta nên khắc xe từ một khối thép duy nhất. Chỉ là ý kiến ​​của tôi.

Câu trả lời:


23

Tóm tắt nhanh:

  1. Bởi vì trong thế giới thực, sớm hay muộn, bạn phải làm việc với mã thủ tục.

  2. Bởi vì Ngôn ngữ thủ tục có thể hoạt động như một phần mở rộng hoặc giới thiệu về Ngôn ngữ hướng đối tượng, thay vì chỉ là một ngôn ngữ thay thế.

  3. Bổ sung cho câu trả lời 2. Vì OOP phức tạp hơn Lập trình thủ tục, do đó, tốt nhất là học Lập trình thủ tục, trước tiên.

  4. Bởi vì trong thế giới thực, các lập trình viên làm việc cùng và kết hợp một số cách để giải quyết vấn đề, AKA "lập trình đa hướng", không chỉ là một mô hình đơn lẻ.

  5. Hầu hết các ngôn ngữ lập trình là đa ngôn ngữ, ở một mức độ nào đó, thậm chí, nếu các nhà thiết kế hoặc nhà phát triển chung của họ, nói ngược lại.

  6. [MỚI] Bởi vì Lập trình mô đun thường bị lẫn lộn và nhầm lẫn với Lập trình thủ tục, có thể được áp dụng cho OOP. Do đó, câu hỏi có thể được đọc là "Tại sao chúng ta phải học lập trình Modular trước khi chúng ta học lập trình hướng đối tượng"

Mô tả nhàm chán mở rộng:

Điểm 1 rất rõ ràng, không giải thích thêm.

Điểm 2, Lớp học, Kế thừa, Đa hình, Giao diện, v.v ...

Điểm 3, tôi viết mã Pascal theo thủ tục trước khi tôi học Pascal hướng đối tượng, khi tôi đến đó tôi nói: "nhìn này, các lớp giống như các chương trình thủ tục nhỏ ... ... và bạn có thể khiến chúng nói chuyện với nhau, thật tuyệt !!! ".

Tôi đã nghe điều tương tự từ những người đã đi từ đồng bằng C đến C cộng với.

Điểm 4, Hầu hết các lập trình viên kết hợp một số kỹ thuật lập trình hoặc mô hình, hoặc các cách để giải quyết vấn đề. Chức năng, thủ tục, OOP, logic.

Ngay cả Java "Pure OO" cũng không phải là lập trình đối tượng đơn giản như đã nói.

+1 điểm khi nói "Lập trình thủ tục" thay vì "Lập trình có cấu trúc". Hoặc lập trình mô-đun. Đây là những điều quan trọng.

Thay vào đó, nhiều lần các thuật ngữ này được dạy hoàn toàn và được sử dụng thay thế cho nhau, chúng không như vậy. Lập trình có cấu trúc, bao gồm nhiều khái niệm, không chỉ sử dụng các thủ tục và một trong số đó là làm cho chương trình không giống như "Mã Spaghetti".

Hôm nay tôi đã đọc một số chương trình OO "thuần túy" trông giống như "Mã Spaghetti hướng đối tượng", nghĩa là lập trình viên đã sử dụng OOP, nhưng mã của nó trông giống như một mớ hỗn độn.

Nhiều lần, tôi có thể đọc mã OO và nói rằng lập trình viên đã học Lập trình có cấu trúc trước OOP, vì mã này rõ ràng và được sắp xếp.

Và đối với lập trình mô-đun, tôi đã thấy một số ứng dụng. trong C ++ và PHP không sử dụng các mô-đun. *


18

Tôi nghĩ rằng sự tương tự sẽ tương tự như toán học. Trước tiên, bạn cần học một số khái niệm cơ bản (cộng / trừ / ...) sau đó chuyển sang các chủ đề phức tạp hơn (đại số / giải tích). Chương trình thủ tục rất tuyến tính và dễ dàng nắm bắt luồng kiểm soát hơn trong khi bạn học cú pháp. OOP có lẽ được cho là phức tạp hơn, nó xây dựng trên các cấu trúc đơn giản hơn được sử dụng trong các ngôn ngữ thủ tục nhưng trừu tượng hơn và khó hiểu hơn. Bắt đầu với các ngôn ngữ như C cũng đưa bạn đến gần hơn với phần cứng và khiến bạn xử lý các vấn đề về cấp phát bộ nhớ và con trỏ, điều bạn cần hiểu nhưng không thực sự sử dụng được trong các ngôn ngữ như Java / C #. Có một số giá trị thực sự khi được tiếp xúc với điều này ở trường bất kể nó đến trước hay thứ hai.

FWIW, cuối cùng sẽ thay đổi. Khi tôi bắt đầu đi học, chúng tôi đã học bằng Pascal và PL / 1. Chúng tôi đã không đến C cho đến khi lớp ngôn ngữ nâng cao (ngày đó là tôi). Tôi đã không nhận Java cho đến khi tốt nghiệp trường - nó chưa được phát minh!


+1 - loại nghịch lý của ý định ở đó ... "trừu tượng hơn và khó hiểu hơn" :)

10
@Spacemoses - không thực sự, một thứ gì đó càng trừu tượng thì càng dễ thảo luận nhưng càng khó nắm bắt thực tế của những gì đang được thảo luận.

đồng ý, tôi thấy quan điểm của bạn bây giờ
Ses011

12

Lập trình hướng đối tượng là một tập hợp các đoạn thủ tục theo kiểu có tổ chức. Tôi nghĩ rằng bài học bạn đang học là phương pháp hướng đối tượng giúp duy trì tổ chức và khả năng duy trì. Có rất nhiều lập trình viên không thể tạo ra sự khác biệt này và sẽ tuyên bố các chương trình của họ là hướng đối tượng khi chúng mang tính thủ tục hơn.


3
nhưng chức năng + trạng thái = đối tượng
Dan D.

4
Định hướng đối tượng thường làm cho việc bảo trì khó khăn hơn nhiều vì nó làm tăng cơ sở mã. Các hệ thống dựa trên Java là một cơn ác mộng cần duy trì vì mức độ tinh khiết của OO và viêm mẫu thiết kế được tìm thấy trong cộng đồng đó.
bit-twiddler

1
"Các mẫu thiết kế được tìm thấy trong cộng đồng đó" - nghe có vẻ như là một vấn đề cá nhân trong "cộng đồng Java" nếu đó là lập trường của bạn.
Ses011

1
@Dan D: hướng đối tượng không chỉ là kết hợp các chức năng và trạng thái trong một đối tượng ...
Marjan Venema

4
@Spacemoses: Tôi gặp vấn đề với bất kỳ cộng đồng phát triển nào không tuân thủ nguyên tắc KISS. Giải pháp tốt nhất cho một vấn đề thường là giải pháp đơn giản nhất.
bit-twiddler

11

Bạn không.

Chúng tôi đã học lập trình chức năng đầu tiên, với Scheme. Sau đó, chúng tôi chuyển sang thủ tục, rồi OOP, và sau đó lập trình khai báo. Và tin hay không, trong khi tôi đã biết lập trình, tôi nghĩ nó cũng thực sự dễ dàng hơn đối với người khác: bởi vì FP cũng giống như toán học! Vậy là bạn đã biết những điều cơ bản rồi.

Tôi đã tranh luận điều này với bản thân nhiều lần và cuối cùng tôi đã đi đến kết luận rằng nó thực sự phụ thuộc vào mức độ giáo viên của bạn dạy cho bạn các khái niệm.

Không có câu trả lời duy nhất vì:

  • Bắt đầu với một cái gì đó theo thủ tục như C (hoặc thậm chí lắp ráp) có thể là một lựa chọn tốt, bởi vì bạn tìm hiểu cách máy tính thực sự hoạt động

  • Bắt đầu với một cái gì đó Java hướng đối tượng có thể là một lựa chọn tốt, bởi vì nó tương đối dễ học và áp dụng OOP vào cuộc sống thực và bởi vì nó dạy cho bạn về ** hình thành

  • Bắt đầu với lập trình chức năng như Scheme có thể là một lựa chọn tốt vì nó dạy bạn về suy nghĩ trừu tượng hơn (về các chức năng thay vì các biến), điều này cuối cùng giúp bạn trở thành một lập trình viên tốt hơn

Nếu giáo viên của bạn không dạy nó tốt, thì việc bạn bắt đầu với nó không thực sự quan trọng; họ sẽ khá giống nhau.


4
+1 đập vào và tôi không thể tin rằng tôi đã phải cuộn qua rất nhiều câu trả lời kém để tìm thấy nó!
jk.

Tôi thực sự đã gặp khó khăn trong việc tìm kiếm các hàm toán học trong một thời gian vì tôi đã học được một số mã hóa đầu tiên và khái niệm về một hàm 'là' thay vì 'làm mọi thứ' gây trở ngại cho tôi. : 3
StarWeaver

6

Một ngôn ngữ có thể được định hướng đối tượng như C ++, Java hoặc C #. Và bạn có thể bắt đầu với những ngôn ngữ này. Nhưng vấn đề là, ngay cả với các ngôn ngữ OO này, bạn phải học lập trình thủ tục trước, sau đó là OOP. Tôi nghĩ rằng, điều tương tự đã được bạn thực hiện với anh trai của bạn.


3
+1 Chính xác. Mỗi phương pháp OOP là một chương trình thủ tục ngắn. Nếu bạn không biết làm thế nào để kết hợp các mảnh nhỏ (chủng loại, giá trị văn chương, các biến, các nhà khai thác, =chuyển nhượng, if, for, vv) thành từng miếng lớn hơn (phương pháp), làm thế nào bạn có thể đã từng hy vọng hiểu OOP. Như với hầu hết các kỹ năng, việc rất thông minh, có động lực và / hoặc có quyền truy cập vào hướng dẫn từng người một có thể cho phép bạn học nhiều chủ đề liên quan cùng một lúc.
David Harkness

3

Lập trình thủ tục, ít nhất là trong một ngôn ngữ như C, tách lập trình thành một thực tiễn rất đơn giản: thuật toán và cấu trúc dữ liệu, và ở mức độ trừu tượng đó là phương tiện hạnh phúc giữa mã nguồn có thể hiểu được của con người và mã lắp ráp.

Theo cách này, sinh viên có thể học một chút về khoa học (thuật toán, cấu trúc dữ liệu) và một chút kỹ thuật (nguồn-> đối tượng-> biên dịch máy, kiến ​​trúc von-neuman (có khả năng)) cùng một lúc.

OOP, thông qua C ++ / obj-C giới thiệu một mẫu tổ chức mã, đây chỉ là một điều nữa để tìm hiểu. Điều này có thể làm cho việc học các khái niệm trên có phần khó khăn hơn.

OOP thông qua Java (trong số những người khác) thậm chí còn đi xa hơn bằng cách trừu tượng hóa phần cứng và môi trường. Bây giờ sản phẩm cơ bản không phải là mã máy, nhưng một số loại trung gian không tiết lộ cách thức phần cứng cơ bản hoạt động, nhưng hiệu quả là nó cho phép sinh viên tập trung vào các mẫu tổ chức mã.

Cuối cùng, tôi nghĩ rằng đó là một sự đánh đổi giữa việc học cách phần cứng hoạt động hoặc học một mô hình tổ chức mã. Điều quan trọng hơn là tôi không biết. Thế giới thực đòi hỏi kiến ​​thức của cả hai, ít nhất là ở một mức độ nào đó.

Tôi đoán rằng một chương trình đại học bắt đầu với lập trình thủ tục cấp thấp có khả năng tạo ra các nhà khoa học máy tính / kỹ sư máy tính và một chương trình bắt đầu với các khái niệm cấp cao hơn tạo ra các kỹ sư / nhà phát triển / lập trình viên phần mềm.


3

Sự can đảm của các đối tượng OOP được tạo thành từ lập trình thủ tục.

Nếu bạn không thể thực hiện một vòng lặp for, hãy sử dụng con trỏ đúng cách, khai báo các loại và chức năng của bạn, bạn sẽ không thể viết giao diện cho các lớp của mình ít hơn khiến cho bên trong làm bất cứ điều gì đáng làm.

Dù sao thì bạn thực sự sẽ không học OOP trong lớp giới thiệu, đó chỉ là cú pháp - nhảy thẳng vào OOP sẽ khiến mọi thứ trở nên phức tạp hơn để nắm bắt (lúc đầu) so với trước đây.

OOP không phải là về một số cú pháp khai báo để tạo thành các lớp, đó là về cấu trúc dữ liệu, mẫu thiết kế, tính đa hình, tính kế thừa và thành phần.

Để thực hiện tất cả những điều bạn cần biết về lập trình thủ tục, một việc dễ dàng thực hiện trong C. Bạn có thể mang hầu hết mọi thứ bạn học với C qua Java hoặc C ++, bạn có thể phải suy nghĩ lại về một số điều bạn đã được cấp trong C, NHƯNG ... Bạn phải biết ngữ pháp (nơi bạn tham gia giới thiệu C) để viết câu (phải viết thủ tục để xác định giao diện) sau đó đoạn văn (phải biết cấu trúc dữ liệu) sau đó biết một số mẫu thiết kế (bi kịch, hài, thiếu sót anh hùng, cách họ tương tác và khi không sử dụng chúng) trước khi bạn có thể viết tiểu thuyết hoàn chỉnh (hệ thống OOP hoàn chỉnh).

Nếu tôi là bạn, tôi sẽ chọn một số cuốn sách sau: Ngôn ngữ lập trình C , Ngôn ngữ lập trình Java , Các mẫu thiết kế , Gang of Fourhatching mẫu . Tôi chắc chắn sẽ chọn một bản sao của Ngôn ngữ lập trình C nếu tôi nghiêm túc về C / C ++.

Nếu bạn chỉ muốn sử dụng id (và thực hiện nó cho id $), hãy chọn một số sách về các mẫu thiết kế Java và cách sử dụng Java với máy chủ web Apache và Tomcat và một số sách về lập trình cơ sở dữ liệu SQL. Java xin lỗi rất nhiều trên web, tôi xin lỗi nhưng PHP đã có một lịch sử hàng tấn lỗ hổng bảo mật khiến cho nó cũng đau đớn như Windows để tránh máy chủ của bạn bị root hoặc cơ sở dữ liệu SQL của bạn bị tiêm.

Bạn cũng nên dành thời gian để học SQL, Oracle MySQL Postgresql và MSSQL có nhiều điểm chung về cú pháp nhưng nếu tôi phải chọn học một cái cho chính mình thì hãy chọn Postgresql chỉ vì BSD được cấp phép thay vì GPL (bạn nên tìm kiếm một so sánh và tương phản với giấy phép GPL / BSD nữa)


2

Tôi phải nói rằng hầu hết các mã được viết bằng các ngôn ngữ hướng đối tượng như Java không thực sự hướng đối tượng. Thực sự hiểu các ý tưởng đằng sau OO là khó, vì kết quả được cho là hầu hết mã OO thực sự chủ yếu là thủ tục.

Tuy nhiên, điều này không có gì thực sự sai khi viết mã thủ tục trong Java. Vâng, có những lợi ích khi làm OO, nhưng đó không phải là điều mà tôi muốn nhầm lẫn với một lập trình viên mới bắt đầu. Vì vậy, trên cơ sở đó, tôi thấy không có gì sai khi dạy Java. Đừng mong đợi OO thực sự từ nó, nhưng nó hoạt động.

Tuy nhiên, Java ẩn rất nhiều chi tiết cấp thấp về những gì đang diễn ra bên trong máy tính. C để những thứ này nhiều hơn ở ngoài trời. Người ta có thể làm cho một trường hợp tốt rằng các sinh viên nên tìm hiểu làm thế nào những chi tiết cấp thấp này hoạt động trước khi sử dụng một ngôn ngữ chăm sóc chúng cho họ. Nhưng bạn cũng có thể đưa ra một trường hợp mà bạn nên bỏ qua những chi tiết đó và tìm hiểu chúng sau này.


2

Một số người khác đã trả lời theo chủ đề này, nhưng tôi nghĩ rằng nó đáng để nói rõ hơn điều này.

Ngay cả khi bạn bắt đầu học lập trình với một ngôn ngữ hướng đối tượng như Java, bạn sẽ bắt đầu bằng cách học các kỹ thuật lập trình thủ tục trước khi bạn có được các khái niệm OO . Khi dạy một lập trình viên Java mới, trước tiên bạn không giới thiệu chúng với các đối tượng và các lớp, bạn giới thiệu chúng với các câu lệnh và biến. Vào thời điểm học sinh ở vị trí được dạy nhiều về các đối tượng và lớp học, họ đã có ít nhất những điều cơ bản về lập trình thủ tục.

Vì vậy, ít nhất, bạn phải học lập trình thủ tục trong Java và sau đó học lập trình hướng đối tượng trong Java. Cho dù bạn dành cả năm cho lập trình thủ tục hay bạn chỉ dành vài tuần đầu tiên của khóa học lập trình, và liệu bạn có sử dụng ngôn ngữ khác cho nó hay không, chỉ là tranh luận về các chi tiết.


0

Nói thẳng ra về nó, tôi nghĩ rằng động lực cho điều này chủ yếu đến từ các lập trình viên cũ muốn cho thời đại cũ.

Trước khi nói bất cứ điều gì khác, tôi tuyệt đối không giữ bất kỳ sự tranh chấp nào đối với các lập trình viên lớn tuổi, nhiều người trong số họ chỉ đơn giản là có kỹ năng đáng kinh ngạc. Thật không may, đôi khi những người không bị cuốn trôi và không bao giờ thực sự giỏi lập trình để bắt đầu với..những giáo sư giỏi khi họ không thể hack nó trong 'thế giới thực'. (Không phải tất cả các giáo sư cũng ... nhưng ... NHIỀU)

OOP không phải là chén thánh của lập trình mà nó được tạo ra, cũng không phải là lập trình thủ tục là một di tích. Thật tốt khi biết ít nhất một số cả hai, nhưng tôi nghĩ rằng thông lệ chung về những gì cuối cùng được dạy khi lập trình thủ tục có xu hướng là một sự lãng phí rất lớn thời gian và công sức. Chúng ta cần học lập trình trong học viện, không chỉ theo phong cách này hay phong cách khác. Tôi gán cho mình khá nhiều mã khủng khiếp và những quan niệm sai lầm về vấn đề này, bao gồm cả mã của riêng tôi.


2
Tôi đã có một giáo viên sử dụng C từ '89, nhưng đó là cho một vi mạch mong đợi c '99. Sau đó, có giáo viên khác sử dụng 'c ++' nhưng không có STL hoặc mẫu. Cũng có thể đã được cấu trúc với con trỏ chức năng trong đó.
Ape-inago

1
Công bằng mà nói, STL và các mẫu nói chung không phải là chủ đề C ++ giới thiệu. Mục tiêu cơ bản của bất kỳ khóa học lập trình 101 cấp nào là dạy cách tạo ra logic tuần tự, có điều kiện và lặp có cấu trúc tốt trong các ràng buộc của một cú pháp nhất định. Tất cả các tính năng ngôn ngữ khác chỉ là đường cú pháp cho phép người ta nhóm các cấu trúc điều khiển cơ bản cũng như liên kết chúng với dữ liệu.
bit-twiddler

ouch hai downvote. thấy rằng một điều sắp xảy ra = P lạ đối với tôi mặc dù ý kiến ​​ban đầu đến từ một lập trình viên lớn tuổi đã giúp tôi phục hồi sau khi dạy kém. @Ape: Người đứng đầu bộ phận CS của chúng tôi đã cố gắng dạy cho chúng tôi COBOL trong một năm trở lại đây vào năm 2004 XD (ít lo lắng nhất từ ​​phong cách 'giảng dạy' của anh ấy, tôi không bận tâm vì tôi có thể làm việc trên một số điểm bán hàng máy lol nhưng geeze ... nghiêm túc?)
Garet Claborn

1
@ bit-twiddler - Aye thưa ông, rất lạ. Tôi không phụ thuộc nhiều vào kinh nghiệm đó trong quan điểm này, nhưng tôi đã xem xét các địa phương khác. Tôi thực sự yêu thích cả hai phong cách lập trình và dường như với tôi họ nên dạy chúng cùng nhau. Tôi chỉ thấy rằng các giáo sư trẻ hơn một chút không có cùng tỷ lệ nhiệt tình về vấn đề này. IMO đó là một điều tốt. Tôi hiểu một số nghĩ rằng thủ tục đầu tiên là quan trọng.
Garet Claborn

1
@ bit-twiddler: yeah, nhưng nó không phải là một khóa học giới thiệu. Đó là một khóa học nâng cao năm thứ 4 về thiết kế cơ sở dữ liệu và chúng tôi đã phải sử dụng c ++. Nó chỉ cảm thấy sai sau khi trải nghiệm c ++ đến mức cao như vậy với các khóa học trước đó.
Ape-inago

0

Hai lý do cho tôi: Một lập trình OO đã đến để giải quyết các vấn đề về lập trình thủ tục. Vì vậy, bằng cách viết một số mã hóa thủ tục và sau đó là những điều tương tự trong OO, giúp dễ dàng hiểu được sự khác biệt.

Ngoài ra còn có một yếu tố bổ sung ở đây: Hai cách tiếp cận để giáo dục về các chủ đề Lập trình. Người ta có thể bắt đầu với mức thấp nhất có thể (ví dụ lắp ráp, ở nhiều nơi theo thủ tục, một số khác bắt đầu bằng các mạch) và sau đó đi lên (hướng tới OO / Chức năng / Được quản lý). Cách tiếp cận khác là bắt đầu từ thế giới vật lý (ví dụ: Trình duyệt / Windows 7, v.v.) và sau đó bắt đầu đi sâu hơn. Có những ưu và nhược điểm đối với từng phương pháp. Trường đại học của bạn đã chọn đầu tiên và bắt đầu với thủ tục. Có thể có một số lý do hoặc họ chỉ sao chép người khác :-).


1
"Lập trình OO đến để giải quyết các vấn đề về lập trình thủ tục." Đó là mục tiêu, nhưng OO đã tạo ra nhiều vấn đề như nó đã giải quyết.
bit-twiddler

@ bit-twiddler: Câu chuyện rất lớn. Tập trung vào (hoặc thu hẹp nó) vào khía cạnh sư phạm, nó tạo ra một trường hợp: Chúng ta đã có cái này, làm thế nào chúng ta làm nó tốt hơn: rằng (bạn tranh luận về việc nó có tốt hơn hay không)
Dimitrios Mistriotis

0

Không có lý do nào khác ngoài quán tính thể chế. Nhìn vào CMU, họ đã đưa ra toàn bộ chương trình giảng dạy OOP của họ và thay thế nó bằng lập trình chức năng. Vì vậy, một lần nữa, câu trả lời cho câu hỏi của bạn là nó là một lựa chọn tùy ý được thực hiện bởi các quản trị viên của bất kỳ trường nào bạn đang theo học. Trong trường hợp bất cứ ai thắc mắc về những tuyên bố thực tế mà tôi đã đưa ra ở đây là bài viết về việc thay đổi chương trình giảng dạy tại CMU bởi một giáo sư / quản trị viên: Dạy FP cho sinh viên năm nhất .


1
-1 sai lệch - trong khi tôi đã thấy một chủ đề (thông qua tìm kiếm google) đã tuyên bố rằng CMU đã bỏ OOP khỏi chương trình CS năm đầu tiên của họ và thay thế nó bằng lập trình chức năng, chương trình giảng dạy CMU chính thức bắt đầu bằng ngôn ngữ lập trình Alice, là đối tượng- được định hướng [xem enr-apps.as.cmu.edu/assets/SOC/CSinksRING.htmlm]
Steven A. Lowe

1
@ davidk01: (1) thực tế khẳng định không đúng trong câu trả lời. (2) "Alice là một công cụ giảng dạy có sẵn miễn phí được thiết kế để tiếp xúc lần đầu tiên với học sinh đối với lập trình hướng đối tượng " từ alice.org
Steven A. Lowe

2
@Steven A. Lowe: Trực tiếp từ miệng ngựa: "Lập trình hướng đối tượng bị loại bỏ hoàn toàn khỏi chương trình giới thiệu, bởi vì nó vừa chống mô-đun vừa chống song song bởi bản chất của nó, và do đó không phù hợp với chương trình CS hiện đại. Một khóa học mới được đề xuất về phương pháp thiết kế hướng đối tượng sẽ được cung cấp ở cấp độ thứ hai cho những sinh viên muốn nghiên cứu chủ đề này. " - Dạy FP cho sinh viên năm nhất
davidk01

1
@ davidk01: liên kết tuyệt vời, cảm ơn bạn. Từ bài viết của ủy ban được trích dẫn trong bài báo đó "Mặc dù lập trình hướng đối tượng (dưới vô số hình thức) vẫn là chủ đề chính trong phát triển phần mềm công nghiệp, việc sử dụng các ngôn ngữ hướng đối tượng, như Java, ở cấp độ giới thiệu gây ra sự phức tạp và mất tập trung đáng kể từ các mục tiêu cốt lõi ở cấp độ giới thiệu . Có vẻ như nên đưa ra sự bao quát đầy đủ hơn về phương pháp thiết kế và triển khai OO để sau này trong chương trình giảng dạy để cho phép tập trung hơn vào các vấn đề cơ bản ở cấp độ giới thiệu. " [nhấn mạnh của tôi] ...
Steven A. Lowe

1
@ davidk01: Tôi rất vui khi đồng ý không đồng ý. Gọi tôi là pedantic nếu bạn thích, nhưng với tôi có một sự khác biệt đáng kể giữa việc thay đổi sự nhấn mạnh mức độ giới thiệu và "ném ra toàn bộ chương trình giảng dạy OOP của họ". Tôi hầu như không gọi việc giảm phạm vi của các lớp giới thiệu là "thay đổi sâu rộng" ;-)
Steven A. Lowe
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.