Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Наибольшая невозрастающая подпоследовательность. Как оптимизировать алгоритм на Python?

Лучший ответ:
Для начала рекомендую переотправить решение, таймауты могут случаться просто из-за всплеска нагрузки на тестирующий сервер.
Если это не поможет, то вам действительно стоит оптимизировать print, потому что в Python очень дорогие вызовы функций, на моём компьютере вот такие замеры получились:l = list(range(10**5))

for i in l:  # 107 ms
    print(i, end=' ')

s = ' '.join(map(str, l))
print(s)  # 55 ms
В целом при отладке таких проблем имеет смысл искать крайние случаи, на которых ваша программа будет работать медленнее всего — в данном случае, если я правильно понял вашу программу (читал не очень внимательно), это упорядоченный в обратном порядке массив размером 10^5.
UPD: Я нашёл плохой вход для вашей программы - проверьте её на массиве, где все значения одинаковые, время выполнения получилось около 20 секунд на массиве длиной 10^4, на 10^5 ответа я не дождался.
Это происходит вот из-за этих строк:for i in range(n):
    left = 1 
    right = l 
...
    elif x[m[mid]] == x[i]:
        left += 1
...
В худшем случае у вас здесь возникает O(n^2).
Кажется, достаточно будет просто поменять цикл на вот такой:for i in range(n):
    left = 1
    right = l

    while left <= right:
        mid = (left+right) // 2
        if x[m[mid]] <= x[i]:
            left = mid+1
        else:
            right = mid-1
...

Худший ответ:
Мадам, если этот реально Ваш код, то поверьте, у вас нет проблем и все в порядке. Многие "программисты" даже не смогут понять что тут написано. По сабжу мне лень настолько глубоко ковыряться в задаче, но если решение не проходит, то не факт что это ваша проблема, возможно у ребят в среде стоит слишком маленький таймаут на исполнение тестов. Скорость чаще всего теряется на вложенных циклах, у вас есть один for с вложенным while, while опасная штука, которая может приводить к бесконечным зацикливаниям. Проверьте ваш код, чтобы он не мог при определенных условиях переходить к бесконечному исполнению.
Вопрос: Как справиться с проблемой удаления Linux с последующей установкой Windows?

Лучший ответ:
Вам нужно в биосе поменять приоритет загрузчика (поставить usb) и вставить флешку с установщиком винды (правильно настроенным установщиком).
Также переключите boot mode в режим uefi. Это все

Худший ответ:
Залей на флешку при помощи Rufus'a iso образ. Для legacy записывай в режиме bios, для UEFI - в UEFI. 
Воткни флешку в, заведомо рабочий, usb-порт. 
Зайди в настройки BIOS'а - далее в расширенный режим. Найди информацию о методах загрузки. Установи нужный (legacy/uefi) - установи загрузку с носителя - радуйся.
Ну или нажми F12, да загрузись с флешки напрямую.
Альтернатива - ну эээ, терминал в помощь. И статьи "как воткнуть граф. окружение".
Вопрос: Есть 4к ссылок на которых фото, как их всех скачать (не в ручную)?

Лучший ответ:
wget
есть под винду
или любой download manager  
FlashGet там и т.п.

Худший ответ:
bat-файл с простейшим циклом for и какой-нибудь консольной качалкой типа wgetUPD: я заглянул в man и мне стыдно. Цикл не нужен, у wget есть опция-i file
 --input-file=file
           Read URLs from a local or external file.
Вопрос: За счет чего достигается высокая скорость сайта?

Лучший ответ:
Чего тут быстрого? Самая стандартная скорость загрузки. Только сделано аккуратно.
Сайт пользуется всем тем, чем принято пользоваться при оптимизации: отложенной загрузкой неважного контента, шрифтов, картинок, побочных блоков. Сжатие, кеширование. Ну и работа бекенда. Аккуратно использован WordPress, а не как принято - нафигачить плагинов и в путь.
Здесь ничего феноменального нет.
Почитайте банально в интернете о том, как это делается. Например: https://habr.com/ru/company/kingservers/blog/346956/

