pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Какие вопросы могут задавать на собеседовании на вакансию Junior C# Developer?

Лучший ответ: - Отличие ссылочных и значимых типов
- В том или ином виде спросят про модификаторы доступа (public, private, protected, internal, sealed).
Либо напрямую, либо дадут задачу на их понимание.
- virtual и override
- Отличие класса от структуры
- Чем абстрактный класс отличается от интерфейса
- Какие паттерны знаете
- Что такое рефлексия
- Что такое сборка мусора
- Как бы вы спроектировали дерево на классах
- Дадут практическую задачку в духе "А вот если мы от класса A отнаследуем класс B,  то что выведется в таком-то случае"
-Могут спросить, работали ли вы с ORM (скорее всего EF/LINQ)

С меньшей вероятностью, но все равно могут спросить:
- Могут спросить про делегаты и события
- Могут спросить про SOLID
- Могут спросить про асинхронность
- Могут спросить про многопоточность

- Не C#, но скорее всего спросят по SQL. Дадут задачку со структурой из 3-5 таблиц, проверят, насколько вы хорошо понимаете JOIN, GROUP BY, HAVING. Могут спросить про индексы.

Большая часть ответов есть здесь
https://metanit.com/sharp/tutorial/

PS Ваша ссылка не открылась, сайт сильно тупит, надеюсь, там боле-менее типовая вакансия C# джуна)

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

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

Худший ответ: Вот прямо для вашего случая
https://habr.com/ru/company/ruvds/blog/518514/
Вопрос: Целесообразно ли брать MacBook Pro 13 2013 в 2019 году?

Лучший ответ: Вопрос же цены. За 7 000 рублей я бы взял.

Худший ответ: Не стоит. Он уже стар.
Вопрос: Пишу игру на python на windows 10, по курсу и у меня выходит ошибка, как ее исправить?

Лучший ответ: Попробуй pygame.init() перенести в самый верх(после импортов). Знакомому когда-то помогло

Худший ответ: Вот эту строку:
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
Надо перенести после инициализации pygame и установки экрана.
Например сюда:
...
# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
...

UPDATE
Код файла main.py:
import pygame
import random
import os
from player import *

# настройка папки ассетов
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder, 'img')

WIDTH = 800
HEIGHT = 650
FPS = 30

# Задаем цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
player = Player(player_img, BLACK, WIDTH, HEIGHT)
all_sprites = pygame.sprite.Group()
all_sprites.add(player)

# Цикл игры
running = True
while running:
    # Держим цикл на правильной скорости
    clock.tick(FPS)
    # Ввод процесса (события)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False

    # Обновление
    all_sprites.update()
    
    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()
Код файла player.py:
import pygame
import random
import os


class Player(pygame.sprite.Sprite):
    def __init__(self, player_img, color, w, h):
        pygame.sprite.Sprite.__init__(self)
        self.image = player_img
        self.image.set_colorkey(color)
        self.rect = self.image.get_rect()
        self.w = w
        self.h = h
        self.rect.center = (self.w / 2, self.h / 2)

    def update(self):
        self.rect.x += 5
        if self.rect.left > self.w:
          self.rect.right = 0
Вопрос: Как подключить полный шрифт?

Лучший ответ: <link href="https://fonts.googleapis.com/css?family=Montserrat:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&display=swap&subset=cyrillic,cyrillic-ext,latin-ext" rel="stylesheet">
Вкладка CUSTOMIZE в окне выбранных шрифтов

Худший ответ: Ну, подключите все варианты и посмотрите:<style>
@import url('https://fonts.googleapis.com/css?family=Montserrat:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&display=swap&subset=cyrillic');
</style>
Вопрос: Как написан этот сайт?

Лучший ответ: Нашел очень красивый сайт
а где красота то?Как реализованы анимации при скролле?вот так
или так

Худший ответ: смотрите one scroll page, есть много готовых вариантов + немного css анимации.
Вопрос: Как упаковать Postgress в бинарник?

Лучший ответ: Админы заказчика должны развернуть postgres.

Худший ответ: смени postgres на sqlite

sqlite это база данных внутри файла, не требует администрирования и установки, очень функциональная и достаточно шустрая

