Чашка Кода
465 subscribers
255 photos
5 videos
2 files
162 links
👋 Я - Никита, автор курсов и лекций по Python-разработке. Пишу на Python и Rust

✏️ В этом канале посты, которые сделают твой путь к веб-разработке проще

Задать вопрос, позвать на конференцию, записать со мной курс/статью/подкаст
👉 @PySage
Download Telegram
👀 Заметили, что наша капибара часто заказывает периферию и решили проследить за ней.

А вы пользуетесь корпоративным оборудованием? ⬇️

#мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🦄2
🚀7 секретов освоения алгоритмов🚀

Решил 400 задач на литкоде, что бы выучить Python. Вам достаточно решить всего 150, чтобы получить работу, даже если вы хотите работать в Google или Yandex!

Проанализировал несколько мнений о порядке решения задач и дополнил своим:
(вот самые ценные мнения: одно, другое - оба автора получили оффер в Google!)

🟣Решать задания нужно тему за темой. Сначала простые, потом сложные задания
🟣Решайте одну задачу не более 40 минут
🟣Если не успеваете решить, отрывайте разбор задачи (editorial) если он есть, либо решения (solutions)
🟣Читайте 2-3 варианта решения, пока не поймёте алгоритм
🟣Возвращаетесь к задаче и решаете её так, как поняли
🟣Как только вы научитесь решать задачи менее, чем за 40 минут, переходите к следующей сложности easy -> medium -> hard
🟣На любом уровне сложности используются одинаковые алгоритмы, просто сложные задачи более комплексные

⁉️ Какие именно задачи решать?

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

🟠В каждой теме только бесплатные задания с ссылкой на литкод
🟠Для каждого задания добавляю описания заданий на русским языке, алгоритмическое решение и реализацию на языках Python и Rust
🟠 Приятный бонус: сайт сделан как документация, так что после него будет легко читать большинство документаций

Иностранный аналог - roadmap (часть заданий премиум, но есть "бесплатная копия")

Поздравляю, всего за один час в день вы научились решать алгоритмические задачи!

А я как раз сейчас учу rust именно по этим заданиям, так что решения выкладываю по мере прогресса ✍️

#python_полезности #находки
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄5🔥32👍2👾1
Нотация Большой О (Big O Notation)

Научиться решать алгоритмы — это только полдела. Нужно ещё уметь анализировать их на эффективность. Чаще всего для измерения эффективности алгоритма используется Нотация Большой О (Big O Notation) и записывается как O(n), то есть большая О и какой-то показатель n.

🟣 Что такое `O(n)`?
Это математическое описание сложности алгоритма. Для записи используется алгебраическое обозначение, где в скобках указывается зависимость от входных данных(обычно длины).

Пример:
Сложность сортировки выбором равна O(n²). Такая сложность читается, как "О(большая) от n в квадрате". Буква n представляет размер полученных данных. Запись (n²) показывает, что для сортировки потребуется количество действий, равное длине входных данных в квадрате.

🟣Зачем нам это нужно?
Представим игру Судоку. Когда пользователь вводит число, необходимо проверить, что оно не встречается в ряду, столбце и подквадрате. Общий размер входных данных, при максимально заполненном судоку, равен 81 числу (9 * 9). Мы воспользуемся оценкой асимптотической сложности, где будем измерять "условные" действия.

🟣Самые популярные сложности алгоритмов:

🟣 O(1) - при константной сложности всегда будет одинаковое количество действий, даже если судоку 100 на 100 ячеек.
🟣 O(log n) - логарифмическая сложность означает значительное сокращение при увеличении. Судоку 9*9 требует 6 действий (log81(2) = 6.33), а 100*100 потребует всего 13 действий.
🟣 O(n) - линейная сложность напрямую зависит от входных данных. Судоку 9*9 => 81 действие, 100*100 => 10_000.
🟣 O(n²) - квадратичная сложность означает значительное увеличение операций относительно увеличения входных данных. Так для 9*9 => 6_561 операций, а 100*100 требует 100 миллионов действий!

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

💬Подробнее про нотацию большой О
💬А вот моё решение судоку
Please open Telegram to view this post
VIEW IN TELEGRAM
👾6👍21
🚗 А вы хорошо себя вели в уходящем году?

Капибара уже складывает последние подарки в мешок и совсем скоро покинет свою капибаречью нору, отправляясь их дарить.