Худший ответ:
Cloud Flare - полное кеширование всех страниц (это можно уидеть по заголовку ответа cf-cache-status: HIT)
В настройках Page Rules можно задать полное кеширование всех частей (т.е. если сайт статичный +/- можно полностью его кешировать исключив админку, нехочу расписывать как - загуглите, там +/- всё правильно описано
Если добработать немного свой ВП, то можно управлять этим огородом весьма хорошо повесив триггер на БД чтобы при обновлениях поста, апруве комментов и т.д. можно было чистить кеш через API.
Плюсы:Минимальный отклик, т.к. сервер CDN находится в 99% ближе к клиенту чем ваш сервер.Кешированная страница отдаётся без участия сервера, т.е. уменьшаем нагрузку
Минусы:Страница попадает в кеш на сервере CDN после захода пользователя через этот сервер (т.е. если вы работаете с СНГ регионом это ок, там в каждой стране по 1-2 дата-центру, а если, например, Америка, там они в каждом штате ... карту CND CF можно найти на их сайте)Для создания динамических частей нужно использовать либо ajax либо делать их на js
Как по мне хороший вариант кеширования с помощью Nginx, но он требует немного кода:Сохраняем вывод страницы после рендеринга в файл сохраняя структуруНатравливаем try_files на кешИспользуя SSI модуль в Nginx можно динамически управлять контентом из кеша (например пользователям из EU показывать cookie баннер используя GEO модуль)Также можно делать холодный страрт кеша после заливки прикрутив простой скрип (в цикле курлом пройтись по страницам) в свой CI
P.S. на примере tproger можно точно найти оплошности в бустродействии:
Разбросанность файлов на поддомены требует доп запроса DNS и инициализации SSL что змедляет страницу (несмотря даже на заголовки в хидере типа preconnect и prefetch)
Отсутствие миницикации JS внутри самой html страницы
Ну там много рахных мелочей, но в целом неплохо :)
Вопрос: Проблемы со слайдер Swiper?

Лучший ответ:
Прочитал документацию, Not all parameters can be changed in breakpoints, Such parameters like loop and effect won't work.   Получается надо делать дейстрой свайпера, а потом занново его билддить

Худший ответ:
А скобки правильно закрываешь? На сколько я знаю надо закрывать скобку перед navigation, в саму навигацию скрывать через css 

let saySlider = new Swiper(".say__slider", {
  effect: "fade",
  autoplay: {
    delay: 3000,
    disableOnInteraction: false,
  },
 navigation: false,
  breakpoints: {
     600: {
     slidesPerView: 1,
      slidesPerGroup: 1,
      initialSlide: 1,
      spaceBetween: 35,
      centeredSlides: true,
      speed: 800,
    effect: "slide",
},   //  <-------
},   //  <-------
      navigation: {
        nextEl: ".swiper-button-next",
        prevEl: ".swiper-button-prev",

    },



});
Вопрос: Как организовать очередь сообщений так, что бы каждое след. сообщение передавалось только после того, как обработано предыдущее?

Лучший ответ:
Из текста не до конца понятно, Вы хотите, чтобы была очередь или sender должен выполняться каждый раз для нового сообщения? Если очередь, то обрабатывать сообщения по одному можно, но только если получатель один. В протоколе AMQP можно вручную получать сообщения по одному - basic_get, или выставить количество неподтвержденных сообщений в 1 и подтверждать обработку каждого.

Худший ответ:
Rabbitmq работает в таком режиме если 1 consumer. Если больше то нет. Чуть серьёзнее пример - Kafka. Там если настроить 1 партицию на топик то будет ожидаемый результат
Вопрос: Как ускорить Wordpress для г. Уфа?

Лучший ответ:
Отказаться или привести в порядок Wordpress. От вас до Москвы не далеко.
А может и хостинг еще кривой. Такое тоже бывает.

