Задать вопрос
  • Как C/C++ обрабатывает составные условия?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Тип подобных операций называется строгие и полустрогие.
    В англ. языке это называется "Short-circuit evaluation"
    А вот Is short-circuiting boolean operators mandated in ... это вопрос на stackoverflow.
    Ответ написан
    Комментировать
  • Математика и программирование - так ли это нужно?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Иван Раковников:
    1. Математический и логический склад ума еще никому не мешал! Даже если не будете программистом, то потраченное время на изучение математики и развитие логического мышления окупится в будущем! Вы будете более успешнее и эффективнее решать Ваши жизненные проблемы в будущем!
    2. Программистом можно быть не зная математики. Но! Качество труда. Скорость разработки. Эффективность. Нахождение более качественных решений. Все это удается, как правило, чаще тем кто знает математику!
    Ответ написан
    Комментировать
  • Можно ли ускорить доступ к файлу из нескольких потоков одновременно используя memory-mapped files?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1. Сама Windows многое кэширует
    2. На мой взгляд I/O операции следует разделять только тогда, когда другие вычислительные процессы достаточно длительные и I/O поток будет успевать к очередному запросу прочитать, иначе зачем?
    Ответ написан
    Комментировать
  • С чего начать программирование?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Если Вы воообще никогда ничего не программировали. Даже for, while мудренно для Вас, то рекомендую освоить книгу:
    "Освойте самостоятельно C++ за 21 день", Дж. Либерти.

    Послее надо будет "освежить" знания и поставить мышление на "программерские рельсы" и для этого рекомендую прочесть Лафоре, "Объектно ориентированное Программирование в C++".

    После этих двух книг рекомендую прочесть:
    Вайсфельд М. , "Объектно-ориентированное мышление", Библиотека программиста, 2014

    На мой взгляд. Если Вы будете знать C++ в остальных языках разобраться точно сможете!
    Ответ написан
    4 комментария
  • Книга Стивена Прата по C++ для начинающего?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вы слишком мало описали Вашу ситуацию! Был ли у Вас опыт программирования? - от этого ответа появляются разные типы "начинающих".

    Если Вы ранее не программировали и только только садитесь за комп с целью написать программу, то рекомендую:
    "Освойте самостоятельно C++ за 21 день", Дж. Либерти

    Если же Вы уже имеете хоть какой-то опыт программирования, то:
    Лафоре "Объектно ориентированное программирование в C++"

    После нее прочтения одно из книг выше рекомендую: Б.Страуструп. Дизайн и эволюция C++ , 2006
    Ответ написан
    Комментировать
  • Польза олимпиадного программирования, миф или реальность?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Прежде чем браться за решение по выбору между чем-то одним и чем-то другим я бы рекомендовал задаваться вопросом: "А есть ли еще более важные вещи?". Я к тому что Вы сейчас можете выбирать между теорией алгоритмов и технологиями, но при этом вдруг есть более важный навык который прокачан не так как хотелось. Рискну предположить, вдруг Вам надо прокачать мега-навык для любого программера : "Английский на уровне чтения тех.летературы". Если я угадал, то лучше потратьте время на него!
    Ответ написан
    Комментировать
  • Нужно ли стартаперу знать языки программирования?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Qzaur На мой взгляд, весьма желательно! Но знать не профессионально, а достаточный минимум, чтобы суметь оценить хотя бы примерно сколько та или иная задача займет по времени? К примеру "Установить Python на windows". Я могу сказать Вам, что эта задача не реально сложная и займет около 3-х дней, сам поставлю за 5 мин, а остальное время буду тратить на себя. Как Вы поймете, что эта задача действительно занимает меньше 3-х дней?

    Варианты:
    1. Собственный опыт
    2. Опыт участников команды

    Из опыта скажу, что команды различные бывают. Бывают все участники проект более менее понимают, но есть специализация. А есть строго специализация, когда один участник договаривается с другим о том что ему нужно для дальнейшей работы. Так вот, если у Вас будет команда второго типа, то надеяться на мнение участников команды не всегда получится.

    Как ни крути. А риски значительно снижаются, если Вы умнее! ;)
    Ответ написан
    Комментировать
  • Блоговедение или программирование?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Денис Каракчиев Могу ошибаться, поэтому выскажу всего лишь свое мнение, которое может быть ошибочным.

    Итак, блог и программирование они хоть и разные вещи, как Самолет и одеяло, но они взаимосвязаны.
    Связь в том, что программист программируя "мыслит", он не просто с небес\потолка или еще откуда берет код, он его "думает и переживает". Когда Вы пишите мысли о той или иной технологии Вы лучше и глубже начинаете понимать то что Вы описываете! Поэтому и говорят "Учитель учится больше, потому что ученик задаст такие вопросы, до которых учитель ни разу бы и не додумался".

    Блог вести надо, по след. причинами:
    1. Помогаете другим
    2. Получаете критику "Да ктож так пишет-то? Надо ...." и через аргументированную критику учитесь тому, что в книгах едва ли пишут!
    3. Пиаритесь. Кто-то решив свою задачу, может порекомендовать Вас своему руководству в качестве нового сотрудника "А давайте-ка попробуем его в нашу компанию позвать?"
    4. Это Ваш собственный справочник. Написанный тем человеком, который лучше всех Вас понимает! И тем языком и речевыми оборотами, которые Вы лучше понимаете. При этом следует учесть "Вы сейчас" != "Вы вчера".

    Программирование это процесс мышления, очень часто приходится принимать различные решения . Примеры: "А что если если я объект std::string передам в виде... ?" или "Насколько Важно здесь поставить ... ?" и др. Все это может быть основано на Вашем же опыте изложенном в блоге! Отсюда п.5.

    5. Блог это Ваш описанный опыт.
    Ответ написан
    1 комментарий
  • Зачем нужен ООП?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Не везде и не всегда нужны классы. Вы верно заметили. НО! Прежде чем принять решение о том, что в конкретном месте кода класс только вредит, нужен профайлер или другие инструменты позволяющие принять такое решение. К примеру в Python словарь значительно выигрывает по скорости чем класс с методами.

    Фишка ООП в том, что человек уже думает классами! Поднимаем голову к небу и видим "Птица летит", другими словами "У объекта "Птица" был вызван метод "Лететь"", но мы так сложно не думаем и для нас это просто "Летящая птица".
    Вспомните детство и моменты когда родители посылали за хлебом. Как это происходило? Возможно это было так: "Объект сын в твое поле ложу объект "Задача" с полями "хлеб", "комод" и "100 рублей", в поле "результат" ложу "Хлеб". Объект сын вызываю метод "Купить"". Не думаю что это было так, мне кажется это было так: "Сын возьми 100 рублей и купи хлеба". В неявном виде обратились к объекту "Сын", вызвали метод "Взять" и передали аргумент "100 рублей" и ожидаем результат вызова в виде значения "Хлеб".

    Попробуйте процедурный подход переложить в нашу естественную жизнь? ;) Попробуйте так общаться, процедурно. Это очень сложно. Потому что человек привык думать объектами! Самолет, кошка, лошадь, дерево и др. Для нас вроде есть концепция "кошка", но конкретная кошка "Масяня" сильно отличается от другой конкретной кошки "Машка".

    Изучая задачу мы прежде всего должны задать вопрос : "Что является условием завершения задачи?" и вторым не менее важным "Что используется при достижении результата?". Вот это "что используется" как правило и есть объекты.
    Ответ написан
    8 комментариев
  • Как рассказать о негативном опыте сотрудничества с пользователем Хабра?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    manuel_pablo Извините, но то что Вы написали похоже на истерику. Ни фактов, ни входных данных. Ничего!

    Итак. Вопросы:
    1. Что являлось условием окончания работы и было ли это записано в письменном виде в виде договора?
    2. Вы, как заказчик, провели приемочное тестирование принимаемого Вами результата от исполнителя?

    Пока вижу, что от таких заказчиков надо спасаться:
    1. Письменным договором
    2. Письменным тестом, что приемочное тестирование провел и у заказчика нет вопросов по результату
    3. Письменное ознакомление с подтверждением от заказчика, что дальнейшее сотрудничество после принятия результата это совершенно другая работа и она оплачивается отдельно.
    Ответ написан
    Комментировать
  • Как правильно тестировать классы?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1.
    Приходят данные, как мне протестить их, может пришло не то!
    Для этого надо задать себе вопрос "А какие именно данные будут не теми?" и переписать их на листочке или же запомнить и держать в голове.

    2.
    >>Создавать доп базу?
    Нет! Для класса работающего с базой написать рефакторинг. Сутью рефакторинга перепроектировать на наследование этого класса работающего с БД от некоего интерфейса. Дальше от интерфейса породить несколько классов потомков на каждую ситуацию описанную в п.1. это будут моки, а вернее State-классы.

    Этот вид тестирования называется "State-based testing". Основан на том что заранее пишутся классы имеющее вполне заранее определенное и конкретное состояние, как правило захардкоженное(В data driven testing пока не вдавайтесь, ибо увязнете в деталях). Такие классы нужно писать как можно проще !!! Чтобы в будущем удалять код не было так жалко )))

    3)
    В тест-методах , т.е. в юнит-тестах вызываете production-код,но подставляете не реальную БД, а классы написанные п.2. и проверяете состояние.

    Попробую написать простейший псевдокод, сходство с конкретным языком чисто случайно:

    interface StudentDataBase:
      getName()
      getAge()
    
    // production code
    class OracleDataBase implements StudentDataBase
      getName()
      getAge()
    
    // For Testing goal
    class BadNameCorectAge implements StudentDataBase
      getName() {
        return 'Wrong-name'
      }
      getAge() {
        return 19;
      }
    
    TEST(WithBadNameForStudent) {
       // [1] Подготовительная часть. Т.е. 'Arrange' из паттерна Arrange-Act-Assert
        BadNameCorectAge database;
        // Здесь с псевдо-базой используется код из production-части, который вы хотите проверить
        TestObject testObj;
        testObj->setDataBase(database);
    
       // Выполняем действие в production-части и тут же проверяем 
      // [2] Другими словами это совмещенная Act-Assert из паттерна ArrangeAct-Assert
        EXPECT_EXCEPTION(testObj->process(), WrongNameException);
    }
    Ответ написан
    Комментировать
  • Куда разместить методы?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Следуйте принципу наименьшего удивления. Другими словами, найдите 3-4 программистов, которых Вы чье мнение цените и уважаете и спросите "Где бы ты искал в проекте класса описывающий приложение , но чье состояние читается из базы данных?". Если у 2 программеров мнение будет похожим, вероятно и Вы в будущем будете искать там же!
    А вообще оба метода, на мой взгляд, относятся к уровню представления данных, т.е. в паттерне MVC это часть "Модель". Мне кажется следует поступить так:
    * Эти два метода нужно расположить в одном классе. Но не в Возможные
    * Сообразить интерфейс с этими двумя методами, от него породить потомок , имеющийся DB . Это чтобы не привязывать к конкретному месту расположения, вдруг в след раз не DB будет, а Cloud или еще что-то.
    Ответ написан
    Комментировать
  • Какой Todo/GTD сервис выбрать?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Я использую Evernote. Пока хватает.
    Ответ написан
  • Путь программиста новичка: Паскаль>C>Java?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    В виду того что образования нет и как вывод опыта нет, то Вы не можете ясно сказать себе "Я хочу заниматься вот именно ..... хренью" На это требуется время и опыт. Что делать? Как ни странно, но только пробовать! Запилите несколько небольших проектов из каждого направления. После этого вопросы будут более конкретны
    Ответ написан
    Комментировать
  • Как развить мышление для программирования?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Мне кажется у Вас проблема в другом. То что скажу это лишь мое мнение и оно может быть не верным, но тем не менее рекомендую подумать над моими словами.

    Ваша проблема в непонимании того, что Вы хотите достичь?

    Понимаете, есть разные цели: программировать, чтобы решать задачи и программировать, чтобы программы работали еще быстрее. Это абсолютно разные цели!

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

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Я бы порекомендовал почитать следующее:
    1. Б.Мейер, Почувствуй класс
    2. Стив Макконнелл, Совершенный код
    3. Мартин, Чистый код
    4. Кент Бек, Разработка через тестирование
    5. Фаулер М. Рефакторинг. Улучшение существующего кода
    6. Шаблоны тестирования xUnit. Рефакторинг кода тестов
    Ответ написан
    Комментировать
  • Какие есть отличные уроки по Python?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Не знаю подойдет ли Вам мой путь развития. Опишу свой путь изучения Python-а, т.е. ту "дорожку" по которой прошел сам.
    У меня были задачи разного характера:
    * Поискать в логах тестируемого приложения значения одного типа и принять решение, ошибка сборки или нет
    * Обновить версию приложения в исходном код на основе входного json-файла содержащую параметры новой версии
    * Скачать исходники из Mercurial из текущей ревизии, Собрать приложение, Запустить тестовое приложение и если обнаружена ошибка, то откатиться до предыдущего тега по формату ver__ и повторить снова. После обнаружения тега на котором ошибки нет напечатать это в логе

    Любой язык программирования учится значительно быстрее, если Вы решаете не "ханойские башни", а непосредственно свои проблемы или проблемы команды с которой пилите проблемы.

    Уверяю Вас: задача + справочник Д.Бизли + Stackoverflow = то что Вам нужно!
    Ответ написан
    Комментировать
  • В чем отличия C++ и C# ?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1) Это две разные вселенные. Но при этом можно переключать мозги на разработку в один промежуток времени на С++, а после чашки чая на C#. Если нужно быстро решить проблему и при этом не парится с эффективностью выполнения программы, то C#, иначе при написании системного кода который оооочень много работает на уровне байтов, word,dword то это С++.
    2) То что у них общий дедушка еще не значит что они похожи. Отличий много! Причем действительно много. Используются разные идиомы, трюки, подходы. К примеру C++ идиому traits попробуй повтори на C#. А иногда она очень выручает!!!
    Ответ написан
    Комментировать
  • Какую книгу по программированию выбрать?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Нет точного ответа на Ваш вопрос. У каждого свои желания и стремления. Как вывод, поставьте себе план того, что Вы хотите достичь и по каждому пункту после детализации плана найдите несколько книг. Не следует останавливаться на какой-то одной книге, потому что опыт авторов разный! Каждый по разному поясняет. Чем больше точек зрения, тем лучше Ваше понимание. Да и в одной книге может быть непонятно, а в другой понятно. Как вывод, в виду того что Вам нужны знания, а не умение понять конкретного автора, то следует следовать строго плану и как только будет понимание конкретного пункта, переходить к следующему
    Ответ написан
    Комментировать
  • Вы находили ошибки в книге "Философия Java" ("Thinking in Java")?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вы о чем? О результате автора или о переводе? Если о последнем, то не удивительно
    Ответ написан
    Комментировать