Стоит ли быть полиглотом компьютерных языков? [закрыто]

14

Часто можно услышать, что программисты должны выучить много разных языков, чтобы улучшить себя. Я все еще хожу в школу и не имею большого опыта программирования (чуть больше года). Но то, что было благородным намерением улучшить навыки программирования, превратилось в некую ОКР: я чувствую, что не успокоюсь, пока не изучу все относительно известные языки программирования.

И вот вопрос сам по себе: поможет ли вам использование языков программирования polyglot (и я не имею в виду обычное «программист должен знать хотя бы все парадигмы», я имею в виду в действительности все языки, о которых вы обычно слышите)? У кого-нибудь есть подобный опыт? Это помогает с работой / навыками / карьерой? Как часто вы можете применять эти навыки?

Антон Барковский
источник
3
Я думаю, что когда люди предлагают другим узнать о новых языках, это меньше касается изучения языков, а больше - изучения новых парадигм. Моими двумя основными языками являются Python и C ++, изучение Хаскелла стало для меня отличным опытом, потому что заставляет меня думать иначе, чем иначе.
Вит Пи
4
Зная все основные парадигмы действительно помогает много . Если вы хотя бы немного знакомитесь со всеми интересными языками, это может несколько помочь, если вы разрабатываете свои собственные языки (и как только вы войдете в парадигму языкового программирования, вы, вероятно, это сделаете).
SK-logic
4
«Язык, который не влияет на то, как вы думаете о программировании, не стоит знать». (Алан Перлис). Аминь.
2
@Job, знание 10 языков программирования требует лишь небольшой доли усилий, необходимых для изучения основ одного разговорного языка.
SK-logic
2
@ SK-логика зависит. Могу поспорить, что могу научить шестилетнего ребенка говорить по-испански быстрее, чем научить его питону.
Райнос

Ответы:

10

«Программист должен знать хотя бы все парадигмы»

Что помогает

Я имею в виду на самом деле все языки, о которых вы обычно слышите

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

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

Хороший программист - ленивый программист

Примечание:

Изучение общих / популярных языков не так полезно, как изучение «всех парадигм». Первое не распространяется на второе. Например, изучение Self невероятно полезно для понимания прототипа ОО. Это не обычный и не популярный язык, но он гораздо полезнее изучения Python, когда вы уже знаете ruby.

Язык дизайна:

Знание большинства языков полезно, если вы пишете / разрабатываете новый язык. Так что для этого есть хороший сценарий использования, но это довольно ниша.

Что я рекомендую вам сделать вместо этого:

Прочитайте код завершения 2 как минимум 3 раза

Языки приходят и уходят влево и вправо в зависимости от того, что «популярно». Технология становится устаревшей через месяцы или годы в зависимости от того, на что похожа технологическая кривая. (Сеть не одобряет технологии каждые 6 месяцев).

Техника программирования и теория информатики всегда остаются неизменными.

Raynos
источник
Но есть много интересных мелких особенностей в языках, и даже изучение нового языка из уже известной парадигмы может поразить вас (например, для меня это был Smalltalk)
Антон Барковский
@AntoBarkowski - это ложное утверждение, не сравнивайте SmallTalk с другими ОО языками. Java / C ++ / C # / и т.д.. не настоящие ОО языки. Конечно, SmallTalk стоит изучить, но это не та же парадигма;)
Raynos
6
Люди продолжают говорить: «Вы можете изучать язык в неделю», но это не так. Конечно, вы сможете написать синтаксически правильный код на этом языке, но это еще не все. Например, C # и Java очень похожи синтаксически и оба являются ОО-языками. Однако написание Java-кода на C # не делает вас программистом на C #.
R0MANARMY
3
@ R0MANARMY "<хорошие программисты> могут выучить язык за неделю". Язык не включает библиотеки, фреймворки и API. Мое определение хороших программистов может быть очень высоким, хотя.
Райнос
1
@ R0MANARMY, какой из этих крошечных, неважных семантических битов, о которых ты упомянул, может занять больше часа, чтобы понять?
SK-logic
4

