Почему Ява лучше Хаскеля
Писать много влом, так что грубыми мазками по поводу комментариев под ссылкой на очередные стенания, теоретических построений на странной аксиоматике, новой любви
Ява - хреновый язык, многословный как пятнадцатилетняя школьница на первом свидании. Но именно эта многословность создаёт необходимую избыточность.
Промышленное программирование - это постоянное внесение в код ошибок, иллюзий и случайных ляпов. Основную сложность составляют задачи типа «Зачем это? Или я дурак и ничего не понимаю, или писал какой-то идиот, или написано не то, что имелось ввиду, или всё это делается совсем по-другому».
Избыточное кодирование позволяет справится с такими проблемами. Код на Яве можно разобрать, понять, почистить, изменить или переписать. В крайнем случае, поставить заплатки и обойти.
Выяснить, что имел ввиду автор кода на «лаконичном выразительном языке» нет никакой возможности.
Тем более, комментарии никто не пишет. А те, кто пишет, делать этого не умеют. Кстати, именно этому надо было бы учить студентов вместо хитростей кодирования давно известных алгоритмов и создания одноразовых программ в угоду преподавателям.
Код двадцатилетней давности приходится исправлять. Код, который мы пишем сейчас, кто-то будет править через двадцать лет. Если это не так, то кодирование идёт в мусорную корзину, может быть, проходя по пути к ней другие, незначительные и не важные в данном контексте, стадии.
no subject
Date: 2014-08-13 06:26 am (UTC)no subject
Date: 2014-08-13 06:33 am (UTC)Да и проще они - меньше надо догадываться "что имел в виду автор"
Просто жаба привычнее.
no subject
Date: 2014-08-13 06:34 am (UTC)no subject
Date: 2014-08-13 07:03 am (UTC)no subject
Date: 2014-08-13 07:04 am (UTC)no subject
Date: 2014-08-13 07:05 am (UTC)no subject
Date: 2014-08-13 07:07 am (UTC)no subject
Date: 2014-08-13 08:29 am (UTC)Переписал сейчас 500 строк хранимых процедур SQL на 500 строк Clojure в целях избавления от логики в БД.
Непонятно чуть менее чем все. В принципе. Оригинал на SQL чуть более читабельный, но нихрена не поддерживаемый и неудобный в деплойменте и обновлении, новая версия на Clojure - к ней нужно каждую строку комментировать двумя-тремя строками текста, причем не в коде, а отдельным сочинением, чтобы хоть кто-то понял, что там.
no subject
Date: 2014-08-13 08:31 am (UTC)Вит просто спутал Хаскелл с Перлом, где действительно все очень кратко и часто непонятно, особенно если много сложных регэкспов.
В Хаскелле же как раз и кратко, и понятно.
no subject
Date: 2014-08-13 08:33 am (UTC)Код на ней без отдельного текстового описания размером раз в 5 больше чем код, понять невозможно :)
no subject
Date: 2014-08-13 08:34 am (UTC)no subject
Date: 2014-08-13 09:02 am (UTC)https://gist.github.com/anonymous/a4111ae1f41e0bcea91c
Занимается тем, что сопоставляет расписанию общественного транспорта (список поездок с контрольными точками) реальное выполнение им этого расписания и полученные записи дополняет информацией из шапки расписания (информация о маршруте, транспортном средстве, итд)
исходный вариант хранимой процедуры, без шапки, только поездки
https://gist.github.com/anonymous/83eaa9e71eca09bdd508
no subject
Date: 2014-08-13 09:09 am (UTC)Всегда можно выбрать правильный стиль, хорошо сочетающийся с комментариями. Правда, не факт, что в этом случае останутся "преимущества" функционального языка.
no subject
Date: 2014-08-13 09:10 am (UTC)no subject
Date: 2014-08-13 09:11 am (UTC)grouped-time-points - это список вида "поездка, начало по времени, конец по времени". Загружается sql-запросом+постобработка и передается в эту функцию
report-trips-dict - словарь "id отчета"->"список поездок в отчете", тоже загружается из результата sql запроса и передается в эту функцию.
ci_date - дата отчета, берется из текущей обрабатываемой шапки расписания
{:keys [itrep_xmlobj_id ci_enddt ci_xmlobj_id] :as car-itin} - запись назначенения расписания транспортному средству - сразу в параметрах функции раскладывается на интересующие нас поля
Потом происходит следующее: для каждой поездки из расписания (map ... grouped-time-points) выполняется поиск выполнения этой поездки в report-trips-dict, полученные данные обрабатываются в нужный формат, с значениями по умолчанию, если поездки нет и сливаются в одну запись (merge car-itin ... report-trip)
потом в (filter ... ) полученный результат фильтруется от поездок, которых нет в расчете и которые не нужны.
no subject
Date: 2014-08-13 10:26 am (UTC)Почему ci_date это дата отчета? ci - не похоже на отчет никак.
itrpt очень странно-непонятный префикс не нужный тут.
car_itin - можно догадаться, что car_itinerary через несколько минут с каким-то английским.
(when (#{0 2} itrpttrip_quality) {:itrpttrip_mark "v"} - 0 и 2 о чем это.
ci_xmlobj_id тоже не очень красиво. Зачем надо знать в формировании отчета о каком-то xml?
Если имена нужны для legacy генератора отчета - делается еще две функции преобразования
1 названия полей из базы в нормальные переменные
2 преобразовывает понятные названия в непонятные для отчета.
Ну или словарик со всеми названиями полей нужен под рукой начинающего разбираться в этом коде (надеюсь описания полей в базе вносятся всегда)
Да, во времена писания дотнетных опердений я знал все флаги в своих приложениях, но помню как-то ошибся и написал неправильный флаг. Полтора года не могли найти кто и где. Потом перешли к константам и понятней, и не перепутаешь.
no subject
Date: 2014-08-13 10:33 am (UTC)Преобразование имен полей из БД в нормальные сломает все гораздо больше - вместо одного имени придется помнить два, причем на клиенте придется держать два варианта описания отчета - для старых и новых имен.
С префиксами имен полей все плохо, там таблицы с именами типа ItineraryReportTrips, если их не сокращать - оно в firebird с его лимитом в 27 символов на идентификатор может и не влезть.
no subject
Date: 2014-08-13 10:52 am (UTC)Хотя, имена важны и их надо менять и исправлять, но никто этого не делает, потому что прямой выход от работы нулевой.
Ну facepalm же
Date: 2014-08-13 10:58 am (UTC)шел 2014 год...
no subject
Date: 2014-08-13 10:59 am (UTC)Про студентов
Date: 2014-08-13 11:03 am (UTC)no subject
Date: 2014-08-13 11:04 am (UTC)Но константы надо привести к понятному виду. Или написать функции однострочники - типа car-assigned
no subject
Date: 2014-08-13 11:06 am (UTC)Ведь тогда никто не написал, что названия приходится сокращать.
no subject
Date: 2014-08-13 11:12 am (UTC)Я до сих пор помню ту таблицу на почти двести полей, где почти все полдя были до 15 символов. Про часть полей никто ничего сказать не мог. Переименование помогло. Но, если б не меняли тогда 90% программистов - уверен переименования не было б.
Re: Про студентов
Date: 2014-08-13 11:28 am (UTC)