Задать вопрос
  • Как создать тип данных, представляющий смещение?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    (лево ИЛИ право) ИЛИ (верх ИЛИ низ)

    // Левое ИЛИ правое значение.
    type OffsetHorizontal =
      | { left: number; right?: never; }
      | { right: number; left?: never; }
    
    // Верхнее ИЛИ нижнее значение.
    type OffsetVertical =
      | { top: number; bottom?: never; }
      | { bottom: number; top?: never; }
    
    // Горизонтальные значения, с запретом использования с вертикальными.
    type OffsetHorizontalOnly = OffsetHorizontal & {
      top?: never;
      bottom?: never;
    }
    
    // Вертикальные значения, с запретом использования с горизонтальными.
    type OffsetVerticalOnly = OffsetVertical & {
      left?: never;
      right?: never;
    }
    
    // OffsetHorizontalOnly ИЛИ OffsetVerticalOnly.
    type Offset = OffsetHorizontalOnly | OffsetVerticalOnly;
      
    // Верно:
    // { left: 100 }
    // { right: 100 }
    // { top: 100 }
    // { bottom: 100 }
    
    // Неверно:
    // { left: 100, right: 100 }
    // { top: 100, bottom: 100 }
    // { left: 100, top: 100 }
    // { right: 100, top: 100 }
    // { left: 100, bottom: 100 }
    // { right: 100, bottom: 100 }

    Если понадобиться вариант с И/ИЛИ между осями, то можно так реализовать:
    // Левое ИЛИ правое значение.
    type OffsetHorizontal =
      | { left: number; right?: never; }
      | { right: number; left?: never; }
    
    // Верхнее ИЛИ нижнее значение.
    type OffsetVertical =
      | { top: number; bottom?: never; }
      | { bottom: number; top?: never; }
      
    // OffsetHorizontal И/ИЛИ OffsetHorizontal.  
    type Offset =  
      | OffsetHorizontal  
      | OffsetVertical  
      | (OffsetHorizontal & OffsetVertical);
      
    // Верно:
    // { left: 100 }
    // { right: 100 }
    // { top: 100 }
    // { bottom: 100 }
    // { left: 100, top: 100 }
    // { right: 100, top: 100 }
    // { left: 100, bottom: 100 }
    // { right: 100, bottom: 100 }
    
    // Неверно:
    // { left: 100, right: 100 }
    // { top: 100, bottom: 100 }
    Ответ написан
    1 комментарий
  • Как убедиться, что одностраничный сайт (SPA) корректно индексируется поисковыми системами Google и Яндекс?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Основной контент загружается динамически через JavaScript. Появились сомнения, что поисковые системы (Googlebot и робот Яндекса) корректно видят и индексируют такой сайт.

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

    Самый простой вариант, оператор фиксирующий количество слов в ключевой фразе - "ключевая фраза", затем копируем строку текста из динамики и вставляет ее в поисковик, если сайт найдется, то именно этот блок текста индексируется.
    Нужно ли делать SSR или пререндеринг, или современные поисковики уже справляются с рендерингом?

    С рендерингом динамики они справляются давно, а вот ранжирование такого контента оставляет желать лучшего. Я считаю, что на 2025 год SSR/SSG обязателен, для успешной конкуренции в поисковой выдаче.
    Ответ написан
    3 комментария
  • Как убедиться, что одностраничный сайт (SPA) корректно индексируется поисковыми системами Google и Яндекс?

    vpetrov
    @vpetrov
    частный SEO-специалист
    Проверяется достаточно просто:
    а) Сохраненные копии. Google их уже не показывает, но вполне можно ориентироваться на Яндекс.
    б) Парсинг и рендеринг на уровне эмуляции правил выбранного поискового робота. SFSS это может. Если есть проблемы там – значит, реальный UA будет иметь их на 100%.
    Как вы будете скармливать роботам свой контент – ваш выбор и вопрос тестов, но чем меньше поисковику нужно затрачивать на рендеринг – тем лучше для ранжирования. Тратить вычислительные ресурсы на ненужное ПС не склонны, это вопрос реальных бюджетов, выражаемых в деньгах, а не абстракция.

    Добавлю: цитатный поиск – это тоже вариант, но не для любого случая. ПС может внести в индекс единственный шингл со всей страницы, если сочтёт его нужным, а прочее - мусором. В этом случае вы не поймёте, смог ли робот технически получить контент, или проблема в том, что решил что-то не забирать в индекс выборочно.
    Ответ написан
    Комментировать
  • Можно ли заменить кликанье мышью по веб-интерфейсу cli-командой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрите в консоли браузера, что передаётся со страницы в устройство. Потом делайте аналогичные запросы, например, через curl.
    Ответ написан
    2 комментария
  • Отправка формы html?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    данные формы не поступают в таблицу.

    Что значит "не поступают"? Что делаете и что при этом происходит? В консоли что? Пока придется гадать...
    const pool = mysql.createPool

    Вижу подключение к бд, но проверок успешно ли установлено соединение - нет.
    app.post("/two.html", urlencodedParser, function (req, res) {

    Вижу использование urlencodedParser для обработки данных формы, но не вижу его объявления, попробуйте так (express 4.16.0+):
    // Подключение к бд
    const urlencodedParser = express.urlencoded({extended: false});
    // app.post эндпоинт

    if(!req.body) return res.sendStatus(400);

    Больше инфы:
    console.log("req.body);
    if (!req.body) return res.status(400).send("Данные не были отправлены");

    if(err) return console.log(err);

    Больше инфы:
    if (err) {
      console.error('Error:', err);
      return res.status(500).send('Server error');
    }


    const name = req.body.name;
    const usluga = req.body.usluga;
    const tel = req.body.tel;

    Так симпатичнее:
    const {name, usluga, tel} = req.body;
    < form action="/two.html" method="post">

    Возможно, в будущем, будет лучше указать другой эндпоинт для приема данных с формы?
    <form action="/submit-form" method="post">
    Ну и на всякий, в вашем случае, two.html должен лежать рядом с server.js.
    Ответ написан
    2 комментария
  • Есть ли достойная OpenSource система управления задачами?

    @basili4-1982
    Redmine
    Ответ написан
    Комментировать
  • Как проверить метод POST при тестировании API?

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

    Читайте про тест-дизайн
    Ответ написан
    Комментировать
  • Можно ли (и как) с телефонов, завозимых в РФ, удалить принудительно предустановленный, но не нужный владельцу софт?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Можно. Точно также как и другой предустановленный софт - при наличии рута. Но как показала практика - весь софт, который должен быть по мнению производителя телефона будет автоматом восстановлен при очередном его обновлении. Поэтому его лучше не удалять, а "замораживать" - глаза мозолить не будет.

    UPD: Интересно, что вторую половину ответа почему-то удалили. Видимо в русторе сомневаться низя :)
    Ответ написан
    2 комментария
  • Как получить из массива все возможные пары элементов?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно ли это сделать?

    Можно, законом не запрещено.
    Нужно получить все возможные пары элементов.

    В каком виде? Предположу, что в виде пары в массиве (['a', 'b'], ['a', 'c'] итп), тогда можно так:
    const arr = [ 'a', 'b', 'c', 'd', 'e' ];
    
    const pairs = arr.flatMap((x, i) =>
      arr
        .map((y, j) => i !== j ? [ x, y ] : [])
        .filter((pair) => pair.length),
    );
    
    console.log(pairs);
    
    /*
    [
      [ 'a', 'b' ], [ 'a', 'c' ],
      [ 'a', 'd' ], [ 'a', 'e' ],
      [ 'b', 'a' ], [ 'b', 'c' ],
    ...
    ]
    */
    Ответ написан
    1 комментарий
  • Нужна ли официальная маркировка покупаемых в SAPE ссылок как реклама?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужна ли официальная маркировка покупаемых в SAPE ссылок как реклама?

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

    Если это "реклама" конкретного продукта, то нужна, и не только в Sape. То, что Sape не является ОРД - не освобождает от потенциального штрафа рекламодателя, т.е. вас.
    Ответ написан
    8 комментариев
  • В чем разница между selenium, playwright и puppeteer?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    - В 15 годах писал похожий парсер, используя node, fetch и axios, но сейчас часть сайтов возвращает html без таблиц с ценами, почему?

    - Для чего нужны selenium, playwright и puppeteer, если я могу через fetch и axios все получить?

    Скорее всего проблема в динамическом формировании этих данных на странице. Тут сразу 2 правильных ответа, можете и не можете единовременно:
    - Можете - в инструментах разработчика браузера смотрите, с какого адреса приходят данные и затем дергайте данные напрямую, минуя сам сайт, в таком случае можно продолжать использовать fetch.
    - Не можете - если вариант выше сложен, то вам нужен инструмент, который сможет выполнять js на странице. fetch/axios возвращают первый ответ сервера, т.е. js на тот момент еще не выполнился на странице, соответственно данные не были подгружены. Вопрос рендера js на странице решают инструменты по типу selenium, playwright и puppeteer.
    - Если все же использовать selenium, playwright и puppeteer, что из них лучше на данный момент?

    Вначале нужно определить, что понимается под "лучше":
    - Можно использовать критерий современности, тогда puppeteer отпадает (playwright написала команда puppeteer).
    - Можно использовать критерий производительности, тогда selenium проигрывает playwright сразу по 2 пунктам, по прожорливости и отклику на действия.
    - Можно использовать критерий обнаружения анти-бот системами, тогда selenium (с учетом undetected_chromedriver) проигрывает playwright тем, что имеет явную дополнительную задержку в ~100-300мс при выполнении CDP команд, что прям заметно. Playwright такой задержки либо не имеет вообще, либо она в рамках погрешности.
    Можно ли их с nodejs использовать?

    Selenium написан на java, но так же имеется возможность использования его с nodejs. Playwright вообще написан на ts, все примеры документации и сопутствующие библиотеки с большей вероятность будут писаться под ts по умолчанию.
    - Часто вижу о упоминание CDP в контексте парсинга, это зачем и для чего нужно?

    CDP (Chrome DevTools Protocol) грубо говоря - это некие "низкоуровневые" команды для "chromium based" браузеров, который позволяют этим браузером управлять. В playwright так реализованы большинство "высокоуровневых" команд, например: при использовании playwright мы пишем await locator.getAttribute(name), а playwright использует аналогичную команду из CDP DOM.getAttributes или DOM.describeNode.
    - Что использовать для отправки сообщений в телегу?

    Если речь идет об nodejs, то Telegraf.
    Ответ написан
    1 комментарий
  • Что можно сделать с белым сервером?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как можно легально отбить стоимость этого сервера?

    Если коротко, то никак. Чуть подробнее - если у вас будет в 10 или 100 раз больше серверов, то овчинка на таких объемах выделки не стоит, не то что ваш 1 сервер.

    Если все таки решитесь, то первое, о чем стоит беспокоиться - это закон (149-ФЗ), и как случайно не стать прокси сервером для разных тематик, с которых легко рубятся палки.

    Ну и гуглежка обычно быстрее, чем написать вопрос:
    Как монетизировать сервер / Не уходить в минус?
    Как монетизировать домашний сервер?
    Как заработать на своём сервере?
    Можно ли заработать на своем домашнем сервере?
    Ответ написан
    3 комментария
  • Парсинг на Python при помощи tor?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Относительно недавно начал заниматься парсингом. Использую tor.

    Жестко.
    Попробовал достаточно много способов из инета, но ip так и не меняется

    Но нам вы их конечно же не показали.
    Хотелось бы узнать работает ли вообще сейчас базовый парсинг с помощью tor

    Технически - работал, работает и будет работать. Функционально - не работал и не будет работать, т.к. ip выхода тора палятся так, как не палятся спам-ip дата-центров, ну и про скорость и стабильность работы тора не стоит забывать.
    либо же нужно искать обходные пути?

    - Если денег нет - использовать публичные списки ip проксей.
    - Если денег почти нет - использовать не публичные списки ip проксей.
    - Если деньги есть - использовать мобильные прокси.
    - Если деньги ЕСТЬ! - использовать резидентские прокси.
    Ответ написан
    Комментировать
  • Как на VPS сервере нажать чтобы файл сохранился?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    открыл файл

    Чем открывали? nano (nano /path/to/file)? Если да, то внизу nano имеются подсказки по горячим клавишам:
    - ctrl + o - сохранить, редактор спросит имя файла для записи, если нужно просто сохранить - ничего не меняем и жмем enter.
    - ctrl + x - выйти из редактора, если имеются не сохраненные данные, то редактор так же предложит их сохранить.
    Если это был vim, то так:
    1. Нажмите клавишу esc один или два раза.
    2. Наберите :wq (записать и выйти).
    Подключался через mobaxterm

    Слева в mobaxterm есть sftp (файловый менеджер). Вы можете найти нужный файл там, кликнуть по нему правой кнопкой мыши и выбрать "Open with default text editor". Файл откроется в вашем редакторе по умолчанию в той операционке, с которой подключаетесь. При сохранение такого файла - mobaxterm автоматически загрузит его обратно на сервер.
    Ответ написан
    2 комментария
  • Сайт на виртуальном хостинг Timeweb с размером 107,93 КБ даёт ответ сервера 73 мс. Что делать?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Возможно это от того, что кеширование настроено на Cache-Control: no-cache?

    wpo-cache-status: cached указывает, что страница кэшируется на уровне wp оптимизации (wp-optimize?). Но директива no-cache может конфликтовать с этим, вызывая дополнительные запросы к серверу. Поэтому, это самая наиболее вероятная причина, из тех, что вы предоставили.

    TTFB 89 мс это время до получения первого байта, что является хорошим показателем. Сервер отвечает быстро, так что проблема не в серверной обработке.

    Настройте правильное кеширование. Для статических страниц рекомендуется использовать cache-control: public, max-age=3600 (час, но я бы указывал больше). Это позволит браузеру хранить страницу локально и не запрашивать её повторно.

    Используйте google pagespeed insights или gtmetrix для анализа скорости загрузки. Они покажут, где и что тормозит.

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Предлагаю использовать стандартный вариант с html (предварительно, нужно найти этот шаблон). Галочка + выпадающий список (select) + кнопка отправки + уведомление в шаблоне будут выглядеть примерно так:
    <!-- Уведомления -->
    {% if messages %}
        <ul class="messages">
            {% for message in messages %}
                <li class="{{message.tags}}">{{message}}</li>
            {% endfor %}
        </ul>
    {% endif %}
    
    <form method="post" action="{% url 'view_name' %}">
        {% csrf_token %}
        <table>
            {% for item in items %}
                <tr>
                    <!-- Здесь другие столбцы -->
                    <td><input type="checkbox" name="selected_items" value="{{item.id}}"></td>
                </tr>
            {% endfor %}
        </table>
    
        <select name="action">
            <option value="action_1">Действие 1</option>
            <option value="action_2">Действие 2</option>
        </select>
        <button type="submit">Применить</button>
    </form>

    Затем, в представление обрабатываем данные из шаблона выше, пусть это будет view_name. Например, некоторые основные моменты:
    # Получаем из POST запроса выбранные items
    selected_ids = request.POST.getlist('selected_items')
    
    # Проверить, есть ли что в selected_ids, если нет, сообщить юзверю, пусть жмет сильнее
    if not selected_ids:
        messages.warning(request, "Товарищ Юзверь, жми сильнее")
        return redirect('view_name')
    
    # Получаем action
    action = request.POST.get('action')
    
    # Смотрим, что пришло в action, затем выполнить нужное действие, пусть это будет следующее:
    
    # Получаем из бд все объекты по списку selected_ids одним запросом
    items_to_update = ItemModel.objects.filter(id__in=selected_ids)
    
    # Обновляем поле, пусть это будет is_selected
    updated_count = items_to_update.update(is_selected=True)
    
    # Обрабатываем успешный успех
    messages.success(request, f"Молодец Юзверь, успешно отработано: {updated_count} элементов, возьми с полки пирожок")
    return redirect('view_name')

    Ну и условная модель:
    from django.db import models
    
    class ItemModel(models.Model):
        title = models.CharField(max_length=200)
        is_selected = models.BooleanField(default=False)
    
        def __str__(self):
            return self.title
    Ответ написан
    1 комментарий
  • Как анти-бот системы определяют ботов и как от них защищаться?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я отправлю гет запрос из консоли то увидит-ли меня сайт где именно я нахожусь?

    Напрямую нет, но косвенно можно понять это по ip адресу исходящего запроса.
    Если я будут использовать селениум то увидит-ли меня сайт где именно я нахожусь?

    Напрямую нет, но косвенно можно понять это по ip адресу + гуглите, что такое утечки dns и как можно определить настоящий ip (минуя прокси) через webrtc.
    Селениум хороший анти-детект браузер? Видел еще playwright он лучше?

    Selenium - это вообще не антидетект браузер, а лишь программа, которая использует browser-driver для управления браузером. Selenium + undetected-chromedriver простая защита сайта не обнаружит, но вот средненькие антибот системы он уже часто не проходит. Playwright лучше определяется антибот системами.
    Как обычно парсят сайты со сложной защитой? Где продаются такие боты?

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

    Профессионально обнаружением ботов занимаются отдельные команды или даже целые компании (Radware, DataDome, Cloudflare, Imperva, Arkose Labs, HUMAN Security, Akamai, hCaptcha итп). Обнаружение сводится к прямому и косвенному методам.

    Прямые методы обнаружения:
    - Частота запросов и "доверие" (trust) к конкретному ip.
    - Проверка заголовков User-Agent. Заголовки от iphone, версия браузера от андройда, а размер дисплея от ноута - надежно!
    - Отпечатки рукопожатий TLS/QUIC (векторы JA3/JA4, ALPN, расширенный порядок).
    - Проверка выполнения JS.
    - Обнаружение признаков использования драйверов браузеров (window.navigator.webdriver, window.document.__webdriver_script_fn итп), открытости DevTools итп.
    - Шрифты: через js получают список шрифтов (откуда у вас Ubuntu шрифт на Андройде?), затем выборочно печатают на canvas изображение нужным шрифтом или печатают невидимый шрифт без канваса (применяют css свойство с найденным шрифтом), затем замеряют размеры результата и сверяют его с эталоном.
    - Видеокарта: через js рисуют на canvas невидимое изображение с цифрами, спецсимволами и смайликами, затем получают представление изображения в виде кода. Через WebGl можно нарисовать 3D изображение.
    - Камера. Как это у вас 3 камеры на samsung a32, если их 4?
    - Гироскоп, компас, акселерометр (все это без разрешения работает на андройде). Почему ваш гироскоп не двигается несколько минут подряд, хотя геолокация и ip gsm вышек меняются?
    - Анализ аудио рендеринга без разрешения на доступ к аудио (используется только программный аудио стек), где собираются уникальные артефакты обработки звука в зависимости от аппаратного обеспечения. Генерируется аудиосигнал, который обрабатывается через цепочку фильтров и эффектов (динамическая компрессия, частотные изменения, реверберация, изменение частотной или амплитудной модуляции итп).
    - Остальная проверка характеристик браузера->устройства: процессор, оператива, дисплей, плагины, часовой пояс, язык. У вас в браузере установлен русский язык, тайм-зона германии, последняя геолокация час назад в италии, а сейчас вы используете ip адрес гондураса, и как ему удается свайпать по НЕ сенсорному дисплею? - чистокровный человек, пропускаем! ;)
    = Собираем данные, хэшируем и получают относительно уникальный отпечаток (fingerprint). Уникальность заявляется разная, вплоть до 99%.

    Косвенные методы обнаружения:
    - Частота запросов и "доверие" (trust) к конкретному ip. Внезапно начался наплыв пользователей, да и еще примерно с одинаковыми характеристиками устройств, при этом хозяин сайта не давал рекламы или как то привлекал пользователей...
    - Нестандартный скролл/свайпы/клики у пользователей, ошибки и скорость ввода текста. Внезапно резко наплывшие пользователи стали скролить примерно до одного блока, делали 3 свайпа по 5-6 точек в каждом, хотя до этого все скролили по разному...
    - Нестандартная реакция на всплывающие окна. Скролл поверх фиксированного окна - бесценно... ;)
    - Нестандартная последовательности посещенных страниц.
    - Нестандартное количество проведенного времени на странице.
    - Клики по невидимым для живого человека ссылкам, заполнение невидимых полей и отправка формы, когда она не может быть отправлена, в результат не верной js валидации полей - это вообще не стареющая классика.
    - Геолокация - только с разрешения, но после разрешения можно получить много косвенных данных для анализа. Какая точная у вас геолокация, всегда до метра, и прыгает всегда по 10 метров, а у других на таком же устройстве все дергается как го*но в проруби...
    = Собираем данные, заливаем в нейронку и сравниваем с эталонными пользователями.

    Это лишь самые распространенные методы обнаружения, которые используют большинство топовых антибот систем.
    Ответ написан
    6 комментариев
  • Как сделать единый аккаунт для своих сервисов?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Реализовать свой сервис авторизации. Называется CAS, работает примерно так:
    5bd748db6d572869658821.png
    Ответ написан
    6 комментариев
  • Какой CMS движок учить начинающему?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никакой. Изучайте разработку ПО, языки программирования, построение архитектуры ПО, алгоритмы, математику и т.д и т.п.

    UPD
    Приведу немного аргументации и очевидных вещей для тех, кто не понимает почему ответ именно такой. На самом деле все очень просто: в IT индустрии всё развивается и меняется очень, очень-очень быстро. И как следствие возникает проблема устаревания знаний и умений. Вот например 15-20 лет назад изучение языка программирования под названием "Дельфи" и популярной тогда его среды разработки для десктопных приложений вполне имело смысл и было популярным явлением, т.к. оно тогда довольно широко использовалось, или например Perl для создания сайтов. А где оно сейчас? Почему сегодня сайты пишутся на джаваскрипте? А как на счет десктопных приложений? А ведь те же десять лет назад попробуй скажи такое — как бы область деятельности не пришлось менять. И вот такое происходит просто с языками программирования за довольно короткое время. А основа любого CMS, фреймворка и иже с ними — это как раз таки язык программирования. И вот за время жизни языка программирования в нём случаются новые стандарты, изменения и прочее, а популярное ПО на нём переписываются десятки и сотни раз. Т.е., изменчивость продуктов какого либо языка зависит как от самого языка так и от его популярности. И чем они выше — тем чаще что-то меняется. Из всего этого вытекает очень логичный вывод: в долгосрочной перспективе выгоднее те знания, которые не устареют как можно дольше. И вот тут как раз таки знания разработки ПО и языков программирования, построения архитектура, алгоритмы и прочее имеют наибольший срок устаревания. А уж сколько тысяч лет математике можно и не вспоминать. А она, кстати именно благодаря стремительному развитию IT тоже развивается очень быстрыми темпами. Так вот, при наличии вот таких фундаментальных знаний можно легко и быстро осваивать любые новые фреймворки, CMS, языки программирования и прочее. А уж при наличии подробных мануалов, гугла, форумов и прочего большинство задач сводится тупо к вбиванию "как сделать YYY в ZZZ" в строке поиска (я вот например никак не могу понять ход мыслей людей, которые задают вопросы на форумах и прочих ресусах, ответ на которые выдается в первых же строчках гугла, складывается впечатление, что они вообще первый раз в интернете и про гугл не знают вообще ничего).
    Если есть желание именно в изучении CMS — ставим себе задачу и решаем её используя разные CMS, далее выбираем наиболее понравившуюся и пользуемся пока не надоест или не устареет. А после — повторить.

    Немного перефразирую сам вопрос и соседний популярный ответ:
    — Каким инструментом учиться пользоваться начинающему строителю?
    — Учись использовать молоток и гвозди, леса полно, доски везде используются.
    Вот только строительство — это не одни только доски, в которые забиваются гвозди, а еще архитектура, сопромат и иже с ним, экстерьер, интерьер, отопление, освещение, канализация, вентиляция и ещё куча всего. Аналогично и во всех остальных областях, в том числе и web разработке.
    Ответ написан
    9 комментариев
  • Какой ВУЗ в Москве даст знания, но и позволит работать?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Я боюсь поступить в ВУЗ, ...., где не будет разработки программного продукта

    Судя вот по этой фразе - вас интересует направление "Разработка ПО". К сожалению, сегодня практически во всех ВУЗах ситуация именно такая - в области разработки ПО там не научат практически ничему. Почему так? А вот почему:
    1. Огромная скорость развития и изменений в области IT - отсюда следует, что надо бежать, только для того чтобы оставаться на месте. А уже чтобы быть в курсе - надо это надо бежать еще быстрее. Т.е., надо учиться, учиться и еще раз учиться. Каждый день.
    2. Большинство преподавателей в ВУЗах из старшего поколения и многие из них остались в "том времени". Не все конечно, сам лично знаю нескольких вполне бодрых "старичков" из нескольких крупных ВУЗов, которые занимались программированием еще в советское время, наработали огромный опыт и сейчас вполне себе разрабатывают электронику, МК, ПЛИС, процессоры в кремнии, даже передовые нанометровые техпроцессы для мировой промышленности.
    3. Низкая ЗП у преподавателей - сегодня даже начинающим программистам на мировом рынке готовы платить очень даже приличные деньги по нашим меркам, а профессионалам в несколько раз больше. Кто из опытных программистов пойдет работать за месячную ЗП, которую они вполне зарабатывают за день, а то и быстрее?
    4. Программа обучения ВУЗов устарела на полвека - за четыре-пять лет такого "обучения" невозможно подготовить современного программиста. Потому что пока человек будет учиться - его знания устареют на 5-10 лет (а то и больше). А в IT - это целая эпоха, а то и несколько. Это как учить человека конной езде и охоте из лука на диких кабанов, а когда он закончит обучение - везде уже будут ездить машины и супермаркеты на каждом углу. Ну, т.е. передвигаться и достать еды можно и так и так - вот только кому нужен верховой ездок и умеющий стрелять из лука в век самолетов и фастфудов? Вот примерно так же и в IT - сегодня охотимся на кабанчиков и собираем ягоды в лесу, уже завтра кушаем искусственное/синтетическое мясо заморских зверей и фруктов из пробирки, а послезавтра на другом конце галактики помогаем местным неандертальцем предотвратить ядерный конфликт и грозим пальчиком.
    5. На программиста нужно учиться самостоятельно - просто потому что других вариантов нет из-за скорости развития IT и программисту каждый день надо изучать что-то новое. Надо понять как это все работает, а главное - хотеть понять, надо отрабатывать память, развивать способность к переключению контекста в голове, образное мышление. Если привыкнуть, что тебе все рассказывают, показывают и разжевывают - самостоятельно что-то новое вряд ли изучишь. Просто потому что разум привыкнет, а разумом управлять как-то не учат (что несколько странно - есть же общая физическая подготовка, почему же нет общей умственной подготовки?).
    6. При наличии желания - вполне реально за несколько месяцев с нуля выучить что-то из мейнстрима и найти вакансию джуниора и примерно за год-два дорасти до миддла. А за пять лет можно и до сеньора/тимлида дорасти. Было бы желание. Ну или пойти в ВУЗ, потратить годы на сомнительную деятельность, выйти и получить практически нулевой выхлоп в целевой области. Т.е., никакого реального опыта не получить.
    Ответ написан
    6 комментариев