Должен ли я подобрать функциональный язык программирования?

10

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

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

В настоящее время мой язык выбора - C #, и я пришел из C ++. Я работаю разработчиком игр, но в настоящее время я безработный.

У меня есть страсть к архитектуре. Мои достоинства - чистый, гибкий, многократно используемый и обслуживаемый код. Я не знаю, был ли я отравлен этими способами или это к лучшему. У меня лихорадка рефакторинга или я должен идти дальше? Я понимаю, что это может быть вопрос об «использовании правильного инструмента для работы» , но я хотел бы услышать ваши мысли.

Должен ли я подобрать функциональный язык? Один из факторов моего страха - это оставить комфорт Visual Studio.

утверждение
источник
Вы можете попробовать F #, если выход из Visual Studio нарушит условия сделки.
Адам Лир
Это не сделка. Я просто не пробовал много других альтернатив. Я предполагаю, что у меня есть некоторый страх против работы без intellisense, рефакторинга или подобных инструментов, и у меня есть такая концепция, что вы в итоге снова пишете код в текстовом редакторе.
Заявление
В настоящее время я безработный ... не должно ли это быть первым, что нужно исправить?
Работа
Я бы попробовал немного поработать без VS. Вы можете найти, что работать в очень минималистском стиле может быть весело.
Захария К
@ Джоб, да, но недавно меня поразила серия довольно плохих событий :) Я повредил ногу (ну, я не кодирую ногой, но все же ...) совсем недавно, оставив свою прежнюю работу в поиск нового.
Заявление

Ответы:

5

ДА

Изучение новых вещей должно быть весело. А изучение нового способа программирования должно сделать вас лучшим программистом. Отметьте один из Haskell или Erlang, оба работают, но они очень разные. Если вы выберете Haskell, найдите несколько выступлений Саймона Пэйтона Джонса на YouTube или в подкасте. Парень отличный оратор.

Захари К
источник
1
Я выбрал этот ответ по многим причинам. @ Zachary K говорит, что было бы забавно выйти из коробки хорошо известного места и иметь другую перспективу. Я не должен бояться пробовать что-то новое. Это не конец дней. Хаскель - это язык, который пару раз раньше привлекал мое внимание в различных дискуссиях. Я не знаю, нужен ли мне функциональный язык, но, как говорит @Toby Allen, это отличный способ увидеть, как работают другие способы, и я согласен с этим после того, как попробовал немного UnrealScript. @ammoQ немного упустил момент, но у меня не было хорошего определения моего вопроса. Я до сих пор понимаю его проблемы.
Заявление
Рад помочь. Веселись
Захари К
14

Святой * * * *. Там нет серебряной пули. Шаг вниз. Расслабься, сделай глубокий вдох.

То, что у вас есть инструмент в вашем наборе инструментов, не означает, что вы обязаны его использовать. Сконцентрируйтесь на поставленной задаче, то есть написание программы, которая работает, и рефакторинг, когда код плохо пахнет. Не инкапсулируйте и не абстрагируйте каждую мелочь только потому, что она может измениться когда-нибудь в будущем. IMO, действительно намного лучше начать прямо, KISS & YAGNI, и реагировать на меняющиеся требования, когда они действительно меняются .

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

user281377
источник
Ну, я сейчас не работаю над чем-то конкретным. Я между работами. Я / был разработчиком игры.
Заявление
3
Это опасная ситуация, связанная с переподготовкой. Нет сроков, нет отставания, просто слишком много времени, чтобы зацикливаться на деталях.
user281377
(Впереди много догадок, поскольку у меня нет ясной картины) Я думаю, что мои «потребности» были больше отражены в том, как я предпочитаю писать код. Я не очень разбираюсь в функциональном программировании, и, наверное, название меня немного обмануло. Я просто чувствую, что мои предпочтения не так ориентированы на объект, как я думал. Так может быть , я должен получать удовольствие работать в другой парадигме?
Заявление
Да, я думаю, это так. Сейчас я нахожусь в фазе обучения, поэтому я изучаю возможности написания определенным образом. На работе часто не было времени написать такой код, и вы должны уважать кодекс поведения и поддерживать согласованный стиль среди разработчиков.
Заявление
2
Это абсолютно нормально, когда вы пробуете каждый инструмент под рукой, когда находитесь между работами, но я боюсь, что мы не можем сказать вам, подходит ли обувь.
user281377
12

