pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: При устройстве на работу, предлагают оформиться как ИП. Соглашаться?

Лучший ответ: Смотрите сами - перевешивают ли выгоды от работы с этой компанией, чем трудоустройство в другую компанию по ТК. Действительно, Вы теряете в больничных, теряете в правах - в случае косяка, работодатель может отобрать всю Вашу собственность. Пенсии скорее всего проблемой не будут, т.к. ИП платит взносы в пенсионный фонд. Дополнительно работодатель может разорвать контракт с Вами в любой момент. Ну, и выходных у Вас не будет - т.к. в договоре с ИП должен быть указать конкретный объем работ и конкретный срок, чтобы это не выглядело как попытка ухода от налогов работодателем (а штрафы там будь здоров и есть разъяснения судов и налоговой инспекции по этому поводу).
Ещё Вы ничего не приобретаете. Условно - налоги платите Вы сами, никто не будет платить ипшнику на 40% больше, чем штатному работнику - это оптимизация выгодна только лишь работодателя, а не сотруднику.
Плюс, если компания иностранная, может быть очень неприятно попасть на валютный контроль и не получить свои честно заработанные деньги от слова "никогда".

Худший ответ: Знакомый работает на Японскую компанию, для этого оформился ИП, доволен.
Вопрос: Компьютер виснет в одно и тоже время, какая может быть причина?

Лучший ответ: У вас в расписании никаких потенциально тяжелых задач нет в районе 12 ? Ну там обновления и т.п.
Выглядит как не хватка мощности БП в момент какой-то пиковой нагрузки.
Если есть возможность, попробуйте блок питания заменить.

Худший ответ: Я с вирусом таким сталкивался, который раз в час тупо убивал систему примерно с такими-же симптомами.
Вопрос: Как исправить ошибку в формуле Excel VBA?

Лучший ответ: Если у вас в начале модуля указано:
Option Explicit

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

Public Function fun1(x As Double) As Double
fun1=(x*x-5*2^0.5)/(2*x^3+1)
End Function

Если причина не в этом - выкладывайте скриншот ошибки

Худший ответ: Добавь пробелы и все заработает
Public Function fun1(x As Double) As Double
    fun1 = (x * x - 5 * 2 ^ 0.5) / (2 * x ^ 3 + 1)
End Function
Вопрос: Сделали приложение а в нем вылезает ошибка. (В приложении снова произошёл сбой). Как найти проблему?

Лучший ответ: "У меня слышится какой-то подземный стук. Вы не могли бы сказать, откуда он происходит?".
Вы дебаггером умеете пользоваться?
Есть ли код приложения?

Худший ответ: https://play.google.com/apps/publish
Выбрать приложение
Android Vitals
Ошибки ANR и сбои
Дальше уже просматриваете кластеры ошибок.
Вопрос: Как найти подряд идущие значения в массиве?

Лучший ответ: С помощью цикла.
Не знаю, почему в моду вошло написание решений в одну строчку в функциональном стиле, словно это быстрее работает или проще понять при прочтении.
let cnt = 0; //число совпадений
for(let i = arr.length-1; i > 0; i--) {
  if (arr[i] == 'значение 2' && arr[i-1] == 'значение 1') cnt++;
}

Худший ответ: arr.reduce( (acc,v,i,a)=> i > 0 && v === 'значение 2' && a[i-1] === 'значение 1' ? acc + 1 : acc, 0)
Вопрос: Ноутбук. Что поставить? SSD / 8 GB оперативной памяти?

Лучший ответ: SSD в первую очередь.
Игры что вы описали - 8 гб оперативы там за глаза.
Да и игры старые, для такого ноутбука не проблема.

Худший ответ: Если диск SMR, то SSD значительно улучшит ситуацию, ибо этот SMR настолько ущербный, что даже в браузере сидеть - сплошное мучение. Ну и соответственно, быстрее диск - быстрее скорость файла подкачки.
Вопрос: Книги и ресурсы по ООП?

Лучший ответ: Если можно, то отвечу чего точно не стоит смотреть/читать, так это то, когда начинают говорить что-то наподобие такого:Ну вот представьте что у вас есть кошечка и собачка. Кошечка мяукает, а собачка лает, т.е. они все умеют говорить, но каждый по-своему. Кошечка и собачка это животное, значит выделим базовый класс Animal...
Да и вообще, когда говорят, что ООП моделирует реальный мир... Бегите сразу от таких преподователей...

Худший ответ: кое что набросал тут.
Вопрос: От middle backend java developer к middle android developer. Как учитывается опыт работы при приеме на работу?

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

Худший ответ: Я именно прям так и сделал. 
Как лично у вас учитывался опыт работы в данном случае?
всем плевать что был бэкендом

Будет ли сильным фактором то, что у меня нет опыта разработки на android
на текущей работе нет возможности потрогать андроид проект хоть немного?

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

зависит от того, как долго уже не могут закрыть вакансию,
Сергей Горностаев  тут это сказал, ну так ахренено долго не могут закрыть вакансии даже с хорошими деньгами во всех компаниях где я работал. На мидла много вакансий и людей не хватаетю

Главный фактор только то насколько хорошо выучишь теорию  с сайтов по подготовке к собесу
Вопрос: Как исправить, сломался ssd?

Лучший ответ: SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Труп. Не надо это исправлять.

Худший ответ: Чтобы со всеми логами было, напишиsmartctl -x /dev/sda
Потыкай его на другом компе с другим кабелем или питанием. На этом железе бекапы делать уже поздно, если ошибки чтения сыпятся.
NAND_Writes_1GiB  36393 / 1024 =35,54TB - это как бы вообще ничего.
Вопрос: Тема диплома ПО на C# для работы с API соц. сети?

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

Худший ответ: тему на дипломЯ особо не работал в этом направлении
Ну тогда не пишите в этом направлении)) Диплом - это отчёт студента по полученным знаниям. Если у вас нет знаний - у вас нет диплома.
Вопрос: Монитор или телевизор при -6 градусов сможет работать?

Лучший ответ: Обычная техника сможет работать при таких условиях? 
Техника разная, обычно в инструкции по эксплуатации пишут допустимые нормы по эксплуатации и хранению телевизора.

при -6 градусов сможет работать?
Мне кажется это слишком. При перепаде температуры допустим будет 100% конденсат, и дорожки у вас попросту сгниют, либо будет КЗ на питании. В общем 90% что ваш телевизор зиму не переживет.

Вот вам пример доки новых телевизоров samsung


Худший ответ: Работать будет в общем случае, без особых проблем.
Но гарантии нет.
Основная проблема влажность и как следствие конденсат. Если влажность невысокая и сильных перепадов температуры воздуха в помещении нет, проблем не должно быть.
Вопрос: Как в слайдер сделать переключение слайдов после окончания проигрывания?

Лучший ответ: Включите autoplay по умолчанию, после инициализации слайдера вызывайте slickPause, после видео вызывайте slickPlay

Худший ответ: Ну что-то типа такого:
$('video').on('ended', function(){
    $('.slick-slider').slickNext();
});
Вопрос: Какие плагины посоветуете для PHP на Sublime Text 3?

Лучший ответ: Как минимум прописать путь к php в path операционки, потом установить плагин SublimeLinter и потом установить плагин SublimeLinter-php, будет проверка php-кода "на лету" работать хотя бы :)

Худший ответ: Потянет ли он работу с PHP?
Для учебы твоих мощностей за глаза хватит.
Вопрос: Как сделать такую форму для приема платежей?

Лучший ответ: Такую форму могут себе позволить только очень крупные игроки, выполнившие для этого кучу недешевых условий.
Раз вы не знаете, даже как сделать такую форму - значит, этот вариант не для вас.
Вы - определитесь, какой у вас будет номер заказа и сколько за него должен заплатить клиент. 
А данные карты для оплаты на всяких мелких сайтах должен требовать банк, и только банк.

Худший ответ: Проксируйте форму оплаты своего банка. Конечно, придется разбирать как там у них запросы под копотом устроены, но тут ничего невозможного нет.
Вопрос: Где найти бесплатную литературу по иностранным языкам — эстонский, финский, японский?

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

Худший ответ: 1. Включите инкогнито 
2. Используйте язык оригинала для поиска
Вопрос: Как пользоваться клиентом speedtest.net через Mikrotik?

Лучший ответ: И что будет? Ну покажет канал клиент-провайдер 100500 гигабит/сек, а у провайдера на мир один 100mb/s канал на всех клиентов

Разве что уличать провайдера в жульничестве прикладывая два спидтеста до него и чуть дальше...

p.s. типа "родное" в микротике - Bandwith test к BTest Server (меню Tools)

Худший ответ: Ну тут Вам можно посоветовать только использовать тест скорости самого микрота - в тесте указать IP или домен сервера до которого надо измерить скорость.

Что то не совсем ясно почему пров принимает данные только от СпидТеста... обычного трейсроута, измерений средствами винды, или средствами микротика должно быть достаточно. там черным по белому будет написано если есть проблема... и на каком узле...
Вопрос: Какой ноутбук купить для веб-разработки до 700 $?

Лучший ответ: Любой ~50к ноут, главное ssd и 16 ГБ опертивки.
Глянь например ideapad L340. Более чем

Худший ответ: Выбери на каком-нибудь екаталоге или ямаркете параметры: fullhd, IPS, 16gb ram (можно 8, но со свободным слотом, чтоб можно было доустановить), SSD или SSD+HDD, видео можно встройку, проц или i3 или i5, скорее всего будет U серия процов в таком классе, из брендов по своему опыту могу посоветовать Asus или Lenovo, и дальше уже смотришь по внешности, наличию в твоих магазинах, читаешь отзывы и смотришь обзоры тех ноутов, которые приглянулись.
Вопрос: Где самая недоступная часть у смартфонов для UI?

Лучший ответ: Нет, не только середина. Есть с камерами в углу.

Худший ответ: Используй Device Simulator, там можно включить чтобы показывало Safe Area. Скрипт для нее: https://www.youtube.com/watch?v=cyDflP3RqT4&ab_cha...
Вопрос: Почему таким образом осуществляют операцию присвоения?

Лучший ответ: Потому, что приращение.
out - строка
mass - массив целых чисел.
"+" для строк в JS - конкатенация: склейка значений. 
Если значение переменной выражения не строковая литера - переменная приводится к ней непосредственно перед конкатенацией.
Вариант: out = out + mass[i]; равен out += mass[i];

Худший ответ: потому что написав  out = mass[i]; ты теряешь предыдущее значение переменной.
Вопрос: Как защитить сайт от скачивание файлов?

Лучший ответ: Раз игра на сайте, то делайте серверную логику, а на сайте только интерфейс.

А так все, что есть на сайте можно скачать. Раз уж браузер скачивает.

Ну и максимально обфусцируйте код. Если для переиспользования кода надо будет прокрутить его обратно через мясорубку - то желающих копировать будет меньше.

Худший ответ: Разработаете скажите, я вас сделаю миллиардером
Вопрос: На сколько может быть долгим запрос?

Лучший ответ: А зачем в дорогом sql запросе вообще нужны feature_values?

Худший ответ: Зачем в вашем запросе нужен LEFT JOIN, результат которого нигде не используется?
Вопрос: Как исправить url'ы через базу данных?

Лучший ответ: вообще, хранить в базе домен не комильфо :UPDATE `table_name`
  SET `site_url`= REPLACE(`site_url`, 'old_domain', 'new_domain');

Худший ответ: Напрямую в БД лучше не менять урлы. Все серилизованные данные с урлами сломаются.
Для правильной смены урлов лучше использовать wp-cli
https://wp-kama.ru/handbook/cli/wp/search-replace
или через
https://github.com/interconnectit/Search-Replace-DB
если нет доступа к консоли.
Вопрос: Я написал функцию, но хороша ли она?

Лучший ответ: Работает? Хороша

Не работает? Не очень

Худший ответ: Первый момент - вам не надо возвращать промис из асинковой функции, джаваскрипт сделает это за вас.
А еще, простой совет - вынесите числа все числа в именнованные константы, так вы избавитесь от magic numbers.
Их можно использовать вместо 11, 30, и количества времени, которое вы в setInterval'ы отправляете.
Вопрос: Хороший видео-курс по Go?

Лучший ответ: Хороший и видео - это взаимоисключающие понятия. Прочитайте лучше учебник.

Худший ответ: Для ознакомления обычно любые подходят. А дальше самостоятельно или с преподом (наставником).
Вопрос: Почему так долго пишу код?

Лучший ответ: Максимально быстро - это в лоб только для позитивного кейса. Есть не малая вероятность того, что вот эти темы про 10 минут как раз таки соответствуют такого рода решениям.
Да, это бысто и чотко, но это одноразовый код.

Бывают ситуации, когда поиск и исправление 1 строчки кода занимает неделю, причем это вовсе НЕ ЗНАЧИТ, что инженер тупой, или ленивый или обделенный экспертизой.

Так что не парьтесь. Хотите в скорость - учитесь писать быстрое говно, хотите в качество - забудьте про спешку и повышайте экспертизу.

Худший ответ: Через несколько лет ускориШСЯ
Вопрос: Есть ли какие-то бесплатные курсы/статьи/вебинары по информационной безопасности?

Лучший ответ: Могу посоветовать youtube канал Spbctf

Худший ответ: Привет.

А вы уже выбрали какое-то конкретное направление в ИБ? Или вас пока только самая база интересует? УК РФ, сети и пр.?
Вопрос: Разница между сайтом «блог» и «новостным» сайтом?

Лучший ответ: В чем отличие между сайтом "блог" и "новостным" сайтом, в техническом плане?
В целом разницы нет.Какие модули, библиотеки используются для создания сайта новостей в Django?
Именно те модули и библиотеки которые нужны для создания конкретного сайта новостейКакие модули, библиотеки используются для создания сайта блог в Django?
Именно те модули и библиотеки которые нужны для создания конкретного сайта блогаЗа googlи! - гуглил четкого ответа нет!
Гугл четкого ответа не даст, т.к. технически это одно и тоже, зависит от конкретной задачиЗачем Django когда есть Wordpress - ответ: потому что Python!
Согласен!

Худший ответ: В чем отличие между сайтом "блог" и "новостным" сайтом, в техническом плане?
Ни в чём. Новостной сайт это тоже блог, только на тему новостей.
Вопрос: "Проднижение" сайта через 100% отказ и попытки взлома. Что можно сделать?

Лучший ответ: Если Ваш сайт ориентирован на РФ, а боты валят из-за рубежа, можете уйти под бесплатную защиту cloudflare, запретив там подключения не из РФ.
Или отдавайте статичный html с левым счётчиком метрики/без него, для посетителей с указывающей на спамера совокупностью признаков.
PS интересно, gzip-бомбы ещё живы?

Худший ответ: Можно сделать "прокладку" ленивой загрузки всех счётчиков аналитики.
Если запросили URL,  а "прокладку" не запрашивали и так 3-4 раза, то IP-шник в бан на 
Y=X^5
где X - кол-во раз триггера события, а Y - кол-во минут бана.
Вопрос: Как спрятать внешний статический ip модема?

Лучший ответ: зачем?
надо не прятать адрес/порты (это бессмысленно), а сделать так, чтоб доступ по этим адресу/портам был не опасен.

Худший ответ: Задача какова?
Вы хотите скрыть IP, потому что:
- боитесь, что злоумышленник атакует ртоутер и вскроет его?
- боитесь, что за Вами придут, потому что на сервере есть вещи, которые могут заинтересовать определенных людей (в серой форме)?
Это две разные задачи и решаются они принципиально разными методами.
Вопрос: Как Вы обходитесь без «if»?

Лучший ответ: Вообще принято while использовать когда неизвестно количество итераций, а for - когда известно.

Худший ответ: Не очень понятен вопрос, с примером кода, который вы пытаетесь причесать - было бы понятнее.

Но пока похоже, что вам нужена конструкция switch.
Вопрос: При загрузке страницы вылетело исключение. На какую страницу делать редирект?

Лучший ответ: Редирект в случае ошибки сделать невозможно.
Потому что в случае ошибки сервер обязан отдать НТТР статус с кодом 5хх
А редирект выдает код 3хх
То есть, если сделать редирект, то клиент не узнает, что это ошибка.

При возникновении ошибок поведение боевого сервера должно быть стандартным:
1. залогировать ошибку для программиста
2. Отдать корректный код статуса для НТТР клиента
3. В случае, если запрос делал браузер, то желательно показать посетителю сайта какую-то осмысленную страницу.

Можно, кстати, обойтись без try-catch, Правильно ли я понял централизованную обработку исключений в PHP?

Худший ответ: Правильно выдавать ошибку 503, причем тут редиректы и как они возникли в вашем мозгу одному богу известно
Вопрос: Как создать ос на базе Windows?

Лучший ответ: Linux - Open Source. Бери исходники и делай своё.
Unix - Open Source. Бери исходники и делай своё.
Windows - закрытый продукт. Исходники есть только у Microsoft, а если вы их где-то и найдете и попытаетесь использовать в своих целях - это будет нарушением авторского права.

Худший ответ: Как создать ос на базе Windows?Никак.
Windows проприетарная система - никто вам не покажет исходных кодов, и не даст разрешения использовать их в своих проектах.
Вопрос: План изучения Пайтон?

Лучший ответ: Марк Лутц "Изучаем Python" и документация Django - вот и весь план.

Худший ответ: решай задачки на hackerrank.com
Вопрос: Ошибка при добавлении цены: Не указана валюта. При импорте товаров из csv в битрикс как исправить?

Лучший ответ: Добавьте колонку CV_CURRENCY_1 с значениями строк RUB
Сделайте экспорт каталога товаров демо сайта битрикс и посмотрите каких колонок у вас не хватает. При импорте в битрикс красным выделением показывает обязательные поля

Худший ответ: Посмотрите еще здесь https://dev.1c-bitrix.ru/support/forum/forum6/topi...
Вопрос: Какой выбрать вид vpn сервера для установки?

Лучший ответ: нужно поднять pptp сервер, так как подключиться к нему может всё встроенными средствами. Айфон, андроид, винда (даже XP) умеет иcкоробки pptp.
Я у себя на сервере сегодня l2tp поднял, так ща сносить буду - ставить pptp. Поди объясни технически неподкованному человеку, куда ключи вбивать от ipsec. Нафиг! Лучше поставлю pptp - оно подымается не сложнее PPPoE на клиентах.
На винде это подключение называется "Подключиться к сети на рабочем месте"

Худший ответ: pritunl посмотрите
Вопрос: Какой выбрать node.js фреймворк под небольшой проект?

Лучший ответ: Используйте Express.js это самый простой в освоении фремфорк, под который написано куча библиотек:

авторизация - Passport.js
работа с файлами - multer
ORM - sequelize
сокеты - socket.io
настройка typescript - тут статья
безопасность - helmet 


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

Худший ответ: Для работы с базой посмотрите https://www.prisma.io/
Вопрос: Как использовать один аккаунт WhatsApp на разных ПК одновременно?

