Шлиманский метод программирования обучения языку
Фон: немецкий археолог 19-го века Генрих Шлиманн, конечно же, был известен своим успешным поиском, чтобы найти и раскопать город Трой (фактический археологический объект для Трои Гомера Илиады).
Тем не менее, он так же известен как поразительный ученик языков - в течение двух лет он учил свободно беглых голландцев, На английском, французском, испанском, итальянском и португальском языках, а затем продолжил изучение еще семи, включая как современные, так и древнегреческие языки.
Одним из методов, которые он знаменито использовал, было сравнение известного текста, например. возьмите книгу на языке, на котором вы свободно говорите, сделайте хороший перевод книги на языке, который вы хотите изучить, и переходите через них параллельно. (в различных источниках цитируется книга, используемая Шлиманом как Библия, или, как ссылка выше, роман).
Теперь, для фактического вопроса.
Кто-нибудь использовал (или слышал) эквивалент метода Шлимана для изучения нового языка программирования?. вместо того, чтобы основываться на ссылках и учебных пособиях, возьмите несколько комплексный набор программ, которые, как известно, имеют высококачественный код на обоих языках, реализующих аналогичные/идентичные алгоритмы, и узнайте, сравнив их?
Мне интересен личный опыт применения такого подхода или ссылки на что-то опубликованное или существование кодовых баз, которые можно использовать для такого подхода?
Что заставило меня задуматься над идеей: Project Euler и некоторые фрагменты кода, которые я видел на SO, на С++, Perl и Lisp.
Ответы
Ответ 1
Rosetta Code может быть полезна. Процитировать сайт: -
Rosetta Code - это сайт для программирования хрестоматии. Идея состоит в том, чтобы представить решения одной и той же задачи на как можно большем количестве различных языков, чтобы продемонстрировать, как языки схожи и разные, и помочь человеку с заземлением в одном подходе к проблеме в изучении другого. В настоящее время у Rosetta Code есть 372 задачи и охватывает 197 языков, хотя мы не можем (и не можем) находить решения для каждой задачи на каждом языке.
Ответ 2
Я ожидал бы, что метод Шлимана будет работать очень плохо, потому что одним из пунктов создания нового языка программирования является введение новых объектов дискурса и новых средств передачи управления. В методе Шлимана по сравнению двух текстов объекты дискурса всегда одни и те же, только язык, о котором они говорили, отличается.
-
Например, отправка метода и наследование по сути являются новыми. Так что, возможно, если вы знаете Simula-67, вы можете изучить Java, и, возможно, даже можете растянуть, чтобы изучить Smalltalk или С++.
Но вы не можете изучать Tcl или Scheme или ML или Diesel, потому что единого наследования и динамической отправки просто нет.
-
Аналогично, если вы только видели C или С++ или, может быть, даже Pascal/Ada/Modula/Clu, ничто не может действительно подготовить вас к силе и выразительности первоклассных функций.
-
В качестве другого примера, как вы можете сравнивать решения с проблемами строковой обработки, если один язык (Perl) имеет регулярные выражения, второй (SNOBOL) имеет сопоставление шаблонов, а третья (Icon) имеет строковое сканирование? Ваша бедная голова взорвется!
Метод Шлимана может иметь свои применения, если соответствующие языки очень похожи. Скажите, что вы знаете Java, и вы хотите изучить С#, или наоборот. Или изменить между языками в семействе OCaml/F #/SML. Но в большинстве случаев я подозреваю, что метод Шлимана принесет вам больше вреда, чем пользы.
Ответ 3
Маловероятно, что лучший способ реализации чего-то на одном языке следует тому же шаблону в другом. Поэтому очень трудно найти точки переписки. Взяв такой подход, вы, вероятно, научите вас плохо программировать язык, который вы изучаете, - посмотрите на плохой Java-код, написанный на С++ людьми с Java в качестве первого языка программирования.
Изменить: Типичная java в коде С++:
string * s = new string;
вместо пути С++:
string s;
Ответ 4
Языки программирования меньше о синтаксисе и больше об идиомах. Я действительно сомневаюсь, что вы могли бы сделать бок о бок сравнение, скажем, источника Apache в C и YAWS в Эрланге и на самом деле изучить один из языков в любом направлении. Скажите, что вы знаете, что вы делаете, когда язык, который вы изучаете, имеет одиночные переменные назначения или нет тройного оператора. Очень мало отображений 1:1 даже среди совместимых языков, таких как языки OO. Я имею в виду, что С++ не отображает 1:1 в Java или Python, и все они OO в природе.