Худший ответ:
Если основной поток людей будет из Уфы - 100% надо переносить на хостинг в Уфу, если таковые у вас имеются. 
Пинг от вашего потенциального юзера до Москвы и до Уфы может быть на порядок выше.
Это как звонить по городу или в Магадан/за границу.
Вопрос: Node SASS vs Dart SASS. Какой производительнее при каких условиях?

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

dart-sass - reference implementation языка т.е. является образцом того как должен работать язык. node-sass binding libsass (реализации спецификации языка на C++) к node.js. 

dart-sass содержит в себе все последние фичи языка, к примеру там уже есть поддержка sass modules, libsass отстаёт, а node-sass отстаёт от libsass. За пруфами - сюда и сюда
libsass производительнее, местами - существенно. К примеру в моих тестах интенсивная работа с sass maps в libsass примерно в 10 раз быстрее чем в dart sass. Насчёт микросекунд - у меня есть проекты которые по 15-20 секунд компилируют только стили на node-sass, на dart-sass всё намного медленнее
Приведённые ссылки - сравнение тёплого с мягким. Есть реализации языков, а есть плагины для их подключения к различным сборщикам. sass - сама реализация языка, gulp-sass - binding для Gulp, sass-loader - binding для Webpack


Худший ответ:
Зачем переписывать Sass?
Вопрос: VestaCP + Centos 7?

Лучший ответ:
Не нужно играться во все эти панельки.
Настроить сервер руками гораздо проще и надежнее

Худший ответ:
Устанавливайте VESTA-у без репозитария remi
После успешной установки панели можно вручную установить remi-repo.
Вопрос: Проблема с компом?

Лучший ответ:
Снимаешь крышку компьютера, включаешь компьютер, запускаешь игру.
Слушаешь какой вентилятор стучит, для надёжности можно пальцем остановит крыльчатку пальцами нажав аккуратно в центре.

Худший ответ:
Важен лишь результат. А проверять лучше по методам.
1. Помыть вентиляторы или убрать пыли.
2. Запускаешь игру и останавливаешь по каждой вентиляторе до тех пор пока звук не найдешь.
3. Как только найдешь звук от вентилятора - ну может быть изнутри добавь капельку машинного масла.
Вопрос: Какова вероятность быть пойманным на upwork с фейковым фото?

Лучший ответ:
Вместо вебки можно использовать мобилу, врядли у вас и мобилы нет.
А на фейс можно силиконовую маску на алике заказать. Ну или обойтись накладными усами из щётки, если подешевле.)

По механике работы апворка в тахих ситуациях вы можете выяснить только экспериментально. 

P.S. Предположения почему автор не хочет светить фейсом, по возрастанию вероятности:
1. Уродство.
2. Автор в розыске.
3. Автор в тюрьме.

Худший ответ:
100% потребуют верификацию. Когда только начинал, через дней 5 после регистрации аккаунт заморозили. Созванивался в скайпе по видеосвязи для верификации.
Если не пройдете или откажитесь, заморозят/забанят аккаунт. Если там были деньги, вывести не сможете. Плюс сейчас там ещё есть верификация по паспорту, чтобы галочку verified в профиле получить. Я не проходил её, так как давно работаю напрямую с заказчиками. Недавно заморозили аккаунт до тех пор пока не отправлю скан паспорта. Вот как-то так.
Вопрос: Как организовать пользовательские классы?

Лучший ответ:
Да, всю логику нужно выносить в отдельные классы.

Задача контроллера - определить, какую информацию исходя из полученного запроса показывать. Даже валидацию лучше выносить в отдельный Request, потому что это уже не задача контроллера. 

Я обычно делаю сервисы, как вы написали, но еще и:
/app/Repositories - репозитории. Позволяют в контроллере брать информацию из БД, типа такого:
$this->postsRepository->getPostsForHomePageLoop();

А вообще способов много - можете прочитать про паттерны проектирования.

Главное помните про SRP из SOLID. Что каждый класс отвечает за свою функциональность и не может выходить за её рамки.

