PHP fwdays conference — Creator of PHPUnit, JetBrains, Yii & more, Kyiv | Online

Функциональное программирование — как там дела?

Сабж.

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

А как дела с F# на нашем рынке? Есть ли перспективы?
Будут ли через полгода на собеседованиях спрашивать о знании F#, на который будут плавно утекать с С#?

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

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

Одна из самых горячих тем на рынке сейчас,

Это где ?

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

Какие такие весчи ?

Хмм...странно это объяснять человеку с такой подписью в профиле, но тем не менее. Вот навскидку результаты поиска по позициям в Штатах в LinkedIn:

Data engineer — Showing 7,569 results.

Частые требования — experience in database schema design, developing ETL processes, and writing complex data queries. В каждой второй или третьей позиции требования по знания Python или Scala, т.к ETL пайплайны строятся при помощи Spark\Flink

Ну и выдержка из PayScale:

A Data Engineer earns an average salary of $90,286 per year ($62,221 — $131,699). The highest paying skills associated with this job are Scala, Apache Spark, Data Warehouse, Java, and Data Modeling

странно это объяснять человеку с такой подписью в профиле

Собственно я потому и спрашую )

Python или Scala, т.к ETL пайплайны строятся при помощи Spark\Flink

Это все не то «фп». Там от фп 10% в виде лямбдовых комбинариков, которыеуже есть и в с# и в джаве и в джаваскрипте.
«Взрослое» фп с тайпкласами, фри монадами и натуральными трансформациями — так и не востребовано.

Но тем не менее, функциональные принципы используются, хоть и в «гражданской» версии. Главное, что платят за это хорошо, остальное уже не суть важно, имхо :)

Таких проектів зараз небагато в Україні. Таке враження, що зустрічаються в основному в американських стартапах, які працюють з Україною по моделі team extension.

Я зараз на такому проекті. Використовуємо тайпкласи (simulacrum), які (ліцензійна) IntelliJ IDEA поки що не повністю підтримує, і деякі advanced language features. :-) І правда, це BigData (маємо Spark, Cassandra, Kafka, мікросервіси) та платять добре.

Таких проектів зараз небагато в Україні.

Я вам больше скажу, их и в штатах оч немного.

Spark, Cassandra, Kafka, мікросервіси

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

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

Я мав на увазі, що якщо є бажання працювати із «дорослим» фп, то, як написав Andriy Khashchyn, є зміст шукати серед BigData-проектів. Там воно трапляється.

які (ліцензійна) IntelliJ IDEA поки що не повністю підтримує

Кстати лицинзионность идеи до одного места. Уже давно слез на комунити, для чистого скала бак энд — без разницы вообще.

Всем привет!
Предыстория: я бывший тестировщик. Сейчас прошел отбор на джуниора F# в intetics в Киеве и начал сомневаться потяну ли. Тестовые задания выполнил быстро. Даже за меньшее время, чем они давали. Там свой функциональный язык , разработанный заказчиком. — имеет смысл начинать сразу с кастомного языка? или искать что-то традиционное и качаться там?

Рекомендовал бы для начала выучить до приемлимого уровня «обычный» язык, в данном случае c#

Сейчас прошел отбор на джуниора F# в intetics в Киеве
Там свой функциональный язык , разработанный заказчиком.

так там все-таки F# или язык разработанный заказчиком?

если F#, то качать что-нибудь традиционное (типа сишарпа ну и паралельно F#), если второе, то наверное сразу тот кастомный язык (если он вдруг уникален конечно). ИМХО)

знаю аж одного чувака что на F# педалит
но они в Сиднее

как там дела?
«Так» дела нормально. А в Украине с ФП печалька. Страна аутсорса, шо там говорить, пока «там» используют прогрессивные языки и технологии, мы разгребаем навоз аутсорсим.

There are only two kinds of programming languages: those people always bitch about and those nobody uses. (Bjarne Stroustrup)
Це він, напевне, про C# та F#

