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

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

Задать вопрос, позвать на конференцию, записать со мной курс/статью/подкаст
👉 @PySage
Download Telegram
🔊 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
Хватит быть джуном!😊

👆Так говорит нам Kent C. Dodds, автор этой статьи.

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

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

➡️ Сразу к делу: что делать?

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

🟠Проведите митинг. Технологии меняются каждый день. Вот сайт, где считают, сколько дней прошло с выхода последнего фреймворка для js. Сейчас там цифра 0! Найдите новый инструмент и расскажите о нём коллегам, друзьям, сообществу. Запишитесь на открытые выступления по теме, которая вам интересна. Стесняетесь? Напишите мне в личку и расскажите о том, что вас вдохновляет!

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

🟠 Никто не знает, сколько времени должно пройти между Junior и Middle позициями, так что станьте мидлом уже сегодня!

Ставьте 🦄, если вы больше не джун :)

#мудрость_на_каждый_день #мысли #python_полезности
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄6🔥2👍1🤔1
На днях мне сказали, что посты очень длинные. Держите короткий полезно-пост 👇

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

PS: Ставьте плюс в комментарии, если у вас есть код, который надо отрефакторить

#python_полезности #находки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1🤔1👾1
🫥Буквально на днях я проходил тех-собес в Сбер и решил поделиться вопросами.

*️⃣На собеседованиях одинаковые вопросы для любого уровня: Junior, Middle, Senior(🔤,🔤,🔤). По двум первым вопросам интервьюер определяет уровень, чтобы дальше задавать более точечные вопросы. На них важно ответить максимально подробно, широко и глубоко.

1. Что произойдёт при запуске кода ниже?
x1 = [1, 2, 3]
x2 = [1, 2, 3]
print(x1 == x2)
print(x1 is x2)

🔤: Скрипт выведет True и False.
🔤: Рассказываем о том, что есть разница между == и is и когда они показывают одинаковый результат, а когда разный.
🔤: Нужно глубоко рассказать о памяти и том, что на самом деле храниться в x1 и x2, привести пример, когда это важно.

2. Что такое словарь (dict)?:
🔤: Словарь - это структура данных типа хэш-таблицы / ассоциативного массива.
🔤: Рассказываем о том, что скорость вставки и доступа O(1).
🔤: Говорим об особенностях разрешения коллизий и какие вообще бывают варианты.


*️⃣Дальше вопросы уже специфические, так что просто дам подсказки к ним.

3. Написать класс SqueredNumber для такого примера:
a = SqueredNumber(3)
print(a) # 9
print(isinstance(int, a)) # True

На самом деле вопрос про разницу между __ init __ и __ new __.

4. Сделать код ревью:
def return_first_from_iterator(predicat, objects=[]):
matching_objects = (obj for obj in objects if predicat(object))
if matching_objects:
object = matching_objects[0]
return object
else:
return None

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

5. Передать данные из одного процесса в другой.
На этот вопрос я ответил не очень хорошо, поскольку уже год работаю только с асинхронным программированием. Однако, теоретическое понимание аспектов конкурентного программирования нужно всем. В этом вопросе помогут концепции (не зависит от языка) pipes, shared memory и queues.

В целом, вопросы были среди тех тем, что я выделил в своём материале "50 вопросов с Python собеседования". Если у вас ещё нет этих вопросов, или вы переживаете из-за будущих интервью - пишите в личку! 👀

PS: Да, у меня было всего 5 вопросов, на которые я отвечал целый час. Иногда чересчур подробные ответы могут помочь вам избежать неудобных вопросов. Ведь время интервью не ограничено. Но с другой стороны, могут попросить пройти дополнительный собес.

#python_полезности #мой_путь
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4🤔4👾1
➡️ Для решения 90% алгоритмов достаточно знать всего десяток концепций.

Делюсь первой из них в сегодняшней истории! Хотите остальные? Ставьте 🚀

🍰  #it #python_полезности #просто_о_сложном
Please open Telegram to view this post
VIEW IN TELEGRAM
1311
👩‍💻 Любите разбираться в чужом коде? Я - нет!

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

Я написал решение, в котором перебираю отсортированный массив и считаю, сколько вхождений в строку каждого числа. Если текущее число встречается чаще, чем прошлое, то его и сохраняем. Вот код:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
max_seen = 0
max_seen_num = nums[0]
current_streak = 0
prev_num = nums[0]