Худший ответ:
Используй 4 и 5 способ из статьи.  В идеале в контроллере должна быть только валидация через FormRequest с передачей данных в сервисный слой.

class ClientReportController extends Controller
{
    private $reportService;
    public function __construct(ReportService $service)
    {
        $this->reportService = $service;
    }
    public function index(Request $request)
    {
        $entries = $this->reportService->getTransactionReport($request->input('project'));
        // ...
    }
    public function income(Request $request)
    {
        $entries = $this->reportService->getIncomeReport($request->input('project'));
        // ...
    }
}
Вопрос: Как зарегистрировать домен и хостинг за рубежом анонимно?

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

Худший ответ:
Попробуйте orangewebsite.com
Принимают bitcoin, пластик не нужен. Расположены далеко от России.
Вопрос: Как залить телеграм бота на хостинг?

Лучший ответ:
Бесплатный питунский хостинг - pythonanywhere.com
Как залить - там интуитивно всё понятно

Худший ответ:
Который поддерживает питон. По FTP например)
Вопрос: Для чего нужен middleware?

Лучший ответ:
Почему нельзя? можно. Но вы должны понимать что как только компонент размонтируется вы потеряете данные. По этому делают запросы обычно в redux actions  и хранят полученные данные в redux. Таких образом пока у вас есть удобный доступ к полученным данным из разных компонентов + вам не надо делать повторно запрос потому что они у вас уже лежат в redux. 
А middleware это просто прослойка между диспатчем и моментом когда данные будут положены в редукс. В этот момент вы можете например навесить еще какую то логику. Например проверить токен сервера на то что он еще не истек и если истек выкинуть на авторизацию или сделать запрос на обновление.

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

Лучший ответ:
есть

Худший ответ:
Если тебе надо просто выполнить вычисления, то да, eval() подойдёт. 
Если тебе надо не ограничиваться приведённым примитивным примером прямого вычисления, а тебя интересует символьная алгебра (типа f=sin(u)^2+tan(v) ), то посмотри обзор тут:  https://jenyay.net/Programming/PyMath
Вопрос: Достаточно ли книги Ильи Кантора для трудоустройства?

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

Разумеется, в начале карьеры я тоже пытался её прочитать, не осилил. 

Но по уровню качества, подачи и актуальности - это топовый ресурс. Всё, чего там не хватает, можно "добить" узконапоравленными статьями с медиума или личных блогов/YouTube.

Отвечая на вопрос:
Трудоустройство джуном это лотерея. Где-то вас будут унижать вопросами, на которые порой сеньоры ответов не знают (случай из моей практики), где-то вас возьмут просто потому, что перед вами было 15 гастарбайтеров, а вы первый адекватный соискатель. У каждой компании свои рамки для грейдов. 
Но прочтение Кантора это, безусловно, огромный такой плюс и очень упростит жизнь. Если совмещать с практикой.

Худший ответ:
Вместо того чтобы спрашивать взял бы и почитал
Вопрос: Почему не существует?

Лучший ответ:
Потому что в массиве $_POST нет элемента с ключом add_po.

Давай ты хоть немного будешь думать перед тем как бежать вопрос задавать?

Худший ответ:
Потому что элемента add_po не существует в $_POST
Вопрос: Правда ли, что для написания игрового движка нужна очень сложная математика?

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

и все это надо обсчитывать ну хотя бы 25 раз в секунду - дабы обеспечить 25fps )

Худший ответ:
Для крестиков-ноликов не нужна. Для чего-то серьезного - да, нужна. И, к сожалению, математика - это та область, самостоятельное изучение которой для большинства людей практически невозможна.
Вопрос: САПР для печатных плат под linux?

Лучший ответ:
Хочу найти программу по функционалу максимально приближенным к P-CAD и Altium Designer для linux.
Не найдёте. Есть KiCAD, LibrePCB и ещё одна (забыл название, но оно и не важно), но это тоже эрзац-поделки. Если хотите Альтиум - качайте Альтиум.

