Haskell теперь не торт

К сведению желающих освоить Haskell — уже поздно. Национальная программа улучшения технического образования от правительства Индии начинает удалённые курсы массового обучения по Haskell. На государственном уровне решено: этот замечательный язык нужно двигать в серые индийские массы!

Регистрация там простая, можно даже сказать, что она для всех, если двигаться через Google Translator. Для всех кто хочет поржать, совмещая приятное с полезным, напоминаю: индийские государственные курсы обучения Haskell стартуют 15 июля, язык обучения — английский. Как говорится, теперь от Хаскеля нужно бежать, но помните: у индусов-кодеров руки хоть и кривые, но длинные. Брать они будут не качеством, но своим количеством и копипастом.

Считаю, что для эзотерических языков и ФП в частности — это знаковое событие, поэтому продолжение разговора под катом.

Haskell теперь не торт

«Там были авгиевы конюшни на 5 строк»

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

Известный в узких кругах прогер Иван резонно замечает:

«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…), а потом просто из этих «кубиков» можно написать настолько коротко и однозначно что невозможно будет сделать ошибку.
Да, отдельный бонус, что функциональный стиль имеет очень большое преимущество перед императивным в выразительности кода — то есть видно глазами, что делает код.

Стратегии языков программирования

После обильных излияний по поводу выгод-невыгод ФП не могу не привести старый пост, который позволяет посмотреть на все эти священные войны адептов мейнстрима и авангардной эзотерики через принципиально иную оптику:

В последнее время я стал достаточно плотно интересоваться маркетингом и бизнесом вообще и как-то дошёл до такого понятия как бизнес-стратегия. По большому счету, успешных бизнес-стратегий всего три:

  • лидерство по издержкам (минимальная себестоимость и цены)
  • дифференциация товаров («think different», «не такой как все», т.е. отличие по качеству, уровню обслуживания, технологическому превосходству или высокой ценности для покупателей)
  • фокус — обслуживание узких рыночных ниш, вытесняющая специализация.
Другие стратегии, или различные комбинации перечисленных — НЕ РАБОТАЮТ.Т. е. нет смысла делать супер-продукт или нишевый продукт задёшево, или делать нишевый продукт супер-крутым. Если, конечно, у вас нет магических артефактов типа »+$10M от инвестора» или »+24 часа в сутках».
Оказалось, что с помощью вышеприведенного анализа бизнес-стратегии можно также понять и спрогнозировать степень успешности языков программирования. Поехали.

Проехать всем читателям предлагается вот по этой ссылке. Из комментариев к этой чудной статье догоняемся таким дополнением автора:

Для меня наиболее ценно здесь:

  1. Продукты с дифференциацией порождают споры. Кто-то их любит, кто-то ненавидит. Мне было непонятно, почему некоторые так отчаянно наезжают на Хаскелл, а теперь понятно, что это норма для таких продуктов.
  2. Не надо мешать стратегии — решил делать different, не надо пытаться упрощать язык для чайников; делаешь для чайников — не выпендривайся с фичами; делаешь нишевый — вот и делай нишевый (или делай уже другой продукт, а то нишу потеряешь).
  3. Об этом я упомянул вскользь — дешёвые продукты на самом деле делать тяжело (сложно выиграть ценовую войну с крупными корпорациями), но при этом их легко вытесняют более дешёвые продукты (текущий мейнстримный язык часто меняется). Так что нет смысла делать мейнстрим-язык (или надеяться, что какой-то язык станет мейнстримом) — там дерутся корпорации, да и недолго он будет мейнстримом.
Кстати, Хаскелл станет мейнстримом, когда мейнстримом станет ФП (благодаря стараниям корпораций) и сложность входа понизится (с другой стороны, к этому моменту возможно появится более удобный ФП язык).

О чем и пост — стараниями индусов ФП уже скоро превратится в мейнстрим со всеми вытекающими, так что всем хипперам от ИТ дергаться уже поздно. Ибо дурная привычка заразительна.

Премьер-министр Сингапура Ли Сяньлун решил выучить Хаскель http://t.co/dNsU9bNaaC
— Андрей Ситник (@andrey_sitnik) April 22, 2015

© Blogerator