• Что значит запрет на оказание IT-услуг?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Тебе - ничего. Ты для ЕС - мошка, толкущаяся возле лампы :) Это все во сновном касается юриков, причем наиболее заметным пунктом тая является запрет крипты. Причем, я вовсе не уверен, что это "санкции" :) а не очередное ужесточение в работе с ох..вшими фрилансерами, живущими в России, гадящими России и презирающими Россию. Многое множество их ломанулось уже в Грузию, Армению, Казахстан и даже Монголию (sic!), но есть еще те, кто упорно желает гадить здесь, используя крипту. Спасибо, ЕС!
    Что касается остального:
    - youtube. Скорее всего, придет к блокировке, так же как FB и инста. Думаю, что незаблокирован до сих пор только потому что нечем заменить.
    - windows. M$ здорово виляет задом, то "дам", то "не дам" винду, но процесс отказа от винды запущен - к 01.01.2025 в КИИ винды быть не должно, хотя у физиков я думаю, она еще долго будет.
    - Прочее ПО. Будет постепенно падать в популярности, если немедленно не самозаблокируется. Также есть предположение, что в будущем скачивать лямпортное ПО при наличии хоть сколько-нибудь сносного аналога будет опасно для благонадежности :) которая снова станет важна...
    Ответ написан
    8 комментариев
  • Почему синхронный код в JS потребляет больше памяти?

    Fragster
    @Fragster
    помогло? отметь решением!
    await - это не "синхронно". Это синтаксический сахар. Соответственно, "внутри" всё то же самое, те же промисы и коллбэки. Скорее всего кушать память стало из-за кривого переписывания.
    Ответ написан
    Комментировать
  • Как вы делаете code-review?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    У code review должна быть цель. В моей практике обычно проекты небольшие и там нет отдельных тестировщиков. Получается, что code review отвечает на три вопроса:

    1. Соответствует ли функционал ТЗ?
    2. Создает ли код проблемы команде?
    3. Есть ли тут какой-то специфичный для проекта опыт, который лучше задокументировать, пока мы еще в контексте?


    Получается что-то такое:

    • До выполнения задачи: проводится анализ задачи, формулируется ТЗ. Бывает, что нужно подключиться и помочь с требованиями, с контекстом, в котором все делается. Чем более подробный анализ мы делаем и чем лучше мы понимаем контекст на этом этапе, тем больше вероятность, что потом весь процесс выполнения задачи пойдет как по маслу и code review будет чистой формальностью в конце.
    • До ревью: линтеры проверяют код на соответствие стилю, на отсутствие синтаксического бреда.
    • Дальше - проверка на соответствие функционала ТЗ. Это защита от глупых ошибок в продакшене, которые коснутся пользователей.
    • Потом - на сответствие принятым соглашениям по коду, если они есть в проекте. Обычно это архитектурные паттерны и что-то про зависимости, смотрим не создает ли код проблем окружающим, а то разные глупости порой случаются. Особенно это важно в коде, который не сам в себе, а затрагивает много чего вокруг. Иногда возникает конфликт интересов, когда что-то явно устарело, и соглашения дополняются чем-то. Чем лучше был анализ в начале, тем меньше вероятность, что тут будет, что обсуждать.
    • Дальше уточняющие вопросы по странным местам, если они есть. Это больше с целью узнать контекст задачи, почему приняты те или иные решения. Происходит передача специфичных для проекта знаний в сторону команды. Возможно там же будут какие-то рекомендации по поводу практик, на что стоит обратить внимание в следующий раз. Это будет передача опыта от команды.


    А кто там будет, джун или синьер-помидор - не важно. Все люди ошибаются, и всем нужен контекст происходящего для эффективной работы.
    Ответ написан
    Комментировать
  • Будут ли перспективы работы в IT в будущем?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    уже сейчас тестируют ИИ который абсолютно сам писать код

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

    будет как ситуация с юристами в 90х

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

    Если тут есть действующие программисты, как обстоят дела на рынке IT?

    В мире дела у отрасли радужные, она быстро растёт и развивается, спрос на программистов огромный, зарплаты высокие, рынок соискателя. В РФ пока непонятно, что происходит. Вполне возможно, что российская отрасль ИТ остановит рост на годы. Скорее всего потребность в профессионалах никуда не денется, но вот новички уже будут не нужны и порог входа для них станет преодолим для единиц.
    Ответ написан
    2 комментария
  • Как победить ошибку "This expression is not callable."?

    Lynn
    @Lynn
    nginx, js, css
    Нужно явно рассказать TS-у что если аргумент falsy, то результатом будет число, а в остальных случаях новая функция.

    Например так (песочница):
    type StepFn = (val?: number) => number | StepFn;
    
    function add(val: number): typeof add;
    function add(val: 0): number;
    function add(): number;
    
    function add(val?: number): number | StepFn {
      if (val) {
        return function sum(next?: number): number | StepFn {
          if (!next) {
            return val;
          }
          return add(val + next);
        };
      } else {
        return 0;
      }
    }
    
    console.log(add());
    console.log(add(1)(2)());
    console.log(add(2)(4)(6)());
    console.log(add(4)(6)(8)(10)());
    Ответ написан
    Комментировать
  • Как передать объект в класс js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Можно записать объект в свойство prototype временной функции и наследоваться от нее:
    function fromPrototype(proto) {
        function F() {}
        F.protoype = proto;
        return F;
    }
    
    const obj = {
        _sayHi() {
            console.log(`Hello, my name is ${this.name}!`);
        },
    };
    
    class Person extends fromPrototype(obj) {
        constructor(name, age) {
            this.name = name;
            this.age = age;
          
           if (this.age < 0 ) {
                this.age = 0;
            }
        }
    }
    Ответ написан
    2 комментария
  • Почему современные языки отказываются от ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Они не отказываются. Скорее происходит отказ от "парадигмы" разработки. Языки стали мульти-парадигменные. Посмотрите на С++20 или Scala. Их невозможно положить в коробочку ООП или ФП. В них есть почти полный набор фич и оттуда и отсюда. И с каждым годом число фич растет и граница размывается. Нашим потомкам будет вообще непонятно где идет раздел.

    По поводу golang. Это язык ограниченной разработки. Его создавали специально чтобы порог вхождения был низкий. Фактически делали лайтовый С++ которому можно обучить школьника за 14 дней. Но с перформансом выше чем у Питона. Поэтому выражать какие-то сложные конструкции на типах там скорее всего не получится. У golang есть свой манифест. Я забыл как он называется и где он. Вобщем там довольно четко обоснованно почему такие принципы и почему такая идеология.
    Ответ написан
    1 комментарий
  • Как создать объект с регистронезависимыми ключами?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Если завернуть объект в Proxy, можно будет изменять ключи при обращениях к объекту:

    const obj = new Proxy({}, {
      get(target, key) {
        const lowerKey = key.toLowerCase();
        return target[Object.hasOwn(target, lowerKey) ? lowerKey : key];
      },
      set(target, key, val) {
        target[key.toLowerCase()] = val;
        return true;
      },
      has(target, key) {
        return key in target || key.toLowerCase() in target;
      },
      defineProperty(target, key, descriptor) {
        return Object.defineProperty(target, key.toLowerCase(), descriptor);
      },
      deleteProperty(target, key) {
        return delete target[key.toLowerCase()];
      },
      getOwnPropertyDescriptor(target, key) {
        return Object.getOwnPropertyDescriptor(target, key.toLowerCase());
      },
    });
    Ответ написан
    1 комментарий
  • Как настроить Prettier для Git?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Отформатировать один раз все файлы, закоммитить и придерживаться стайлгайда. Иначе зачем вам вообще prettier?
    Ответ написан
    Комментировать
  • Насколько большую роль в IT-карьере играют связи?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Очень большую роль играют нейронные связи в мозгу. Чем их больше, тем лучше соображается, а в кодинге без этого никак. Остальные связи особого значения не имеют.
    Ответ написан
    4 комментария
  • TypeScript делает из JS СИ подобный язык?

    vabka
    @vabka
    Токсичный шарпист
    JS и так си-подобный.
    TS только даёт ему статическую типизацию.

    php не нужны расширения наподобие ts, тк у него вроде и так уже появилась опциональная статическая типизация.

    Python кстати тоже си-подобный, не смотря на то что фигурные скобки в нём заменены на отступы
    Ответ написан
    Комментировать
  • Лучшая страна для VPN?

    @Drno
    нидерланды, финляндия, германия
    Ответ написан
    Комментировать
  • Лучшая страна для VPN?

    XOR2048
    @XOR2048
    Web & Browser extension developer
    Швейцария, Финляндия, Румыния, Словакия, страны Прибалтики тоже должны хорошо отрабатывать.
    Ответ написан
    5 комментариев
  • Как можно сократить этот код?

    0xD34F
    @0xD34F Куратор тега React
    const SORT_FUNCS = {
      priceAsc: (a, b) => a.price - b.price,
      priceDesc: (a, b) => b.price - a.price,
      formedAsc: (a, b) => a.formed_in - b.formed_in,
      formedDesc: (a, b) => b.formed_in - a.formed_in,
    };

    const data = useMemo(() => {
      const sortFunc = SORT_FUNCS[sortType];
      return sortFunc ? [...bands].sort(sortFunc) : bands;
    }, [ sortType ]);
    Ответ написан
    Комментировать
  • Двойная сортировка со стрелочной функцией. Как реализовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const sortByLName = (a, b) => a.last_name.localeCompare(b.last_name, 'ru');
    const sortByJobId = (a, b) => a.job_id - b.job_id;
    const sortByJobIdAndLName = (a, b) => sortByJobId(a, b) || sortByLName(a, b);
    Ответ написан
    Комментировать
  • Можно ли записать этот дженерик изящнее?

    Alexandroppolus
    @Alexandroppolus
    кодир
    type PlaceholdersFrom<
        T extends ObjectPlaceholders, K extends keyof ObjectPlaceholders
    > = T[K]
    Ответ написан
    3 комментария
  • Почему null === null?

    Lynn
    @Lynn
    nginx, js, css
    Э, что?
    > a = {}
    {}
    > typeof a
    'object'
    > a === a
    true


    Непонятно как из равенства typeof null === 'object' вы пришли к выводу что null не должен быть равен null?
    Ответ написан
    2 комментария
  • Какие есть альтернативы онлайн кодированию на техническом интервью?

    Alexandroppolus
    @Alexandroppolus
    кодир
    можно заставить чувака найти ошибки/недостатки в коде (провести код-ревью). Для задачки - просто словесно описать алгоритм решения, это сэкономит время на дебаге.
    Ответ написан
    2 комментария
  • С чего начать в 30 лет?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Фундаментальная проблема - в игрострой стоит очередь фанатов с горящими глазами. Людей, которые пишут игры, играют в игры, моддят игры, хакают игры..., начиная с возраста, когда они смогли дотянуться до клавиатуры (как ваш покорный слуга). При этом, у них столько мотивации, что они могут сами поставить себе задачу, сами нагуглить все, что нужно (Спасибо дяде Немнюгину за его учебник. Это все что нужно знать о DOS, чтобы закодить dOOm) и сами все напишут и нарисуют (работая над этим сутками. Не потому что над душей стоит босс с воплями о лишении премии, а потому что им это интересно).

    И вот теперь, Андрей, который уже устал хочет встать в очередь высоко мотивированных конкурентов и попросить себе оффер. Каковы его шансы на успех?

    В играх есть много специализаций программирования - хотите графику, придется учить одно (причем на 2d и 3d это одно будет разное), хотите игровую логику и скриптинг - это номер два, хотите системную часть и бэкенд - это будет третье.

    Для универсального развития, нужно начинать с простых фиговин вроде тетриса, арканоида, бильярда и прочего (в которых однако есть все столпы игростроя - графика + логика + системный движок, можно и добавить сеть, если подумать) и потом наращивать сложность - делать платформер или RTS.
    Ответ написан
    4 комментария
  • Когда применять arr.reduce?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Когда сочтёте нужным. Типа, подумали, и решили - здесь reduce нужен. Или не нужен. Да, подумали. Для этого у вас есть особый инструмент - голова называется.
    Ответ написан
    Комментировать