upd. по теме, у меня был кейс, вполне готово для продакшна, почему нет, я заворачивал готовую инсталляцию всех необходимых утилит в образ виртуальной машины и его передавал
Вопрос: Как сконвертировать файл py в exe на Linux(Kali)?

Лучший ответ: Ни pyinstaller, ни py2exe, ни cx_Freeze, ни другие подобные средства не компилируют скрипт в exe. Они упаковывают его в самораспаковывающийся архив вместе с интерпретатором Python и необходимыми библиотеками. В момент запуска этот exe-файл распаковывает своё содержимое в каталог временных файлов и запускает оттуда ваш скрипт. Так что для извлечения вашего пароля ничего дизассемблировать не придётся. Узнать пароль сможет любой школотрон.

Худший ответ: Единственный вариант в вашей ситуации это интеграция питона в С++ :)
https://habr.com/ru/company/PENXY/blog/139655/
И тогда будет именно компиляция, но опять же зачем ?
Кому нужен ваш пароль, и могу вас успокоить, никто даже парится не будет с распаковкой вашего приложения, достаточно просто прослушать трафик и всё что вы передавали у человека в кармане :)
Вопрос: Что изучить дальше для трудоустройства js разработчиком?

Лучший ответ: Хочу стать чисто js разработчиком без особой привязки к какому либо фреймворку
Пха, ну удачи.

Может быть записаться на какие нибудь курсы?
Курсы - налог на глупость.

Вот вы такой всезнающий Федя, всё прочитали, всё закрепили - где ваш пет-проект? Где оригинальная разработка? Что-что? Не написали? До свидания, мы вам перезвоним.

Худший ответ: Хочу стать чисто js разработчиком без особой привязки к какому либо фреймворку
Никто не даст пилить свои поделки, когда для этого уже есть готовые решения

выполняя предложенные задания learn.javascript.ru
Могу предложить Codewars, но там больше про структуры данных и алгоритмы, а научиться делать приложения можно только делая приложения

Так как я сторонник практики, то скажу так: если хотите научиться подтягиваться N-е количество раз - подтягивайтесь, а не читайте только литературу "Как научиться подтягиваться". 

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

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

Худший ответ: Дико интересный вопрос, как вообще в анализе данных с этим справляются?

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

Еще вариант, что такое усреднение по суткам? это значит сложить значения год назад, два назад, три назад... вот и берите тот день, который был год назад, воспользовавшись получается данными в один и тот же день в прошлом для вычисления среднего в разные дни (так можно делать для min/max/average методов, а вот складывать нельзя).
Вопрос: Как сделать свайп блока на vue.js?

Лучший ответ: У меня стоит версия vue 3.9.2
Я тоже хочу машину времени. Давай, делись.

Худший ответ: Привет, Вы из какого года? у нас последняя версия vue 2.6.10  И мы еще тут не научились читать мысли поэтому приведите пример кода и конкретно чего хотите достичь
Вопрос: Для чего нужны директивы препроцессора на языке С и С++?

Лучший ответ: Лень печатать, почитайте сами:

Худший ответ: О, это сложно объяснить. Но кратко - Си в изначальном варианте не поддерживал условную компиляцию. Ты не мог написать один файл, который компилировался на любой поддерживаемой платформе одинаково. Пришлось бы держать отдельную копию исходного файла под каждую целевую платформу. Поэтому возникла идея языка шаблонов или точнее - метапрограммирования, что реализуется препроцессором Си. Он берет исходный файл и по определённым правилам согласно своих директив превращает его в то, что пойдет на вход компилятору. И директива `#include` позволила подключать библиотеки кодов. А потом препроцессор исторически перекочевал в С++ из необходимости обеспечения совместимости.
Сейчас в современном С++ иногда приходится прибегать к этой магии макросов, например, при написании переносимого кода, если не хватает штатного функционала языка - шаблонов, рефлексии и пр. Но при прочих равных активное использование макросов считается не очень хорошим тоном, т.к. вменяемых средств их отладки нет и сообщения об ошибках могут быть весьма запутанными.
Вопрос: Как применять деструктурирующее присваивание?