Как думаете, какой подарок она заготовила для вас? 🎁

Напишите в комментариях ваш самый добрый и хороший поступок, который вы сделали в этом году. Вдруг капибара что-то упустила? 🔽

#мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄3🔥21👾1
👋 Розыгрыш 3-ёх карьерных созвонов

За последние годы моя жизнь сильно изменилась, но главное, что она изменилась к лучшему! ❤️

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

🤖 В самом начале было сложно понять, что вообще делать, что учить и почему всё именно так. Много источников информации, каждый эксперт рассказывает по-разному, на ютубе множество видео в духе «как пройти собеседование в IT», но проконсультироваться с реальным человеком, экспертом - возможности не было.

🔔 Поэтому на этот новый год я решил разыграть 3 карьерных созвона

⭐️ Подпишитесь на канал «Чашка кода»
⭐️ Поставьте «+» в комментариях под этим постом
⭐️ 8 января с помощью рандомайзера я разыграю подарки!
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄43👍3🔥1
🎆 Прошло полтора года с момента, как я занялся рефлексией и прокачиванием своих навыков. Поскольку изначально я завёл этот канал ради рефлексии о том, как выйти на работу за год, то пора подвести итоги.

▶️ Разработка — это не про написание кода.

До выхода на работу я каждый день писал код 7-10 часов в день. На работе я пишу код не больше 4 часов в неделю. В основном работаю с базами данных (у друзей такого нет, видимо мне просто "повезло"), прихожу на созвоны, обсуждаю задачи с командой и читаю код.

🟣 Вывод: Больше всего я писал код, только пока учил программирование и проходил собесы, реальная работа это, в лучшем случае, 20-30% процентов кода.

▶️Записывать курсы и другие учебные материалы — сложно.

До IT у меня был опыт обучения сотрудников разного уровня, но это почти всегда была работа 1 на 1, когда мы общались лично с человеком долгое время. В IT успел поучаствовать в записи курса, а впереди ещё один. Это оказалось очень сложно, начиная с момента проработки учебных материалов и заканчивая бесконечными перезаписыванием.

🟣 Вывод: Обучение и подготовка курсов занимает много времени, сил и других ресурсов, при этом многие курсы получаются плохими.

▶️Хорошая работа всегда зависит от хорошего самочувствия.

Если во время обучения это было не так заметно из за высокой мотивации, то при реальной работе это хорошо чувствуется. На работе никого не волнует твоя личная мотивация, и если ты чувствуешь себя не очень, то писать код и выполнять работу будет очень сложно. По большей части разработка — это работа мозгом, а он очень ленивый. Поэтому, как только мозг понимает, что телу не хорошо, он перестаёт тратить какие-либо ресурсы.

🟣 Вывод: Как бы не звучало банально, но следите за здоровьем! Не перерабатывайте и вовремя отдыхайте.

🕯 Друзья, желаю всем в новом году никогда не сдаваться, ставить себе реальные цели, правильно рассчитывать силы и верить в чудеса, ведь они действительно случаются!

#мой_путь #мысли
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥3🦄1👾1
❄️Друзья, новогоднее бинго!

Я календарь переверну... и снова 3 января! Признавайтесь, все уже доели новогодние салаты, или у кого-то в холодильнике ещё лежит оливье? 😋

Давайте вспомним собеседования, которые мы проходили в прошлом году. Если получилось собрать три варианта в ряд или по диагонали — у вас бинго! 🌟

А если вы ещё пока не проходили собеседований, запоминайте вопросы.

Какие самые глупые, каверзные или надоедливые вопросы вам задавали на собеседованиях? 👇

#мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👾21🦄1
🫥 3 признака, что вы прирождённый айтишник

1️⃣ Вы не боитесь ошибок и когда всё не работает.
Представьте, что утром вы решили приготовить сэндвич. Вы берёте хлеб, нож, но при намазывании масла оказывается, что нож не режет масло. Заменив нож вы понимаете, что масло слишком холодное. При намазывании масла хлеб оказывается слишком тонким...

🫠 Сколько таких моментов вы готовы стерпеть? А если после всех страданий сэндвич упадёт на пол? В программировании мы постоянно сталкиваемся с ошибками. На самом деле, любая программа всегда возвращает код ошибки, просто иногда эта ошибка - как раз то, что мы и ждали.

