Метод изучения языка программирования Шлимана - PullRequest
16 голосов
/ 17 февраля 2010

Предыстория : немецкий археолог 19-го века Генрих Шлиман был, конечно, знаменит своим успешным поиском и раскопками города Трои (фактического археологического памятника Трои Илиады Гомера).

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

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

Теперь по актуальному вопросу.

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

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

Что заставило меня задуматься об этой идее, это Project Euler и некоторые фрагменты кода, которые я видел на SO, в C ++, Perl и Lisp.

Ответы [ 4 ]

9 голосов
/ 18 февраля 2010

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

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

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

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

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

8 голосов
/ 18 февраля 2010

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

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

3 голосов
/ 17 февраля 2010

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

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

string * s = new string;

вместо пути C ++:

string s;
2 голосов
/ 17 февраля 2010

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

...