for num in nums:
if num == prev_num:
current_streak += 1
else:
current_streak = 1

prev_num = num
if current_streak > max_seen:
max_seen = current_streak
max_seen_num = num

return max_seen_num


Казалось, что тут даже нечего обсуждать, но я решил сократить решение. Если у нас будет всего два уникальных числа, то те числа, которых больше, должны занять больше половины всего списка. Таким образом, достаточно вернуть центральный элемент отсортированного массива. И используя анонимные функции, можно написать даже так:
class Solution:
majorityElement = lambda _, nums: sorted(nums)[len(nums)//2]


Код уже достаточно сомнительный, но я зашёл в решения и посмотрел самое эффективное. Вот оно:
(bytes('浩潰瑲猠慴楴瑳捩ੳ⁦‽灯湥∨獵牥漮瑵Ⱒ✠❷਩潦⁲楬敮椠瑳楤㩮 †渠浵敢彲捯畣敲据獥㴠搠晥畡瑬楤瑣氨浡摢㩡〠਩††畮獭㴠氠獩⡴慭⡰湩ⱴ氠湩⹥獲牴灩⤨ㅛⴺ崱献汰瑩✬⤩਩††灵数⁲‽敬⡮畮獭⼯㈠ †映牯渠浵敢⁲湩渠浵㩳 †††渠浵敢彲捯畣敲据獥湛浵敢嵲⬠‽਱††††晩渠浵敢彲捯畣敲据獥湛浵敢嵲㸠甠灰牥਺††††††牰湩⡴畮扭牥 楦敬昽਩††††††牢慥੫硥瑩〨','u16')[2:])


🤔 И вот тут уже возникли вопросы, а точнее всего один:
"Что вообще тут происходит!?"


🌩 Оказалось, что всё очень просто, это закодированный в utf-16 код. При кодировании в Unicode, в начале добавляется специальный маркер и в коде выше его убирают, используя [2:]. Если раскодировать это решение, то код будет такой:
import statistics

class Solution:
def majorityElement(self, nums: list[int]) -> int:
return statistics.mode(nums)


🔩 Что происходит я понял, а вот зачем так делать - нет. Может вы знаете? Пишите свои версии в комментарии

🍰 #it #python #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
5211
Для решения 90% алгоритмов достаточно знать всего десяток концепций.

Продолжаем делится алгоритмами в истории! Сегодня алгоритм двух указателей.
Хотите остальные? Ставьте 🚀

🍰 #it #python_полезности #просто_о_сложном #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👉 Нашёл лучшую замену Docker на MacOS!

Если вы работаете на устройствах с MacOS, то наверняка вы тоже испытывали проблемы при использовании Docker. Необходимость запуска докера через десктоп приложение, большое потребление памяти, а на корпоративных устройствах его вообще удаляют... Есть решение! 🔥

🟣 OrbStack предоставляет все возможности Docker и даже больше. В приложении можно запускать как контейнеры, так и виртуальные машины! Само приложение выглядит хорошо и действительно потребляет меньше ресурсов. Отдельно отмечу:

✔️бесшовный переход, ставите orbstack и дальше используете привычные команды докера
✔️легко ставится через brew install orbstack
✔️при установке с .dmg можно перенести из докера все образы и контейнеры
✔️ дизайн в стиле Apple, десктоп версия выглядит очень гармонично на маке
✔️бесплатно для личного использования

📣 Резюмируя: OrbStack это лёгкая и удобная замена Docker, с бесшовной интеграцией в вашу привычную работу.

🍰 #it #python_полезности #находки
Please open Telegram to view this post
VIEW IN TELEGRAM
7222
Я устал, помогите пожалуйста! 😶

Я очень люблю пить чай. Чайник стоит на кухне и для удобства я сделал кнопку включения чайника в другой комнате. Так получилось, что кнопок три и только одна включает чайник. Другие две ничего не делают. Я никак не могу запомнить, какая кнопка включает чайник. Каждый раз приходится по очереди включать каждую и идти проверять😜

Наверняка есть решение лучше? Одновременно можно включить только одну кнопку 👇

🍰 #it #python_полезности #it_загадка
Please open Telegram to view this post
VIEW IN TELEGRAM
421
📚 Рубрика: «Книжная полка разработчика»

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

🔜 Прочитал «Дизайн привычных вещей» от автора Дона Нормана. Я хотел прочитать эту книгу ещё 10 лет назад, а первое издание книги вышло в 1988 году (!). Казалось бы: книга уже устарела, написана психологом для дизайнеров, причём тут технические специалисты? Рассказываю 💋

🔺 У вас когда-нибудь было такое, что вы не можете открыть дверь с первого раза? Хотите потянуть, а её надо толкать вперёд, или вообще нажать на кнопку, чтобы дверь сама открылась? Дон Норман не стал скрывать чувства и написал множество статей о ситуациях, когда вроде привычная вещь оказывалась настоящим квестом. Такие ситуации даже получили название "дверь Нормана". Эти статьи и стали фундаментом его книги «Дизайн привычных вещей». Это великолепная книга о том, как делать продукты для людей.

Я рекомендую эту книгу тем, кто:
🟡не понимает, как развиваться не только в технических навыках
🟡умеет решать технические задачи, но не думает о том, как его результаты влияют на пользователей
🟡прошёл дизайн-интервью и хочет развиваться дальше

В одном посте невозможно описать мой восторг от книги, ведь только список используемой литературы в ней занимает 14 страниц! Просто доверьтесь и добавьте книгу на книжную полку🙂

📚 Обновлённый список обязательных к прочтению книг:

🟢 До выхода на работу:
• Грокаем алгоритмы
• Карьера программиста

🟢После выхода на работу:
Паттерны проектирования
Подготовка к сложному интервью

🟢Чтобы поднять грейд:
• Дизайн привычных вещей
• Книга с кабанчиком
• Погружение в рефакторинг

🍰 #книжная_полка #it #python_полезности
Please open Telegram to view this post
VIEW IN TELEGRAM
5421
📚 Рубрика: «Книжная полка разработчика»

Разработчику нужно прокачивать не только хард-скиллы, но и "софты"! Про мягкие навыки написано уже много материалов, а я даже провёл несколько выступлений. Отдельно выделяют софт-навыки для разработчиков (выступления Андрея Смирнова про софт-скиллы для разработчиков). Исследований, статей и книг так много, что уже сложно разобраться. Удивительным совпадением я нашёл самую полезную книгу!

🔜 Прочитал «Как оставаться человеком на работе» от издательства HBR. Эта книга самая лучшая из всех, что я читал, и лучшая работа HBR. Издание HBR на основании лучших (141) материалов написали эту книгу про эмоциональный интеллект и я рекомендую её прочитать! Рассказываю почему💋

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

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

Раскрытие этих тем мне понравилось больше всего:
- Как определить что такое счастье и достичь его?
- Как правильно отдыхать и почему это важно?
- Что делать, если подчинённые не слышат тебя и делают всё не правильно?

💘 Каждая глава книги основана на исследованиях, статьях и книгах от издателя. В любой момент можно обратиться к источнику, а в самой книге нам показывают выводы и мнение автора. Над книгой работало 64 автора и указан 141 источник. Кроме того, в ней часто приводятся интервью. Каждая глава заставляет задуматься и порефлексировать, из-за этого я читал эту книгу почти 5 лет!

👍 Рекомендую почитать, если вы достигли момента, когда у вас уже есть подчинённые или вы не понимаете, как достичь счастья. Эта книга - лучший инструмент погружения в тему эмоционального интеллекта, даже если вы никогда не интересовались им.

📚 Обновлённый список обязательных к прочтению книг разработчику:

🟢 До выхода на работу:
• Грокаем алгоритмы
• Карьера программиста

🟢После выхода на работу:
Паттерны проектирования
Подготовка к сложному интервью

🟢Чтобы поднять грейд:
Дизайн привычных вещей
• Книга с кабанчиком
• Погружение в рефакторинг

🟢Лидерство и личностный рост:
• Как оставаться человеком на работе

Делитесь в комментариях, сколько из этих книг вы уже прочитали, и чем они вам помогли в работе👇

🍰 #книжная_полка #it #python_полезности
Please open Telegram to view this post
VIEW IN TELEGRAM
6432