Лучший ответ: Ты не можешь дестркторирзировать с новыми именами ключей. И не можешь вернуть деконстрактор так как он назначен несколько переменных а вернуть можно только одну.  Не понятно что ты хочешь сделать, если опишешь что нужно именно то может есть другое решение типа {...myObj}

const myObj = {
  done: false,
  text: "text"
}

function myFunc() {
  const {
    done,
    text
  } = myObj

  return done;
}

console.log(myFunc());

Худший ответ: Из вопроса не совсем понятно, что именно вам нужно.
Если деструктуризация с новыми именами, то:
const { done: first, text: second } = myObj;;
Если вытащить поле со второго уровня, как я понял из комментариев к предыдущему ответу, то:
const { text, some: { someDeepValue} } = myObj..
Вопрос: Как сделать в MIkroTik всем 4 портам разный айпи?

Лучший ответ: То есть, порты у нас не в Bridge ?
И на каждом висит dhcp-client ?
ip dhcp-client add interface=ether1 use-peer-dns=yes use-peer-ntp=yes

Худший ответ: Мутит какую то непонятную хрень маловразумительную. Что надо - не догадаешься. Зачем - тем более.
Вопрос: Как язык go может быть компилируемым?

Лучший ответ: Go компилируемый потому что он компилируется

Худший ответ: judywb, 
как я знаю, компилируемым намного лучше некомпилируемых, и зачем создателем языка ухудшать их язык, или им просто лень 

Ты знаешь?
А обоснуй свою точку зрения, почему они лучше?

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

Лучший ответ: Вы описали проблемы, которые решают системы контроля версий, например.

Худший ответ: Вероятно одним из решений будет внедрение возможности совместного редактирования документа. Посмотрите в сторону collaborative editors. Например, ProseMirror. Не могу сказать наверняка, что решение хорошее, но как вариант, думаю, рассмотреть стоит.
Вопрос: Почему в Java есть метки, но нету оператора goto?

Лучший ответ: Оператор goto может совершить переход в любую точку программы, в то время как оператор break ваша_метка; может быть использована для быстрого выхода из двух и более циклов. Именно из-за этого использовать метку с оператором break вы можете в циклах, а не везде, в отличие goto. Насколько мне известно, использование метки не является правилом хорошего тона в Java и скорее всего код можно рефакторить так, чтобы у вас не было кучи вложенностей циклов.

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

Лучший ответ: Попробуйте покрутить Ботодром для создания ботов в ВК. Изучать ЯП не понадобится, но документацию API ВКонтакте почитать придется. Можно начать с запуска своего эхо-бота и внесения в него своих небольших правок. Затем возьмите что-то посложнее, например, оповещения об активностях в сообществе. И так далее.

Худший ответ: Язык не имеет значения. У ВКонтакте есть API и к нему можно обращаться из любого языка программирования. Лично я сам, например, пишу на JavaScript. Конкретно вы же похоже не знайте ни одно языка, а значит вам нужно использовать программы вроде ZennoPoster, устанавливайте и эксперементируйте.
Вопрос: Борьба с наркотой и сайтами в onion?

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

Худший ответ: Вопрос задан автором ради вопроса. Сам погуглить не догадался
Вопрос: Ошибка в парсере: AttributeError: 'NoneType' object has no attribute 'find'.Как исправить?

Лучший ответ: Проверить что div не None перед вызовом div.find

Худший ответ: Ну потому что он не может найти елемент и возвращает None
Вопрос: Как заблокировать ip сайта на роутере keenetic?

Лучший ответ: Зайдите в настройки фаервола - не помню на кинетике где он в интерфейсе, и создайте запрещающее правило для этого адреса.

Худший ответ: Где-то в сетевых правилах..
Вопрос: Могут ли быть Open Source проекты коммерческими?

Лучший ответ: опенсорс не значит бесплатно. 
бесплатно не значит опенсорс.

Худший ответ: Конечно. Только не обязательно напрямую. 
Популярный вариант — платная энтерпрайз-поддержка ос-проекта. MySql по такой схеме работает. Php по такой схеме работает (zend). 
Wordpress продает saas версию себя.
Вопрос: Какой антивирусник лучше?

