Có khả năng ai đó đã học tất cả các khía cạnh chính của C ++ và biết rất rõ các nguyên tắc cơ bản của ngôn ngữ, sẽ học các ngôn ngữ khác (như Python, Perl, Java) nhanh hơn và dễ dàng hơn không?
Có khả năng ai đó đã học tất cả các khía cạnh chính của C ++ và biết rất rõ các nguyên tắc cơ bản của ngôn ngữ, sẽ học các ngôn ngữ khác (như Python, Perl, Java) nhanh hơn và dễ dàng hơn không?
Câu trả lời:
Kiến thức sâu sắc về bất kỳ ngôn ngữ lập trình nào có khả năng giúp bạn tiếp thu các ngôn ngữ khác nhanh hơn. Điều đó là một phần bởi vì lập trình là một cách suy nghĩ nhiều hơn là học cú pháp. Hầu hết các thực hành lập trình sẽ đúng với hầu hết các ngôn ngữ lập trình khác. Đó là lý do tại sao mọi người nói rằng bạn luôn học ngôn ngữ lập trình thứ hai nhanh hơn ngôn ngữ thứ nhất.
C ++ là ngôn ngữ cho phép 'kiểm soát' lớn hơn nhiều so với các ngôn ngữ khác. Điều này có thể là tốt và xấu. Ví dụ, một khẩu súng thật tốt hơn súng hơi khi bạn đi trong rừng (vì bạn thực sự có thể bắn hạ một thứ gì đó với nó), nhưng nó cũng nguy hiểm hơn cho bạn và những người xung quanh. C ++ có các khái niệm như quản lý bộ nhớ mà bạn không cần phải lo lắng trong hầu hết các ngôn ngữ khác. Tuy nhiên, việc nắm vững các khái niệm này là rất xa vời ngay cả khi làm việc với các ngôn ngữ quản lý bộ nhớ tự động. Bạn cũng có thể thực hiện các thao tác theo bit và đi xuống thấp hơn nhiều so với 'kim loại' với ngôn ngữ như C ++. Ngay cả một sự hiểu biết cơ bản trong các lĩnh vực đó có thể giúp bạn rất nhiều với tư cách là một lập trình viên trong bất kỳ ngôn ngữ nào.
Cá nhân tôi đã học Java đầu tiên trong gần 3 năm trước khi học C ++ và tôi nên nói rằng tôi rất tiếc về điều đó (khóa học uni ...). Điều này làm cho việc học C ++ (tôi vẫn đang học - xa kiến thức 'sâu sắc': D) không đơn giản như tôi muốn. Nếu tôi đã làm nó theo cách khác xung quanh tôi sẽ nói rằng nó sẽ dễ dàng hơn nhiều đối với tôi. Đặc biệt là khi bạn biết TẠI SAO một cái gì đó được thực hiện theo một cách cụ thể, và không chỉ yên tâm về tính tự động của ngôn ngữ. Nếu tôi được phép đưa ra ý kiến, tôi sẽ đề xuất: C (cho các mô hình lập trình cơ bản và phổ quát) -> C ++ (để hiểu cơ bản về OOP cùng với quản lý bộ nhớ) -> Sau đó, bạn có thể đi vào bất kỳ ngôn ngữ OOP 'thực' nào với a nền tảng tốt hoặc bạn có thể tiếp tục với các chủ đề nâng cao hơn trong C ++, tất cả tùy thuộc vào những gì bạn '
ORvàAND
Tiếc là không có. Đây thực sự là một vấn đề lớn khi dạy C ++ trong các lớp lập trình, đặc biệt là các lớp cấp độ mới bắt đầu: bạn có thể học các nguyên tắc lập trình hoặc bạn có thể học ngôn ngữ C ++, nhưng ngôn ngữ C ++ có quá nhiều cạm bẫy và các vấn đề nhỏ ngu ngốc để học cả hiệu quả trong phạm vi của một lớp học một học kỳ!
Có nhiều điều đã được thử trong C ++ và cuối cùng trở thành thành ngữ trong ngôn ngữ thông qua quán tính, đó là hầu hết mọi ngôn ngữ khác đã xem xét và từ chối vì hóa ra đó là một sai lầm rất lớn. Những cái chính là Mẫu của C ++ và mô hình đối tượng của C ++ (các đối tượng là loại giá trị không bao giờ là một điều tốt, bởi vì nó phá vỡ sự thay thế Liskov và chính bản thân OOP.)
Vì vậy, nếu bạn có kiến thức sâu về C ++ trước tiên và sau đó bạn muốn học các ngôn ngữ lập trình khác, sẽ có rất nhiều mâu thuẫn có hại và phản tác dụng mà bạn sẽ phải học để có hiệu quả với các ngôn ngữ lập trình khác.
Không biết rõ về C ++ sẽ giúp bạn dễ dàng học các ngôn ngữ khác giống như C ++. Nhưng điều đó sẽ nhàm chán. Tại sao bạn muốn biết hai ngôn ngữ giống nhau? Điều đó không mua cho bạn bất cứ thứ gì. (Lưu ý rằng điều này không dành riêng cho C ++. Nó áp dụng cho bất kỳ ngôn ngữ nào. So sánh với các ngôn ngữ tự nhiên: học tiếng Ý sẽ không giúp việc học các ngôn ngữ khác dễ dàng hơn. Nó sẽ giúp học tiếng Tây Ban Nha, tiếng Pháp hoặc tiếng Bồ Đào Nha dễ dàng hơn và học ba ngôn ngữ trong số đó sẽ giúp việc học thứ tư dễ dàng hơn, nhưng thậm chí học tất cả các ngôn ngữ Lãng mạn sẽ không giúp bạn học được tiếng Phần Lan, tiếng Trung, tiếng Hindi, tiếng Do Thái, tiếng Ả Rập, tiếng Pashtu, tiếng Hy Lạp, v.v.)
Ngôn ngữ lập trình thực hiện mô hình. Peter van Roy đã thu thập một poster của 34 mô hình lập trình chính .
Các mô hình, lần lượt, bao gồm các khái niệm. Áp phích đó liệt kê khoảng 18 khái niệm.
Tất cả các mô hình (hoặc ít nhất là những người trong poster) được sáng tác từ những khái niệm đó. Tất cả các ngôn ngữ thực hiện một hoặc nhiều mô hình bao gồm các khái niệm đó. Vì vậy, nếu bạn học những khái niệm đó, bạn sẽ (trong một nghĩa nào đó) học mọi ngôn ngữ lập trình cùng một lúc.
Tất nhiên vẫn còn rất nhiều quirks ngôn ngữ cụ thể (cú pháp trong số chúng). Ngoài ra, áp phích đó hoàn toàn bỏ qua việc gõ và tất nhiên có một sự khác biệt đáng kể giữa hệ thống kiểu Kiểu F < :, hệ thống kiểu Scala hoặc hệ thống kiểu gõ vịt động, chứ đừng nói đến hệ thống kiểu phụ thuộc à la Idris, Agda, Coq, Guru hoặc ATS.
Tôi muốn nói rằng việc biết bất kỳ ngôn ngữ lập trình sâu sắc nào cũng sẽ giúp ích cho việc học hỏi người khác, ít nhất là các ngôn ngữ khác trong cùng một gia đình. Ví dụ, kiến thức về C ++ sẽ không giúp ích nhiều cho LISP hoặc Haskell, nhưng đối với các ngôn ngữ thủ tục hướng đối tượng, nó sẽ như vậy. Cách tiếp cận của tôi là thử và học một ngôn ngữ từ mỗi gia đình khác nhau (theo thủ tục, chức năng, hướng đối tượng, v.v.) của ngôn ngữ, sau đó kiến thức đó có thể chuyển sang các ngôn ngữ khác trong gia đình đó. Mặt khác, kiến thức sâu rộng về APL sẽ không giúp được gì khác ...
Tôi sẽ có một cách giải thích khác ở đây.
C ++ là một ngôn ngữ tốt để tìm hiểu về cấu trúc dữ liệu và bộ nhớ, vì nó buộc bạn phải suy nghĩ cẩn thận về các khái niệm như quyền sở hữu đối tượng và tuổi thọ. Và học về bộ nhớ và cấu trúc dữ liệu là một trong những phần thiết yếu của bất kỳ chương trình giảng dạy kỹ thuật phần mềm nào.
Nhưng bạn phải học về cấu trúc dữ liệu. Nếu bạn chỉ "học C ++", bạn sẽ không thực sự đạt được nhiều và điều đó có thể làm chậm quá trình học các ngôn ngữ khác trong thời gian ngắn.
Khi tôi học đại học, Cấu trúc dữ liệu là khóa học dành cho sinh viên năm nhất bắt buộc, được thực hiện sau CS1 (mà ít nhất một nửa lớp đã bỏ học). Nó thật khó. Định dạng của khóa học về cơ bản là "Đây là một cấu trúc dữ liệu mà bạn chưa từng thấy trước đây [ví dụ như một đống bên trái ]. Thực hiện nó trong C ++ trong một tuần và làm cho đầu ra của bạn khớp chính xác với đầu ra dự kiến của chúng tôi, theo từng byte, vì vậy chúng tôi có thể chấm điểm tự động. " Sau đó, tuần tới bạn sẽ nhận được cấu trúc dữ liệu mới và bài tập mới. Tôi có lẽ đã học được nhiều hơn trong một khóa học so với tất cả các khóa học khác của tôi cộng lại.
Đó là cách học mà bạn cần phải làm cho C ++ để có giá trị.
Mỗi ngôn ngữ bạn học làm cho ngôn ngữ tiếp theo dễ học hơn, đặc biệt là trong cùng một mô hình. Họ vay mượn lẫn nhau rất nhiều, và sau một thời gian bạn đến điểm mà một ngôn ngữ mới trông giống như một bộ sưu tập các tính năng từ các ngôn ngữ khác, với một vài vòng xoắn độc đáo.
Tôi không nghĩ C ++ tốt hơn hay tệ hơn bất kỳ ngôn ngữ nào khác trong vấn đề đó. Đó là một trong những ngôn ngữ dài dòng hơn mà tôi biết, và làm cho một số điều khó trở nên dễ dàng trong hầu hết các ngôn ngữ khác, nhưng điều đó không nhất thiết phải chuyển thành ngôn ngữ tiếp theo dễ học hơn . Nó thường làm cho ngôn ngữ tiếp theo cảm thấy dễ sử dụng hơn , mặc dù. Có một sự khác biệt.
Không. Một kiến thức sâu sắc về C , hoặc tập hợp con của C ++ là "về cơ bản là C", sẽ giúp ích khi học các ngôn ngữ khác, ít nhất là khi hình dung những gì việc triển khai của chúng phải làm. Một kiến thức sâu sắc về C ++ , mặt khác, chủ yếu sẽ là thông tin gây nhầm lẫn hoặc không liên quan khi học các ngôn ngữ khác; ví dụ, nếu bạn học định hướng đối tượng của C ++ ở mức cao hơn bề mặt, khi bạn chuyển sang Perl / Python / Ruby, bạn sẽ mất nhiều thời gian hơn để không học những gì bạn biết hơn là sử dụng nó, vì các đối tượng trong các ngôn ngữ đó được triển khai trong một cách hoàn toàn kháchơn trong C ++. Điều tương tự cũng đúng với mức độ lớn hơn hoặc thấp hơn đối với hầu hết các ngôn ngữ khác và đối với các tính năng ngôn ngữ khác (ví dụ, các mẫu C ++ và đa hình Haskell về cơ bản là cùng một tính năng, với các triển khai hoàn toàn khác nhau). Vì vậy, kiến thức sâu về C ++ chủ yếu sẽ là C ++ - cụ thể.