Метка «здравый смысл»

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

Это все понятно, но почему руководство в больших организациях зачастую принимает не просто неоптимальные, но абсурдные решения? Почему не руководствоваться ну хотя бы здравым смыслом?
Под катом несколько примеров из трудовой биографии старого опытного программиста.
Читать полностью »

The Good, the Bad and the Ugly code
Хороший код или плохой? Лично для меня хороший код обладает следующими качествами:

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

Несмотря на короткое описание, о том, как добиться выполнения трех этих условий, написано много толстых книг.

Почему именно эти критерии? Сразу оговорюсь, речь сейчас идет о разработке ПО для бизнеса (enterprise application). Критерии оценки кода для систем реального времени, самолетов, систем жизнеобеспечения и МКС отличаются.
Читать полностью »

Существует много модных современных концепций: Agile, Lean Startup, Customer Development, Worse is Better, TDD, SaaS. Все они хороши. Вникание, а тем более использование, сильно расширяет горизонты. Но надо понимать, что это всё довольно общие вещи. Нужно не забывать использовать голову и чётко осознавать применимость в собственном проекте.

Фанатичное следование методологии напоминает восторг от осознания какой-то возможности в языке программирования. Я сам поддавался такому не раз: «Круто, в Python есть метаклассы — срочно используем в проекте» — несмотря на то, что того же самого можно было добиться обычными атрибутами класса. «Вау, макросы Lisp — это супер, накодим их побольше» — хотя можно было обойтись функциями высшего порядка. Сначала делаешь так, а со временем свыкаешься и уже не суёшь эту мощную возможность куда попало, а используешь, только если она действительно нужна.

Все теории когда-то были молодыми. Даже те, что сейчас считаются немодными и устаревшими когда-то были прорывом. Просто сейчас они утратили былой блеск, так же, как утрачивают блеск мощные возможности в языке программирования.

Где тот момент, когда они устаревают? Где те условия, в которых они работают, и в которых уже нет? Может быть, новый тренд уже стал устойчивым стереотипом и необходимо движение дальше? Эти вопросы нужно всегда задавать себе и пользоваться/не пользоваться концепцией не потому что она прогрессивна/устарела, а потому что она подходит/не подходит лично вам в конкретном деле.
Читать полностью »

Ответ на статью.

Если вы не разрабатываете ПО для машин или систем автоматического поддержания жизни и тд — нижесказанное работает для вас при грамотном применении

Во-первых, говнокод на первом этапе обязателен. Причин куча. Раз — вы ничего не знаете о реальных условиях работы приложения, все ваши домыслы фигня. Пока реальный опыт не получен, пока не занесены первые живые данные реальным пользователем — у вас нет обратной связи. Если вы не согласны, почитайте Макконнелла, миф о стабильных требованиях, и получите левелап.
Читать полностью »

Ответ на статью.

Если вы не разрабатываете ПО для машин или систем автоматического поддержания жизни и тд — нижесказанное работает для вас при грамотном применении.

Сразу скажу — не моя идея, в статье «Проектирования больше нет?» сам Мартин Фаулер писал об эволюционном рефакторинге. А Боб Мартин даже целую книгу запилил с примером поэтапного развития приложения (и не одним), назвав «Быстрая разработка ПО» и продемонстрировав умение виртуозно материться на Java и C++.

Во-первых, говнокод на первом этапе обязателен. Причин куча. Раз — вы ничего не знаете о реальных условиях работы приложения, все ваши домыслы фигня. Пока реальный опыт не получен, пока не занесены первые живые данные реальным пользователем — у вас нет обратной связи. Если вы не согласны, почитайте Макконнелла, миф о стабильных требованиях, и получите левелап.
Читать полностью »

Товарищи читатели, а вы рассматривали всю шумиху, где слово Samsung соседствует со словом Apple, как осознанную (и куда как эффективную!) маркетинговую политику первой? В которой основная роль отводится как раз всем нам, «технически подкованным» крикунам, которых хлебом не корми — дай похоливарить?
Читать полностью »

Стандартная поговорка на любые с данными: бэкап делать надо было. И как бы никто возразить не может.

Однако…

Когда мы говорим «бэкап делать надо» обычно мы говорим про бэкап тех данных, которые потеряны. Мол, потратил бы 2 минуты, не горевал бы сейчас о потерянном месяце работы.

Однако, в этой фразе есть лукавство. Если бы мы знали, что именно эти данные будут потеряны, то разумеется, мы бы сделали их резервную копию. Однако, предсказывать будущее не может даже SMART, куда уж простым смертным.

Так что фраза «бэкапы надо делать» касается всех ценных данных. Делай бэкап всего и тогда конкретная авария обернётся восстановлением бэкапа, а не сожалением о потерянных данных.

Но две ли это минуты?

Вместо рассуждений я попробую поиграть в математику.
Читать полностью »

image Данная статья предназначена для разъяснения сути фундаментальных методов построения и оптимизации «искусственного интеллекта» для компьютерных игр (в основном антагонистических). На примере игры в зайца и волков будет рассмотрен алгоритм «Минимакс» и алгоритм его оптимизации «Альфа-бета отсечение». Помимо текстового описания, статья содержит иллюстрации, таблицы, исходники, и готовую кроссплатформенную игру с открытым кодом, в которой вы сможете посоревноваться с интеллектуальным агентом.Читать полностью »

Здравый смысл веборазработчика подсказывает, что во браузерном джаваскрипте глобальные переменные являются свойствами объекта window — так что window.чегоНибудь и просто чегоНибудь должны быть синонимами и вести себя одинаково (если, конечно, мы не находимся в какой-нибудь такой функции, где переменную чегоНибудь переопределили локально).

Здравый смысл веборазработчика также ещё подсказывает, что неопределённая переменная должна иметь значение undefined — так что чегоНибудь и undefined должны быть синонимами и вести себя одинаково, если переменную чегоНибудь не упоминали в джаваскрипте, и если какой-нибудь чудила не дерзнул переопределить undefined.

Но если вы собираетесь программировать для Opera 11 (будь то начальная версия Opera 11.01 или новёхонькая Opera 11.61), то будьте готовы отречься от здравого смысла в обоих сих случаях! (Да и не только в Opera, как я покажу чуть ниже.)

Чтобы нагляднейше убедиться в этом, воспользуемся библиотекою Underscore.js, в которой как раз имеется удобная функция тестирования неопределённых переменных — это функция _.isUndefined(), в исходном коде определённая самоочевидным способом:

// Is a given variable undefined?
_.isUndefined = function(obj) {
   return obj === void 0;
};

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js