Дело не в умении кодировать на множестве языков, а в том, как вы говорите, в парадигмах. Чем больше вариантов вы знаете, тем лучше. Знание нескольких языков, безусловно, помогает, но если вы продолжите изучать одни и те же типы языков, вы быстро попадете в тупик.

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

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

эд-ка морт-ора-й
источник
3

ИМХО, это не так. Во-первых, потому что вы не можете выучить язык менее чем за год. Написание кода в нем занимает 2 дня, но для написания беглого и правильно сформированного кода для данного языка требуется большой опыт. Почему GC работает так, как работает, где выделять память, какие конструкции быстрее, как правильно объединять строки, какие опасные углы языка и т. Д.

Я пишу ужасный код Java / .NET, будучи разработчиком C ++, так как многие разработчики Java пишут ужасный код C ++.

Лучшее в изучении других языков - это то, что вы изучаете новые парадигмы и, возможно, имеете лучший инструмент для решения конкретной проблемы. Скажем, вам нужно очень быстрое непубличное приложение с графическим интерфейсом, .NET там незаменимо.

Но изучение языка так, что вы не используете структуры в .NET или не пропускаете все объекты в C ++, занимает много времени. Я думаю, что лучше потратить его на изучение принципов дизайна, платформ и вашего языка.

Но это только мое мнение.

кодировщик
источник
2
«потому что вы не можете выучить язык менее чем за год» Ложь. Не путайте изучение языка с изучением популярных фреймворков. Также добавьте «общие методы программирования» в конце списка.
Райнос
@Raynos: Я подумал, что именно это он имел в виду.
Стивен Джеурис
1
Мой любимый способ игры с новым языком - это реализация компилятора для достойного его подмножества. В общей сложности требуется 2-4 часа, чтобы понять язык и уметь определить и украсть лучшие черты языка. Не почти год, даже не день.
SK-logic
1
Что ж, если вы присоединились к большому проекту C ++ и пришли на собеседование со словами «Я программировал на Java в течение 10 лет, но последние 6 месяцев я провел на C ++, поэтому я знаю язык». Я сомневаюсь, что вы получите высокооплачиваемую должность старшего разработчика за эту работу. Нет, я все еще думаю, что вы не можете выучить язык за месяц или около того.
Кодер
2
@Coder, если вы присоединились к большому проекту C ++ и пришли на собеседование со словами «Я программировал на 20 языках в течение 10 лет, включая C ++», вы, вероятно, получили бы работу.
SK-logic
2

Это не практично, чтобы знать их, но может быть очень полезно знать о них. Под этим я подразумеваю, что когда у вас возникает новая проблема, вы можете сказать: «Я смутно помню, что у [другого языка] был превосходный способ решения подобных проблем. Я должен это найти».

Карл Билефельдт
источник
Я считаю, что подкасты, такие как SE Radio, хороши для этого. Они часто имеют правильную длину, которую можно слушать во время поездки на работу, и таким образом вы можете многому научиться. Но его форма Почему <X> Интересно.
Захари К
1

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

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

Питер Смит
источник
1

Я работал на нескольких системах, где компоненты были написаны на нескольких языках (худший нарушитель потребовал, чтобы я доставил код, написанный на Ada 83, C, Fortran 77, SQL и DCL, тогда как моя последняя работа потребовала, чтобы я поставил код на C ++ и Java ). Так что, да, есть случаи из реальной жизни, когда вам нужно знать несколько языков достаточно хорошо, чтобы быть продуктивными в них (продуктивно! = Опытно; вы не собираетесь быть глубоким экспертом в C ++ и Java и ... если вы не урод)

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

Джон Боде
источник
1

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

HLGEM
источник
0

Это как учиться говорить на многих языках. Изучить их все до такой степени, что они полезны, практически невозможно. Придерживайтесь тех, которые вы, вероятно, будете использовать, и вам будет лучше. Вы могли бы достаточно хорошо выучить C ++, C # и Java, но пытаться втиснуть в Perl, Python, VB (не VB.NET), Ruby и JavaScript на профессиональный уровень одновременно просто глупо. В течение дня не хватает часов, чтобы поддерживать свои навыки во всех из них одновременно.

Кристофер Биббс
источник