• О программе обучения программированию в профильных вузов

    @dborovikov
    Конечно решать вам, но мое мнение такое: способ моделирования процесса (функциональный, императивный) вторичен по сравнению с самим процессом, то есть алгоритмом. К примеру общая идея красно-черного дерева одинакова и не зависит от того как мы описываем алгоритм — императивно или процедурно. Физтеховская книжка как раз хороша тем, что там упор в алгоритмы и структуры данных.

    Что касается второго фактора — способа описания: а почему вы считаете функциональный подход более правильным? Потому, что более формальный? Ок, но и есть реалии разработки, реалии современного железа. Одно дело готовить теоретиков, которые умеют писать правильно, но не могут разрабатывать промышленный софт, другое готовить инженеров, готовых к реальной разработке. Решать вам.
  • Spring. Для чего нужен cервис-слой?

    @dborovikov
    Плюсую. Скорее DAO не нужен, да. Транзакции, хоть какая-то БЛ, трансформация данных, для всего это сервис — лучшее место.
  • Как научиться писать юнит-тесты, в которых будет смысл и не ошалеть от скуки?

    @dborovikov
    Не думаю, что применение функциональное программирования уменьшает количество состояний. Скорее просто делает это состояние явным.
  • Domain-Driven Design — функции репозиториев?

    @dborovikov
    Да, collection-like же. Еще наверное можно add. create/update лучше не надо, это как бы намекает, на подробности персистенса, а мы хотим притвориться буд-то все в памяти
  • Автоматизация сохранения объектов в БД?

    @dborovikov
    А, теперь я понял что вам нужно. Такие штуки делаются средствами СУБД. Читайте про поддержку партицирования вашей СУБД.
  • Как вы связываете Java + PHP?

    @dborovikov
    Учитывая ваше хамство — вполне
  • Как вы связываете Java + PHP?

    @dborovikov
    А еще быстрее на именованных пайпах, а еще быстрее с использованием shared memory. Но все зависит от конкретных условий и нужно помнить, что сложность реализации тоже сильно разная. Я не зря написал про http так как это именно просто способ с вполне приличной производительностью.
  • Как вы связываете Java + PHP?

    @dborovikov
    Пробовал — объекты в пару килобайт можно передавать со скоростью несколько сотен в секунду, что вполне прилично. Если вам нужно быстрее, то напишите по крайней мере какие требования нужны.
  • Как вы связываете Java + PHP?

    @dborovikov
    А почему медленно то? Вам же нужно результаты выборок передавать? Скорость будет приличная
  • Redis vs SQLite vs PostgreSQL

    @dborovikov
    А вам высокая доступность не нужна? Если нет, то постгр лучше всего подходит под ваши требования. Но лучше уточнить: какие именно вам нужны запросы? Вам тут правильно написали уже, redis имеет всякие интересные структуры данных, это может сыграть свою роль. Что касается постгра, то он данные кэширует в памяти, нужно только правильно настроить. Да, тогда у меня тоже вопрос :) Мне так и не удалось заставить постгр писать апдейты в wal, а обнволять данные в кэше. Лезет на диск сразу, гад, и апдейтов штук 50 в секунду выполняется.
  • Интернет-магазин и ООП?

    @dborovikov
    >Объект order — то есть, у него есть методы «разместить себя», что ли?

    Вот тут уже нужно осторожно. Не стоит сущности наделять поведением прямо к ним не относящимся. От service-layer-а не уйти в любом случае. Есть простое и эффективное правило для определения где нужно разместить операцию: если операция может быть реализована с помощью публичного интерфейса объекта, то ее нужно реализовать во внешнем объекте-процедуре. Если для реализации недостаточно public api, то создается соответствующий метод у модели. Не редко бывает и такой вариант: операция частично реализовывается в моделях, а частично в процедурах.
  • Перспективные технологии для public web и enterprise приложений?

    @dborovikov
    «гиковский язык == мало специалистов & мало возможных проектов.» Это да, но может то малое количество это именно те проекты, которыми стоит заниматься? Готов поспорить, что средний Scala-программист намного сильнее среднего Java-программиста. Вообще непонятно зачем гнаться за массовостью. Тоже самое и про асинхронные технологии.
  • SQL и NoSQL в одном проекте

    @dborovikov
    С мемкешом чуть проще. Он не дает гарантий на сохранность записей, поэтому БД — всегда первичный источник информации, отсюда и пляшем. В итоге не нужно полностью согласовывать записи, достаточно инвалидировать. Согласовывать 2 персистентных хранилища гораздо сложнее.
  • SQL и NoSQL в одном проекте

    @dborovikov
    on delete cascade тоже не всегда катит… Неплохое решение — логическое удаление корневых сущностей. Во-первых просто. Во-вторых если что-то не то задизейблится, можно восстановить. Эту же практику можно перенести и на монго.
  • Философия и практика безопасного программирования?

    @dborovikov
    Тогда аргументируйте зачем нужно переносить ассерты из тестов в код. А то я так и буду дальше считать себя гуру :)
  • J2EE и высокие нагрузки?

    @dborovikov
    Все вы правильно говорите, но опять же про «highload-начальный уровень». Если вам нужно сделать шардинг базы, то JPA будет только мешать (да, я знаю про Hibernate Shards, но в серьезных проектах его не используют). А если захотите ходить в БД ассинхронно, то будет мешать и JDBC. И так далее.
  • ORM и изменения объекта в разных местах кода?

    @dborovikov
    Если рассматривать одну сессию, то хороший ORM должен использовать identity-map и там проблемы вообще не существует — ORM не допустит что бы в одной сессии было два объекта с одним идентификатором. Если ваш ORM не умеет, то сочувствую :)

    Насчет поля для версии — зависит от используемого ORM. Некоторые поддерживают из коробки. Все же я вам рекомендую иметь поле с версией в любом случае: оно будет сигналом для выявления ошибок.
  • Выбор языка и БД для высоконагруженного веб-приложения?

    @dborovikov
    Насчет «быстроты языка» расскажу такую историю. Был продукт, занимался он в основном тем, что собирал документы по сети. Написан он был на С++ и на каждый запрос создавал по треду. Продукт был переписан на Python и уже не создавал треда на каждый запрос, а использовал неблокирующий ввод-вывод. В итоге продукт получился быстрее. Это при том, что на синтетических тестах Python в десятки, а то и сотни раз «медленее».