2️⃣ Вы готовы каждый день улучшать свои навыки и "прокачиваться".
Каждый день, каждую неделю нужно что-то изучать. Индустрия развивается супер-быстро, и не прокачивая свои навыки вы будете неизбежно отставать. 🦾

Причём, даже если вы будете прокачиваться постоянно, вы можете не успеть. 9 месяцев я каждый день решал алгоритмы и всё равно не прошёл отбор в Яндекс. Сдадитесь после такого или продолжите прокачиваться?

3️⃣ Вам интереснее разбирать конструктор , чем собирать.
Работа программиста зачастую описывается как "если мы не знаем как решить задачу, мы разбиваем её на подзадачи и теперь мы не знаем, как решить много задач". Нужно быть готовым к тому, что получив задачу, вы не сможете её сделать. Сначала вы разделяете задачу на много задач поменьше, потом каждую из них ещё меньше, и в итоге вы решаете огромное количество маленьких задач, чтобы решить одну.

🫥 Получили три совпадения? Тогда IT - точно для вас! А если даже не получили, то есть позиции не разработчиков и они тоже интересные. К примеру, работа продакта состоит в делегировании выполнений задач разработчикам, а сам он общается с бизнесом.

Делайте "тык" на одну картинок и получите IT-суперспособность! 🔴

#мемы #мудрость_на_каждый_день
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤔21👾1
3️⃣ главных концепции программирования

Можно написать любую программу, зная всего три концепции языка: последовательности, ветвление и циклы. Да, возможно ваш код будет выглядеть не очень хорошо, но этого действительно достаточно. Разберём понятия и посмотрим на реализацию в Python.

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

*️⃣Списки — хранят значения (не обязательно одного типа) с фиксированным порядком:
grades = [5, 5, 4, 5, 5]

*️⃣Множества — для уникальных значений, порядок случайный:
goods = {"яблоки", "мандарины", "киви"}

*️⃣Словари (хэш-таблицы) — хранят пары значений. По сути — это множества для каждого элемента, для которого имеется связанное значение:
storage = {"яблоки": 5, "мандарины": 2, "киви":1}

🟣Ветвления:
Позволяют выполнять (или не выполнять) операции при определённых условиях.
Псевдокод:
Если есть_деньги:
потратить(...)
Иначе:
расстроится(...)

Python:
if have_money:
spend(...)
else:
cry(...)


🟣Циклы:
Позволяют выполнять действия, пока выполнятся (или не выполняется) условие:
Псевдокод:
Пока есть_деньги:
потратить(...)
# деньги_кончились

Python:
while have_money:
spend(...)
# money_gone

Изучив эти темы, можно смело называть себя разработчиком и реализовывать всё что угодно! А все остальные навыки приходят с опытом 👍

#просто_о_сложном
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄4👍1🔥1👾1
🎁 Друзья, пора подводить итоги розыгрыша карьерных консультаций!

С помощью генератора случайных чисел были определены победители — это комментаторы под номерами 5, 8 и 6:
🟣 @tbaktybaev
🟣 @Dal78689
🟣 @ambaluk

Поздравляем ребят! С ними я свяжусь в личных сообщениях.

А я хочу напомнить, что карьерная консультация — это часовой созвон, где мы:

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

Если хочешь записаться на консультацию, пиши мне в личку 👉 https://t.iss.one/PySage

#анонсы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👾2👍1
⚡️ 3 совета рекрутера: о чём нельзя врать на собесе?

Считаете ТикТок бесполезной тратой времени? Готов поспорить. Недавно там стало вирусным видео Анны Папалии — карьерного консультанта, которая более 15 лет занимается корпоративным рекрутингом и руководит крупной консалтинговой компанией Shift Profile.

За несколько дней это видео набрало более миллиона просмотров и тысячи поддерживающих комментариев от HR-ов, которые подтверждают, что "милые и пушистые" кандидаты чаще получают отказы.

Ловите годные советы от Анны:

🔊 Уход с прошлой работы. Не говорите, что у вас были проблемы с коллективом или руководителем. Рекрутер сделает вывод, что с вами трудно работать. Скажите, что переросли прошлую организацию и нуждаетесь в развитии.