Лучший ответ: Рассмотрим 2 сценария: 
Адекватный пользователь использующий офисный софт браузер и возможно ещё что то. Windows лицензия . В этом случае достаточно встроенного дефендера 

Блондинка из бухгалтерии в быдло конторе со старым 1с. Как сами понимаете она с админскими правами, тыкает по всяким баннерам, таскается по сайтам знакомств и ставит разные взломанные игрушки с разных помоек. Тут только Касперский. 

Менее терминальный случай родители лет 70 тоже Касперский и желательно также на смартфон плюс яндекс определитель номера.

Худший ответ: Василий прав.

На данный момент лучшим в мире антивирусом для Windows 10 является, как не странно, корректно настроенный  встроенный в WIndows 10 антивирус Windows Defender (Защитник Windows). 

Я, например, использую для страховки комплекс Webroot SecurityAnywhere, преймущественно из-за его расширенных возможностей противодействия вирусам, отключающим антивирусы на ПК жертвы.
Вопрос: Как не останавливать выполнение скрипта после trap?

Лучший ответ: while sleep 10
do
    echo Sleeping
done
Вы прерываете команду sleep 10
после этого ваш цикл завершается

Сделайте так
while true; do
   sleep 10
   echo Sleeping
done

Худший ответ: ||так не проще = один куй , но короче))
Вопрос: Как быть при угрозах DDoS-атаки конкурентом?

Лучший ответ: Никак.
Забить.
Я серьёзно. Просто два школьника что-то не поделили.дассатаке доссатак
Говорите "дудос" тогда, штоль.

Худший ответ: Узнать у хостера, есть ли у них защита от атак.
Подключись к cdn Cloudflare, там бесплатно есть возможность на время атаки включать рекапчу для захода на сайт. Правда не знаю как справляется бесплатный тариф с ддос атаками.
Вопрос: Почему оператор if не работает?

Лучший ответ: Потому что он у вас не равен 0,5, а равен какому-нибудь 0,49999999999999

Худший ответ: Потому что нельзя так сравнивать вещественные числа.
Самая частая ошибка, которая встречается у абсолютно всех кодеров.
https://0.30000000000000004.com/
Вопрос: Можно ли с помощью Kafka объединять результаты задач на базе общего id?

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

Создайте топик с результатами и в качестве ключа возьмите order_id. Далее считывайте результаты из топика и складывайте в коллекцию Map> (где Integer - order_id). Как только количество элементов в Set станет равным количеству ранее отправленных задач по данному order_id - можно считать, что все ответы получены и передавать их все разом на дальнейшую обработку.

Останется только продумать крайние случаи. Например, нельзя до бесконечности ждать поступления всех результатов - external api может не ответить, а локальная задача вылететь с эксепшеном и не сгенерировать TaskResult. В этом случае количество ответов будет меньше количества отправленных задач. Придется прикручивать таймауты и/или отправлять задачи повторно. А что делать если вдруг ответов поступит больше, чем отправлялось запросов?

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

Можно создавать отдельный топик под каждый order. Здесь упрощается обработка некоторых corner кейсов, но возникает проблема если order'ов много (сотни тысяч - миллионы).

С kafka streams не работал, но бегло пробежав по документации, могу предположить, что комбинация groupByKey() + reduce() может решить вопрос меньшим количеством кода, чем у предыдущих двух вариантов.

Худший ответ: Автор не правильно формулирует задачу.
Вопрос: Защита от бесконтрольного создания картинок?

Лучший ответ: Гуглите "Rate Limiting" для вашего фреймворка, библиотеки, возможно на уровне веб сервера или чего ещё. И постройте логику приложения так, что если нужно отдавать не статитку, то условно свободно, а если генерировать, то тут ограничения. Обычно это делается на одно условное устройство/пользователя и/или отдельно на отдельный роут/операцию/функцию.
Ну например, на пользователя 5 раз в секунду, на роут генерации картинки 100 раз в секунду, если больше любого лимита, возвращай код 429.

Худший ответ: Например, в imgproxy для защиты, используется подпись URL с помощью HMAC https://docs.imgproxy.net/#/signing_the_url. Вы можете поступить похожим образом
Вопрос: Какой эмулятор андройда, является самым продуктивным и быстрым?