Худший ответ:
Eagle PCB скачать.
Бесплатная версия имеет ограничение на количество слоёв (2) и на размеры платы (80х100 мм).
Вопрос: Почему мне тяжело определиться с направлением и найти работу?

Лучший ответ:
И я задумался, может сменить направление, может мне будет проще
А раз проще, то соискателей будет ещё больше и конкуренция ещё выше.

я везде получаю отказы по типу "извините, мы выбрали других кандидатов"
Всегда надо просить обратную связь. Выясните в деталях причины, по которым наняли не вас, и исправляйте.

Уточню, что я в Варшаве, а не СНГ, думаю тут сложнее устроиться, то-есть я предполагаю, что в своей стране, я бы уже нашел работу.
Джуны никому не нужны, а тем более гастарбайтеры.

Худший ответ:
Больше года изучаю Java, ищу долго уже работуИзучать можно и 5-10 лет и ничего не наизучать, проекты готовые есть работающие? Есть что реально показать из того что вы описываете в резюме как "хорошее знание блаблабла"? 

Не совсем понятно, на 4 собеседования вас пригласили из скольких отправленных резюме? 

И, если уж такой затык устроиться по месту проживания, и это связано не с вашим проф. уровнем - ищите удаленку на родине, что мешает?

И там тоже есть бекенд и можно заниматься более интересными вещами, чем на Java,В веб (как впрочем и в других областях разработки) какого то особого прям веселья и разнообразия практически не наблюдается, перефразируя некую пословицу - когда у тебя есть бд, все вокруг кажется CRUD...
Вопрос: Слишком быстрый fps. Как сделать движения игрового объекта более медленным?

Лучший ответ:
Расчитывайте движение объекта исходя из желаемой скорости как dx = v * dt. Для вычисления dt вычитайте таймстемп с предыдущего кадра из текущего таймстемпа.

Худший ответ:
Но с этим возникла другая более отстойная проблема, при ограничении fps смарт стал реагировать с заметной задержкой на тапы.
Во всех игровых движках игровой цикл делится на две части: обработка физики (PhysicsUpdate, _physics_process и т.п.) и обработка логики/пользовательского ввода (Update, _process и т.п.)
Отслеживать ввод вам нужно внутри обычного апдейта с максимально возможным фпс. А вот уже применять физику (т.е. двигать объекты и т.п.) нужно с применением апдейта физики с дельтой времени кадра.
Вот норм туториал на тему - https://gameprogrammingpatterns.com/game-loop.html
Вопрос: Можно ли разработать мобильный мессенджер используя React Native и Node.js?

Лучший ответ:
Можно

Худший ответ:
Не нужно. Или не публиковать в плеях. Штрафы за нарушение gdpra  не детские. В лучшем случае отделаетесь унпаблишом
Вопрос: Почему использование timestamp в БД для хранения даты является неправильным?

Лучший ответ:
потому что:
1. дататайм нагляднее и понятнее таймстампа
2. дататйм позволяет хранить доли секунды
3. при таймстампе вы теряете множество удобных функций для работы с дата/время

Худший ответ:
Не пишите timestamp, пишите Unix timestamp. Только в MySQL timestamp-ом называют Unix timestamp, в остальных СУБД timestamp - это то, что в MySQL зовется datetime. 
В Unix timestamp нет ничего плохого, но его использование ограничено, по-сути отображать текущее время работы компьютера. 
Если взять пример из цитаты, то действительно странно сохранять дни рождения в Unix timestamp, хотя бы потому, что этот формат хранит только даты в интервале от 1970 по 2038 год.
Вопрос: Как бесплатно организовать комментарии на сайте?

Лучший ответ:
akismet из стандартной установки WP  очень хорошо справляется со спамом

Худший ответ:
Используйте плагин AnyComment + Akismet.
Вопрос: Как быть с этой ошибкой «has been blocked by CORS policy»?

Лучший ответ:
100500 раз уже тут и не только тут обсуждалось. Браузеры не позволяют через js обращаться с одного домена на другой без разрешения со стороны запрашиваемого домена (cors policy). Запрашивай через curl из php, раз его в тегах указал

