Какой опыт программирования помимо веб-разработки у вас есть?

Ответ

Помимо основной веб-разработки на PHP, у меня есть опыт создания консольных приложений и скриптов для автоматизации рутинных задач, что часто было необходимо в проектах.

Основной опыт — это PHP CLI (Command Line Interface):

  • Архитектура: Разрабатывал долгоживущие демоны-воркеры для обработки очередей (например, с использованием rabbitmq-cli-consumer).
  • Парсинг данных: Писал скрипты для сбора и обработки данных из различных источников (API, CSV, базы данных).
  • Администрирование: Создавал утилиты для выполнения массовых операций в базе данных, генерации отчетов и очистки кешей.

Пример CLI-скрипта на PHP для обработки задач из очереди:

#!/usr/bin/env php
<?php
// worker.php
require __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('email_queue', false, true, false, false);

echo " [*] Waiting for messages. To exit press CTRL+Cn";

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "n";
    $data = json_decode($msg->body, true);
    // Логика отправки email...
    sleep(2); // Имитация работы
    echo " [x] Donen";
    $msg->ack(); // Подтверждаем обработку
};

$channel->basic_consume('email_queue', '', false, false, false, false, $callback);

while ($channel->is_open()) {
    $channel->wait();
}

Также в рамках самообразования и решения конкретных задач (например, анализ логов) использовал Python для написания небольших скриптов и Bash для автоматизации деплоя и серверного администрирования.

Ответ 18+ 🔞

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

Основная моя фишка — это PHP CLI, то есть работа из командной строки:

  • Архитектура: Делал таких долгоживущих демонов-воркеров, которые задачи из очереди обрабатывают. Сидят себе тихо, ждут, пока им в рот работу не положат. Использовал, например, rabbitmq-cli-consumer — штука годная, хотя иной раз так доверия ебать ноль к стабильности, что волнение ебать.
  • Парсинг данных: Писал скрипты, которые как маньяки данные со всяких API, из CSV-шек или баз выгребают, обрабатывают и куда надо кладут. Иногда источники такие кривые, что подозрение ебать чувствую — специально, сука, сделано, чтобы мозг вынести.
  • Администрирование: Делал утилитки, чтобы в базе данных что-то массово поменять, отчёты сгенерить или кеши почистить. Когда руками делать — это пиздец, а скрипт накатал — и через минуту всё готово, красота.

Вот, смотри, пример такого CLI-скрипта на PHP, который задачи из очереди обрабатывает:

#!/usr/bin/env php
<?php
// worker.php
require __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('email_queue', false, true, false, false);

echo " [*] Waiting for messages. To exit press CTRL+Cn";

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "n";
    $data = json_decode($msg->body, true);
    // Логика отправки email...
    sleep(2); // Имитация работы
    echo " [x] Donen";
    $msg->ack(); // Подтверждаем обработку
};

$channel->basic_consume('email_queue', '', false, false, false, false, $callback);

while ($channel->is_open()) {
    $channel->wait();
}

Ну и, конечно, для самообразования или когда совсем уж специфичная задача вставала (типа анализа логов, где регулярки дикие нужны), брал в руки Python для мелких скриптов. А для автоматизации всякого деплоя и серверного администрирования Bash — куда ж без него, без этого старого доброго костыля. Всё-таки иногда проще на коленке склепать shell-скрипт, чем городить огород на чём-то серьёзном.