В первой главе «Прагматического программиста» первая цель обучения:
Выучите по крайней мере один новый язык каждый год. Разные языки решают одни и те же проблемы по-разному. Изучив несколько различных подходов, вы сможете расширить свое мышление и избежать столкновения с геттером в колее. [...]
Чтобы достичь этого за карьеру, список языков, вероятно, будет довольно длинным (особенно если вы не хотите «прогрессировать» в управлении). Очевидно, что образование программиста (или любой другой формы) поможет вам начать работу с ядром коммерчески полезных языков (обычный список из публикации вакансий: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Кроме того, формальная или неформальная учебная программа, вероятно, будет охватывать функциональные подходы (с помощью чего-то вроде Haskell, LISP или языка, основанного на ML)
Но как только изучено разумное подмножество этого списка, что дальше и почему ?
Ответы:
Сделайте это интересным и проводите каждый год за написанием интерпретатора или компилятора для вашего собственного языка программирования, который заполняет нишу, для которой вы никогда не использовали язык программирования. Каждый год пишите свой следующий компилятор / интерпретатор, используя язык, который вы написали в предыдущем году.
источник
Вы должны максимизировать «предельную релевантность», то есть всегда рисковать в новых областях, в которых вы еще не сильны. Изменяйте как языки программирования, так и концепции . Если вы не знаете какого-либо объектно-ориентированного языка, попробуйте Java и некоторые среды с высокой абстракцией, такие как Hibernate. Затем напишите некоторые вещи для системного администрирования на языке сценариев, например Python или Perl. Затем приобретите некоторые навыки низкого уровня в C или C ++, написав высокопроизводительный многопоточный серверный код. Если вы не знакомы с функциональным программированием, попробуйте Haskell с некоторыми проблемами теории графов, такими как решение Peg Solitaire и т. Д. Это очень выполнимо, чтобы все, что вы изучаете, имело немедленную рыночную стоимость, пока вы не достигнете эрудита или специальных целей, таких как как безопасность объекта ,Пролог или VHDL .
Кстати, хорошее упражнение! Это научит вас мыслить латерально и представлять проблемы в не зависящих от языка терминах, а не полагаться на слишком мало платформо-ориентированных методов. Например, как только вы овладеете сходствами и различиями в распределении виртуальных методов между C ++ и Python, вы почти мгновенно «получите» его для любого другого языка.
источник
Язык, который не влияет на то, как вы думаете о программировании, не стоит знать. - Алан Перлис
Как затронули некоторые другие ответы, если вы изучаете один новый язык в год, то почему? это расширить свои возможности в качестве программиста. Как? это изучение языков с отличными парадигмами от языков, которые вы уже знаете, и подведение итогов уже знакомых парадигм определяет, какой язык выучить дальше.
Что это за парадигмы? В расширенной книге « Концепции, методы и модели компьютерного программирования» представлен превосходный обзор с графической картой .
Таким образом, если вы знаете только C-подобные императивные языки, то изучение Scheme / Lisp чрезвычайно полезно. Если вы уже знаете императивные и функциональные языки, то изучение Пролога будет полезно и т. Д.
Недавняя книга, которая пытается преподавать несколько языков и парадигм, называется « Семь языков за семь недель» . Конечно, вы не будете свободно владеть каждым языком после недели обучения, но, похоже, это обеспечивает доступную, ориентированную на практиков многопарадигмальную перспективу.
Когда вы делаете другую парадигму, это действительно момент дзен; переход от императивного к функциональному программированию заставил меня увидеть мир вычислений в совершенно новом свете. Счастливого обучения!
источник
C - как существенный, «лежащий в основе всего» язык системного программирования
Лисп (Схема) - странный, но невероятно мощный ур-язык, который, как думают великие хакеры, определяет круто
Smalltalk - потому что именно таким должен был быть ОО
Эрланг (или другой язык актера), чтобы понять актеров
Haskell - понять монады
Javascript - потому что он везде и необходим для написания скриптов в браузере
Один из Python / Ruby / Perl (но это не имеет значения, какой именно) - так что вы знаете, как выглядит популярный современный высокоуровневый язык сценариев с хорошей поддержкой библиотек
SQL - так что вы можете общаться с реляционными базами данных
Пролог - потому что вам все еще нужно взорвать голову
источник
источник
1) Пролог: он полностью отличается от всех обязательных языков, которые вы использовали до сих пор, и он изменит ваш взгляд на проблемы
2) Лисп: без него вы могли бы также использовать Vi
3) Эрланг: Опять же, это совершенно по-другому, также, это кажется довольно модным.
4) Что-то из тьюринга Тьюринга (например, Brainfuck), и, вероятно, напишите для него компилятор или интерпретатор: я не могу придумать причину, чтобы сделать это, но это хорошая идея.
источник
Помимо тех, которые вы перечислили,
Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Objective C.
источник
Хотя я согласен с тем, что хорошо изучать новые языки (и даже обязательно после долгой карьеры), я думаю, что один год - это слишком много за первые пять-десять лет. Я бы предпочел, чтобы кто-то с таким опытом изучал новые языки, которые они уже знают. В какой-то момент вам нужна глубина, а также широта знаний. Таким образом, вы можете написать конструкцию If на 12 языках. Я бы предпочел увидеть кого-то, кто действительно закапывается и станет экспертом хотя бы в одном. А потом следующие несколько лет стать экспертом в чем-то другом. За 30 с лишним лет карьеры я хочу, чтобы кто-то обладал глубокими знаниями, а не только основами во многих вещах.
источник