Худший ответ:
Если у вас есть доступ к конфигурации сервера, к которому вы делаете запрос - то нстройте на нем cors  и будет вам счастье)
В частности заголовки
 - Access-Control-Allow-Origin
 - Access-Control-Allow-MethodsCross-origin_resource_sharingwhat-is-cors
Вопрос: Почему google cloud останавливает программу на Python?

Лучший ответ:
Надо установить screen для запуска в фоне.

sudo apt-get install screen

Далее пишешь в консоль
screen
тыкаешь на кнопочку enter раза 2-3 и запускаешь бота, далее просто закрываешь ssh или что у тебя там. все должно работать.

Также есть вероятность того, что у тебя прога получает исключения. Попробуй try except, хотя бы без конкретных исключений и залогируй в файл.
Типо
try:
////твой код

except Exception as e:
    file = open('log.txt', 'a')
    file.write(str(e))

Худший ответ:
Прогркамму проверял у себя, bot.polling() я ставлю в while True, и даже если что-то не так с ботом, процесс не заканчивается.
Не факт что этого достаточно. Расставляйте логи, оборочивайте в трай-кетч, мониторьте.
Вопрос: Работа с Whatsapp одновременно с двух устройств?

Лучший ответ:
На осень 2020 года уже есть варианты офф АПИ + боты - https://tomoru.ru/waba (дорого),
англоязычный API - https://wassenger.com на базе которого можно написать, также chat-api.com.
Многопользовательский Whatsapp на русском и недорого - https://wa.kubsite.ru

Худший ответ:
Работа с Whatsapp одновременно с двух устройств?
Нельзя.
Но можно дать сотруднику телефон с WhatsApp, самому пользоваться WhatsApp Web.
Других вариантов  нет.
https://faq.whatsapp.com/en/android/21009863/?cate...Using one WhatsApp account on multiple phones, or with multiple phone numbers
Your WhatsApp account can only be verified with one number on one device. If you have a dual SIM phone, please note that you still must choose one number to verify with WhatsApp. There is no option to have a WhatsApp account with two phone numbers.
If you attempt to frequently switch your WhatsApp account between different devices, at a certain point, you may be blocked from re-verifying your account. Please don't repeatedly switch between different devices and numbers.
Вопрос: Хочу попробовать в ИБ. Куда смотреть?

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

Худший ответ:
У отус не плохой курс по пентесту. Но желательно знать питон
Вопрос: Самообразование по «Информационной безопасности» и в IT-сфере в целом (для новичка)?

Лучший ответ:
А почему вы решили, что к ИБ у вас интерес меееедленно не угаснет?
Вот честно - не очень понимаю людей, которые объявляют о том, что хотят чему-то научиться. Чем меньше вы будете распространяться о том, чему вы хотите научиться, тем меньше у вас будет обязательств и оправданий перед другими. Думаете, что ИБ возникла сначала, а потом под неё подтянулись знания, которые в неё сейчас входят? Не разговоры об ИБ сделают из вас инженера по ИБ, а ваши действия будут подходить или нет подходить под действия инженера по ИБ. Вот это я буду учить, т.к. это подходит под гордое звание инженер по ИБ, а вот это не буду, т.к. это не сочетается с должностью. Гыгыгы.

Худший ответ:
Уже наверное поздно рекомендовать такое, но я бы на вашем месте не дропался с 3го курса а доучился и походу дела читал-смотрел что вам интересно по ИБ или в целом по SC. Hard science, как вы выразились может дать очень много в дальнейшем, как мне кажется. 
Стать сразу ИБ специалистом - миф, как по мне. в ИБ логичнее вырастить из смежных специальностей, например Сисадмина или сетевого админа, и т.д.
Я заканчивал направление по безопасности имея бекграунд в Computer Science, по личному опыту могу сказать, что именно в таком порядке это даст максимальный профит...
Всё это - личное мнение (но и опыт) и не претендует на истинность в последней инстанции.