• Как сделать веб-сервис и не утонуть в процессе?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Сначала прокачайте голову на проектах попроще.
    Ответ написан
    Комментировать
  • Что является основной причиной говнокода?

    Moskus
    @Moskus
    Говнокод - код, который написан, исходя из сиюминутных критериев или критериев, которые основаны на какой-то задаче, противоречащей основной задаче проекта. Скажем, если программист получает деньги за объем кода, а не его качество, он будет писать говнокод. Или если ему важнее всего успеть (потратить минимум времени), а не соблюдать качество продукта. Это при важном условии, если программист способен вообще писать качественный код за разумное время. Если нет, то любой код, который он пишет, автоматически подчиняется только одному требованию - имитации деятельности, потому будет говнокод полностью или в большой степени.
    Ответ написан
    Комментировать
  • Что является основной причиной говнокода?

    @McBernar
    Кажется, основная причина говнокода, как и любой другой плохой работы — это когда делают абы как, потому что у исполнителя нет никакого желания развиваться в своей области, и он делает так, чтобы быстрее отделаться от работы, а не чтобы было все грамотно и правильно.

    Если же говорить о корпоративном говнокоде, то там включаются в игру и другие параметры — тупость мендежеров, вечные изменения в ТЗ, сжатые сроки, нет возможности отрефакторить то, что уже сделано, потому что это время и деньги, а нужно бежать вперед, а рефакторить нужно, потому что изначально была плохо продумана архитектура, или же продукт начал расти туда, куда не планировал, поэтому приходится костылить. Ну и т.д.

    Думаю, надо к этому чуть более философски подходить. Костыли и говнокод — неизбежная данность современной коммерческой разработки.
    Ответ написан
    Комментировать
  • Что является основной причиной говнокода?

    dom1n1k
    @dom1n1k
    Тут как посмотреть. Непосредственных причин, которые приводят к говнокоду, может быть очень много:
    1. Отсутствие внятной аналитики и архитектуры
    2. Низкая квалификация исполнителей (он может и хотел бы сделать хорошо, но не знает и не умеет)
    3. Говнокодеры по складу характера (есть такие люди, которым даже если создать все условия, все равно сделают на от****сь, потому что и так сойдет)
    4. Недопонимание и сложные отношения в команде
    5. Сроки (бывают заведомо нереалистичные, а бывают просранные в процессе)
    6. Меняющиеся требования
    7. Плохо выстроенные процессы (документация, тесты и пр)
    8. Текучка кадров
    9. Политика руководства
    И тд и тп... Можно придумать ещё много пунктов.

    Но в конечном итоге все эти причины можно свести к одной первопричине - плохой менеджмент. Хороший менеджмент это такой непонятный зверь... Трудно сформулировать, понять, организовать. Косяки не сразу видны и ощутимы, но потом выливаются в проблемы. Если у вас есть хороший менеджер проекта - он на вес золота.
    Ответ написан
    1 комментарий
  • Как правильно использовать паттерны проектирования?

    Привет, автор. Вот мои мысли по этому поводу:
    1. Понимание паттернов программирования приходит только с опытом. Чтение одной лишь книги, без практики, практически ничего вам не даст. Материал быстро забудется. Лично я прочитал примерно половину книги, после чего пришлось её на время отложить. Как я и говорил - без тренировки на примерах материал быстро забылся. Вновь вспоминаться он стал при чтении книги "Принципы, паттерны и методики гибкой разработки на языке c#". В книге достаточно много подробных примеров, и именно после их выполнения я стал осознавать суть некоторых паттернов.
    Разумеется нельзя считать, что паттерн - это какое-либо строгое правило. Часть паттернов мы реализуем сами ещё до прочтения каких-либо книг. Паттерн - это возможное и удобное решение, которое можно применить для решения какой-либо задачи. Не надо пытаться заучить паттерны или вставлять их везде, где можно. Нужно просто писать как можно больше кода, тогда уже автоматически начинаешь видеть ситуации, где можно применить паттерн.
    2. По-поводу слабой связанности. Во всех книгах, разумеется, пишут, что слабая связанность - это хорошо. Но на самом деле такая архитектура не всегда оправдана, и специалисты в области разработки ПО об этом периодически напоминают. На практике это означает то, что не нужно везде применять интерфейсы только потому, что можно это делать. Если вы уверены, что ваши классы вряд ли будут когда-либо заменены другими, то лично я считаю, что они могут быть смело использованы друг-другом без принципа инверсии зависимостей. Ну и вопрос к модульному тестированию. Разумеется сильная связанность мешает модульному тестированию, но если вы не планируете его проводить, то быть может и не стоит строить избыточные абстракции.
    Лично я также считаю, что вышесказанной в меньшей степени справедливо для прикладных и вэб-приложений (где действительно важна модульность и тестировании), и в большей степени справедливо для игровых приложений. Лично я вообще с трудом представляю игру, в которой каждый игровой объект (танк, самолёт например) будет реализовывать интерфейс, чтобы теоретически когда-нибудь мы заменили танк на био-робота. Но это так, лирика.
    3. По-поводу повторного использования. Один мой товарищ - senior developer, работавший в серьёзных организациях, говорит, что повторное использование кода - это миф. Лично я повторно использовал разве что какие-нибудь вспомогательные функции. Ну или в лучшем случае несколько классов и интерфейсов для поддержки модульности. На мой взгляд, говорить о том, что можно взять и перенести из проекта в проект всю архитектуру особо не приходится.
    4. По-поводу контроллеров. Насколько я понимаю (опыт в разработке небольшой) основной смысл делать контроллеры зависимыми от интерфейсов только в том, чтобы тестировать эти контроллеры (хотя я не совсем понимаю зачем). Контроллер - это действительно такая вещь, которая с большой вероятностью будет использоваться только на конкретном сайте. Также этот контроллер будет завязан на какой-то интерфейс, предоставляющий бизнес-логику. Опять же вероятность, что один класс бизнес-логики будет заменён другим классом с такими же методами - стремится к нулю, особенно если учитывать то, что класс бизнес-логики зависит от интерфейса, который предоставляет методы получения данных. (если вы хотите изменить способ получения данных - вы изменяете, К примеру, класс репозитория, бизнес логика остаётся той же). В связи с этим я вижу пока только одну причину завязывать контроллеры на интерфейсы, а не конкретные классы бизнес-логики - это тестирование. Вы стабите интерфейс бизнес-логики и тестируете контроллер независимо от всех остальных модулей. Если не прав, поправьте, конечно.
    Ответ написан
    5 комментариев
  • На чем написать табло аэропорта?

    FedorK
    @FedorK
    Можно сделать клиентское приложение на JavaScript (с серверной прослойкой для доступа к БД, например, на PHP). В плане дизайна возможностей хоть отбавляй - HTML5 опять же.

    И это будет менее запарно и более масштабируемо, чем на Делфи.
    Ответ написан
    Комментировать
  • На чем написать табло аэропорта?

    BuriK666
    @BuriK666
    Компьютерный псих
    Сделайте HTML страничку и бразуер во весь экран.
    С помощью JavaScript и какого-нибудь серверного языка обновляйте данные.
    Ответ написан
    Комментировать
  • Как реализовано?

    @m-haritonov
    При заходе на сайт браузер передаёт по сети серверу порцию текстовой информации (называемой HTTP запросом), в которой, помимо прочего, содержатся строки вида:
    GET /PAGE/ HTTP/1.0
    Host: www.website.net

    А программа-сервер, когда получает такую порцию информации, может либо попытаться сопоставить переданную строку ("/PAGE/") с существующими файлами на сервере (и вернуть браузеру содержимое найденного файла для отображения), либо передать эту порцию информации в другую программу (например, PHP) и вернуть браузеру то, что вернёт эта программа.
    Ответ написан
    Комментировать
  • Как называются "составляющие" URL-а отделенные друг от друга слэшем?

    @m-haritonov
    Если не ошибаюсь, то "path segment".
    A path consists of a sequence of path segments separated by a slash
    ("/") character.

    https://tools.ietf.org/html/rfc3986#page-23
    Ответ написан
    Комментировать