Можете ли вы улучшить свои навыки программирования, изучая другие языковые парадигмы?

9

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

Я буду очень признателен, если вы скажете мне определенным образом, как ваши навыки программирования на X (т.е. JAVA / C # / C ++) улучшились за счет изучения Y (например, Scheme / Prolog / Lisp).

Кроме того, какие парадигмы вы предлагаете, помогает больше всего стать хорошим программистом?

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

Спасибо!

Armando
источник
1
Я полагаю, что ответы на это будут некой формой да .
R0MANARMY

Ответы:

7

Я стараюсь изучать как минимум 1-2 новых языка каждый год. Больше всего я получил от изучения функционального языка (F #), который изменил мой взгляд на решение проблем - я = сейчас пытаюсь сказать машине, что делать, а не как это делать, особенно в C #, где я интенсивно использую Linq и неизменные объекты теперь, когда я знаю преимущества их использования. Я также довольно часто использую функции более высокого порядка (методы в качестве параметров), в результате мой стиль кодирования изменился (улучшился).

Dror Helper
источник
1
То же самое для моего программирования на Python. Я бы с треском провалил бы при написании всего этого кода, генерирующего дерево и генерирующего парсер, если бы я не изучил методы, которые я использовал в конечном итоге (деревья в значительной степени подразумевают рекурсию или ее свернутую вручную версию, генератор парсера состоит функций высшего порядка и вдохновлен синтаксическими анализаторами и т. д.) изучением языка Haskell.
Спасибо, вы подтвердили то, что я подозревал ... Еще раз спасибо!
Армандо
2

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

Это никогда не трата времени, чтобы выучить хотя бы основы нового языка.

Тоби аллен
источник
1

Хорошо, вот пример, с которым я столкнулся.

Я выучил относительно старый язык (VB6) для проекта на каком-то старом коде, который у нас был.
Язык очень ориентирован на Windows, но мощных классов высокого уровня не так много, как в среде .Net.

Мне пришлось сделать некоторые манипуляции с изображениями, и это познакомило меня с функциями Windows API для работы с изображениями.

После того, как я узнал, что это дало мне лучшее понимание классов GDI .Net. И понимание того, что иногда использование Windows API будет намного быстрее (меньше перенос функций).

Так что это показывает, что даже когда вы изучаете старый код, вы все равно можете учиться и получать другую перспективу.

Йохай Тиммер
источник
1

Можете ли вы улучшить свои навыки программирования, изучая другие языковые парадигмы?

По моему опыту, безусловно, да. Наличие нескольких разных способов решения проблемы похоже на палитру инструментов. Однажды вам (как и мне) придется использовать эти другие инструменты. Или, возможно, нет. Все это зависит. Некоторые exempels:

Языки, как правило, не одиноки, они приходят с окружающей средой. Я потратил немного времени на изучение странного языка, известного как awk . Он основан на сопоставлении с шаблоном с использованием «регулярных выражений». Пытаясь изучить C ++ STL (не очень успешно), я узнал о картах. Объединяя эти две концепции, я мог очень быстро написать несколько утилит для преобразования текста в Pearl (единственный язык, доступный на платформе).

Главным образом ради забавы я пытался выучить эрланг (не очень успешно). Он имеет библиотеку функций, известную как OTP, реализующую, среди прочего, способ обработки ошибок, иногда известный как «дать сбой» и монитор, перезапускающий функции. Я использовал эту идею в некоторых областях, иногда просто позволяя вещам потерпеть неудачу вместо того, чтобы делать бесконечные тесты.

Попытка изучить Haskell (опять же не очень успешно) действительно открыла мне глаза на другие способы решения проблем. Функциональное программирование (на мой взгляд) начинается с написания кода, который говорит о желаемом результате, а не с написания шагов, необходимых для его достижения. Я считаю, что это действительно помогло мне в написании лучшего кода SQL.

В последнее время я попробовал немного javascript. И нашел среду, известную как nodered. Не требуется код для создания небольшого сервера домашней автоматизации.

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

ghellquist
источник
0

Некоторое время я также многому научился, играя на функциональном языке. Однако то, что я извлек из этого, было не столько о том, чтобы делать что-то иначе, чем об императивных языках, чем о том, как упростить параллелизм. Его можно применять так же легко на императивном языке, как и на функциональном языке, но по некоторым причинам большинство примеров, с которыми я сталкивался на императивных языках, были более сложными. (Другие вещи оказались более сложными в функциональных языках.)

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

user1118321
источник