Являются ли функциональные языки и модели программирования, такие как MVC, просто очередным увлечением? - PullRequest
4 голосов
/ 09 января 2009

В последнее время я слышал много хорошего о функциональных языках программирования, таких как F #. Кроме того [и не связано], я также замечаю, что MVC начинает привлекать внимание - возможно, с момента появления Silverlight / WPF.

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

Я боролся за то, чтобы найти время для изучения WPF, но сейчас начинаю задумываться, можно ли так поступить. Остались ли такие языки, как F # и модель программирования MVC, или это просто очередное увлечение? Или люди действительно видят в них потенциальную замену C # / VB и ООП?

Большая часть моей разработки ведется в домашних приложениях либо в форме полнофункциональных веб-приложений для развертывания в интрасети, либо в виде служебных приложений winforms для распространения на отдельных компьютерах. Мои избранные технологии до сих пор были довольно стандартными - T-SQL / PL * SQL, C # / VB, JavaScript / AJAX, CSS.

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

Ответы [ 11 ]

14 голосов
/ 09 января 2009

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

Существует большая разница между F # и ASP.NET MVC; F # является функциональным языком - он имеет ряд преимуществ в нескольких сценариях, но для большинства направлений деятельности программирование языка общего назначения, такого как C #, обычно более удобно. Однако многое можно узнать, зная о функциональном стиле программирования (особенно о неизменности). Я посмотрел на F #, и я надеюсь, что это улучшит мой C #, даже если я никогда не пишу производственный код на F #. К счастью, благодаря делегатам и лямбдам, C # может использоваться функционально, даже если формально это не FP.

ASP.NET MVC, однако, совсем другой зверь; MVC (в более общем смысле) - это известный, установленный и надежный шаблон, который:

  • значительно улучшает тестируемость уровня представления
  • делает логическое разделение проблем на уровне пользовательского интерфейса
  • обеспечивает более прямой доступ к основному html-странице
  • и многое другое (привязка модели и т. Д.)

Или другим способом: для многих людей это делает ASP.NET окончательно понятным; Я полностью ожидаю, что в следующем году лот будет использовать ASP.NET MVC.

8 голосов
/ 09 января 2009

Мне очень странно смешивать функциональное программирование и MVC в одном вопросе; Я нахожу их никоим образом не связанными, за исключением того, что оба старше 30 лет и очень хорошо зарекомендовали себя в своих общинах. Поскольку я кое-что знаю о функциональном программировании, я буду говорить об этом.

