Если каждый год изучает новый язык программирования, каким должен быть этот список? [закрыто]

19

В первой главе «Прагматического программиста» первая цель обучения:

Выучите по крайней мере один новый язык каждый год. Разные языки решают одни и те же проблемы по-разному. Изучив несколько различных подходов, вы сможете расширить свое мышление и избежать столкновения с геттером в колее. [...]

Чтобы достичь этого за карьеру, список языков, вероятно, будет довольно длинным (особенно если вы не хотите «прогрессировать» в управлении). Очевидно, что образование программиста (или любой другой формы) поможет вам начать работу с ядром коммерчески полезных языков (обычный список из публикации вакансий: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Кроме того, формальная или неформальная учебная программа, вероятно, будет охватывать функциональные подходы (с помощью чего-то вроде Haskell, LISP или языка, основанного на ML)

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

Ричард
источник
3
В этом ответе я перечислю некоторые языковые парадигмы, которые можно изучить, чтобы расширить свои способности. Я бы начал с изучения всех этих парадигм (вместо того, чтобы фокусироваться на языках), поэтому отметьте галочкой все те, которые использует ваш текущий язык, а затем выберите язык, который имеет столько же языков, сколько вы привыкли. Нет смысла начинать в C #, чем в Java, попробуйте диверсифицировать изначально. Как только вы охватите все основные типы, вы можете выбрать другие распространенные языки.
Саймон П Стивенс
@ Симон: Почему бы не сделать это ответ здесь?
Ричард
1
Вы многому научитесь, переходя с Java на C #, но не так, как наоборот
Casebash
@Ричард. Я действительно не думал, что это оправдывает полный ответ, я просто отсылал вас к чему-то актуальному, что я написал в другом месте.
Саймон П Стивенс
1
Большинство людей, изучающих язык в год, будут «мастером на все руки, но не владеют ими», пока вы не сосредоточитесь на нескольких в течение нескольких лет. Я полагаю, основываясь на большом опыте, что понятие «полный стек» является ложным, за исключением 1% - 5% разработчиков. Я знаю, что большинство хардкорных бэкэндов не имеют хороших навыков работы с интерфейсом и наоборот.
джанки

Ответы:

19

Сделайте это интересным и проводите каждый год за написанием интерпретатора или компилятора для вашего собственного языка программирования, который заполняет нишу, для которой вы никогда не использовали язык программирования. Каждый год пишите свой следующий компилятор / интерпретатор, используя язык, который вы написали в предыдущем году.

альтернатива
источник
7
Могу ли я получить ваш автограф? :-)
Кристиан Давен
1
+1 Блестящий ответ, даже если это, вероятно, подразумевалось с юмором.
Джо Д
1
@Joe D Не совсем смешно. Если вы можете сделать это, вы освоили все ниши.
альтернатива
-1 за то, что я не имел в виду это с юмором. (как будто у нас недостаточно полузаброшенных языков / реализаций, лежащих вокруг)
ZJR
2
@ZJR Так 99% с чувством юмора, 1% Без юмора это плохо? Да ладно. Кроме того, почему вы отрицаете ответ, основанный на комментарии?
альтернатива
13

Вы должны максимизировать «предельную релевантность», то есть всегда рисковать в новых областях, в которых вы еще не сильны. Изменяйте как языки программирования, так и концепции . Если вы не знаете какого-либо объектно-ориентированного языка, попробуйте Java и некоторые среды с высокой абстракцией, такие как Hibernate. Затем напишите некоторые вещи для системного администрирования на языке сценариев, например Python или Perl. Затем приобретите некоторые навыки низкого уровня в C или C ++, написав высокопроизводительный многопоточный серверный код. Если вы не знакомы с функциональным программированием, попробуйте Haskell с некоторыми проблемами теории графов, такими как решение Peg Solitaire и т. Д. Это очень выполнимо, чтобы все, что вы изучаете, имело немедленную рыночную стоимость, пока вы не достигнете эрудита или специальных целей, таких как как безопасность объекта ,Пролог или VHDL .

Кстати, хорошее упражнение! Это научит вас мыслить латерально и представлять проблемы в не зависящих от языка терминах, а не полагаться на слишком мало платформо-ориентированных методов. Например, как только вы овладеете сходствами и различиями в распределении виртуальных методов между C ++ и Python, вы почти мгновенно «получите» его для любого другого языка.

DomQ
источник
9

Язык, который не влияет на то, как вы думаете о программировании, не стоит знать. - Алан Перлис

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

Что это за парадигмы? В расширенной книге « Концепции, методы и модели компьютерного программирования» представлен превосходный обзор с графической картой .

Таким образом, если вы знаете только C-подобные императивные языки, то изучение Scheme / Lisp чрезвычайно полезно. Если вы уже знаете императивные и функциональные языки, то изучение Пролога будет полезно и т. Д.

Недавняя книга, которая пытается преподавать несколько языков и парадигм, называется « Семь языков за семь недель» . Конечно, вы не будете свободно владеть каждым языком после недели обучения, но, похоже, это обеспечивает доступную, ориентированную на практиков многопарадигмальную перспективу.

Когда вы делаете другую парадигму, это действительно момент дзен; переход от императивного к функциональному программированию заставил меня увидеть мир вычислений в совершенно новом свете. Счастливого обучения!