Лучший ответ: Стандартный ускоряется через виртуальную машину и не имеет разных особенностей

Худший ответ: Попробуй anbox.io в linux, запущенном в привычном эмуляторе типа virtualbox, с проприетарной поддержкой 3d ускорения (глючная)

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

Лучший ответ: последний шансAcronis TI with Universal Restore

Худший ответ: Инструменты от Acronis True Image рассматривал ?
Вопрос: Где найти сетевые драйвера для windows xp?

Лучший ответ: На сайте производителя материнской платы

Худший ответ: Скачиваете любой ZverDVD XP образ. Внутри образа есть каталог oemdrv с архивами драйверов по категориям устройств. Архив с именем LAN, как правило, содержит сетевые драйвера на самые распространенные устройства под XP. Распаковываете архив и натравливаете на него установщик драйверов, пусть ищет подходящий.
Вопрос: Как подсчитать количество одинаковых элементов в многомерном массиве?

Лучший ответ: Вы не поверите!

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

Лучший ответ: Ассемблер, Си.
Но какая разница? Сделайте для начала медленного бота с кучей недостатков.
У вашего первого бота обязательно должны быть недостатки, иначе неправильно это как-то.

Худший ответ: Зависит от задач конечного продукта. Один личный проект начинал на php, впоследствии столкнулся с ограничениями, костылями решил, но потом все-равно переписал на nodejs, благо к тому времени завезли промисы и переписать с php было делом двух ночей, при условии сохранения базы на mysql (с этим выбором тоже можно поспорить, но как для личного проекта - на чем умеем на том и делаем в текущий момент).
Конкретно в моем случае была необходимость организовать обработку информации в бесконечном цикле, когда нужно  из хранилища брать информацию о пользователях и при соблюдении совокупности условий присылать этим пользователям оповещения 
Изначально написал демона на php, пришлось изменять настройки сервера для увеличения максимального времени исполнения php скрипта, следить за тем демоном для меня было сложно, часто падал, приходилось рестартить скрипт каждые пол часа.
Впоследствии реализовал этот функционал на nodejs одной простой функцией с бесконечным циклом и таймаутом вызова, стало гораздо проще обрабатывать исключения и падения.
Если же в твоей задаче логика ограничивается схемой Запрос -> Ответ без фоновых процессов, то вполне себе подойдет и php. Точнее подойдет то, чем ты владеешь больше всего на текущий момент.
Вопрос: Где взять озвучку произношения слов?

Лучший ответ: Нет такой базы слов.
Слова и фразы генерируются на лету через какой-либо Speech Engine. На вход подаёшь текст, на выходе - звуковой файл или поток.
Изменить произношение без модификации нельзя. Движок может только предоставить на выбор разные голоса

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

Лучший ответ: после 
for (; *t != '\0'; t++)
      *s++ = *t;
добавьте 
*s = '\0'

чтобы строчку завершить

но вообще у вас переполнение буфера идёт, за рамки массива вылезаете при копировании. Обратите на это внимание и выделяйте память динамически.

Худший ответ: Вы не копируете '\0' на конце. Поэтому после приписывания идет мусор. И так получается, что у вас в памяти там мусор "v\0".

Вторая проблема, вы пишите в строку s, не меняя ее размер.
char s[] = "abc"; выделяет ровно столько памяти, сколько нужно для "abc", да еще и на стеке, раз у вас переменные локальные.

Вы при дописывании чего-то к строке затираете другие переменные. Так у вас совпало, что после name идет surname на стеке. Поэтому вы переписываете память второй строки (но без первого символа, который занял место '\0' в name. Именно поэтому мусор в конце - это неперезаписанный конец surname "v\0". Если поменять местами переменные, то вы может стек перепишите и у вас программа вообще упадет.

Вам надо строки выделять с запасом: char name[1000] = "Ivan";
Вопрос: Как правильно учиться на дизайнера?

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

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

Худший ответ: Нужно найти адекватные ресурсы почитать информацию и купить хороший курс после этого вы уже будете знать азы в дизайне