Pull to refresh
39
0
Коротаев Александр @aavezel

Пользователь

Send message

Ну, почитайте источники, блин, а не наколенное использование:

Из всех принципов SOLID наиболее трудно понимаемым является принцип единственной ответственности (Single Responsibility Principle, SRP). Это, вероятно, обусловлено выбором названия, недостаточно точно соответствующего сути. Услышав это название, многие программисты решают: оно означает, что каждый модуль должен отвечать за что-то одно.

Самое интересное, что такой принцип действительно существует. Он гласит: функция должна делать что-то одно и только одно. Этот принцип мы используем, когда делим большие функции на меньшие, то есть на более низком уровне. Но он не является одним из принципов SOLID — это не принцип единственной ответственности. Традиционно принцип единственной ответственности описывался так:

Модуль должен иметь одну и только одну причину для изменения.

Программное обеспечение изменяется для удовлетворения нужд пользователей и заинтересованных лиц. Пользователи и заинтересованные лица как раз и есть та самая «причина для изменения», о которой говорит принцип. Фактически принцип можно перефразировать так:

Модуль должен отвечать за одного и только за одного пользователя или заинтересованное лицо.

К сожалению, слова «пользователь» и «заинтересованное лицо» не совсем правильно использовать здесь, потому что одного и того же изменения системы могут желать несколько пользователей или заинтересованных лиц. Более правильным выглядит понятие группы, состоящей из одного или нескольких лиц, желающих данного изменения. Мы будем называть такие группы акторами (actor). Соответственно, окончательная версия принципа единственной ответственности выглядит так:

Модуль должен отвечать за одного и только за одного актора.

В той же английской вики написано всё верно

К SRP принцип единой ответственности не имеет отношение. Под SRP понимается принцип единого ответственного. Это хотя часто взаимозависимые понятия, но они в корне разные.

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

Вы реально при помощи No-Code два числа складываете и думаете, что это хреново получается? Это же не из пушки по воробьям, это крылатой ракетой по микробу. В реальном no-code решении вы не будете через интерфейс складывать 2 числа, скорее всего у вас будет блок который уже выдает сложенные числа. Вы не будете на no-code вычислять простые числа, у вас уже будет блок с ускоренным решетом или тестом Ферми в готовых блоках, иначе вы не тот инструмент используете.

No-code это не построитель универсальных велосипедов, это быстрый клей между велосипедами, и ему, в реальности, не нужно ставить задачи уровня сложить 2 числа. Его удел: взять блоки данных оттуда и отсюда, провести стандартную операцию над этими блоками и положить в третье место. Если ваша задача выше, чем стандартная задача этого инструмента, то вам нужен не этот инструмент. Может задача даже не этого уровня, а стоит посмотреть на low-code решения или расчехлить свой питон через ChatGPT.

Та же Tilda или Wix занимает очень жесткую нишу - сделать лендинг. И реально сделать на нем лендинг занимает 1-2 часа при нормальном контенте. Надо больше - есть готовые блоки: мини-магазин, платежки, формы опроса/подписок. Надо ещё более специфическое - вам нужно уходить в специализированные low-code системы: Ecwid, Umi, Bitrix, WordPress. За х10-х100 денег и времени. Нужно ещё более специфическое? Идти заказывать свой проект на аутсорсе. За х100-∞ денег и времени.

Для каждой задачи есть инструмент, а для каждого инструмента — задача

Ну если вы её почистите, добавите туда USB compatibility, то даже и больше за редкую модель: https://www.clickykeyboards.com/shop/

const promisePool = async (functions, n) => {
  const worker = async () => {
    const fn = functions.shift();

    if (fn) {
      await fn();
      await worker();
    }
  };

  await Promise.all(Array.from(Array(n)).map(worker));
};

Может упасть на большом количестве functions.length/n, тогда можно по старинке рекурсию заменить на цикл.

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