оборота лимит
источник
И язык влияет на ваше мышление не столько тем, что он позволяет вам выразить, но больше тем, что он заставляет вас выражать.
Флориан Ф
9

C - как существенный, «лежащий в основе всего» язык системного программирования

Лисп (Схема) - странный, но невероятно мощный ур-язык, который, как думают великие хакеры, определяет круто

Smalltalk - потому что именно таким должен был быть ОО

Эрланг (или другой язык актера), чтобы понять актеров

Haskell - понять монады

Javascript - потому что он везде и необходим для написания скриптов в браузере

Один из Python / Ruby / Perl (но это не имеет значения, какой именно) - так что вы знаете, как выглядит популярный современный высокоуровневый язык сценариев с хорошей поддержкой библиотек

SQL - так что вы можете общаться с реляционными базами данных

Пролог - потому что вам все еще нужно взорвать голову

Interstar
источник
2
Причина, по которой я выучил Хаскель, заключается в том, что я хотел выучить функциональный язык (в отличие от всех процедурных, которые я знал раньше), и Хаскелл казался мне ребенком-плакатом для функциональных языков. Причина, по которой я теперь люблю Haskell, заключается в том, что это язык высокого уровня, хорошая библиотека поддержки, и он быстрый (примерно на 50% быстрее, чем C, но это зависит от того, что вы делаете). Кроме того, мне нравится, когда я могу написать кучу кода, и все это работает первый или второй раз (после компиляции).
Джои Адамс
Это определенно важно, изучаете ли вы Perl, Python или Ruby. Например, в Python есть списочные выражения, которых нет в Ruby, а в Ruby есть модули, которых нет в Python. Вы можете дублировать результаты обеих вещей на любом языке, но изучение любого из них повлияет на ваше мышление совершенно по-разному.
Philodadad
1
Пролог - потому что вам все еще нужно взорвать голову - Лучший комментарий когда-либо +1
Захари К
1
Я думаю, что главное преимущество изучения haskell не обязательно в том, чтобы овладеть абстракцией монады, а скорее в том, чтобы изучить преимущества РЕАЛЬНОЙ сильной и мощной системы типов. Если идея «статической системы типов» похожа на Java, то haskell захватывает дух.
сара
4
  • Go (новый язык программирования системного уровня с хорошей поддержкой параллелизма и концепций, не столь традиционных)
  • Lua (язык сценариев простой, выразительный, чрезвычайно гибкий и сбалансированный парадигмы императивного, функционального и метапрограммирования, позволяющие ООП)
  • D (C / C ++ сделано правильно)
  • Groovy (Выразительность и метапрограммирование в мире Java)
  • Eiffel (Дизайн по контракту и другой подход к ООП)
  • Пролог (логический язык программирования)
оборота Bigown
источник
1
Почему кто-то должен изучать это? (The почему это интересно немного здесь, есть несколько действительно уникальных языков программирования: каждая парадигма была реализована более чем один раз.)
Richard
Интересно, что вы думаете , D является C сделано правильно. Лично, когда я использую C, я в основном использую его для некоторых низкоуровневых вещей, где я не хочу никаких абстракций ООП вообще.
Джонас
@Jonas: Нам все еще нужно, чтобы простой язык был сделан правильно, в то время как этот язык не подходит, D можно красиво использовать только в обязательном порядке. Для вас D2 является более функциональным, и когда он будет завершен, возможно, он станет наилучшей реализацией парадигмы для языка, в первую очередь обязательного.
Маньеро
сделано правильно , субъективно. Для меня Erlang - очень маленький и простой язык, сделанный правильно. Недостающая часть представляет собой великолепную GUI-инфраструктуру, и если вы работаете со сложными системами, возможно, вам больше понравился бы статический типизированный язык.
Джонас
@Jonas: Erlang - хороший язык, но он не работает правильно на C / C ++, это совсем другое дело.
Маньеро
2

1) Пролог: он полностью отличается от всех обязательных языков, которые вы использовали до сих пор, и он изменит ваш взгляд на проблемы

2) Лисп: без него вы могли бы также использовать Vi

3) Эрланг: Опять же, это совершенно по-другому, также, это кажется довольно модным.

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

Пол Бучер
источник
1
«без этого вы могли бы использовать Vi». Я удивлен, что никто не поднял это :)
Готье
Я использую vi! (Ну гвим)
Захари К
1

Помимо тех, которые вы перечислили,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Objective C.

grokus
источник
1

Хотя я согласен с тем, что хорошо изучать новые языки (и даже обязательно после долгой карьеры), я думаю, что один год - это слишком много за первые пять-десять лет. Я бы предпочел, чтобы кто-то с таким опытом изучал новые языки, которые они уже знают. В какой-то момент вам нужна глубина, а также широта знаний. Таким образом, вы можете написать конструкцию If на 12 языках. Я бы предпочел увидеть кого-то, кто действительно закапывается и станет экспертом хотя бы в одном. А потом следующие несколько лет стать экспертом в чем-то другом. За 30 с лишним лет карьеры я хочу, чтобы кто-то обладал глубокими знаниями, а не только основами во многих вещах.

HLGEM
источник