Являются ли функциональные языки и модели программирования, такие как MVC, просто очередным увлечением?
В последнее время я слышал много хорошего о функциональных языках программирования, таких как F#. Кроме того [и не связано], я также замечаю, что MVC начинает привлекать внимание - возможно, с момента появления Silverlight/WPF.
Я никогда не пытался прыгнуть на подножку без предварительного исследования - на самом деле мне потребовалось немного времени, чтобы перейти на.NET. Кто-то только что прокомментировал в одном из моих предыдущих вопросов о раннем внедрении новых технологий, и это заставило меня остановиться и задуматься.
Я боролся за то, чтобы найти время для изучения WPF, но сейчас начинаю задумываться, а не так ли это? Остались ли такие языки, как F#, и модель программирования MVC, или они просто очередное увлечение? Или люди действительно видят в них потенциальную замену C#/VB и ООП?
Большая часть моей разработки ведется в домашних приложениях либо в форме полнофункциональных веб-приложений для развертывания в интрасети, либо в виде служебных приложений winforms для распространения на отдельных компьютерах. Мои избранные технологии до сих пор были довольно стандартными - T-SQL/PL*SQL, C#/VB, JavaScript/AJAX, CSS.
Я думаю, что я изо всех сил пытаюсь определить, какая смесь этих технологий будет наиболее продуктивной / полезной для моей панели инструментов в ближайшем будущем?
11 ответов
Ни одна из них не является увлечением, и ни одна не исчезнет в ближайшее время, но на самом деле я ожидаю увидеть только одну из этих двух в регулярном использовании большинством разработчиков.NET...
Существует большая разница между F# и ASP.NET MVC; F# - это функциональный язык - он имеет ряд преимуществ в нескольких сценариях, но для большинства направлений бизнес- программирования язык общего назначения, такой как C#, обычно более пригоден для использования. Однако многое можно узнать, зная о функциональном стиле программирования (особенно о неизменяемости). Я посмотрел на F#, и я надеюсь, что он улучшит мой C#, даже если я никогда не пишу производственный код на F#. К счастью, благодаря делегатам и лямбдам, C# может использоваться функционально, даже если формально это не FP.
ASP.NET MVC, однако, совсем другой зверь; MVC (в более общем смысле) - это известный, установленный и надежный шаблон, который:
- значительно улучшает тестируемость уровня представления
- делает логическое разделение проблем на уровне пользовательского интерфейса
- обеспечивает более прямой доступ к основному HTML страницы
- и многое другое (привязка модели и т. д.)
Или другой способ: для многих людей это делает ASP.NET окончательно понятным; Я полностью ожидаю многократно использовать ASP.NET MVC в следующем году.
Мне очень странно смешивать функциональное программирование и MVC в одном вопросе; Я нахожу их никоим образом не связанными, кроме того, что обоим более 30 лет, и они очень хорошо зарекомендовали себя в своих общинах. Поскольку я кое-что знаю о функциональном программировании, я буду говорить об этом.
Функциональному программированию почти 50 лет, и он останется здесь, хотя пока не ясно, станет ли он когда-либо мейнстримом. Ясно, что функциональные языки действовали в качестве инкубаторов, а затем доказали свои возможности для функций, которые в конечном итоге нашли свое отражение в основных языках. Некоторые примеры:
- Вывоз мусора
- Первоклассные замыкания функций (добавлено в Perl в 1995 году, во всех языках сценариев с тех пор; присутствует в Smalltalk-80; эмулируется различными способами в Java и C#)
- Параметрический полиморфизм (шаблоны в C++)
В долгосрочной перспективе наличие функциональных методов в вашем наборе инструментов сделает вас лучшим программистом. Или, как говорит Эрик Рэймонд, учите Лисп. (И Lisp, и Haskell загружены мощными новыми идеями, которые заставят вашу голову взорваться разными, несравненными, но полезными способами. F# - это скорее консолидация самых лучших проверенных идей из функциональных языков, соединенных с платформой.NET. в начале 2009 года у него больше шансов стать мейнстримом.)
Я видел много такого рода вещей в эти дни. (Смотрите здесь, здесь и здесь несколько примеров.)
Согласно Википедии, Lisp является вторым старейшим языком программирования, все еще широко используемым сегодня (побежден Fortran). Функциональное программирование - не более модная вещь, чем транзистор, мышь, монитор компьютера, жесткий диск или, собственно, само понятие персонального компьютера, ни один из которых не присутствовал при создании Lisp в 1958 году. Это правда, что функционал программирование может быть не особенно полезным в типичной бизнес-среде, но его растущий и убывающий уровень популярности не делает его причудами и не делают его игрушкой. Программисты с глубоким пониманием компьютерных наук понимают, что функциональное программирование - это не столько изобретение, сколько открытие, глубокое понимание фундаментальной природы вычислений.
Если говорить более конкретно, если программирование - это ваша повседневная работа (в отличие от настоящей страсти), является ли F# пустой тратой вашего времени? Это, вероятно, в том смысле, что вряд ли когда-нибудь станет достаточно популярным, чтобы оправдать это, в том числе и в вашем резюме. Стоит также отметить, что если вы потратите время на изучение F#, но никто из ваших коллег не сможет понять вашу работу, вы можете принести больше вреда, чем пользы, выбрав его в качестве инструмента разработки. Это все еще не делает это "причудой".:)
Что касается MVC, он существует уже давно - возможно, более десяти лет, но я не отслеживал. Это не серебряная пуля, и ее трудно понять; это просто еще один паттерн развития. Стоит также обратить внимание на тот факт, что MVC не является стандартной или даже очень хорошо определенной технологией. Существует много разных способов интерпретации MVC, и я бы даже сказал, что существует более одного правильного способа сделать это.
MVC оказывается особенно полезным для веб-разработки, потому что веб-приложения, как правило, имеют очень грязный интерфейсный код (поддержка всех этих различных браузеров - королевская боль), и последнее, что вам нужно, - это чтобы ваша бизнес-логика была поглощена интерфейсом. конец без необходимости. В отличие от F#, изучение MVC не является пустой тратой времени, даже если программирование является для вас просто однодневной работой, потому что, если вы когда-нибудь обнаружите, что работаете с веб-приложением, приверженность MVC (даже просто слабая приверженность ему) может спасти вашу задницу. от профессионального смущения.
Что касается MVC, он был представлен в 1979 году. Я помню, как впервые внедрил его в свою карьеру в Aldus Persuasion для 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 может оставаться очень разумной моделью для принятия.
Практическое использование функциональных языков в коде разработки полностью зависит от того, для какой области вы кодируете. Как указывалось в других ответах, для классических "бизнес-приложений", если вы уже знаете C#, вряд ли вы скоро переключитесь на F#.
ТЕМ НЕ МЕНИЕ:
- Отсутствие его в коде разработки не означает, что он не может быть полезен в другом месте (например, анализ данных или алгоритмы создания прототипов, не увязнув в шуме ОО)
- Изучение функционального языка научит вас еще одному способу думать о кодировании, что, вероятно, будет полезно для вашего C#
- Изучение функционального языка также даст вам более глубокое понимание функциональных аспектов C#
- Чтобы завершить мой список - хотя это повторялось и повторялось где-то в SO - никто не предлагает, что F# заменит C#, это просто еще один инструмент в коробке. "Покупать" этот инструмент может быть слишком дорого, если он вам сейчас не нужен, но, по крайней мере, вы должны попытаться понять, что он делает, на тот день, когда вашего текущего набора инструментов не достаточно.
Функциональное программирование имеет множество преимуществ в качестве парадигмы: оно предлагает многие из тех же преимуществ, что и объектно-ориентированное проектирование при работе в небольших группах (инкапсуляция данных, полиморфизм, переносимость кода...). Оно менее подвержено ошибкам из-за неизменность данных и безгражданства. Это легче пронизывать.
Я не буду говорить о жизнеспособности в веб-приложениях для MVC... для тех из нас, кто разрабатывает фреймворки, которые очертили четкие шаблоны - это просто еще один способ ободрать ту же кошку. Я никогда не боролся за общую картину ASP.NET, поэтому думать, что MVC каким-то образом упрощает его, часто неправильно. Это может быть полезно для одного подхода, но не для всех подходов - таким образом, выпадая на еще один инструмент в наборе инструментов.
Нужен ли нам действительно еще один инструмент?
Нет, они не причуды. И нет, люди не видят в этом потенциальную замену C#/VB и ООП. Люди будут использовать их, если это сэкономит им время или деньги.
Я думаю, что вы должны позвонить прыгать на подножку и посмотреть, что волнует других умных парней, или закрыть глаза и надеяться, что шторм пройдет через несколько лет. Некоторые технологии будут работать, а другие нет. MVC так же стара, как ОО, а функциональное программирование так же стара, как программирование.
Не за что.
Языки функционального программирования были здесь на протяжении десятилетий.
Программирование моделей как "MVC", что на самом деле является шаблоном проектирования, и есть много фреймворков, использующих его уже несколько лет.
Вероятно, единственная новая вещь здесь - это ваша точка зрения. Вы не знали, что они существуют, или их так широко использовали, пока они не пришли в мир РС.
Моей первой работой было использование WebObjects Framework от Apple Comp в 2000 году. С ним очень легко работать.
Из (чрезвычайно) базовых знаний, которыми я обладаю, функциональные языки - они МОГУТ занять высокое место в нашем будущем как разработчики. Многие умные люди отмечают тот факт, что поскольку процессоры не становятся быстрее, нужно будет использовать больше ядер. Таким образом, параллельное программирование станет более распространенным. Функциональные языки подходят для параллельных задач, поскольку они не поддерживают состояние (эффективно устраняя большинство распространенных проблем, связанных с параллельным программированием / потоками, таких как блокировки и т. Д.).
Для получения дополнительной информации по этому конкретному вопросу я бы хотел направить вас к этой статье, в которой обсуждаются изменяемые / неизменяемые данные и сравниваются фрагменты кода C# и F#.
Я уверен, что C# и VB будут там навсегда... но также будет много людей, которые идут в ногу с новыми технологиями. Они смогут делать больше с меньшим количеством кода, а вы сможете делать больше с уже имеющимся кодом. Так что не волнуйтесь, это будет честный бой.
Даже если... изучение большего количества вещей делает вас лучше программировать, так что... ваше дело!
Я имею в виду, что очень много размышлений о том, как изучать больше языков, полезно знать, на что способен каждый язык, а затем использовать всю эту информацию для создания лучшего кода. Но если вы проводите то же самое время, доминируя над языком, с вами все будет в порядке.