Рубрика «сложность» - 3

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

image
Сможете поставить ещё шесть? А найти все решения?
(картинка из статьи)

Далее, к сожалению, произошла какая-то совершенно невразумительная история из цепочки вот таких вот превращений:

Стоит отметить, что пять наугад открытых ссылок на русском ещё меньше проясняли картину происходящего.

Я тут подумал — надо бы кому-то эту странную цепочку прервать и нормальным языком изложить суть событий.

О чём пойдёт речь:

Изменение восприятия сложности - 1
Хочу поделиться очень субъективными мыслями об изменении отношения к сложности за последние лет 50. Возможно, мои наблюдения касаются всей инженерии, но я поостерегусь и буду писать только про разработку ПО.

В последние годы мне стало казаться, что я упускаю что-то в методах разработки ПО. Весь мир радостно и с песней ускоряется, создаёт софт всё быстрее и быстрее, а я торможу. Чтобы не отставать, приходится преодолевать внутренний барьер неясной природы, действовать за границей которого выгодно но неприятно (мне). Не понятно почему выгодно. И не понятно почему неприятно.

Сегодня понял. В былые времена со сложностью боролись, теперь её игнорируют принимают. Переход между этими воззрениями был долгим и плавным, но уже можно видеть разительные отличия.

Я же учился в основном по материалам, созданным в прошлом веке, «древним манускриптам», да ещё и научную фантастику читал классическую, поэтому невольно стал приверженцем «старой школы». В чем же разница?
Читать полностью »

Здравствуйте! Насколько я следил за Хабром за все время его развития, он двигался в сторону все более и более высокопрофессиональных статей. Это, с одной стороны, хорошо. А с другой и не очень — потому что статьи для новичков в IT-сфере, на мой взгляд, тоже нужны, но если их публиковать, то трудно избежать обвинений в «разжевывании очевидного».

Поэтому у меня есть идея — а почему бы создателям Хабра не добавить в пост свойство «уровень сложности», показывающее, на какую аудиторию рассчитан пост. Тогда и новички, и профессионалы смогут публиковать материалы, рассчитанные на свою аудиторию, и смогут избежать взаимных обвинений в «неформате».
Читать полностью »

Когда я был начинающим программистом, – а впрочем, и позднее, когда я был начинающим ведущим разработчиком, – я думал, что спрогнозировать сроки, в которые ты что-то сделаешь, абсолютно невозможно. Или же, что хороший прогноз требует очень детальных проектирования и подготовки, примерно таких же по длительности, как и сама задача.

Позднее, конечно, я обнаружил, что по теме прогнозов написано несколько умных книжек, которые в сумме с некоторым опытом делают оценку задач хоть и неблагодарным, но и небезнадёжным занятием. Самым удобным способом, конечно, является оценка по аналогии: когда ты уже делал нечто подобное, ты довольно точно знаешь, каких усилий эта задача потребует. Но как быть в ситуации, когда опыта сравнительно немного или аналогии брать неоткуда, а оценить все же хочется?

В одной из команд, где я работал, мы придумали оригинальный метод для предварительной оценки задач. Метод синтезирует некоторые известные из литературы приёмы, но в приведённой форме, пожалуй, никем не описан. Концепция была следующей: объективность (связь с измеримыми показателями); интегрируемость с Agile; повторяемость; быстрота оценки (меньше 0.5% от объема задачи); доступность для начинающих разработчиков. Я буду рад обсудить нашу идею и не исключаю, что кому-то из Хабрааудитории она придётся по душе.
Читать полностью »

Заметки о SQL и реляционной алгебре - 1

На Хабре и за его пределами часто обсуждают реляционную алгебру и SQL, но далеко не так часто акцентируют внимание на связи между этими формализмами. В данной статье мы отправимся к самым корням теории запросов: реляционному исчислению, реляционной алгебре и языку SQL. Мы разберем их на простых примерах, а также увидим, что бывает полезно переключаться между формализмами для анализа и написания запросов.

Зачем это может быть нужно сегодня? Не только специалистам по анализу данных и администраторам баз данных приходится работать с данными, фактически мало кому не приходится что-то извлекать из (полу-)структурированных данных или трансформировать уже имеющиеся. Для того, чтобы иметь хорошее представление почему языки запросов устроены определенным образом и осознанно их использовать нужно разобраться с ядром, лежащим в основе. Об этом мы сегодня и поговорим.

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

Содержание

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

Излишняя сложность как причина дополнительных скрытых издержек - 1

Мы часто говорим кому-то фразы наподобие «Мне нужно всего лишь несколько часов, чтобы это сделать/реализовать/внедрить». Но спустя какое-то время после окончания работ вдруг осознаём, что нам приходится регулярно исправлять баги и ошибки, объяснять устройство и алгоритм работы другим инженерам и разработчикам, или помогать отвечать на вопросы клиентов. И получается, что объём времени, затраченного на поддержку вашего детища, многократно превышает те несколько часов, что ушли на его создание.

В разработке ПО одним из самых трудно усваиваемых правил является то, что с увеличением сложности продукта растут и скрытые издержки. Иногда сложность является лишь следствием каких-то иных проблем. Очень непросто найти баланс между «продающими» и «нагрузочными» свойствами продукта, особенно в свете определения его стоимости и регулирования спроса и предложения. Столь же трудно заниматься поддержкой качества продукта и расширять круг потребителей. Или, скажем, разработать текстовый редактор с богатыми возможностями, одинаково быстро и устойчиво работающий на всех устройствах и поддерживающий совместную работу над документами в реальном времени. Иными словами, зачастую приходится усложнять продукт, чтобы он стал успешным на рынке.
Читать полностью »


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