Будут ли через полгода на собеседованиях спрашивать о знании F#, на который будут плавно утекать с С#?
Я как представитель нормальной ориентации, про эти ваши МСы точно не скажу. :)
Но суть простая:
— Спрашивать будут! Этому есть 100500 посылов. Самый простой: это модно, стильно, молодежно.
— Использовать вряд ли. Функциональное программирование требует __другого__ мышления. То как сейчас готовят программистов — это все про императивное программирование, для многих переключить мышление. А если не переключить мышление, то ограничения функциональных языков — это адские мучение.
---------
Еще один важный момент. Если вопрос вызван желанием понять «стоит ли учить?». То тут скорее да чем нет, ибо даже если прямых вакансий не будет, то знакомство с ФП может существенно изменить ваш стиль программирование (скорее всего в лучшую сторону :) )

<диванний аналітик mode on>
Я не знаю, як у C# із багатопроцесорністю та багатопотоковістю, можливо і справді «just enough», щоб мотивації вчити «інопланетянський» F# для простого девелопера було мало.

Але якщо тренд із збільшенням кількості ядер припре серйозно, то, можливо, і почнеться перетікання на F#.

ДОУ зжер закриваючий тег.

</диванний аналітик mode on>

Я не знаю, як у C# із багатопроцесорністю та багатопотоковістю
Да все там с этим делом прекрасно — гораздо лучше, чем где бы то ни было :)

Чи можна в C# розпаралелити програму на кілька ядер, всього лише скомпілювавши її із потрібною опцією? Чи може CLR автоматично перетворити два незалежних послідовних шматка коду на два паралельні потоки на різних ядрах? Як у C# із Software Transactional Memory?

Нет, но ограничения языков которые так могут как и STM могут добавить такой оверхед что C# будет быстрее на одном ядре чем функциональный язык на 100500 ядрах.

benchmarksgame.alioth.debian.org/...csharp&data=u32

— Haskell тут помітно утирає носа C# за швидкістю на одному ядрі (хоч це Mono).

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

Ну, це не відміняє того, що і послідовна швидкість у мови із автоматичним розпаралеленням і STM цілком порівняна або краще, ніж у C#.

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

если присмотреться, там моно тоже ни разу не распараллеливается — потому, что это результаты тестов на одном ядре. :-) а теперь выбери там сверху quad-core, нажми Show, и поделись впечатлениями :)

сорри, не прочел твой коммент ниже. please ignore.

Хотя нет, расспаралеливается, я не туда поссмотрел.

Чи може CLR автоматично перетворити два незалежних послідовних шматка коду на два паралельні потоки на різних ядрах?
Программно — конечно можно, через WinAPI: SetThreadAffinityMask
Чи можна в C# розпаралелити програму на кілька ядер, всього лише скомпілювавши її із потрібною опцією?
CLR это сделает за вас гораздо лучше в рантайме, чем вы это сможете сделать руками и жестко.
Як у C# із Software Transactional Memory?
research.microsoft.com/...9-d1fda49ecad9
p.s. Только вот зачем все это, кроме как пиписьки мерять? :)

Тренд с увеличением количества ядер уже в самом разгаре. Теперь мейнстримовые сервера содержат 32 или 40 ядер, а самые дешевые смартфоны — 4 и даже 8 ядер.
Но, к счастью, никто не переходит на матановый F#, т.к. нишу уже прочно занял Go со своими горутинами. Вот тут все подробно описано — dave.cheney.net/...ce-without-the-event-loop .
Если вы с этим не согласны, заходите сюда — dou.ua/forums/topic/16012 .

Тренд с увеличением количества ядер уже в самом разгаре.
т.к. нишу уже прочно занял Go со своими горутинами.
эту нишу уже давно занимает Erlang у которого поддержка многоядерности если не ошибаюсь из коробки. Пожалуй основное, что может отпугнуть от эрланга — это синтаксис а-ля пролог и довольно узкая ниша.
Я как представитель нормальной ориентации, про эти ваши МСы точно не скажу. :)
Это типа, все — Дартаньяны, что-ли, культурно выражаясь?
— Спрашивать будут! Этому есть 100500 посылов. Самый простой: это модно, стильно, молодежно.
Это — вряд ли.

