2010-02-17 29 views
16

Bối cảnh: Nhà khảo cổ học Đức thế kỷ 19 Heinrich Schliemann dĩ nhiên nổi tiếng với nhiệm vụ tìm kiếm và khai quật thành phố Troy (một địa điểm khảo cổ thực sự cho Iliad của Troy of Homer).Phương pháp học ngôn ngữ lập trình của Schliemann

Tuy nhiên, anh ấy nổi tiếng vì là một số astonishing learner of languages - trong khoảng thời gian hai năm, anh ấy đã tự học tiếng Hà Lan, tiếng Anh, tiếng Pháp, tiếng Tây Ban Nha, tiếng Ý và tiếng Bồ Đào Nha và sau đó tiếp tục học thêm bảy Hy Lạp hiện đại và cổ đại.

Một trong những phương pháp mà anh ta sử dụng nổi tiếng là so sánh văn bản đã biết, ví dụ: lấy một cuốn sách bằng ngôn ngữ người ta thông thạo, lấy một bản dịch tốt của một cuốn sách bằng ngôn ngữ bạn muốn học, và đi qua chúng song song. (nhiều nguồn khác nhau trích dẫn cuốn sách được Schliemann sử dụng làm Kinh Thánh, hoặc, như liên kết ở trên tiểu bang, tiểu thuyết).

Bây giờ, đối với câu hỏi thực tế.

Có ai đã sử dụng (hoặc nghe nói) tương đương với phương pháp của Schliemann để học một ngôn ngữ lập trình mới không? Ví dụ: thay vì dựa vào các tài liệu tham khảo và hướng dẫn, hãy lấy một bộ chương trình hơi toàn diện được biết là có mã chất lượng cao ở cả hai ngôn ngữ thực hiện các thuật toán tương tự/giống hệt nhau và tìm hiểu bằng cách so sánh chúng?

Tôi tò mò về kinh nghiệm cá nhân của việc áp dụng cách tiếp cận này, hoặc tham chiếu đến một thứ được xuất bản, hoặc tồn tại các codebases có thể được sử dụng cho cách tiếp cận như vậy?

Điều gì khiến tôi suy nghĩ về ý tưởng là Project Euler và một số đoạn mã tôi thấy trên SO, trong C++, Perl và Lisp.

+4

... Xin chào thế giới – crowne

+0

Câu hỏi thú vị ... Tôi có thể thấy chiến lược này rất hữu ích, cho một số định nghĩa về lưu loát và tập hợp các mô hình (như, có thể tất cả các ngôn ngữ hướng đối tượng). Các giải pháp của Dự án Euler cũng sẽ tạo ra văn bản nguồn tuyệt vời! –

+0

@robert Các giải pháp dự án Euler chỉ có xu hướng áp dụng cho các vấn đề về loại PE - thế giới thực là khá khác nhau. –

Trả lời

8

Rosetta Code có thể hữu ích. Để trích dẫn trang web: -

Rosetta Code là trang web về lập trình chrestomathy. Ý tưởng là trình bày các giải pháp cho cùng một nhiệm vụ với nhiều ngôn ngữ khác nhau nhất có thể, để chứng minh các ngôn ngữ giống nhau và khác nhau như thế nào, và hỗ trợ một người có nền tảng trong một cách tiếp cận với một vấn đề trong việc học khác. Rosetta Code hiện có 372 nhiệm vụ, và bao gồm 197 ngôn ngữ, mặc dù chúng tôi không (và không thể) có các giải pháp cho mọi công việc trong mọi ngôn ngữ.

3

Dường như cách tốt nhất để triển khai nội dung nào đó bằng một ngôn ngữ là theo cùng một mẫu trong một ngôn ngữ khác. Do đó, rất khó để tìm các điểm tương ứng. Sử dụng cách tiếp cận này có thể dạy bạn cách lập trình kém trong ngôn ngữ bạn đang học - xem xét tất cả các mã giống như Java, được viết bằng C++ bởi những người có Java như một ngôn ngữ lập trình đầu tiên.

Edit: java tiêu biểu trong C++:

string * s = new string; 

thay vì ++ cách C:

string s; 
+0

Neil - Tôi biết khái niệm những gì bạn đang nói về (từ việc nắm bắt C++ được viết bằng Perl), nhưng tôi tò mò muốn biết "Java viết bằng C++" điển hình như thế nào nếu bạn có một ví dụ handjob – DVK