🔊 Мотивация. Не стоит говорить о том, что деньги — ваша основная мотивация. Лучше скажите, что вам близки ценности компании, куда вы проходите собеседование. Только не забудьте сначала прочитать о них в интернете.

🔊 Планы на будущее. Ох уж этот вопрос: "А кем вы видите себя через 5 лет?". Лучше ответить, что для вас важно расти вместе с компанией и помогать ей в развитии.

🔊Хобби. Не стоит рассказывать про любовь к сериалам. Выберите хобби, которое звучит профессионально и интересно.

💬 Избегайте приукрашивания своих способностей касательно свободного владения иностранным языком, а так же не стоит врать о степенях образования — говорит Анна.

А какие лайфхаки по прохождению собесов можете дать вы? 🔽

#python_полезности #мудрость_на_каждый_день
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄2🔥1👾1
⚡️ Экстренное включение: теперь у вас не будет приложений в телефоне!

Буквально несколько часов назад был представлен Rabbit R1, революционная разработка! Авторы утверждают, что смогли сделать устройство, которое полностью заменит вам телефон и при этом в нём нет приложений. Смотрите презентацию, она очень стильная.

💵 Как обычно происходит процесс покупки? Нам нужно зайти в приложение, выбрать что купить, положить в корзину, нажать кучу кнопок... Устали? CEO компании Rabbit, Jesse Lyu, сделал R1 - девайс, который, должен упростить нам жизнь. По его мнению, смартфоны, которые должны были сэкономить наше время, лишь тратят его.

👀 R1 - устройство, которое не нужно изучать, как использовать - уверяют создатели. Скорость работы в 10 раз быстрее GPT, и он не просто даст ответ, а сделает нужные действия за вас. На презентации R1 ответил на вопросы разной тематики, включил музыку на ноуте, описал своё мнение о песни, вызвал такси, пиццу и организовал путешествие на всю семью... Всё это без нажатий клавиш! Всё что нужно, это сделать запрос и подтвердить покупку.

Единственное, что не может сделать R1 — это залогиниться в сервисы, так как соблюдает безопасность и не хранит данные для логина. Ну что за душка, этот кролик, да? 🐰

Среди интересных способностей:
🟣Использование камеры для общения с R1. Можно показать холодильник и попросить придумать рецепт из того что есть.
🟣Поиск нужной информации, отправка её на почту и возможность продолжить общение через почту.
🟣Выполнение задач, которые не имеют готового решения. R1 имеет специальный режим для обучения, можно научить его создавать изображения через Midjourney и потом он сможет делать это сам, даже для других промптов. Можно учить чему угодно: даже сделать его личным тренером по танцам.
🟣Используется не БЯМ, а "Large Action Models", новая штука(я ушёл изучать)
🟣Цена: всего 199$, как GPT за год, только доступ навсегда!

Знакомый дизайн? Его разработала Teenage Engineering ответственная за дизайн устройств Nothing.

Подарили бы своей бабушке такой девайс? 🔽

#находки
Please open Telegram to view this post
VIEW IN TELEGRAM
👾4👍1🔥1
🔴 Типичные проблемы репозитория

Недавно меня попросили дать комментарии по проекту, и я решил поделиться с вами наиболее часто встречающимися проблемами репозиториев, на данном примере.

⭐️ Не хватает важных файлов:

README: Добавляйте ридми в каждый проект. Нужен хотя бы минимум, пару слов о проекте, как его запустить и какие есть зависимости. Вот крутой инструмент с шаблоном для создания ридми dillinger

.gitignore: В нём мы прописываем, чтобы .idea, .env, venv и другие файлы и директории проекта не попали в гит. Особенно это важно с .env, так как там может быть чувствительная информация.

requirements: Зависимости проекта стоит описать в одном файле для удобного запуска.

⭐️ Название не отражает суть проекта
Единственная директория в проекте имеет осмысленное название описывающее проект, в отличии от самого репозитория. Частой практикой является размещение файлов в src директории. Файл main.py из корня проекта стоит разместить в ней, или лучше в app директории, где будут все скрипты для запуска проекта, базы данных и тд., а в base_backend можно разместить файлы самого бекенда. Поскольку в проекте используется фреймворк Django, можно предложить такую структуру, как на картинке к посту.

⭐️ В репозитории размещён файл .sqllite3, благодаря чему мы видим, что одним из пользователей является Пётр, а его телефон кончается на "76".