Вы можете подобрать F # . Это функциональный язык .NET, который позволит вам использовать Visual Studio и многократно использовать ваши знания .NET. Конечно, его сборки легко интегрируются со сборками C # (что позволяет легко комбинировать C #, C ++ / CLI и F # в одном проекте). Поддержка F # поставляется с VS Pro или лучше, но я не уверен, включен ли он по умолчанию.

Матей Забский
источник
Я думаю, что есть дополнение для F # в VS2008, но это по умолчанию в VS2010.
apoorv020
F # работает даже с бесплатным VS Shell.
SK-logic
6

ИМО, стоит попробовать функциональный язык. Даже если вы никогда не используете его непосредственно в выпущенном продукте, его изучение почти наверняка поможет дать несколько иной взгляд на программирование. Даже если вы в конечном итоге продолжите выполнять все свое «настоящее» кодирование на C #, вполне вероятно, что это поможет вам улучшить код, который вы пишете на C #.

Как уже упоминалось, очевидным выбором для тех, кто привык к Visual Studio, является F #, который в основном является производным Ocaml / Caml / ML. IMO, это был хороший выбор со стороны Microsoft для ознакомления людей с функциональным программированием - это полноценный функциональный язык, но не имеющий почти такого же иностранного синтаксиса, как некоторые (например, в то время как языки на основе Lisp делают имеют реальные преимущества, начинающим почти всегда трудно читать).

Джерри Гроб
источник
2

Да, ты должен.

Если вы выберете чистый язык, такой как Haskell, вы выучите не только новый язык, но и новый способ мышления. Это может помочь вам позже в вашей процедурной / OO работе.

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

Инго
источник
Я начал с сайта tryhaskell.org :) Интересно узнавать что-то новое.
Заявление
1

Если вы уже используете c #, вам не нужен новый язык - с комбинацией методов расширения, лямбда-выражений и универсальных типов Func / Action довольно легко написать функциональный код на C # - таким образом вы можете использовать функциональный стиль в алгоритмы, в которых это имеет смысл, без необходимости изменения всего приложения.

Том Кларксон
источник
1
Вам всегда нужен другой язык. Даже если вы никогда не используете его, выучить новый язык - это отличный опыт. Ни у одного языка нет всего.
Тоби Аллен
Вам всегда нужно учить, но вам не всегда нужно учить другой язык. Преимущество заключается в изучении концепций функционального программирования, а не самого языка, и вы можете сделать это, не выходя из привычной среды и не меняя весь проект. C # достаточно хорош, и с практической точки зрения есть огромное преимущество - иметь только функциональный код в тех алгоритмах, которые на самом деле выигрывают от него.
Том Кларксон
Да, я думаю, что мое беспокойство было более пристрастным к тому, существуют ли языки, лучше подходящие (синтаксически) для работы с методами / функциями так, как я часто работаю, играя с этим. C # предлагает лямбда-выражения, и это само по себе хорошо, но, например, функция, возвращающая значение без каких-либо параметров, дает код, такой как () => x, и, возможно, есть более понятные способы сделать это.
Заявление
+1 @ Тоби. Я только что пролистал справочник по UnrealScript и увидел несколько интересных языковых решений для работы с состояниями и т. Д. Это переносит на C # с точки зрения размышления о проблеме, и у них есть довольно хорошее решение. Так что да, я верю, что вы многому научитесь, выходя из своей песочницы и грабя своих соседей за весь песок и игрушки, которые вы найдете :)
Заявление