# Понедельник 10 твитов
Пишу веб с 2005, бэкенд по большей части на Ruby, до этого на PHP. Краткая характеристика - «оба хуже»©
13:58На этой неделе - посягаем на устои, пропагандируем хорошее и осуждаем плохое. Не переключайтесь.
14:37@backendsecret почему оба хуже, можно развернутый ответ? и что тогда "лучше"?
Оба — динамически типизированные ЯП, вследствие чего контракты проверяются в рантайме, что вынуждает писать вагоны… twitter.com/i/web/status/9…
22:21На практике приходится ограничиваться интеграционными тестами, т.к. поддерживать ещё и юнит-тесты неотчуждаемого кода никаких сил нет.
22:25Вагоны — небольшое преувеличение, т.к. каждый code path необходимо покрыть, т.к. иначе можем пропустить в нём регрессию.
22:29В обоих языках вместо средств метапрограммирования — PHP, то есть обычный M4.
22:33Сгенерить им синтаксически некорректный код — как два байта переслать. И если в PHP кодогенерят тупо файлы (правильно ведь?), то в Ruby…
22:35…в Ruby пошли дальше, и генерят код в рантайме и тут же его выполняют. In "Metaprogramming Ruby" Q stands for "readability".
22:50# Вторник 3 твита
@backendsecret вопрос по #ruby и #php - порекомендовали бы их как первые языки для начинающих? Если нет, то почему… twitter.com/i/web/status/9…
Сложно сказать. С одной стороны, это плохие языки, с другой - не уверен, что есть разница, на чём писать лабораторн… twitter.com/i/web/status/9…
13:58@backendsecret @kelin2025 расскажи про Reason
OCaml с фигурными скобками (js-подобным синтаксисом), компилируется в JS. reasonml.github.io/community/blog… twitter.com/7buyer4/status…
14:33Уточните критерии "хорошести" языка программирования. twitter.com/backendsecret/…
Не заставляет программиста делать работу, для которой изобретали компьютеры. twitter.com/pavel_prischep…
15:01# Среда 14 твитов
@backendsecret а преобразовывать требования заказчика в код это не работа для машины?)
Рано или поздно, ведь, ИИ займёт эту нишу.
Зависит от проекта :) twitter.com/last_khajiit/s…
10:11@backendsecret >Кейсы покрываются sum types aka ADTвы не по назначению используете инструменты
За неимением гербовой (зависимых типов) пишем на обычной – fsharpforfunandprofit.com/posts/designin… twitter.com/last_khajiit/s…
13:17@backendsecret Какую работу заставляет программиста делать Ruby, для которой изобретали компьютеры?
Запоминать тучи фактов вроде сигнатур функций, типов принимаемых значений, ключи и типы значений в splat argument и… twitter.com/i/web/status/9…
13:27К слову, по сравнению с наносимой пользой, стоят лицензии @rubymine/@intellijidea довольно скромно.
13:31Безусловно, это вроде как документируется средствами YARD, но разработчики библиотек спецификации типа как-то всё больше игнорируют.
13:33Осталось ещё совсем немного о плохом.
13:41@backendsecret Интоксикация пхп
Кстати да, я что-то увлёкся представителями пыхоплеяды. Наболело, видимо :) twitter.com/ruxeg/status/9…
14:19Вместо type annotation comments рельсоводами, похоже, предлагается перечитывать guides.rubyonrails.org или простыни github.com/rails/rails/bl…
14:27Не, надоело о плохом
16:08youtube.com/watch?v=sT6VJk… сборщики мусора избавили нас от управления памятью вручную; Саймон Марлоу избавил от распараллеливания задач вручную
16:11blog.mozilla.org/security/2017/… формально верифицированной крипты всем
17:53ruby-doc.org/core-2.1.1/doc… а вот правильный способ манкипатчить всё и вся в Ruby. Им, конечно, никто не пользуется уже 5 лет, но надежда тлеет
20:07Every. Single. Software developer. Must. Take. Note.YOU can go to jail for the code YOUR BOSS tells you to write. twitter.com/reuters/status…
Хорошее повтори и ещё раз повтори. twitter.com/tedneward/stat…
21:44С другой стороны, точно так же можно присесть и за ошибку, допущенную ненамеренно. Ну разве только на менее длинный срок, и то не факт.
21:53# Четверг 1 твит
#funcby Call for Papers! If you wish to speak at F(by) 2017 or you have friends-speakers, please fill in or share >… twitter.com/i/web/status/9…
The CFP's still up! twitter.com/EventSpaceBy/s…
17:37# Суббота 4 твита
Прошу прощения за незапланированное отсутствие, оказалось немного некогда.
Продолжаем о хорошем.
Вот fsharpforfunandprofit.com — ресурс, собственно пропагандирующий всё хорошее, что есть в современной разработке ПО.
17:28Боюсь ошибиться, но F#, похоже, полностью покрывает функциональность C#, при этом являясь полноценным функциональным ЯП.
18:00Почти полноценным — вроде как нет type classes aka traits.
18:00# Воскресенье 12 твитов
@backendsecret Да, очень интересно, что такое полноценные фп, и какие из яп полноценные.
Хорошо, поймали на слове.
Приемлемая компонуемость обеспечивается первоклассными функциями и partial application:… twitter.com/i/web/status/9…
Реализация помянутых фич при помощи хелперов а-ля papply в Lisp или lambda в Ruby мне не подходит, т.к. зашумляет код.
15:24Таким образом, полноценными *функциональными* языками программирования являются Haskell, OCaml, F#, PureScript, Idris и проч.
15:26Полноценными же ЯП вообще я считаю сильно строго типизированные функциональные языки со следующими фичами:
15:290) abstract data types
1) type inference
2) pattern matching
3) (всё-таки опционально) type classes
Таким образом, полноценными ЯП являются помянутые Haskell, OCaml, F#, PureScript, Idris, ReasonML и сотоварищи.
15:32Вот я тут топлю за эксплутацию компьютеров по назначению, на что аболиционисты возражают «зачем это умничанье, мы и сами можем!»…
15:42…«Если ты не можешь, значит ты
— тупой
— профнепригоден
— ленивый
— ещё какой-нибудь плохой
Так вот, уважаемые коллеги-аболиционисты, у меня для вас новость. Ваш мозг плохо подходит для рутинной работы.
16:03Если бы он справлялся с ней хотя бы приемлемо, не возникло бы потребности даже в C, не говоря уж про высокоуровневые технологии.
16:05Когда путаешь абстрактные типы с алгебраическими, но всё равно лезешь вещать в массы twitter.com/backendsecret/…
Конечно же, Algebraic Data Types. Благодарю. twitter.com/_komaz/status/…
16:07# Ссылки
other
- https://fby.by/
- https://reasonml.github.io/community/blog/#messengercom-now-50-converted-to-reason
- https://fsharpforfunandprofit.com/posts/designing-with-types-making-illegal-states-unrepresentable/
- https://fsharpforfunandprofit.com/
- http://guides.rubyonrails.org/
- https://github.com/rails/rails/blob/9b53f74d897d346f44caae7b0cffcd900f986259/activerecord/lib/active_record/associations.rb#L1542-L1680
- https://www.youtube.com/watch?v=sT6VJkkhy0o
- https://blog.mozilla.org/security/2017/09/13/verified-cryptography-firefox-57/
- https://ruby-doc.org/core-2.1.1/doc/syntax/refinements_rdoc.html