• Что значит "развитое логическое мышление"?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Не беспокойтесь. У Вас эта штука точно есть.
    Ответ написан
    2 комментария
  • Хорошие курсы C# для начинающих?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Если в Москве и платно, то идите на курсы ЦКО "Специалист" при МВТУ им. Баумана. Официальные курсы Microsoft. Например, www.specialist.ru/course/m20483
    Получите официальный диплом гособразца и сертификат Microsoft.

    Если хотите бесплатные и on-line, то идите в ИНТУИТ: www.intuit.ru
    Получите сертификат ИНТУИТ.
    Ответ написан
    7 комментариев
  • Code Review, как это фактически происходит?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Вот хороший ответ на Ваш вопрос: habrahabr.ru/post/142564
    На мой взгляд, CR - единственное средство борьбы с трудно уловимыми ошибками, которые обычно не удаётся воспроизвести на тестах, и которые вследствие хитрого сплетения обстоятельств не дают спокойно работать нашим пользователям.
    Причём у нас три уровня борьбы, на каждом из которых используется CR: при детальном конструировании архитектор или ведущий разработчик анализирует готовый код на предмет корректного вмешательства в его работу (принцип "не навреди") и на предмет повторного использования готовых компонентов, затем после реализации проводится обзор кода на предмет его оптимальности и детального понимания принципов работы реализованного компонента (последнее важно для разработчиков, которые будут использовать компонент при дальнейшей работе над кодом), и, конечно, при диагностике сбоев системы.
    Ответ написан
    Комментировать
  • Целесообразна ли статическая типизация в веб-программировании?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Наверное, эта статья Вам поможет: habrahabr.ru/post/161205
    Ответ написан
    Комментировать
  • Как реализовать архитектуру масштабируемого Websocket сервера?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Мы аварийные ситуации отслеживаем мониторингом. Как только сервер отваливается, мы обрабатываем соответствующее событие (в Вашем случае, как я понял, это будет коррекция данных). Скорость реакции зависит от того, как быстро мониторинг узнает о сбое. В любом случае есть некоторое время, когда клиенты могут получить устаревшую информацию.

    Сбои бывают разные. Крах процесса, крах ОС, отказы оборудования. Тут нужен определённый анализ угроз для Вашей системы. Мониторинг должен отрабатывать все критические ситуации.

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

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Я часто провожу собеседования с кандидатами. Такие "проекты" скорее минус. Опыта за пару недель Вы не приобретёте никак. Люди, которые говорят, что за неделю освоят что-то серьёзное, наивны и неопытны. Им опасно доверять серьёзную работу. Скорее, я возьму человека, который честно скажет, что не имеет практического опыта, но при этом имеет реалистичный план своего профессионального развития. Ему можно доверять, потому что он честен с собой и умеет трезво оценивать предстоящую работу. Его проще научить.
    Ответ написан
    2 комментария
  • Как получить доступ к объекту А содержащего объект Б из объекта Б?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Всё просто. Делаете класс для объекта А. Затем - класс для объекта Б. В классе Б объявляете поле a типа А. В классе А - поле b типа Б. Изначально при создании экземпляра класса А ссылка на объект класса Б в поле b будет пустой (null). При создании экземпляра класса Б его поле a со ссылкой на объект класса А тоже будет содержать пустое значение null. Пусть для объекта А задан метод Link, который в качестве параметра получает ссылку на объект класса Б. Внутри этого метода можно присвоить полю A.b указанную ссылку на объект Б, а затем полю Б.а можно присвоить ссылку на объект А, метод Link которого был вызван.

    Объект Б можно создавать в конструкторе объекта А, тогда там же задавайте значения полям.

    Аналогично, можно в классе А задать поле типа массив объектов Б. При внесении нового объекта в массив можно задавать ссылку на А в поле Б.a.
    Ответ написан
    Комментировать
  • Проектирование архитектуры классов модели. Какой из двух вариантов выбрать?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Класс "Заказ" может иметь указатель на экземпляр класса "Заказчик" (в случае ООП это будет ссылка на объект). Каждый "Заказчик" может иметь список "Заказов" (массив указателей на сделанные им заказы).

    "Заказ" должен быть композицией нескольких составных частей - "работ", каждая из которых должна иметь указатель на исполнителя, а "Исполнитель" может иметь массив указателей на "работы", которые ему назначены.

    При таком исполнении не нужно смотреть все заказы, чтобы выявить относящиеся к данному заказчику. И не нужно отдельно выбирать работы для исполнителя. Вы же работаете с классами, а не с таблицами БД: тут логика несколько иная. Реляционные БД основаны на теории множеств, а не на теории взаимосвязанных объектов.
    Ответ написан
    Комментировать
  • Как реализовать сценарий транзации?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Вы не смотрели класс TransactionScope? https://msdn.microsoft.com/ru-ru/library/system.tr...(v=vs.110).aspx
    Ответ написан
    Комментировать
  • Как привязать регистрацию на сайте к сервису рассылок?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Например, почитать можно документацию на нужный интерфейс. Например, здесь: apidocs.getresponse.com/en
    Ответ написан
    Комментировать
  • Как обеспечить прозрачный доступ к зашифрованным файлам без их полного расшифрования?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    На данный момент я использую такой поход:
    1. При подключении контейнера полностью расшифровываю все файлы в обычную папку.
    2. Монтирую папку как диск.
    3. Наблюдаю за событиями в папке с расшифрованными файлами используя WatchService.
    4. Например, при добавление нового файла зашифровываю его и сохраняю в контейнер.
    5. После отключения контейнера удаляю все расшифрованные файлы и отключаю папку.


    Вы хотите сказать, что при аварийном завершении программы папка с расшифрованными файлами останется на диске? И пытаетесь то же самое повернуть через сетевой диск? Мне кажется, что нужно искать другой подход.
    Ответ написан
    1 комментарий
  • Литература которую обязан прочитать каждый программист?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Если .NET, то:

    Стив Макконнелл. Совершенный код. Практическое руководство по разработке программного обеспечения. - Пер. с англ. - СПб.: Питер, 2005.

    Джеффри Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. 3-е издание. - СПб.: Питер, 2012.

    А.В. Макаров, С.Ю. Скоробогатов, А.М. Чеповский. Common Intermediate Language и системное программирование в Microsoft .NET. 2-е издание. - М.: Интернет-Университет Информационных Технологий, 2007.

    Л. Константайн, Л. Локвуд. Разработка программного обеспечения. - Пер. с англ. - СПб.: Питер, 2004
    Ответ написан
  • Перспективы Delphi?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Я писал о проблеме Delphi ещё в 2009-м году. Сам много разрабатывал на нём, но уже тогда стало понятно, что этот язык умирает. Подробнее можете посмотреть здесь или здесь, перепечатывать не буду. С Embarcadero связан до сих пор, но ниши для него в моих коммерческих проектах нет и не предвидится.
    Ответ написан
    Комментировать
  • Как правильно развиваться в программировании?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Даю пункты:
    1. Понять, кем надо стать лет через 5.
    2. Понять основные компетенции, которые к тому моменту нужно иметь.
    3. Расставить приоритеты освоения компетенций.
    4. Вкладывать время, силы и деньги в получение нужных компетенций.
    5. Не реже раза в год пересматривать цель и список компетенций.

    У Вас есть опыт работы с C++. Отсюда можно пойти в системное программирование, в прикладное программирование, в архитектуру ПО, в аналитику, в управление. Решите для себя, что Вам ближе.

    К сожалению, более подробно план не дам. Его детализация зависит от Вашей цели.
    Ответ написан
    Комментировать
  • Программная архитектура: что почитать?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Мартин Фаулер. Архитектура корпоративных программных приложений. - Пер. с англ. — М.: Издательский дом "Вильяме", 2006.

    Руководство Microsoft по проектированию архитектуры приложений. 2-е издание. - Microsoft Patterns & Practices Team, 2010.

    Анализ требований и создание архитектуры решений на основе Microsoft .NET - Microsoft, Русская редакция, 2004.
    Ответ написан
    Комментировать
  • Есть ли инструменты для разработки архитектуры проекта?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Sparx Enterprise Architect
    Ответ написан
    Комментировать
  • Вопрос тем, кто недавно читал книгу Боба Мартина - "методика гибкой разработки на c#".?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Ищите реализацию метода Change(e); Этот метод производит изменения и сохраняет результат.
    Ответ написан
  • К какому классу можно отнести описанную систему?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Боюсь, не смогу дать чёткого решения проблемы, слишком мало данных. Но может, мой опыт пригодится.

    В своё время делал комплексную систему безопасности. Это был коробочный продукт, при мне выпустили 4 версии. В системе требовалось привязать кучу оборудования: видеокамеры, считыватели, СКУД, сканеры документов и прочую снедь. Проблему решили просто: были созданы унифицированные абстрактные классы под каждый класс оборудования: для сканеров (получение сканов документов), под СКУД (информация о проходах), под считыватели (события чтения карт, билетов, биометрии), под камеры (получение видео и фотоизображений), под системы распознавания изображений... Абстрактные классы имели абстрактные методы для получения входных данных и реализацию методов дальнейшей обработки информации, соответствующих данному классу устройств. Реализация конкретных классов для конкретных моделей устройств была вытащена в плагины, которые подцеплялись динамически.

    Мы всегда знали, какие устройства поддерживаем, и делали под них соответствующие плагины. Интерфейсы и абстрактные классы переделывать было не нужно, они не менялись. Допустим, было несколько считывателей: магнитные карты нескольких типов, билеты со штрих-кодом, отпечатки пальцев... Но они все были нужны, чтобы выполнить одну функцию: опознать владельца предъявленного идентификатора. Поэтому реализация плагина была для каждого устройства своя, а вот интерфейс его взаимодействия с ядром системы - один на все устройства.
    Ответ написан
    Комментировать
  • С чего начинать проектировать приложение?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Предположим, что с будущей функциональностью Вы определились. Тогда Вы точно знаете, кто или что будет поставлять данные, и кто/что будет их потреблять.

    Теперь выясните, кто будет обращаться к вашей системе, чтобы передать или забрать данные, а к чему будет обращаться Ваша программа. Те системы или пользователи, которые обращаются к программе сами, нарисуйте схематически на листе бумаги вверху. Те, к которым будет обращаться программа (включая БД), - снизу.

    Теперь нарисуйте под каждым нарисованным сверху субъектом прямоугольник с названием UI или API - это интерфейсы, к которым будет обращаться пользователь или внешняя управляющая система. Иногда UI тоже может обращаться к API. Объедините все прямоугольники с UI одним контуром и обзовите слоем UI. Объедините все прямоугольники с API и обзовите слоем сервисов.

    Для систем, нарисованных снизу, укажите компоненты, которые будут отвечать за доступ к этим системам. Объедините все эти компоненты одним контуром и обзовите слоем доступа к данным.

    Между слоем сервисов и слоем доступа к данным нарисуйте большой контур и назовите его слоем бизнес-логики. В маленьких прямоугольниках внутри этого контура перечислите основные бизнес-задачи. Один компонент Вашей системы будет решать одну бизнес-задачу.

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

    Получите логическую архитектуру. Разбросайте слои по серверам - получите физическую архитектуру.

    А дальше - детально прорабатывайте каждый маленький квадратик. Всё.
    Ответ написан
    2 комментария