К сведению желающих освоить Haskell — уже поздно. Национальная программа улучшения технического образования от правительства Индии начинает удалённые курсы массового обучения по Haskell. На государственном уровне решено: этот замечательный язык нужно двигать в серые индийские массы!
Регистрация там простая, можно даже сказать, что она для всех, если двигаться через Google Translator. Для всех кто хочет поржать, совмещая приятное с полезным, напоминаю: индийские государственные курсы обучения Haskell стартуют 15 июля, язык обучения — английский. Как говорится, теперь от Хаскеля нужно бежать, но помните: у индусов-кодеров руки хоть и кривые, но длинные. Брать они будут не качеством, но своим количеством и копипастом.
Считаю, что для эзотерических языков и ФП в частности — это знаковое событие, поэтому продолжение разговора под катом.
Ну, и раз мы уже начали бухтеть про функциональное программирование и грядущее пришествие индусов в эту тему, накину-ка я из последних ссылок.
Известный в узких кругах прогер Иван резонно замечает:
«Looking for a senior scala functional programmer». И, как правило, тишина. Потому что, кажется, никто не понимает вот чего.
Функциональный программист пишет код, который в 100 раз надежнее и в 5 раз эффективнее, и пишет он это в 5 раз быстрее, чем «объектный». Но нанять его хотят по цене объектного.
Немало выдающихся программистов смиряются с судьбой, и идут, хорошо зная хаскель, в джавщики куда-нибудь в Гугл, и торчат там, иной раз по обстоятельствам (тогда понятно), иной раз просто по скромности. Ну и, соответственно, по вечерам занимаясь любимым делом, а днем пиная *** с идиотами, получая код ревью, где какая-нибудь шушера учит, как правильно писать по патернам.
Но как только дело доходит до смены работы, возникает вот эта фрустрация. Спрос (нынче) большой, а разницу между «опытным джавщиком» и интеллектуальным хаскельщиком-окамельщиком-скальщиком никто не видит. И вот менеджмент, и рекрутеры, пропускают это волшебное слово «объектный», и хотят купить алмаз по цене хрусталя, и иногда у них получается. А если не получается, то они думают, во-первых, ишь, плохая ниша, тут никого нету. На самом деле тут есть; предложите зарплату в два раза больше, и наймёте программиста, который сделает в 200 раз больше. Но, увы. Вся культура не позволяет. Культура вполне позволяет нанять на приличные деньги какого-нибудь менеджера, мастера эффективно молоть языком; но человека, который спасет контору в долговременном плане — увы.
Адепты Фп довольно закивали головами. Но для меня лично вот это всё — отличный повод потоптаться по святому.
Сколько нужно Хаскель разработчиков, чтобы заменить лампочку? Отличный пост про OO vs. FP http://t.co/T2xdXAlZjo
— Roman Busygin (@nskboy) February 2, 2015
Словно памятуя про начало массового государственного обучения индийцев языку Haskell, в комментариях Ивану пишут:
Я думаю, это заблуждение. Говнокод можно писать на любом языке с любой парадигмой. Вся разница на самом деле между хорошими (гениальными) программистами и серой массой. Пока технология Х является уделом энтузиастов, средний уровень тех, кто её знает, очень высок. Как только (если) Х становится мейнстримом, на неё приходит масса условных кумарпателов, которые будут долго и нудно писать на условном Хаскеле такие же глючные, корявые и запутанные программы, которые они до этого писали на Джаве, а еще раньше — на Фокс Про и Вижуал Бейсике.
Так, насчет априорной качественности «всего написанного на ФП» разобрали, теперь коммент насчет скорости разработки пройдемся:
Времена, когда написание кода занимало большую часть рабочего времени давно прошли. Сейчас больше 50% времени нужно трепаться с менеджером, с другими программистами, сидеть на бесконечных коллах, втыкать в описание, пытаться понять, что вообще надо делать и т.д. Поэтому улучшение скорости написания кода на дедлайны влияние ни оказывает. Это Deadline-driven development
Продолжая разбирать на части исходный стейтмент чужеродного Ивана (в том смысле, что давно свалившего за бугор), присовокупим к делу:
На нынешнем уровне развития математики, есть вообще лишь два варианта делать надежный код:
Да, отдельный бонус, что функциональный стиль имеет очень большое преимущество перед императивным в выразительности кода — то есть видно глазами, что делает код.
- Безумное количество тестов. В смысле не просто coverage 100%, а также каждая строка проверяется во всем диапазоне возможных входных значений.
- ДОКАЗУЕМОСТЬ верности кода — принципиально недостижима в общем случае для императивной парадигмы, но достигается на декларативном программировании и вроде бы в частности на функциональном программировании — то есть можно писать такой код, который будет принципиально верным.
Конкретно достигается это как раз тем, что можно сделать абсолютно оттестированные, извините, забыл как называются, вообщем куски кода, реализующие желаемую конструкцию (ну как, например классический цикл for..), а потом просто из этих «кубиков» можно написать настолько коротко и однозначно что невозможно будет сделать ошибку.
После обильных излияний по поводу выгод-невыгод ФП не могу не привести старый пост, который позволяет посмотреть на все эти священные войны адептов мейнстрима и авангардной эзотерики через принципиально иную оптику:
В последнее время я стал достаточно плотно интересоваться маркетингом и бизнесом вообще и как-то дошёл до такого понятия как бизнес-стратегия. По большому счету, успешных бизнес-стратегий всего три:
Другие стратегии, или различные комбинации перечисленных — НЕ РАБОТАЮТ. Т.е. нет смысла делать супер-продукт или нишевый продукт задёшево, или делать нишевый продукт супер-крутым. Если, конечно, у вас нет магических артефактов типа «+$10M от инвестора» или «+24 часа в сутках».
- лидерство по издержкам (минимальная себестоимость и цены)
- дифференциация товаров («think different», «не такой как все», т.е. отличие по качеству, уровню обслуживания, технологическому превосходству или высокой ценности для покупателей)
- фокус — обслуживание узких рыночных ниш, вытесняющая специализация.
Оказалось, что с помощью вышеприведенного анализа бизнес-стратегии можно также понять и спрогнозировать степень успешности языков программирования. Поехали.
Проехать всем читателям предлагается вот по этой ссылке. Из комментариев к этой чудной статье догоняемся таким дополнением автора:
Для меня наиболее ценно здесь:
Кстати, Хаскелл станет мейнстримом, когда мейнстримом станет ФП (благодаря стараниям корпораций) и сложность входа понизится (с другой стороны, к этому моменту возможно появится более удобный ФП язык).
- Продукты с дифференциацией порождают споры. Кто-то их любит, кто-то ненавидит. Мне было непонятно, почему некоторые так отчаянно наезжают на Хаскелл, а теперь понятно, что это норма для таких продуктов.
- Не надо мешать стратегии — решил делать different, не надо пытаться упрощать язык для чайников; делаешь для чайников — не выпендривайся с фичами; делаешь нишевый — вот и делай нишевый (или делай уже другой продукт, а то нишу потеряешь).
- Об этом я упомянул вскользь — дешёвые продукты на самом деле делать тяжело (сложно выиграть ценовую войну с крупными корпорациями), но при этом их легко вытесняют более дешёвые продукты (текущий мейнстримный язык часто меняется). Так что нет смысла делать мейнстрим-язык (или надеяться, что какой-то язык станет мейнстримом) — там дерутся корпорации, да и недолго он будет мейнстримом.
О чем и пост — стараниями индусов ФП уже скоро превратится в мейнстрим со всеми вытекающими, так что всем хипперам от ИТ дергаться уже поздно. Ибо дурная привычка заразительна.
Премьер-министр Сингапура Ли Сяньлун решил выучить Хаскель http://t.co/dNsU9bNaaC
— Андрей Ситник (@andrey_sitnik) April 22, 2015
Закончить хотелось бы на модной ныне геополитике: Хацкель успешно внедрился в британское пост-колониальное пространство.
Основная инициатива была предпринята в основном со стороны джавистов несогласных с навязыванием хаскеля , но в некоторых областях его поддержали шарпокрестьяне, и оно превратилось во всеобщее восстание против рекурсирования.