Лучший ответ: Ну web.whatsapp.com можно запустить на компьютере и второе устройство - это телефон. Больше 2-х сейчас получается никак.

Но есть обходные решения, которые используют различные WhatsApp API, например тут https://wa.kubsite.ru описывается, как использовать WhatsApp Web одновременно для нескольких компьютеров. Но это решения для организаций, нежели для частных лиц.

Худший ответ: Получается, что никак.
https://faq.whatsapp.com/ru/
На телефоне и ПК можно, на нескольких ПК нет.
Вопрос: Какой институт для заочного обучения в сфере it выбрать, курсов много разных, но для трудоустройства нужен диплом, кто сталкивался отпишите?

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

Худший ответ: Любой ВУЗ с конвертируемым дипломом и наличием кафедры информационных технологий. Выбирать по возможностям.
По факту, универ не сделает из тебя айтишника, но даст математическую базу
Вопрос: Хранение данных в Redux?

Лучший ответ: Если какое-то значение, объект или массив Вам нужны в нескольких независимых компонентах то храните их в Store, если только для одного компонента, то в локальном состоянии. Ну и вариант типа я хз нужны ли эти данные в других компонентах, то лучше хранить в сторе.

Худший ответ: Данные, полученные с API, принято хранить в store redux, так как единый подход к организации кодовой базы повышает удобство ее сопровождения. Но никто не запрещает вам делать иначе.
Вопрос: Как можно добавить класс на последние 8 строк таблицы?

Лучший ответ: Выбрать все, определить их количество, перебрать в цикле, проверяя, что номер больше, чем количество минус восемь, добавить класс.
Всегда ваш, К.О.
Прямо в РНР - выше цикла определить количество и создать переменную с нулевым значением, в цикле проверять эту переменную и делать ей инкремент.

Худший ответ: $total = count($values);

foreach ($value as $i => $val)
    if( $total - ($i + 1) <=  8)
        echo ' class="hide" ';
либо$total = count($values);
$i = 1;

foreach ($value as $val)
{
    if( $total - $i <=  8)
        echo ' class="hide" ';

    $i++;
}
как-то так
Вопрос: Как правильно отправить тело в POST запросе?

Лучший ответ: Забыли ещё указать заголовок:
Content-Type: application/x-www-form-urlencoded
Сервер же должен знать, в каком формате тело запроса (хотя он может и попробовать догадаться, но зачем ему играть в угадайку?)

Худший ответ: Так-то попробуйте не енкодить, а просто передать в посте строку "limit=100&offset=0&timeout=300"
Content-Length: 31
Вопрос: Какой аналог этой команды в Windows?

Лучший ответ: Почитайте документацию к taskkill

Худший ответ: > ps axuw | grep -i '<Ваш фильтр>' | grep -v 'grep' | awk '{print $2}' | xargs kill -9

Хороший велосипед))

попробуйте так 

pgrep '<Ваш фильтр>' |  xargs kill -9
или так

pkill '<Имя процесса>'

Это варианты для Linux, для windows taskkill
Вопрос: C чего начать изучение Unity со знанием и опытом в C#?

Лучший ответ: С документации

Худший ответ: Видеоуроки, учебники, гугл в конце концов.
Вопрос: Как правильно обновлять (устанавливать) программу в Windows?

Лучший ответ: Обычно работает второй вариант - новая версия просто накатывается поверх старой с перезаписью программы и сохранением настроек.

Худший ответ: Это знает только производитель программы.
Как он сделал, так и будет.
Спрашивать нужно у него.В общем, всё по старинке, ничего не изменилось? (первый вариант)А как по старинке?
По старинке это оба варианта, плюс еще варианты.
Вопрос: Какой сжатый учебник по PHP посоветуете?

Лучший ответ: Самый лучший учебник - официальная документация 
https://www.php.net/manual/ru/

Худший ответ: Приложение SoloLearn для Android смартфона.