Метод Schliemann изучения языка программирования

Фон: немецкий археолог 19-го века Heinrich Schliemann был, конечно, известен своими успешными поисками, чтобы найти и выкопать город Трою (фактический археологический памятник для Трои Илиады Homer).

Однако он так же известен тем, что был удивительным учеником языков - в течение двух лет, он преподавал себе свободный нидерландский, английский, французский, испанский, итальянский и португальский язык, и позже продолжил учиться еще семь, и включая современный и включая древнегреческий.

Один из методов, которые он заметно использовал, был сравнением известного текста, например, возьмите книгу в языке, в котором каждый быстр, возьмите хороший перевод книги на языке, который Вы хотите выучить, и пробежаться через них параллельно. (различные источники процитировали книгу, используемую Schliemann, чтобы быть Библией, или, как ссылка выше состояний, роман).

Теперь, для фактического вопроса.

Кто-либо раньше (или услышал о), эквивалент метода Schliemann для изучения нового языка программирования? Например, вместо того, чтобы основывать основывание на ссылках и учебных руководствах, возьмите несколько исчерпывающий набор программ, которые, как известно, имели высококачественный код на обоих языках, реализовав подобные/идентичные алгоритмы и учиться путем сравнения их?

Мне любопытно или на предмет личного опыта применения такого подхода, или на предмет ссылок на что-то опубликованное или существования кодовых баз, которые могли использоваться для такого подхода?

То, что получило меня думающий об идее, было Euler Проекта и некоторыми фрагментами кода, которые я видел на Так, в C++, Perl и Lisp.

16
задан J0e3gan 8 November 2014 в 21:23
поделиться

4 ответа

Rosetta Code может быть полезным. Процитируем сайт: -

Rosetta Code - это сайт хрестоматии по программированию. Идея состоит в том, чтобы представить решения одной и той же задачи на как можно большем количестве разных языков, продемонстрировать, насколько языки похожи и различны, и помочь человеку, имеющему опыт одного подхода к проблеме, в изучении другого. В настоящее время Rosetta Code включает 372 задачи и охватывает 197 языков, хотя у нас нет (и не может быть) решений для каждой задачи на каждом языке.

8
ответ дан 30 November 2019 в 22:02
поделиться

В языках программирования не столько синтаксис, сколько идиомы. Я действительно сомневаюсь, что вы могли бы провести параллельное сравнение, скажем, исходного кода Apache на C и YAWS в Erlang и фактически изучить любой из языков в любом направлении. Допустим, вы знаете C, что вы делаете, когда в изучаемом вами языке есть одиночные переменные присваивания или нет тернарного оператора.Очень мало отображений 1: 1 даже среди языков с сопоставлением независимости, таких как объектно-ориентированные языки. Я имею в виду, что C ++ не отображает 1: 1 в Java или Python, и все они по своей природе объектно-ориентированные.

2
ответ дан 30 November 2019 в 22:02
поделиться

Маловероятно, что лучший способ реализации чего-либо на одном языке следует той же схеме на другом. Поэтому очень сложно найти точки соприкосновения. Такой подход, вероятно, научит вас плохо программировать на изучаемом вами языке - посмотрите на весь плохой Java-подобный код, написанный на C ++ людьми, использующими Java в качестве первого языка программирования.

Редактировать: Типичная Java в коде C ++:

string * s = new string;

вместо способа C ++:

string s;
3
ответ дан 30 November 2019 в 22:02
поделиться

Я ожидал, что метод Шлимана будет работать очень плохо, потому что одна из задач создания нового языка программирования - представить новые объекты дискурса и новые средства передачи управления . В методе Шлимана сравнения двух текстов объекты дискурса всегда одни и те же, различен только язык, на котором о них говорят.

  • Например, диспетчеризация методов и наследование - это совершенно новые вещи. Так что, возможно, если вы знаете Simula-67, вы сможете изучить Java, а может быть, даже потренируетесь, чтобы изучить Smalltalk или C ++. Но вы не можете изучить Tcl, Scheme, ML или Diesel, потому что единичное наследование и динамическая диспетчеризация просто нет.

  • Точно так же, если вы когда-либо видели только C или C ++ или, может быть, даже Pascal / Ada / Modula / Clu, ничто не сможет подготовить вас к мощи и выразительности первоклассных функций.

  • В качестве другого примера, как вы можете сравнить решения проблем обработки строк, если один язык (Perl) имеет регулярные выражения, второй (SNOBOL) - сопоставление с образцом, а третий (Icon) - сканирование строк? Твоя бедная голова взорвется!

Метод Шлимана может быть полезен, если рассматриваемые языки очень похожи. Допустим, вы знаете Java и хотите изучить C #, или наоборот. Или переключитесь между языками в семействе OCaml / F # / SML. Но в большинстве случаев я подозреваю, что метод Шлимана принесет вам больше вреда, чем пользы.

9
ответ дан 30 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: