pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Как найти частичное совпадение строк?

Лучший ответ: Без дополнительных библиотек и с использованием расстояния Дамерау-Левенштейна можно примерно так:import re


def get_substrings(string):
    """Функция разбивки на слова"""
    return re.split('\W+', string)


def get_distance(s1, s2):
    """Расстояние Дамерау-Левенштейна"""
    d, len_s1, len_s2 = {}, len(s1), len(s2)
    for i in range(-1, len_s1 + 1):
        d[(i, -1)] = i + 1
    for j in range(-1, len_s2 + 1):
        d[(-1, j)] = j + 1
    for i in range(len_s1):
        for j in range(len_s2):
            if s1[i] == s2[j]:
                cost = 0
            else:
                cost = 1
            d[(i, j)] = min(
                d[(i - 1, j)] + 1,
                d[(i, j - 1)] + 1,
                d[(i - 1, j - 1)] + cost)
            if i and j and s1[i] == s2[j - 1] and s1[i - 1] == s2[j]:
                d[(i, j)] = min(d[(i, j)], d[i - 2, j - 2] + cost)
    return(d[len_s1 - 1, len_s2 - 1])


def check_substring(search_request, original_text, max_distance):
    """Проверка нечёткого вхождения одного набора слов в другой"""
    substring_list_1 = get_substrings(search_request)
    substring_list_2 = get_substrings(original_text)

    not_found_count = len(substring_list_1)

    for substring_1 in substring_list_1:
        for substring_2 in substring_list_2:
            if get_distance(substring_1, substring_2) <= max_distance:
                not_found_count -= 1

    if not not_found_count:
        return True


search_request = 'трубок использовали для прожигания'
original_text = 'трубок использовали для прожигания стальковша.Замена воронки 18м 8сл. Разлита полностью'

result = check_substring(search_request, original_text, max_distance=2)

print(result)  # True если найдено, иначе None
Можете доработать под свои задачи. Но учтите, нахождение расстояния Дамерау-Левенштейна в принципе ресурсоёмкая операция, тем более с реализацией на чистом Python. Например, искать вхождение подстроки в нескольких мегабайтах текста -- может быть довольно долго.
Чтобы ускорить нахождение расстояния ДЛ, можно использовать реализацию для Python на языке Си: https://github.com/gfairchild/pyxDamerauLevenshtein
Так же существуют менее точные, но более быстрые алгоритмы сравнения двух строк:
https://habr.com/ru/post/114997/
В PyPI и на GitHub должны быть библиотеки с готовыми реализациями наиболее востребованных из них.

Худший ответ: Как осуществить анализ схожести строк и проверить на плагиат?
Вопрос: Как избавиться от ошибки java.lang.NullPointerException?

Лучший ответ: эмм так он же null
замените ArrayList<EventCalendar> event_calendar_list = null;
на ArrayList<EventCalendar> event_calendar_list = new ArrayList<EventCalendar> () ;

Худший ответ: Настолько полно сформулирован вопрос, что в нем и ответ.
Вопрос: C#: Почему на функцию приходит пустое значение переменной?

Лучший ответ: В начале main вы заполнили один экземпляр Data, потом в функции Adding создали другой, который уже не заполнен естественно, и из него берете данные. Два разных экземпляра у вас.

Худший ответ: вы в обоих методах вызываете конструктор класса Data, однако заполнение поля Description происходит только в одном из методов (при вызове Dataclass.Filling())
скорее всего, вам нужно параметризовать метод Classcontainer.Adding() и в него параметром передавать ссылку на ранее созданный экземпляр Data Dataclass
Вопрос: Как правильно войти в индустрию разработки игр?

Лучший ответ: Конечно можно просто написать в студию, но, по моему мнению, написав письмо типа: я хочу у вас работать! Что нужно? от luckygambler(собака)superpuperfreemail.ru, да еще и забыв представиться (имею опыт получения таких писем), шансы близки к нулю. Вам ОБЯЗАТЕЛЬНО нужно резюме, там должны фигурировать: фамилия, имя, возраст, образование, место жительства, готовность к релокации, наличие семьи (в целях оценки возможности релокации если работа в другом городе/стране), готовность к удаленной работе, желаемая должность, опыт работы, знания, умения. В качестве опыта могут выступать какие-то достижения или портфолио, если опыта в этой области нет. Если вставляете ссылки, проверьте, чтобы они были рабочие.

Худший ответ: Резюме нужно обязательно. Ещё создайте профиль на LinkedIn. Иногда через Linked in можно найти очень интересные вакансии, в том числе за рубежом. Где то на хабре была статья как человека из Новосибирска(сис. админ dev ops) пригласил google в Швейцарию через LinkedIn(если я ничего не путаю) . А вот и статья.
Можно сразу попробовать обратиться в эти компании:
Gaijin(war thunder) www.gaijinent.com/ru/jobs
Zeptolab zeptoteam.ru/job
Nival ru.nival.com/career/vacancies
Wargaming wargaming.com/ru/careers
Если честно, то работая просто программистом С++ или Java в какой нибудь финансовой сфере можно зарабатывать больше и страдать меньше :) Но не мне за вас выбирать как вам жить.
Вопрос: Компьютер качает что-то. В чем может причина?

Лучший ответ: Можно же посмотреть какой софт качает. 
У вас виден локальный порт. Делаем netstat -ano - видим активные соединения с указанием PID.
К примеру, меня интересует кто там качает на порту 5004.C:\Users\me>netstat -ano | find "5004"
  UDP    0.0.0.0:5004           *:*                                    3988
  UDP    [::]:5004              *:*                                    3988
Смотрим что это за процессC:\Users\me>tasklist | find "3988"
wmpnetwk.exe                  3988 Services                   0    12 400 КБ
Или через таскменеджер:
Можно еще wireshark'ом порыться в трафике, посмотреть более детально что именно он качает.

Худший ответ: 51413 это скорее всего торрент-клиент на той стороне. Смотри, что качаешь в фоне торрентами.
Вопрос: Как увеличить количество Socket.IO подключений?

Лучший ответ: При большем объеме нода падает...
Может быть начать с того что почитать ошибку и узнать почему падает, а не просто пытаться от балды пилить что-то?
Может у вас там портов максимум 4к на сервере стоит, а вы совсем не туда копаете.

Худший ответ: Нужно лимит на открытые файловые дескрипторы увеличить. Сокеты используют их
Вопрос: Как подключить файл js и не засветить его?

Лучший ответ: Что бы вы не подключали, на вкладке network это будет видно.

Худший ответ: js - это клиентская технология (node не считаем). Если что вам нужно незаметно - то только на бекенде: отправляете ajax - сервер в php отрабатывает - фигачит как надо и возвращает. В принципе так.
А если все же надо на клиенте - обфусцируете js, и предварительно там творите ад - чтобы было кучи зависимостей, подвязок с сторонними скриптами - так вы усложните жизнь. Ну и еще можно как Авито сделать - при включенной консоле творить ад. Но это тоже обходится.
Вопрос: Как определить «тормоза» Windows 7 из-за использования файла подкачки?

Лучший ответ: По миганию диода активности харда. 
Свежая Win7 через пару минут использования запускает процесс обновления которое кушает весь озу и весь процессор. В этом еще причина тормозов быть может.

Худший ответ: Мне кажется, в вашем случае надо следить не за тем, насколько используется своп, а за тем, насколько используется ОЗУ. Если делать это время от времени, то достаточно тривиального Диспетчера задач (закладка Производительность), а если хотите следить оперативно, то можно установить гаджет боковой панели под названием After_Meter, CPU_Monitor или аналогичный (их много напридумано).
Вопрос: Нужна ли программисту профильная математика?

Лучший ответ: Знание математики определит ваш потолок как программиста.  Формальный ответ на ваш вопрос: не обязательна. 
Для разработки несложных приложений, решения типичных практических задач можно ограничиться базовой математикой. Но если у вас есть амбиции, хочется быть в «высшей касте», «на острие», то сильный математический скилл совершенно необходим.

Худший ответ: На информационные или технические специальности обычно требуется Математика + Русский язык + Физика либо Математика + Русский язык + Информатика. И Русский и Математика нужны профильные.
Базовые можно, только если специальность не требует эти предметы для поступления(например, на многие гуманитарные специальности не нужна математика).
Вопрос: Как сделать такую примитивную верстку?

Лучший ответ: CodePenbody {
	width: 450px;
	margin: 0;
	padding: 10px;
	font-family: Arial, sans-serif;
	font-size: 14px;
}

.logo,
.contacts,
.about-us,
.main-menu,
.footer {
	padding: 10px 20px 10px 20px;
	background-color: #f5f5f5;
	border: 2px solid #cccccc;
}


/* Собственные стили блоков */

.header {
	min-height: 40px;
	margin-bottom: 20px;
}

.logo {
	float: left;
	width: 230px;
	text-align: center;
	background-color: #333333;
	color: #ffffff;
	font-weight: bold;
}

.contacts {
	float: right;
	width: 110px;
	text-align: center;
	background-color: #333333;
	color: #ffffff;
	font-style: italic;
}

.about-us {
	width: 230px;
	margin-bottom: 20px;
	font-size: 10px;
	float: left;
}

.about-us h1 {
	font-size: 20px;
}

.about-us p {
	font-size: 12px;
}

.main-menu {
	float: right;
	width: 110px;
}

.footer {
	clear: both;
	background-color: #333333;
	color: #ffffff;
}

Худший ответ: Мы не умеем гадать, как оно выглядит сейчас ) Закинь код на codepen или jsfiddle
Вопрос: На экране полоса с градиентом, кто виноват?

Лучший ответ: чтото подобное дает изгиб экрана. но градиент обычно цветовой.
с лампой скорей всего. шлейф дает четкие обычно тонкие линии.

Худший ответ: Лампы там точно нет, матрица с лед подсветкой.
Вопрос: Как включить автодополнение javascript в Phpstorm?

Лучший ответ: в шторме это называется live templates.
https://www.jetbrains.com/help/phpstorm/2016.3/liv...

Худший ответ: Зайдите в File -> Settings, а дальше туда, что указано на скриншоте.
Вопрос: Есть ли смысл с этой версии учить Python?

Лучший ответ: Нет

Худший ответ: 2.7 перестанут поддерживать в 2020
Изучать стоит только 3.х.х
Вопрос: Обработка персональных данных, куда давать инфу?

Лучший ответ: Почитайте здесь и здесь. Этот сервис может тоже пригодиться.

Худший ответ: Не хотите нанимать специалиста - почитайте сами.
Нигде не требуется отдельной формы. Оператор один? Значит и соглашение одно. Оставьте в FAQ или где-то в футере ссылку и всего делов.
По кукам - ХЗ что Вы там храните. Если ПДн есть - значит, надо. Если нету - зачем?
И почитайте внимательно что именно имеется ввиду под ПДн. Если у Вас простая форма обратной связи - заморачиваться не стоит. Можете даже сократить до одного поля "имя" и всё. Игорь с номером телефона - не ПДн
Вопрос: Unity3D. Как найти сервер в локальной сети?

Лучший ответ: UDP broadcast: 255.255.255.255
Затем отвечают те клиенты, которые хотят, чтобы их видели и в ответных пакетах - будут их IP-шники.

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

Лучший ответ: При мобильном разрешении прятать часть элементов с помощью css манипуляций, а при планшетном раскрывать их
П.С. Непонятно, почему пункты 'New' и 'Sale' меняются местами. Я бы сделал идентично на обоих экранах и скрывал бы только последние несколько элементов.
А еще непонятно почему на мобильном нельзя войти в личный кабинет, но это уже к дизайну вопросы :)

Худший ответ: Зачем скрывать, если можно через медиа-запрос повесить блоку свойство overflow-y: overlay
И спокойно оставить все элементы на странице. Я считаю это неплохим решением, главное чтобы визуально это было понятно.
Вопрос: Почему нельзя подключать стили в середине BODY?

Лучший ответ: Кто сказал, что нельзя? - можно. Только не по "православному" это.

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

Лучший ответ: D-link
в мусор выбросьте его и больше данные изделия не покупайте.
Вот ваш будущий герой:

Худший ответ: Диагностику вы уже провели "в бою" - итог, коммутатор глючит.
Но возможны варианты, коненчо. Может глючить не сам по себе коммутатор, а, например, в связке с каким-то клиентом или какой-то порт коммутатора лагает. Может просто у вас такой дикий трафик в сети, что он не справляется.
Я имею ввиду, что можно было бы углубленно поразбираться.
Подключите этот коммутатор к тому что сейчас вместо него и втыкайте в него клиентов по одному, после каждого подключения дайте время поработать, понаблюдайте за процессом. Если все нормально, подключайте следующего клиента и т.д. Если где-то опять начнутся лаги, то попробуйте последнего подключенного переткнуть в другой порт, если перетыкание не поможет, попробуйте вместо последнего клиента взять другого. Таким образом сможете немного локализовать проблему. Подобные эксперименты могут затянуться по времени, запаситесь терпением.
Если окажется, что проблема в порту, то просто не используйте этот порт, если в клиенте - поменяйте адаптер у клиента или пересадите на другой коммутатор, если не справляется - разделите клиентов на два коммутатора. Как-то так.
Вопрос: Как посмотреть все общие (расшаренные мной для других пользователей) папки/файлы в Google Drive?

Лучший ответ: Когда-то был пост на хабре про сервис, который позволяет получить список всех общих файлов. 
Можно воспользоваться этим https://www.labnol.org/internet/google-drive-acces...

Худший ответ: Выше ссылка не работает.
Полного решения не нашел, частичное решение:
в Google Docs/Drive в поисковой строке выбрать Владелец "другие пользователи" или сразу в строку вставить "-owner:me" - тут документы расшаренные с тобой. Сюда попадают документы, которые расшарил с другими.
Вопрос: Обучение в хорошем вузе с «проблемами» или обучение в «так-себе» вузе, но «без проблем»?

Лучший ответ: В России на ИТ учат в ВШЭ, где есть совместные программы с МФТИ или с Yandex. И выбирать тебе нужно не "программная инженерия", а "прикладная математика и информатика", еще такая специальность называется "вычислительная математика и кибернетика". Такие специальности как "информатика и вычислительная техника" или "информационные системы и технологии" совсем о другом. Что такое computer science вообще? Смотри чем занимаются в ШАД. Это если тебе все же интересно развиваться в "computer science", чтобы быть на острие атаки в стартапах, в Калифорнии и вот это все, а не "software engenireeng" (программная инженерия). Я бы рекомендовал для CS мехмат, матмех, так как только оттуда все топы.
Программной инженерии обучаются сами, все лучшие курсы по отзывам моих знакомых, которые на них обучались, шлак. Программной инженерии не учат в вузах, ни в одном. Диплом не нужен, чтобы уехать программистом в другие страны, нужен опыт, в интернете достаточно статей, видео людей без профильного диплома, спокойно разъезжающих по разным странам, меняя работу, ища место для ПМЖ.
Я бы пошел туда, где легко. В лучших вузах люди уже готовые на самом деле, они наперед знают вузовскую программу по математике, они уже хорошо программируют, они уже говорят на английском худо-бедно. Многие из них победители олимпиад всеросса, много участников олимпиад, много из физмат лицеев, где их им попу подтирали.
Еще не нужно так акцентироваться на получении знаний, кодинге, ачивках, жизнь не вокруг этого крутится. Это просто работа. Когда попадешь в крутой офис с крутыми проектами, тебе это быстро все надоест, так же как миллионерам надоедают в первый же месяц их спорткары. С возрастом будет хотеться иного, будет так же как с интересами из детства.
Некоторые знаешь как делали? Шли учиться на психолога в ВШЭ (конкретный пример, ссылку не дам, лень искать), но ботали кодинг (не CS, а software engineering), создавали свои проекты учась на психолога, успешно, потом уезжали в кремневую долину. Почему так? Потому что все быстро меняется, потому что не учат в вузах кодингу, а парень тот это понимал, из физмат лицея при МГУ. Цукерберг тоже учился на психолога вроде в Гарварде. Путь евангелиста для упоротых, менеджером в IT быть очень плохо (это не менеджер как в других сферах), поэтому диверсифицируй, и не смотри на бабки.

