Что я должен сделать, чтобы быть независимым от языка?

52

К настоящему времени я работаю с asp.net и C #. Я неплохо поработал и на Java. Я планирую свою карьеру таким образом, чтобы когда-нибудь стать не зависимым от языка. Какие вещи мне нужно выучить?

Во-первых, парадигмы ООП, как это говорит о дизайне класса. Есть ли другие?

Гопи
источник
2
Вы пытаетесь: избегать ярлыков, иметь гибкость в работе или что-то вроде видения?
Джефф
2
@ Джефф Да! чтобы избежать ярлыков и не драться, что мой язык ЛУЧШИЙ;)
Гопи
Я бы с большей вероятностью нанял парня с сильным мнением, не согласным с моим. Потому что тогда он мог написать Java.
Эрик Реппен
Если вы это сделаете, рекрутеры пропустят ваше резюме.
gonzobrains

Ответы:

67

Чтобы быть независимым от языка, вам необходимо иметь опыт работы со всеми распространенными стилями и типами языков.

  • Императивный язык (Вы говорите ему , что делать, шаг за шагом , например : -. C)
  • Декларативный язык (Вы говорите это своей цели, он выясняет , что делать Eg. - SQL / HTML / Prolog)

Также:

  • Функциональный язык (функции являются ключевыми, избегая состояния и побочные эффекты являются цели Eg. - Haskell / OCaml / Lisp / F #)
  • Объектно- ориентированный язык (архитектура, в которой объекты инкапсулируют связанные данные и методы, которые на них воздействуют). Например - Java / C #)

Некоторые стили ввода:

Несколько разных стилей выполнения:

Материал более низкого уровня:

  • Что-то довольно низкий уровень (например, C)
  • Некоторый диалект сборки (например, NASM)

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

Другие также отметили, что стоит приобрести некоторый опыт подходов общего программирования и метапрограммирования .

Когда вы изучаете эти парадигмы, избегайте просто изучать синтаксис и писать в старом стиле. Я видел, как многие разработчики C # пишут JavaScript так, как будто он статически типизирован. Не делайте этого, попробуйте выучить языковые парадигмы и принять их.

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

Не забывайте, однако, что современное программирование почти всегда зависит от фреймворка, поэтому знакомство с общими и популярными фреймворками для каждого языка, который вы изучаете, также крайне важно. Знание C # не имеет значения без .net.

Саймон П Стивенс
источник
9
Как HTML декларативен в данном смысле? "Цель -> Действие"? Это ничего не делает на самом деле.
Феликс Домбек
3
Отличным декларативным языком, который я могу только порекомендовать, является Пролог. Он отличается от всего остального - никаких функций (но отношений, которые работают в обоих направлениях), никакого явного потока управления (интерпретатор решает все за вас), только одна отличная структура данных (термины, больше ничего не нужно). Это невероятно быстро в что он делает, выполняя миллионы унификаций и выводов в секунду - и время, необходимое для разработки чего-либо, примерно такое же короткое, как в Python, по сравнению с C / C ++.
Феликс Домбек
3
@Felix: HTML, goal = "Я хочу метку и текстовое поле". Действие = Механизм компоновки и графики выясняет, как их рисовать. Детали до индивидуальных браузеров. Вы только определяете, что хотите, а не как это делать. Смотрите здесь . Я согласен, хотя, это не совсем "язык" как таковой. Пролог - лучший пример, я обновлю.
Саймон П Стивенс
1
+1 Для хорошего списка типов, выбор языка немного отличается от парадигмы местами, но в целом отличный.
Orbling
2
Кстати, вы должны добавить «Разные домены / уровни абстракции»: веб, интерактивный веб, настольные инструменты, настольные игры, постоянные игры не создаются так же, как ограничения и расстояние до аппаратного обеспечения различаются, что делает выбор языков ( или даже существование) более очевидным для того, кто хочет понять, что значит быть агностиком.
Клаим
4

Я не думаю, что вы можете стать по-настоящему независимым от языка. Я нахожу, что я «думаю» на моем текущем языке (на данный момент C #).

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

ChrisF
источник
+1 за "Вы не можете быть по-настоящему независимым от языка". Но я не совсем согласен с вашим вторым абзацем. Я думаю, что важно разработать дизайн для языка и структуры, которые вы собираетесь использовать.
Саймон П Стивенс
@Simon - у вас есть хорошая идея о разработке для фреймворка. Я обновлю ответ.
ChrisF
3

Читая ваш вопрос и некоторые ответы, у вас может сложиться впечатление, что вы приравниваете «языковой агностицизм» к «знанию каждой парадигмы на земле».

Я не уверен, делает ли вы знание каждой существующей парадигмы или знание разных языков, охватывающих несколько парадигм и типов языков, «языковой независимостью».

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

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

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

Если это то, что вы подразумеваете под «независимостью от языка», то практически любой опытный программист может программировать на любом языке, с которым он / она вынужден работать, имея доступ к языковой документации.

Может быть, вы хотите быть «языковым многобожником».

Я сам компетентен в нескольких языковых парадигмах, но я бы предпочел ООП, когда это применимо. Так что я думаю, что я не агностик.

Вы вряд ли найдете кого-то, кто не предпочитает определенную парадигму или язык, если ему предоставляется свобода выбора.

Тулаинс Кордова
источник
0

Это не просто языки, в самой Java столько разных режимов, что вы могли бы потратить годы, просто изучая их все. Вы могли бы узнать:

  • J2EE-функции, такие как Messaging and Persistence и различные серверы
  • JSP и Apache-ориентированные инструментарии
  • ant, maven и другие системы сборки (сами языки).
  • Весь мир Groovy / Grails
  • все API Apache Commons
  • тестирование систем (Mocking, JUnit)
  • GUI строители, такие как Swing, GWT ...

И сто вещей, которые мне не хватает - ПРОСТО в Java.

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

Я не говорю, что изучение нового языка когда-либо является проблемой, вы должны активно этим заниматься! Я пытаюсь выбрать свою следующую работу, основываясь на том, что я могу выучить (что я еще не сделал), но я не часто выбираю случайный язык и больше не учу его - в прошлый раз, когда я пытался это сделать, был со Scala и я осталось несколько смиренным ...

Билл К
источник
К «всему миру Groovy / Grails» можно добавить «весь мир Scala / Play! 2, весь мир JRuby / Rails и весь мир Clojure / Noir».
Ворг ван Гейр
1
Я согласен, написал это некоторое время назад и просто пытался справиться с задачей - хотя я, вероятно, просто выбрал бы одну из веб-платформ и пошел бы с ней.
Билл К