Функциональному программированию почти 50 лет, и он должен остаться, хотя пока не ясно, станет ли он когда-либо мейнстримом. Ясно, что функциональные языки выступают в качестве инкубаторов, а затем служат основанием для возможностей, которые в конечном итоге попадают в языки основного потока. Некоторые примеры:

  • Сборка мусора
  • Первоклассные замыкания функций (добавлены в Perl в 1995 году, во всех языках сценариев с тех пор; присутствуют в Smalltalk-80; эмулируются различными способами в Java и C #)
  • Параметрический полиморфизм (шаблоны в C ++)

В долгосрочной перспективе наличие функциональных приемов в вашем наборе инструментов сделает вас лучшим программистом. Или, как говорит Эрик Рэймонд, учите Лисп. (И Lisp, и Haskell загружены новыми мощными идеями, которые заставят вашу голову взорваться разными, несравненными, но полезными способами. F # - это скорее консолидация самых лучших проверенных идей из функциональных языков, соединенных с .NET Framework. в начале 2009 года у него больше шансов стать мейнстримом.)

6 голосов
/ 09 января 2009

В эти дни я видел много подобных вещей на SO. (См. здесь , здесь и здесь для нескольких примеров.)

Согласно Википедии , Lisp является вторым старейшим языком программирования, все еще широко используемым на сегодняшний день (побежден Fortran). Функциональное программирование - не более модная вещь, чем транзистор, мышь, монитор компьютера, жесткий диск или, собственно, само понятие персонального компьютера, ни один из которых не присутствовал при создании Lisp в 1958 году. Это правда, что функционал программирование может быть не особенно полезным в типичной бизнес-среде, но его растущий и убывающий уровень популярности не делает его прихотью и игрушкой. Программисты с глубоким пониманием компьютерных наук понимают, что функциональное программирование - это не столько изобретение, сколько открытие, глубокое понимание фундаментальной природы вычислений.

Если говорить более конкретно, если программирование - это ваша повседневная работа (в отличие от настоящей страсти), является ли F # пустой тратой вашего времени? Это, вероятно, в том смысле, что вряд ли когда-нибудь станет достаточно популярным, чтобы оправдать это, в том числе и в вашем резюме. Также стоит отметить, что если вы потратите время на изучение F #, но никто из ваших коллег не сможет понять вашу работу, вы, возможно, принесете больше вреда, чем пользы, выбрав его в качестве инструмента разработки. Это все еще не делает это "причудой". :)

Что касается MVC, он существует уже давно - возможно, более десяти лет, но я не отслеживал. Это не серебряная пуля, и это не трудно понять; это просто еще один паттерн развития. Также стоит обратить внимание на тот факт, что MVC не является стандартной или даже очень хорошо определенной технологией. Существует много разных способов интерпретации MVC, и я бы даже рискнул сказать, что существует более одного правильного способа сделать это.

MVC оказывается особенно полезным для веб-разработки, потому что веб-приложения, как правило, имеют очень грязный интерфейсный код (поддержка всех этих различных браузеров - непростая задача), и последнее, что вам нужно, - это увязнуть в своей бизнес-логике с интерфейсом без необходимости. В отличие от F #, изучение MVC не является пустой тратой времени, даже если программирование - это просто дневная работа для вас, потому что, если вы когда-нибудь обнаружите, что работаете над веб-приложением, приверженность MVC (даже просто слабая приверженность ему) может спасти вашу задницу. от профессионального смущения.

4 голосов
/ 09 января 2009

Что касается MVC, он был представлен в 1979 году. Я помню, как впервые внедрил его в свою карьеру в Aldus Persuasion for Windows (одноразовый конкурент Powerpoint) в период 1988/89 годов. Фреймворки MVC широко используются в приложениях RIA, таких как веб-программирование на основе Adobe Flex (Cairngorm, Mate, PureMVC и т. Д.).

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

Насколько я могу судить, только люди, которые пытаются реализовать MVC на стороне сервера через любую из различных веб-сред, жалуются на MVC. Ошибок распределенных вычислений сообщили бы им, что было бы плохой идеей делать MVC, где уровень отображения презентации отделен пропастью сетевого соединения. Распределенный MVC так же плох, как распределенные объекты.

С веб-приложениями RIA, такими как основанные на Flex, MVC делается исключительно на стороне клиента - так же, как это было представлено на графических рабочих станциях Smalltalk еще в '79. Клиенты RIA затем используют только асинхронные вызовы службы и / или обмен сообщениями для связи со стороной сервера.

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

2 голосов
/ 09 января 2009

Практическое использование функциональных языков в коде разработки полностью зависит от того, для какой области вы кодируете. Как указывалось в других ответах, для классических «бизнес-приложений», если вы уже знаете C #, вряд ли вы скоро переключитесь на F #.

ОДНАКО:

  • Не использовать его в коде разработки не означает, что он не может быть полезен в другом месте (например, анализ данных или алгоритмы создания прототипов, не увязнув в шуме OO)
  • Изучение функционального языка научит вас по-другому думать о кодировании, что, вероятно, будет полезно для вашего C #
  • Изучение функционального языка также даст вам более глубокое понимание функциональных аспектов C #
  • Чтобы завершить мой список - хотя это повторялось и повторялось где-то в SO - никто не предлагает, чтобы F # заменил C #, это просто еще один инструмент в коробке. «Покупать» этот инструмент может быть слишком дорого, если он вам сейчас не нужен, но, по крайней мере, вы должны попытаться понять, что он делает, на тот день, когда вашего текущего набора инструментов не достаточно.
1 голос
/ 12 ноября 2009

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

Нужен ли нам действительно другой инструмент?

1 голос
/ 13 марта 2009

Функциональное программирование имеет множество преимуществ в качестве парадигмы: Он предлагает многие из тех же преимуществ, что и объектно-ориентированный дизайн при работе в небольших группах (инкапсуляция данных, полиморфизм, переносимость кода ...) Он менее подвержен ошибкам из-за неизменности данных и характера без сохранения состояния. Это легче пронизывать.

1 голос
/ 09 января 2009

Совсем нет.

Функциональные языки программирования существуют здесь десятилетиями.

Программирование моделей как "MVC", которое на самом деле является шаблоном проектирования, и уже несколько лет его используют многие фреймворки.

Вероятно, единственная новая вещь здесь - это ваша перспектива. Вы не знали, что они существуют, или их так широко использовали, пока они не пришли в мир РС.

Моей первой работой было использование WebObjects Framework от Apple Comp в 2000 году. С ним очень легко работать.

1 голос
/ 09 января 2009

Нет, они не причуды. И нет, люди не видят в этом потенциальную замену C # / VB и ООП. Люди будут использовать их, если это сэкономит им время или деньги.

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

0 голосов
/ 09 января 2009

Из (чрезвычайно) базовых знаний о функциональных языках, которые я имею, они МОГУТ занимать важное место в нашем будущем как разработчики. Многие умные люди отмечают тот факт, что поскольку процессоры не становятся быстрее, необходимо использовать больше ядер. Таким образом, параллельное программирование станет более распространенным. Функциональные языки подходят для параллельных задач, поскольку они не поддерживают состояние (эффективно устраняя большинство распространенных проблем, связанных с параллельным программированием / потоками, таких как блокировки и т. Д.).

Для получения дополнительной информации по этому конкретному вопросу я бы хотел направить вас к этой статье , в которой обсуждаются изменяемые / неизменяемые данные и сравниваются фрагменты кода c # и f #.

...