Худший ответ: смотри список вузов на БлуКарту по твоей специальности, поступай в ближайший доступный
база anabin или как-то так
Вопрос: Что за js или это не js?

Лучший ответ: это псевдоаттрибуты, в которые можно записать какое-то значение и потом использовать из яваскрипта, например из jquery можно получить значение data-mute-video примерно так:var mute = $('#apps').data('mute-video');

Худший ответ: Так работает<nav><ul><li  tabindex="1"><a data-page="page1">1  страница</a></li>...........var myArticle = document.querySelector('article'); var myLinks = document.querySelectorAll('nav ul a'); for(var i = 0; i <= myLinks.length - 1; i++) {
myLinks[i].onclick = function(e) {e.preventDefault();var linkData = e.target.getAttribute('data-page'); getData(linkData); } };
......................
Вопрос: Как сверстать данный блок?

Лучший ответ: Как-то так https://jsfiddle.net/rmg83fvj/

css
.form {
  position: relative;
  display: flex;
  justify-content: space-between;
  margin: 40px;
  padding: 30px;
  border: 1px solid gray;
}

.form::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translate(-50%, -50%);
  display: block;
  width: 30px;
  height: 30px;
  border: 1px solid red;
  border-radius: 50%;
  box-shadow: 0 0 0 10px #fff;
  background: #fff;
  /* и ваша картинка*/
}

.btn {
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translate(-50%, 50%);
  padding: 0.5em 1em;
  box-shadow: 0 0 0 10px #fff;
  background: #f00;
  border: 0;
  color: #fff;
}

html
<form class="form" action="">
  <input type="text">
  <input type="text">
  <input type="text">
  <button class="btn" type="submit">btn</button>
</form>

Не забудьте, что инпутам нужен label. Но это уже самостоятельно.

Худший ответ: Например такsnippet
Вопрос: Микс БЭМ и bootstrap-сетки, это читабельно?

Лучший ответ: Говнокод какой-то. Лично я ужаснулся. Лучше бы автор на чистом буцрапе делал.

Худший ответ: Изучите sass/less 
Используйте конструкции типа .someblock
  @extend row
ruby.bvision.com/blog/please-stop-embedding-bootst...
Вопрос: Почему не записываются дынные в бд?

Лучший ответ: В wordpress есть специальный php класс wpdb, который позволяет производить любые операции с базой данных.

Худший ответ: Вот так правильней:global $wpdb;
$result = $wpdb->insert( 
    $wpdb->options, 
    array(
        'option_name' => 'xxx',
        'option_value' => 'yyy'
    ), 
	array( 
		'%s', 
		'%s'
	) 
);

if ( $result ) :
    echo "Информация занесена в базу данных";
else :
    echo "Информация не занесена в базу данных: " . $db->last_error;
endif;
а легче и лучше:add_option( 'xxx', 'yyy' );
а моя ошибка - у меня стояло количество строк - 25, и я не видел остальные строки :)
Вопрос: Что означает «Участие в Open Source проектах»?

Лучший ответ: Берете JS-библиотеку или фреймворк, которая вам по душе, идете на ее github, клонируете и помогаете. Если вы новичок, то можно начать с проверки присланных багов, написания и перевода документации, обновлении зависимостей и других мелких задач.

Худший ответ: Конечно может. Но денег за это не получит - если Вы это имели в виду. Идете на сайт проекта, который нравится. Связываетесь с теми кто проект ведет или просто смотрите, какие в нем заявлены баги - если у проекта есть трекер, это ваще просто. Тестите на наличие данного бага, если смогли исправить - шлете патч. Если авторы данного проекта посчитали, что патч их устроил, они его применят. Вот уже участие.
Это прикольно. Я, помнится, в самбе так пару мелких багов пофиксил...
Вопрос: Как сравнить два захешированных пароля?

Лучший ответ: не нужно искать пароль в БД, нужно искать пользователя (по ИД, почте, логину)
когда нашли пользователя то берем его хэш пароля и через отдельную функцию проверяем. 
То что каждый раз новый хэш это сегодня нормально, так если БД своруют, то не смогут подобрать пароль через обход по хэшам.

Худший ответ: создайте новое правило для валидатора, которое будет проверять текущий пароль//AppServiceProvider.php
Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
            return Hash::check($value, auth()->user()->password);
}, "Неверный пароль, попробуйте еще раз!");