⭐️ Коммиты довольно несодержательные и слишком большие (в последнем было добавлено 14 тысяч строк). Вряд-ли получиться описать все изменения в 72 символа, как рекомендуют. Можете почитать очень хорошую инструкцию от гита.

⭐️ По коду сказать мало что можно, так как сначала надо привести в порядок проект. Но явно не хватает использования локальных переменных. В BaseWeb/turistbase/base/views.py для работы с тг-ботом используется токен 'token', который очевидно не сработает.

⭐️ Среди плюсов можно отметить использование миграций для баз данных, что является хорошей практикой.

🔽Вердикт этому проекту в комментариях.

А вы кидайте в комменты ссылки на свои репозитории, тоже посмотрим 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1🦄1👾1
🔊 99% разработчиков не умеют программировать

Хотел написать мнение о статьях «99% программистов не умеют писать код» и «Почему программисты не умеют программировать», однако они оказались просто кликбейтом, и на самом деле пользы в них никакой нет.

В статьях рассуждали про типовые задачи на собеседованиях, вроде «FizzBuzz» и валидации скобок, так что я решил рассказать, как я решаю алгоритмы.

Разберём на примере FizzBuzz (leetcode), какие шаги я делаю, чтобы решить задачу

1️⃣ Понять задание: В этом задании надо проверить все числа от 1 до полученного числа на признаки делимости на 3 и 5. Если нет остатка при делении на 3 — записываем «Fizz», на 5 — записываем «Buzz», на 3 и 5 — записываем «FizzBuzz», во всех остальных случаях записываем это число.

➡️ На что обратить внимание на этом этапе:
* не усложняй. Не надо валидировать данные, иметь научную степень или кровь дракона для решения задачи 🐉
* проверь. Для любого алгоритма нужно несколько вариантов входных-выходных данных, чтобы понять, как оно работает.

2️⃣ Определяем алгоритм: Решив 150 задач из моей подборки, для вас почти любая задача будет выглядеть знакомой. Вспоминаем похожие задачи и алгоритмы их решения. Наш пример очень простой, так что тут сразу понятно, что надо сделать список чисел от 1 до n и иттерировать по нему, проверяя каждое число.

➡️ Важно:
* не ломай голову. Если идей нет совсем, то стоит погуглить, спросить совета или почитать гороскоп. Чтобы эффективно решать алгоритмы надо знать их, в противном случае не получится решать их эффективно 🔮

3️⃣ Прототипируем: Почти всегда я пишу решение на псевдокоде, а потом переписываю его на Python.
Перебрать числа от 1 до n:
если число делится на 3:
то "Fizz"
если число делится на 5:
то "Buzz"
если оба:
"FizzBuzz"
иначе:
текущее число


4️⃣ Оптимизиуем: Очень редко с первого раза получается хорошо, используем метод BUD.

5️⃣ Пишем готовый код на нужном языке. В моём случае - это Rust.

#мудрость_на_каждый_день #python_полезности
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄5👍3👾1
База, но наконец-то про код! 😱

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

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

🟣С литералами всё достаточно просто. Это фиксированные значения: числа, строки, булевы значения (правда / ложь). Для литерала мы явно выражаем то, что в нём хранится: 5 шт. апельсинов, имя Серёжа и т.д. Мы заранее знаем, сколько места нужно выделить, а когда это место больше не нужно, его легко почистить.

🟣С динамическими структурами всё гораздо сложнее. Заранее мы не знаем, сколько продуктов будет в нашем магазине, сколько уникальных никнеймов пользователей в онлайн-игре и т.д. Для хранения таких данных у нас и есть коллекции, контейнеры и куча других названий для динамических структур данных

ИТОГ:

Начав изучать язык, вам придётся в самом начале изучить два типа данных:
1️⃣ Скалярные / Литералы / Неизменяемые: обычно это числа (int, float), строки (str), булевы значения (bool) и отсутствие значения (None / null)
2️⃣ Динамические / Изменяемые / Комплексные: обычно это массивы (list, tuple) и хэш-структуры (dict, set).

При этом tuple (кортеж) — это неизменяемый тип данных. А почему я отнёс его во вторую группу — как раз отличный повод изучить эти типы!

#просто_о_сложном
Please open Telegram to view this post
VIEW IN TELEGRAM
👾5👍1🔥1