Преимущества изучения языков, которые вы не будете использовать
Я читал много раз, что изучение языка, такого как Haskell, Lisp или Smalltalk, каким-то образом сделает вас лучшим программистом, когда вы программируете на других языках.
Есть ли больше, чем просто анекдотические доказательства этого иска?
Или это именно то, как люди рационализируют, потратив много времени на изучение языка программирования, который они никогда не будут использовать?
Ответы
Ответ 1
IMHO, это все о обучении новой парадигме программирования. Если вы знаете Java, а затем С#, то не так много выигрыша, если у обоих из них есть почти одинаковый "тип программирования".
Но если вы изучаете функциональный язык или динамику, например, вы вынуждены думать по-другому, и это, вероятно, поможет вам лучше программировать на вашем любимом языке.
Это что-то вроде: "Так легко сделать это на {другом языке, который вы узнали). Должен быть лучший способ сделать это в {языке, который вы уже знаете}". И затем вы переосмыслите и создаете более элегантный способ сделать это в {языке, который вы уже знаете}.
Ответ 2
У меня нет никаких убедительных доказательств, но я действительно оценил разные способы рассмотрения проблем, которые у меня есть с момента обучения lisp (то же самое касается python и c).
Ключ не обязательно изучает разные языки, хотя я считаю, что ключ - это разные точки зрения, которые вы получаете, изучая разные стили программирования.
Хорошие примеры являются функциональными, императивными, объектно-ориентированными и т.д. Кроме того, существуют общие различия в дизайне, а также скомпилированные языки; статический или динамический набор и т.д.
Хотя большинство людей выполняют большинство своих программ, используя один стиль (чаще всего ООП за последние несколько лет), я думаю, что все программисты должны знать несколько стилей, чтобы они могли лучше видеть недостатки своего стиля.
Ответ 3
Невозможно пролить свет на это с точки зрения языков программирования, но, похоже, очень похоже на "зачем учиться мертвому языку"? аргумент, который окружает латынь, и большая часть рассуждений там может быть применена здесь.
Ответ 4
Программирование - это способ мышления, а не писать код в языке программирования X
: это "кодирование", а не "программирование".
Зная хотя бы что-то более, чем просто один язык программирования - желательно по различным парадигмам, поэтому обязательно/ООП/функциональный/логический - вы тренируете этот способ мышления о проблемах вне контекста конкретных деталей и причуд языка X
.
Я думаю, что это всегда улучшает ваши способности, чтобы стать лучшим программистом.
Ответ 5
Отличным побочным эффектом изучения новых языков является возможность применения на вашем существующем языке.
Например, я программист на Java, и я потратил время на изучение моего первого функционального языка (Haskell). Недавно мне было предложено изучить Scala для предстоящего проекта. Это очень легко, так как я понимаю, что у Haskell есть команды охранников, рекурсии и т.д.
Ответ 6
Глубоко изучающий язык только для изучения языка имеет слишком мало преимуществ. Если у вас много задач, и вы не знаете языка, который идеально подходит для его решения, тогда имеет смысл изучить этот язык. В противном случае имеет смысл потратить время, чтобы стать экспертом в языках, которые вы уже знаете.
Ответ 7
Я не знаю, что было бы очень тщательное исследование относительно преимуществ многоязычного языкового воздействия на общую способность программирования, но я бы сказал, что исследования, касающиеся изучения иностранного человеческого языка (который вы никогда не сможете использовать на практике) полезен, как правило, в равной степени хорошо подходит для изучения языков программирования иностранных. Приносимые выгоды часто включают в себя улучшенные познавательные способности, а также улучшенное понимание одного родного языка.
здесь некоторые ссылки на исследования
анекдотично, я много жаловался на прием COBOL и никогда не использовал его, но смог применить то, что я узнал в этом классе, на моей первой работе.
Ответ 8
Если вы доверяете Pragmatic Programming, рассмотрите их советы со страницы 14 своих первая книга:
Изучайте как минимум один новый язык каждый год. Разные языки решать одни и те же проблемы по-разному. Изучая несколько различные подходы, вы можете помочь расширить свое мышление и избежать застревание в колеи.
Ответ 9
Некоторые примеры, которые приходят на ум:
Зная C и имея дело с управлением памятью и собственными структурами данных, вы можете понять проблемы производительности при программировании на языке более высокого уровня, где эти данные скрыты от вас.
И наоборот, изучение языка OO может повлиять на ваше программирование на языке C - например, с концепцией полиморфизма, предлагающей вам использовать указатели на функции, как вы могли бы не иметь в противном случае.
Изучение языка, в котором функции являются объектами первого класса, которые могут быть переданы, может заставить вас думать о подобных методах на других языках, даже если на этих других языках вы должны использовать методы функций в объектах, которые передаются.
Узнав о том, как ручки Erlang concurrency могут заставить вас переосмыслить, сколько общего состояния вы используете между потоками на других языках.
Любой язык, который имеет встроенную функцию, которую вы считаете полезной, может предложить вам реализовать свою собственную версию этой функции на другом языке, который ее не имеет, и, таким образом, позволит вам решать проблемы так, как вы, возможно, не подумали если вы не были подвержены этой функции на языке, на котором она встроена.
Изучение интерфейсов в Java может заставить вас задуматься о преимуществах точно указывать ваши (небольшие "i" ) интерфейсы на других языках, которые не имеют их как формальную конструкцию в системе типов.
Без сомнения, есть и другие.
Ответ 10
Изучение языка не является бинарным событием. Если вы достойный программист, вы должны быть в состоянии доверять своим собственным инстинктам относительно того, предлагает ли вам новый подход к вашему ремеслу.
Практически каждый язык, который стоит рассмотреть в эти дни, можно загрузить и протестировать через пару минут. Так что сделайте это - выберите один и попробуйте.
Существует ограниченное число случаев, когда этот подход "laissez-faire" не подходит. Если вы полный новичок, конечно, это не сработает. Когда я впервые научился C, мне пришлось его бить, но это оказалось достойным, потому что это заставило меня понять указатели, ссылку на память и динамическое распределение таким образом, каким я раньше не был.
Но если вы уже так много знаете, просто сориентируйтесь и ищите язык, который заставляет вашу лампочку продолжать.
Ответ 11
Различные языки имеют разные способы реализации одних и тех же идей. Изучая новые языки, вы получаете другую точку зрения на то, как все может быть достигнуто, и затем может использовать эти знания, чтобы подходить к тому, как вы программируете в своей текущей среде. Подумайте о объектно-ориентированном и функциональном программировании. Программисты OO могут много узнать о parrellization из таких языков, как C.
Ответ 12
Изучение языка, особенно того, который практикует новую парадигму, очень полезно для каждого программиста. Например, Learning Scheme поможет кому-то понять функциональное программирование. Программист может позже практиковать то, что он изучил с другими языками, такими как С#. Она может думать о новых способах делать вещи.
Кроме того, по мере развития языков, очень вероятно, что язык, который вы используете, будет использовать некоторые функции других языков. Обучив себя Ruby, я смог лучше понять изменения в С# 3.0.
Ответ 13
Я думаю, что изучающие языки всегда принесут пользу, даже если вы не будете использовать их снова. Я начал играть с Ioke как попытку изучить что-то экспериментальное, и из-за этого мой JavaScript улучшился, потому что определенные идеи были сцементированы.
изучение нового языка, возможно, даст вам новые идеи, которые вы попытаетесь перевести на ваш основной язык.
Ответ 14
Я не думаю, что будут какие-то убедительные доказательства - я думаю, что это более интуитивная вещь. Изучение совершенно другого языка поможет вам взглянуть на вещи совершенно разные. Или, может быть, нет. В любом случае, какой вред чему-то учит?
Ответ 15
Это полностью субъективно, но еще раз, когда, пройдя курс бакалавриата в Haskell, я заметил, что мой стиль программирования в C на некоторое время стал более похожим на Haskell; Я использовал множество простых, рекурсивных функций. Я также заметил, что этот стиль программирования, похоже, дает некоторые из тех же преимуществ программирования в Haskell; ошибок было меньше, код был легче понять (хотя и медленнее).
Итак, изучая еще один язык программирования, вы не можете сделать каждого лучшим программистом, это определенно было для меня лично опытом обучения.
Ответ 16
В чем преимущества изучения математики или физики, которую вы не будете использовать, или преимуществ изучения философии или мертвых языков?
Это интеллектуальное достижение и просветление, что важно, вы станете более умным человеком с любой новой вещью, которую вы изучите, независимо от того, являются ли они языком программирования, литературой, ролевыми играми... конечно, если это связано с вашим рабочей области, то вы на самом деле найдете применение, рано или поздно: -)
Ответ 17
Я потратил некоторое время на изучение clojure, хотя я знал, что не буду использовать его в ближайшей перспективе (в основном из-за того, что я не могу развернуть JVM).
У этого есть понятия, которые не поддерживаются языками, которые я использую (С#/C/С++/Python/Perl), и я хотел знать, чего я пропустил, а также, если бы стоило посмотреть на библиотеки, которые хотят добавить эти функции.
В частности, мне очень интересно понимать макросы Lisp и прямую поддержку concurrency. Я также потратил некоторое время на чтение реализации, в частности, на структуры данных, которые были очень образовательными - хорошо видеть качественную реализацию постоянных структур данных, чтобы узнать, как они работают (и дать вам неизменность, не жертвуя большой эффективностью).
Ответ 18
Bryond, что уже было сказано, мне очень нравятся новые языки, потому что это может вызвать новый интерес к программированию. Вы изучаете различные способы решения проблем и сильные/слабые стороны определенных языков. Это что-то новое для изучения, и любой хороший программист должен стремиться всегда изучать новые вещи. Он смешивает вашу повседневную жизнь, возможно, программируя на том же языке в течение многих лет.
Мне также нравится, что все говорили о перспективах программирования.
Ответ 19
Некоторые хорошие моменты были сделаны.
Я бы добавил, что языки обучения, которые вы не будете использовать в производственной работе, могут иметь ценность
-
Чтобы лучше понимать и поглощать аргументы и методы в текстах и документах, которые улучшат возможности программирования на языках, которые я использую для производственных работ (например, MIX/MMIX для Knuth Art of Computer Programming, RATFOR для программного обеспечения Kernighan и Plauger Инструменты, я все еще использую синтаксис на основе ALGOL для некоторого псевдокода, хотя я никогда не писал исполняемый код в ALGOL за пределами Университета)
-
Чтобы проверить или прототип программ, которые будут записаны на другом языке (например, некоторые подпрограммы для численных вычислений на C можно быстро проверить или масштабировать с использованием языков, имеющих соответствующие функциональные возможности, такие как Fortran, Python или Haskell)
-
Изучение нового языка может дать представление о том, как его можно использовать для более простого решения проблем, которые были поставлены в сторону из-за ограничений времени или сложности.