//controller
$validatedData = $request->validate([
    'old_password' => 'required|string|current_password',
]);

//...
Вопрос: Стоит ли брать macbook air 13 2016?

Лучший ответ: Сравните вес macbook air 13 (1,35 кг) и macbook pro 13 retina (1,37 кг)
С учетом экрана ретины у прошки думаю вывод очевиден.

Худший ответ: Я бы эйр не брал при том что существует маленькая прошка 2016 года.
Вопрос: Безопасность данных в Vue.js?

Лучший ответ: поменять её isAuth = true, и получить доступ к закрытой части интерфейса
бекенд не должен позволять производить операции из закрытой части интерфейса неавторизованным пользователям, а что толку от закрытой части если там данных не будет и она будет нефунциональна?

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

Лучший ответ: Можно использовать регулярное выражение (раз такой тег стоит в вопросе). Буквально «всё, что угодно, затем пробел-со-скобкой, потом всё до скобки, скобка».  Из полученного массива выкинуть нулевой элемент, где содержится вся строка целиком:preg_match('/^(.+)\ \((.+)\)/', $name, $matches);
array_shift($matches);
$matches; /*Array
(
    [0] => Ньютон И.И.
    [1] => Тринити коледж, Кембридж
)*/
Можно и просто отрезать последний символ, а затем разбить в массив, используя в качестве разделителя пробел-с-открывающей-скобкой : )без регулярных выражений$name = "Ньютон И.И. (Тринити коледж, Кембридж)";
	$name = substr($name, 0, -1);
	$result = explode(' (', $name);
	print_r($result);

Худший ответ: $name = 'Ньютон И.И. (Тринити коледж, Кембридж)';
$regex = '/(.+)\((.*)\)/m';
preg_match_all($regex, $name, $matches, PREG_SET_ORDER, 0);
if($matches) {
    foreach($matches as $match) {
        echo "{$match[1]}\n";
        echo "{$match[2]}\n";
    }
}
Вопрос: Как вернуть деньги за хостинг/сервер?

Лучший ответ: Возвращать деньги за сервер отказываются. Как быть?Если цена вопроса меньше 1000$ - простить и забыть. И внимательней быть в следующий раз.
Если больше - можно через суд попробовать взыскать - но надо договор прочитать внимательно перед этим.

Худший ответ: Я полагаю, что хостер врет :) Вернее скажем так - он страхуется от того, что Вы поставите пиратку, а прилетит ему :) Денег Вам вернуть не удастся - читайте EULA, которое заключали при покупке услуг хостинга. Можно конечно судиться, но Вам придется ехать по месту регистрации ответчика :) Готовы?
Итого: списать в чистые убытки и в другой раз выяснять в саппорте такие тонкости ДО того, как оплатить услугу.
Вопрос: Mysql — Как заморозить доступ к строке чтобы другие потоки не работали с ней?

Лучший ответ: Используйте транзакции и блокировки

Худший ответ: Можно попробовать эти проверочные поля вынести в код, сделать этот объект доступным для всех потоков. Поток, прежде, чем сделать запрос, сначала в список заносит id строки, ответ получил - из списка этот id удалил. Другие потоки, прежде чем сделать запрос, проверяют список, если id есть в списке, то в ожидание. 
Тут может быть та же проблема, но с меньшей вероятностью, поэтому проверка должна быть двойная: сначала проверил, что id нет такого, добавил, потом проверил, что их не два в списке и только тогда запрос. Если два, то удалил и с таймаутом пытается опять добавить.
Я не знаю Ваших объемов бд, но как второй вариант рассмотреть нормальные очереди запросов. Перед запросом проверить есть ли очередь с именем айдишника, если нет, то создать и последующие запросы просто будут добавляться в свою очередь.
Вопрос: Есть ли свежая (!) книга по Linux для погружения в системное администрирование на русском?

Лучший ответ: Linux - это не винда. Базовые вещи десятилетиями не меняются (в принципиальных моментах, по крайней мере).
Книга классическая, я оригинал покупал на Амазоне.

Худший ответ: Нет(!)