На Scala, которая является надъязыком Java, пишут очень серьезные вещи уже.

А примеры очень серьезных вещей можно?

Для серьезности нужно знать как и кто его успешно использует.

швейцарские банки (UBS может слышали такой), немецкие банки (deutsche bank может тоже слышали) финансовые структуры (Tinkoff может и это слышали), Twitter и еще много много кто.

А что именно они там делают? Именно «очень серьезные вещи» или какие то некритичные проекты? Можно детали? Сколько миллиардов баксов в год процессит код на скале?

А примеры очень серьезных вещей можно?
швейцарские банки (UBS может слышали такой), немецкие банки (deutsche bank может тоже слышали) финансовые структуры (Tinkoff может и это слышали), Twitter и еще много много кто.
У вас спросили не «кто делает?», а «что делают?».
Твиттер, на сколько я знаю, узкие места таки на джаве переписывают, а скала там «потому что быстрее чем РоР».
Но кроме вопроса «что делают?», еще есть важный «как делают?». Как есть существенная разница между ЦПП и «Ц с классами», так есть и разница между Скала и «Джава с другим синтаксисом».

Не теряй сил с этими двумя отписавшими в ответ

Не теряй сил с этими двумя отписавшими в ответ
Ну хорошо хоть посоветовали слить, а не оскорблять и косить под дурачка как ваш скала-друг из соседнего треда :)

Ну я посоветовал экономить силы, а то обычно получается куча объяснений, а в ответ «Ой да ну ладно, не верю», потом опять куча объяснений и опять «Ой, ну уговаривайте меня, сильнее, еще сильнее». И получается не дискуссия, а головой о стенку. Потому вывод один, лучше если все будут пользоваться тем чем им удобнее и лучше решаются задачи, вполне очевидно.

Как то ты очень уж толсто набрасывать начал. Были бы нормальные обьяснения, была бы нормальная дискуссия. А так что я должен на слово UBS молиться?

Это бородатая ссылка ниачем, но вот есть более новая, которая говорит что твиттер таки использует много скалы: www.wired.co.uk/...-coming-of-java

Apache Kafka.
V Twitter des 70%-80% proektiv na Scala

Apollo MQ тоже вспомнился, но это не твиттеровский проект

Кафку вообще то тоже не в твитере, а в линкедине запилили

На Scala, которая является надъязыком Java

Вы поняли что написали???))))))))

Не могу не вспомнить статус, который я видел в Твиттере: «Извините, но тот факт, что у вас уже 3 года не было секса, еще не говорит о том, что вы хорошо понимаете функциональное программирование».

Erlang — медленно но уверенно хочет попасть в проекты ! И я ему говорю : «Да», мой друг тоже говорит : «Да», ПриватБанк говорит : «Да», одна компания в Киеве тоже говорит: «Да» ! Тоесть у него четыре «Да» и он проходит дальше !!!

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

Ну и генераторов интерфейса там нет, так что использовать придётся вместе с Шарпом. Плюс — решарпер его не понимает, а поддержка самой студии довольно слабая. В общем, в светлое будущее языка не верю. Разве что мелкософт начнёт усиленно его пиарить.

Читал это: www.amazon.com/...h/dp/1449320295

Как раз сейчас изучаю F#. Функционалные языки сейчас завоевывают популярность.
Я понимаю что это не отдельный язык, как С++, VB.Net или Java, а скорее дополнение к C#, как раньше можно было в C вставлять куски на ассемблере.
F# - это функциональный язык и он блестяще подходит для определенных задачь, особенно требующих сложных параллельных вычислений. Т.е. написать на F# полностью приложение теоретичекски можно, но практически неразумно. А вот отдельные сервисы в SOA приложении — вполне.
Ссылки на книги, которые читаю:
www.amazon.com/...h/dp/1449320295
www.amazon.com/...7468186-8898058
www.amazon.com/...pd_bxgy_b_img_z

Подписаться на комментарии