+0

Java viết bằng C++ - Catmother http://catmother.sourceforge.net/ –

+0

Ví dụ hay ... +1 – DVK

2

ngôn ngữ lập trình ít về cú pháp và nhiều hơn nữa về thành ngữ. Tôi thực sự nghi ngờ bạn có thể làm một so sánh bên cạnh của nguồn Apache nói trong C và YAWS trong Erlang và thực sự tìm hiểu hoặc là một trong những ngôn ngữ trong hai hướng. Giả sử bạn biết C bạn sẽ làm gì khi ngôn ngữ bạn đang học có các biến gán đơn hoặc không có toán tử bậc ba. Có rất ít ánh xạ 1: 1 ngay cả trong số các ngôn ngữ phù hợp với ngôn ngữ OO. Tôi có nghĩa là C + + không bản đồ 1: 1 để Java hoặc Python và họ là tất cả OO trong tự nhiên.

+0

Điều đó là đúng - nhưng bạn có thể thấy, ví dụ đơn giản, triển khai lặp lại và lặp lại giai thừa, và sau đó xem cách tiếp cận bản đồ/giảm tương tự trong perl - điều này sẽ không cho bạn biết gì về factorio nhưng LOADS về làm thế nào mọi thứ nên được thực hiện trong Perl (ví dụ như phương pháp tiếp cận bản đồ/giảm) – DVK

+0

Về cơ bản, tôi đã suy nghĩ một chút (hoặc đáng kể) các yếu tố nhỏ hơn so với một máy chủ web đầy đủ – DVK

+2

những gì Schliemann đã làm là cú pháp kỹ thuật đảo ngược và ngữ pháp. Điều quan trọng hơn khi học một ngôn ngữ lập trình mới là các thành ngữ trong khoanh vòm. Hãy tưởng tượng cố gắng học cách viết thơ Trung Quốc trong khi chỉ có các phiên bản tiếng Trung và tiếng Anh của Tao te Ching [http://en.wikipedia.org/wiki/Tao_Te_Ching]. Đó là lý do tại sao điều quan trọng là so sánh tổng số mã lớn hơn. Bạn không thể nắm bắt được cá tính hay hương vị của một ngôn ngữ trừ khi bạn nhìn vào một đoạn mã lớn, ngoại trừ Perl, thậm chí cả những mảnh nhỏ của Perl suck! :-) –

9

Tôi mong chờ phương pháp Schliemann để làm việc rất kém, bởi vì một trong những điểm tạo ra một ngôn ngữ lập trình mới là giới thiệu đối tượng mới của diễn ngônphương tiện mới chuyển kiểm soát. Trong phương pháp so sánh hai văn bản của Schliemann, các đối tượng của diễn ngôn luôn giống nhau, chỉ có ngôn ngữ được sử dụng để nói về chúng là khác nhau.

  • Ví dụ: công văn và thừa kế là những điều mới lạ. Vì vậy, có thể nếu bạn biết Simula-67 bạn có thể học Java, và thậm chí bạn có thể kéo dài để học Smalltalk hoặc C++. Nhưng bạn không thể học Tcl hoặc Scheme hoặc ML hoặc Diesel vì thừa kế đơn và công văn động không có ở đó.

  • Tương tự, nếu bạn đã từng thấy C hoặc C++, hoặc thậm chí Pascal/Ada/Modula/Clu, không có gì thực sự có thể chuẩn bị cho bạn sức mạnh và tính biểu cảm của các chức năng hạng nhất. Một ví dụ khác, làm thế nào bạn có thể so sánh các giải pháp cho các vấn đề xử lý chuỗi nếu một ngôn ngữ (Perl) có biểu thức chính quy, một thứ hai (SNOBOL) có khớp mẫu và biểu tượng thứ ba (quét) có chuỗi quét không? Không. Đầu nghèo của bạn sẽ nổ tung!

Phương pháp của Schliemann có thể được sử dụng nếu ngôn ngữ được đề cập rất giống nhau. Giả sử bạn biết Java và bạn muốn học C# hoặc ngược lại. Hoặc thay đổi giữa các ngôn ngữ trong họ OCaml/F #/SML. Nhưng trong hầu hết các trường hợp, tôi nghi ngờ phương pháp của Schliemann sẽ làm hại bạn nhiều hơn là tốt.

Các vấn đề liên quan