Не знаю сколько сейчас нового не проданного жилья (думаю меньше чем в Китае). Но ценник по данным Домклика на первичку с января 19 года до мая 24 года вырос в 2 раза: с 60.821руб до 131.788 (117%). Средняя инфляция же за этот период составила 44.3%. При этом падение спроса на жилье составило 10-15% (по отношению открытых/закрытых продаж)

Сравнивают ценник за квадрат. А основному покупателю в общем глубоко понятно в какой квартире жить в центре или сейчас в полноценной однушке или никогда в 8 комнатной с тремя батрумами.

Цены снижаются только если спрос падает

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

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

Например, в современной России рынок недвижимости является очень желанным средством вложения денег. Так как на него практически нет налогов, а суммы обслуживания «нежилой» недвижимости ниже суммы арендной платы за месяц. При этом цена на метр растет даже чуть быстрее инфляции. Таким образом, если вам нужно бывать в этом месте месяц или два в году, (Москва, Питер, побережье Черного моря, Крым), вам дешевле вложить сумму в квартиру, и использовать её в отпуске или командировке. А когда вам понадобятся деньги, вы можете продать эту квартиру за те же деньги с учетом инфляции. Вот и стоят у нас в России целые многоэтажки с реальным заселением в 20–40% при цене квартиры в размере средней заработной платы за 10–20 лет.

В том то и проблема в том что такие вещи очень хороши при нулевом зацеплении объектов в вакууме. В реальной сфере зацепление у объектов/функций почти никогда не нулевое. И даже не единичные. Даже если мы всегда обмазываемся DI, CI и прочими паттернами. И обычно они зацеплены на целый ряд сервисов и интерфейсов (и повезет если того же самого модуля). И изменение любого этого сервиса и интерфейса приводит к лавиообразной сложности поддержки тестового покрытия написанного методом copy-paste.

Смиритесь с избыточностью, если она поддерживает простоту.

О да... Этот метод очень хорошо работает если для разработки продукта использовать правило: write-once-modify-never. Иначе на этой избыточности можно хорошо прогореть, особенно если писать тесты для чтения. а не для тестирования. Недавно в подобном проекте делал исправление: добавил одно малюсенькое правило, которое зависит от дополнительного параметра в окружении. Всё бы хорошо было на бумаге: Посмотрел что с выключенным свойством все тесты не упали, написал пару тестов при включенном окружении - проверил правило. Но, прошлый программист с кюа пытались написать тесты именно выше написанным способом, а в окружении явно требовало указывать эти параметры. Из за чего мне пришлось вносить дефолтное поведение в более чем 3к тестов и писать ещё несколько тестов на новое правило. Забавное скажу вам занятие....

Легко если есть тестовое покрытие на типы )

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

Ну во первых не экзамен, а общение. Экзамен это когда я вам полгода объясняю какую то вещь, потом даю список вопросов. Даю время подготовится и спрашиваю по этому списку. А тут нет ни процесса обучения, ни списка вопросов. И задача не проверить знания, а хочется найти этот красный треугольник вашего Опыта, и желательно не методом стресса, а методом - поговорить по душам, но только в очерченной мелом границе

Я не буду рекламировать этого человека и его группы, но в реальности последние 3-4 года всё чаще встречаются вчерашние выпускники, которые нацелены только на то чтобы пройти собеседование: приписали себе 3-4 года опыта, пораcспрашивали своих менторов о ЖОПП и реально рассказывают как они героически решали задачи в проектах. Но в реальности не отвечают на чисто житейские вопросы: найди ошибку.или задачи синтеза опыта

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

потому как айтишники его уже завоевали

степень это оператор выше умножения.

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

exp(1+x)*-2

Его надо распарсить на 2 массива

f1 = exp . [1, +, x]
[f1, *, -2]

далее преобразуем оба массива в обратную польскую

f1 = exp . [1, x, +] = 1 x + exp
f1 -2 *

И во втором выражении подменяем f1

1 x + exp -2 *

Унарный минус эо признак числа, а не оператор. Такие вещи должны быть выявлены на этапе разбиения на лексемы исходного выражения

Information

Rating
Does not participate
Location
Геленджик, Краснодарский край, Россия
Date of birth
Registered
Activity