Без тз хз


Недавно состоялся разговор с коллегой разработчиком, который спрашивал у меня про то, как я пришел к менторству, как начать менторить и как происходит сам процесс. Рассказал, что тоже заинтересовался этим, появилось желание делиться добром, но возникли проблемы при прикидывании тем, которые нужны разрабам для того, чтобы соответствовать хотя бы позиции junior.
Т.е. он изначально выделили настолько большое количество тем, которые считает минимально необходимыми для того, чтобы вообще считаться разработчиком - что обучение этому заняло бы минимум пол год (и не как на крупных площадках - очень вялотекуще, а в формате менторинга). И спросил, как я справляюсь с этими вопросами.
Это было для меня достаточно интересно, поэтому я решил написать пост с моими комментариями и мнением на этот счет, ибо есть что сказать. Ну и тема достаточно важная, и аффектит как менти, так и менторов.
Могу тут сразу выделить две темы, с которыми нужно разобраться:
1️⃣ Огромное количество информации
В любой профессии IT просто огромаднейшний пласт информации, который нужно изучить, чтобы можно было считать себя квалифицированным специалистом для решения плюс-минус любых задач. И для новичка это все страшно и непонятно, потому что на первые вопросы в гугл из разряда:
"А что мне нужно изучить, чтобы попытаться войти?"
На этого бедного человека вываливается весь вот этот список тем, который действительно выглядит очень пугающе. Для учеников я тут могу посоветовать то, что я уже когда-то советовал - прошерстить вакансии, выписать список самых часто встречающихся тем и сконцентрироваться именно на них, оставив остальные темы уже за рамками первичного обучения и либо доизучать их уже в боевых условиях, когда вы реализуете свою главную цель - устроиться на работу❗️. Либо изучить их в процессе прохождения собеседований, имея под собой уже достаточную базу.
Главное тут понять, что вам нужно попасть в боевой проект, начать работать, получать реальный опыт - а вся, условно, "лишняя" теория, которую вы могли бы изучать бесконечно, с этим не сильно помогает. Важны лишь 6-7 конкретных скиллов, про которые всегда спрашивают на собесах (тут именно речь про СА). И список этих тем почти не изменился с тех пор, как я писал о них в последний раз, можно до сих пор на них ориентироваться (см. закрепленные посты в тг или тут в серии постов).
Для менторов же могу посоветовать в целом тоже самое - избавиться от перфекционизма, не пытаться вылепить из менти идеальную копию себя. И сконцентрироваться именно на обучении тем темам и скиллам, которые будут ему нужны для прохождения собеседовани и (❗️), самое главное, в процессе первых трех месяцев работы.
2️⃣ Внутренний самозванец или неуверенность
Тоже очень часто встречающаяся штука, которую я подмечаю и среди своих менти, в том числе. Т.е. человек даже пройдя обучение\курсы\самостоятельную подготовку сознательно или бессознательно откладывает начало процесса прохождения собеседований. Причины тут могут быть разные, у каждого свои:
➖Недостаточная уверенность в своих силах;
➖Мысль, что он недостаточно хорошо выучил все темы и ему еще рано выходить на рынок - кстати, это плохая мысль.
Тут есть два тезиса: во-первых, прохождение собеседований это скилл, который невозможно заработать иначе, чем проходить собеседования; во-вторых, нет смысла "заучивать" темы - когда ты машинально отвечаешь на вопросы заученным текстом, это очень хорошо видно и появляется сильное желание копнуть внутрь. И тут обычно стоит только чуть-чуть вопрос по-другому сформулировать - соискатель часто сыпется. Поэтому тут самое важное это именно понять тему и понять то, что вы должны уметь рассказать своими словами ее и размышлять, даже если что-то не помните. Поэтому "зубрить" - не нужно, инфа 146%.
И у меня был вполне конкретный кейс, еще в самом начале моего менторства, когда человек прошел все темы, я провел ему тестовый собес (и он был готов). Однако, он все не мог решиться на отклики, прохождение собеседований, постоянно заучивал теорию - по итогу выгорел уже на этом этапе и так никуда и не устроился (и даже не попытался, что обидно).
P.S. Понятно, что у разработчиков другое количество тем для обучение, нужна, как правило, более обширная база - но в любом случае ее можно (и я считаю, что нужно) ужать до определенного количества.
P.P.S. Если есть вопросы - пишите мне сюда. Большое количество информации есть в закрепах.
Каждый год мы с друзьями ходим в баню я выхожу на рынок труда, чтобы проанализировать его (аналитик же, в конце концов), посмотреть на динамику роста рынка и понять уровень текущей нехватки кадров. Тем более, когда за плечами 8 лет опыта, от меня не нужно почти никаких усилий, достаточно просто сделать нормальное резюме.
Еще один жирный плюс в том, чтобы подсмотреть у интервьюеров интересные практики\вопросы, которые тебе задают и взять их в работу, т.к. самому достаточно много и часто приходится собеседовать людей. Да и для тех, кого я обучаю это тоже полезно, поэтому быть в курсе того, какие сейчас "в моде" вопросы - важно. В общем, изучаю тренды специально для вас.
Отдельный лайк рекрутерам\HR (не всем) и их скорости реакции. Мне написали спустя 53 минуты с момента обновления резюме, но и количество реакций в целом за первые 2-3 часа было большим - люди правда стараются найти хоть кого-нибудь к себе на проекты. А вот факапы с рекрутерами заслуживают отдельного поста))
Это было лирическое отступление. Теперь мои выводы:
1️⃣ Рынок живее всех живых.
Нехватка миддлов - аналитиков просто зашкаливает, они нужны вообще всем. Поэтому если у вас хотя бы год опыта (крепкого такого опыта) то найти работу вообще ноль проблем, выбирай из 'дцати компаний. Если у вас не так, проблема в подготовке.
2️⃣ Рынок все также принадлежит соискателю и он диктует свои условия.
С учетом того, что сейчас такой недостаток специалистов, любой опытный человек заработает себе как минимум несколько офферов и уже из них будет выбирать лучшее для него по финансам\условиям на проекте;
3️⃣ Когда ты выбираешься за рамки сеньора и внутри компании тебе некуда расти - ты грустишь.
Потому что прям ОЧЕНЬ интересных предложений на рынке мало и ты такой их перебираешь: ага, ну опять сеньор на финтех, скука; и вот тут предлагают сеньора на финтех - эх, тоже скука; может хоть тут? А нет, вообще какая-то ерунда типа gambling, хоть и с очень большими деньгами. Но об этом чуть позже, тут мне есть что рассказать;
4️⃣ В плане финансов тоже особо ничего не изменилось в среднем, вилка как была год назад, так и осталась, тут никаких неожиданностей. Хотя ряд предложений на обычные сеньорские позиции меня очень приятно обрадовал и даже немного удивил$
5️⃣ Для рядовых позиций тоже не очень изменилась ситуация.
Однако, (субъективно, исходя из наблюдений за своими менти), мне показалось что количество конкурентов среди людей без опыта стало меньше. То ли поток обучающихся на массовых курсах стал меньше, то ли количество компаний ищущих себе джунов стало больше, то ли мне просто так показалось - но вот делюсь.
Если подытожить, глобально ничего не поменялось за +\- год, с того момента как я последний раз делал срез. Если вы опытный человек, вы можете найти работу на почти любом проекте линейным аналитиком без проблем. Если вы начинающий, вам все также придется постараться, чтобы пробиться сквозь барьер из конкурентов и попасть на первую работу, но при грамотном подходе, терпении и определенном количестве времени, все более чем возможно.
А, еще момент, тоже субъективный: в целом собесы стали еще строже в плане проверки тех. скиллов и вашего опыта. Вопросы стали более комплексными и глубокими, их вариативность стала больше и больше практических задач, над которыми надо подумать в онлайне. И, как минимум, один вариант из-за чего это может быть у меня есть - расскажу отдельно.
P.S. Спасибо большое тем людям, которые тыкали в меня палочкой (не знаю, что за функционал на Пикабу, но мне приходили уведомления, что от меня жду постов оО).
Если есть вопросы - где меня найти, вы знаете.
Вот подумал что строить дом или создавать дизайн без техзадания это тоже самое что совершать сделку без договора. Техзадание - это договор. Все остальное наверное - для манипуляторов и аферистов которые красиво болтают и ведут игру на понижение.
Кто-то наверняка хотел увидеть чем пригодились нейросети и какого уровня код может делать..
Но перед этим скажу, что к сожалению одной сетью Сodestral восхваляемой в предыдущем посте не обошлось.. В итоге использовал по некоторым мелким вопросам ( для уточнений скорей)- Copilot, также https://chat.deepseek.com/coder ( выпустили на днях- тоже довольно хороша для программирования). И даже немного поюзал вышедший чуть ли не вчера ( тоже улучшенный- но не специально для кода)- Claude 3.5 Sonnet, модель которая превосходит GPT-4 почти на всех тестах ( в том числе в программировании)
Claude 3.5 Sonnet уже доступна бесплатно для всех пользователей. ( я регился через sms-activate) за 10р ( конечно нужен VPN)
по факту же- основной код из https://chat.deepseek.com/coder... почему так говорю- потому что уже сам не помню- дня три долбил разные сети)) наверное с 15й попытки сделал рабочий вариант. Штука в том, что пару раз наблюдал за тем, как разные сети начинали глючить..то код не допишут, то еще чего. Я в программировании почти ноль ( на php знаю 2-3 команды и то со словарём..). Хотя кое-какие задачи для себя решаю, пишу технические задания.. И вот ниже тех.задание которое я запихивал в нейросеть- нужное для моих целей.
Ниже также будет опубликован рабочий код. Так что и программисты и любители могут оценить..поругать..или поудивляться что может нейросеть..или оценить свои перспективы.
Итак- вот такое было тех.задание:
Напиши программу на php, которая обрабатывает файл prices.csv, при запуске проверяет существование файлов ostatki.txt и pusto.txt, если эти файлы не существуют, создаёт их. Если файлы существуют, очищает их содержимое. Также если не существует, то создается база sqlite ostatki.db с с двумя таблицами: таблица ostatki с полями artikul ( число), tovar (текстовое), qty ( числовое) и таблица pusto с полями artikul (число), tovar (числовое), qty (текстовое) . Также добавь вывод ошибок php в начале файла.
Если скрипт запускается первый раз ( это можно проверить по отсутствию базы ostatki.db)- если файла базы нет ostatki.db, она создается как написано выше и запуск считается первым, в этом случае идет обработка файла prices.csv по таким правилам:
файл prices.csv содержит разделители ; ( точка с запятой)
обработка файла prices.csv начинается со второй строки.
2ая колонка в prices.csv это переменная artikul (артикул товара), 3я колонка это name (название товара), 14ая колонка это qty ( количество), считываем все данные из prices.csv построчно, для ускорения процесса используем массив, записываем данные в базу данных ostatki.db в таблицу ostatki по соответствующим названиям полей и переменных ( artikul в artikul и так далее, при условии что в 14й колонке содержится любое число, если в 14й колонке пусто, тогда данные artikul, tovar записываются в таблицу pusto, а в поле qty этой таблицы pusto записывается текстовое значение zero.
Происходит запись лог файлов ostatki.txt и pusto.txt по таким правилам:
в файл ostatki.txt идет построчная запись товаров с нулевыми остатками, то есть из таблицы ostatki берется товар где qty=0 и в этом случае формируется запись: Товар artikul name закончился, проверьте остатки! И так до тех пор, пока будут проверены все нулевые значения таблицы ostatki в поле qty в базе ostatki.db
в файл pusto.txt построчно записываются значения из таблицы pusto в таком формате Товар artikul name не был заведён по каким-то причинам. После первого запуска идет отправка данных с помощью функции
maillogfile, ее описание в конце текста. И после запуска этой функции maillogfile идет остановка программы, она считается завершенной.
.
При повторном запуске программы ( повторным считается запуск если существует база ostatki.db)
идет проверка на изменение данных в базе данных при сравнении с файлом prices.csv по таким правилам ( начиная со второй строки):
Если в файле prices.csv где 2ая колонка в prices.csv это переменная artikul (артикул товара), 3я колонка это name (название товара), 14ая колонка это qty ( количество), считываем все данные из prices.csv построчно ( ускоряем процесс с помощью массива), если определяется что qty=0 нужно проверить совпадение в базе данных ostatki.db в таблице ostatki по артикулу ( artikul), если в таблице также в qty находится 0, то ничего не делаем, и запись в лог файл ostatki.txt не производим. Если в таблице prices.csv qty=0 ( это 14ая колонка), а в базе данных ostatki.db в таблице ostatki значение qty больше нуля, тогда делаем запись в лог файл ostatki.txt в формате Товар artikul name закончился, проверьте остатки!
Если при сравнении prices.csv и таблицы ostatki в базе данных ostatki.db при совпадении artikul число qty отличается от нуля ( не пустая строка и не отсутствие значения), и qty в prices.csv отличается от qty в таблице ostatki то делаем перезапись значения qty в базе данных.. Если artikul в prices.csv не находится в ostatki.db в таблице ostatki, при втором и последующих запусках программы, значит данного товара еще не было и создается новая строка с данными artikul, tovar, qty и также идёт запись в ostatki.txt такого вида: Добавлен товар artikul name с остатком qty.
Также проверяем проходя 2, 3, 14 колонку файла prices.csv и таблицу pusto в базе данных, если artikul содержит qty от 0 и выше, и при этом данный artikul содержится в таблице pusto, то удаляем эту строку из базы данных из таблицы pusto.
Также идёт проверка таблицы pusto, если в файле prices.csv есть пустые значения в qty ( 14ая колонка), то есть это не 0 и не число, и такое же точно значение уже есть в таблице pusto по значению artikul, и в qty находится zero, то в файл pusto.txt ничего не пишем и проверяем дальше. В итоге после всех проверок
Запускается функция для отправки maillogfile, ее описание ниже.
Функция maillogfile содержит отправку по заданному адресу с другого заданного адреса с использованием библиотеки Phpmailer ( она находится в папке PHPMailer/src/, адрес куда отправлять берет из файла email.txt, откуда отправлять и другие настройки берет из файла email.cfg в формате json, пример содержимого email.cfg с соответствующими настройками, чтобы ты знал как создать функцию maillogfile с использованием данных файлов в виде настроек приведены ниже в кавычках {}
{
"smtp_host": "smtp.mail.ru",
"smtp_auth": true,
"smtp_username": "de--@Mail.ru",
"smtp_password": "H--—9H",
"smtp_secure": "ssl",
"smtp_port": 465
“Name”: ”Dimitriy”
}
Здесь Name это имя отправителя, все остальные данные совпадают с переменными..
Эта функция при запуске отправляет во вложении файлы ostatki.txt и pusto.txt, также тексты добавляются из файлов в тело письма, , при условии что в данных файлах содержится текст, если файлы пустые, не содержат текст, то письмо не отправляется.
Также в данной функции должна проводиться проверка на отправку почты, если по причине технической ошибки отправка не произошла выводится текст на экран: Ошибка, почта не была отправлена. В случае успеха- на экран выводится: Почта с нулевыми остатками отправлена.
Если лог файлы ostatki.txt и pusto.txt пустые- выводится - Ничего не изменилось, поэтому письмо не отправлено. Также проследи чтобы не было проблем с кодировкой при отправке писем, чтобы заголовки и сам текст был в одной кодировке. Также учти чтобы при чтении файла prices.csv не было проблем с кодировкой ( текст внутри этого файла prices.csv в кодировке windows-1251), следует при записи в базу данных и обработке делать преобразование в utf-8 текстовых данных.
В коде должна быть определена только одна функция maillogfile, всё остальное описанное в задании нужно делать строго по моему описанию выше, не создавая для этого специальных функций.
Также проверь время выполнения файла и выведи в конце подробную информацию- сколько времени было выполнение файла.
А вот такой вышел код: ( реально рабочий- через Cron на хостинге запускаю каждые полчаса- но как говорится и в этом есть нюансы)- но в итоге работает.
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
function maillogfile($to, $from, $fromName, $smtpSettings) {
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->Host = $smtpSettings['smtp_host'];
$mail->SMTPAuth = $smtpSettings['smtp_auth'];
$mail->Username = $smtpSettings['smtp_username'];
$mail->Password = $smtpSettings['smtp_password'];
$mail->SMTPSecure = $smtpSettings['smtp_secure'];
$mail->Port = $smtpSettings['smtp_port'];
$mail->CharSet = 'UTF-8';
$mail->setFrom($from, $fromName);
$mail->addAddress($to);
$mail->Subject = 'Остатки товаров';
$ostatkiContent = file_get_contents('ostatki.txt');
$pustoContent = file_get_contents('pusto.txt');
if (empty($ostatkiContent) && empty($pustoContent)) {
echo "Ничего не изменилось, поэтому письмо не отправлено.";
return;
}
if (!empty($ostatkiContent)) {
$mail->addAttachment('ostatki.txt');
$mail->Body .= $ostatkiContent;
}
if (!empty($pustoContent)) {
$mail->addAttachment('pusto.txt');
$mail->Body .= $pustoContent;
}
if (!$mail->send()) {
echo 'Ошибка, почта не была отправлена.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Почта с нулевыми остатками отправлена.';
}
}
$startTime = microtime(true);
$dbFile = 'ostatki.db';
$csvFile = 'prices.csv';
$ostatkiFile = 'ostatki.txt';
$pustoFile = 'pusto.txt';
$emailFile = 'email.txt';
$emailConfigFile = 'email.cfg';
if (!file_exists($ostatkiFile)) {
file_put_contents($ostatkiFile, '');
} else {
file_put_contents($ostatkiFile, '');
}
if (!file_exists($pustoFile)) {
file_put_contents($pustoFile, '');
} else {
file_put_contents($pustoFile, '');
}
$ostatkiBuffer = '';
$pustoBuffer = '';
if (!file_exists($dbFile)) {
$db = new SQLite3($dbFile);
$db->exec("CREATE TABLE ostatki (artikul INTEGER, tovar TEXT, qty INTEGER)");
$db->exec("CREATE TABLE pusto (artikul INTEGER, tovar TEXT, qty TEXT)");
$db->exec("CREATE INDEX idx_ostatki_artikul ON ostatki (artikul)");
$db->exec("CREATE INDEX idx_pusto_artikul ON pusto (artikul)");
$insertOstatki = $db->prepare("INSERT INTO ostatki (artikul, tovar, qty) VALUES (:artikul, :tovar, :qty)");
$insertPusto = $db->prepare("INSERT INTO pusto (artikul, tovar, qty) VALUES (:artikul, :tovar, 'zero')");
$csvData = [];
if (($handle = fopen($csvFile, "r")) !== FALSE) {
fgetcsv($handle, 0, ";"); // Skip header
while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
$csvData[] = $data;
}
fclose($handle);
}
$db->exec("BEGIN TRANSACTION");
foreach ($csvData as $data) {
$artikul = $data[1];
$tovar = mb_convert_encoding($data[2], 'UTF-8', 'Windows-1251');
$qty = $data[13];
if (is_numeric($qty)) {
$insertOstatki->bindValue(':artikul', $artikul, SQLITE3_INTEGER);
$insertOstatki->bindValue(':tovar', $tovar, SQLITE3_TEXT);
$insertOstatki->bindValue(':qty', $qty, SQLITE3_INTEGER);
$insertOstatki->execute();
} else {
$insertPusto->bindValue(':artikul', $artikul, SQLITE3_INTEGER);
$insertPusto->bindValue(':tovar', $tovar, SQLITE3_TEXT);
$insertPusto->execute();
}
}
$db->exec("COMMIT");
$ostatkiBuffer = '';
$pustoBuffer = '';
$result = $db->query("SELECT * FROM ostatki WHERE qty = 0");
while ($row = $result->fetchArray()) {
$ostatkiBuffer .= "Товар {$row['artikul']} {$row['tovar']} закончился, проверьте остатки!\n";
}
$result = $db->query("SELECT * FROM pusto");
while ($row = $result->fetchArray()) {
$pustoBuffer .= "Товар {$row['artikul']} {$row['tovar']} не был заведён по каким-то причинам.\n";
}
file_put_contents($ostatkiFile, $ostatkiBuffer);
file_put_contents($pustoFile, $pustoBuffer);
$email = file_get_contents($emailFile);
$emailConfig = json_decode(file_get_contents($emailConfigFile), true);
maillogfile($email, $emailConfig['smtp_username'], $emailConfig['Name'], $emailConfig);
} else {
$db = new SQLite3($dbFile);
$updateOstatki = $db->prepare("UPDATE ostatki SET qty = :qty WHERE artikul = :artikul");
$insertOstatki = $db->prepare("INSERT INTO ostatki (artikul, tovar, qty) VALUES (:artikul, :tovar, :qty)");
$deletePusto = $db->prepare("DELETE FROM pusto WHERE artikul = :artikul");
$insertPusto = $db->prepare("INSERT INTO pusto (artikul, tovar, qty) VALUES (:artikul, :tovar, 'zero')");
$csvData = [];
if (($handle = fopen($csvFile, "r")) !== FALSE) {
fgetcsv($handle, 0, ";"); // Skip header
while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
$csvData[] = $data;
}
fclose($handle);
}
$db->exec("BEGIN TRANSACTION");
foreach ($csvData as $data) {
$artikul = $data[1];
$tovar = mb_convert_encoding($data[2], 'UTF-8', 'Windows-1251');
$qty = $data[13];
if (is_numeric($qty)) {
$result = $db->querySingle("SELECT qty FROM ostatki WHERE artikul = '$artikul'", true);
if ($result) {
if ($result['qty'] != $qty) {
$updateOstatki->bindValue(':qty', $qty, SQLITE3_INTEGER);
$updateOstatki->bindValue(':artikul', $artikul, SQLITE3_INTEGER);
$updateOstatki->execute();
}
if ($qty == 0 && $result['qty'] > 0) {
$ostatkiBuffer .= "Товар {$artikul} {$tovar} закончился, проверьте остатки!\n";
}
} else {
$insertOstatki->bindValue(':artikul', $artikul, SQLITE3_INTEGER);
$insertOstatki->bindValue(':tovar', $tovar, SQLITE3_TEXT);
$insertOstatki->bindValue(':qty', $qty, SQLITE3_INTEGER);
$insertOstatki->execute();
$ostatkiBuffer .= "Добавлен товар {$artikul} {$tovar} с остатком {$qty}.\n";
}
$deletePusto->bindValue(':artikul', $artikul, SQLITE3_INTEGER);
$deletePusto->execute();
} else {
$result = $db->querySingle("SELECT qty FROM pusto WHERE artikul = '$artikul'", true);
if (!$result) {
$insertPusto->bindValue(':artikul', $artikul, SQLITE3_INTEGER);
$insertPusto->bindValue(':tovar', $tovar, SQLITE3_TEXT);
$insertPusto->execute();
}
}
}
$db->exec("COMMIT");
file_put_contents($ostatkiFile, $ostatkiBuffer);
file_put_contents($pustoFile, $pustoBuffer);
$email = file_get_contents($emailFile);
$emailConfig = json_decode(file_get_contents($emailConfigFile), true);
maillogfile($email, $emailConfig['smtp_username'], $emailConfig['Name'], $emailConfig);
}
$endTime = microtime(true);
$executionTime = $endTime - $startTime;
echo "Время выполнения скрипта: " . round($executionTime, 2) . " секунд";
?>
Сам бы я такое на написал даже после обучение в полгода-год как мне кажется.. по сути тут работы с нейросетью мне на полдня ( хотя в итоге было три попытки- часа по два каждый раз)
Еще стоит учесть что и тех.задание переписывал ( это уже вторая версия глобально). В первый раз почти все получилось- но что-то пошло не так..и на второй день уже снова делал с нуля..и новое тех.задание ( другими словами). Первые запуски были тормозные- секунд по 20.. было переформулировано- сделай быстрей... Нейросеть давала советы- как сделать лучше- переписывала код.. В итоге обработка файла где 1000 товаров- происходит примерно за секунду.
Так то можно даже чему-то научиться если читать советы:-)
Вот и смотрите теперь- как вам такое? Может ли быть полезно? Всякие обработки эксель файлов на ура с кучей условий ( мне практические такое требуется). В итоге конечно на практических примерах лучше тренироваться- тогда можно научиться чему-то.. а если теоретически- даже и не знаю что у этого железного мозга спрашивать:-)
Были нюансы- на хостинге через планировщик не запускалось- были ошибки- спросил в чем дело- оно тоже дало совет, варианты из-за чего могла быть проблема.. так что пользы много))