Девман для питонистов
532 subscribers
144 photos
3 videos
186 links
Веб-разработка на Python. Канал от практиков.

Сайт школы Девман: https://dvmn.org/
Контакт для связи: @yulya_devman
Download Telegram
➡️ Выбирайте правильный ответ из предложенных и пишите в комментариях, почему выбрали именно этот ответ!
Anonymous Poll
14%
a. ['apple', 'banana', 'cherry]
82%
b. ['apple', 'banana', 'cherry, 'watermelon']
3%
c. выдаст ошибку
1%
d. ['watermelon', 'apple', 'banana', 'cherry’]
🔥1
Правильный ответ -- b!🥳

Следуя принципам чистоты кода, менять входные данные внутри функции нежелательно и небезопасно. Поэтому подобное поведение функции — проблема, которую надо исправить. У нас даже улучшение такое есть.

Почему так происходит
Дело в том, что при выполнении присвоения = для списков — новая переменная сохраняет ссылку на старый список без копирования элементов. Проблема возникает при использовании изменяемых (mutable) объектов.

Как исправить
Нужно записать в локальную переменную внутри функции вместо ссылки на старый список, копию списка. Например, так:

initial_fruits = ['apple', 'banana', 'cherry']

def add_new_fruit(input_fruits, new_fruit):
fruits = input_fruits.copy()
fruits.append(new_fruit)
return fruits

add_new_fruit(initial_fruits, 'watermelon')
print(initial_fruits)


О других способах читайте в Энциклопедии Девмана и держите свой код чистым!
1👍1🔥1
Что должен уметь разработчик?

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

🗣 Коммуникация
Времена программистов-одиночек остались в прошлом. Нужно уметь работать в команде. Общаться придется с заказчиком, с фронтендером, тестировщиком, продукт-менеджером и девопсером. Поэтому крайне важно уметь находить win-win решения, конструктивно решать конфликты и воспринимать критику.

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

🧠 Продуктовое мышление
Программный продукт — это инструмент, с помощью которого пользователь решает свои задачи. Если продукт не решает задачу или им неудобно пользоваться в ситуации пользователя — он бесполезен. Узнайте кто пользователи, в каких ситуациях они используют ПО, чего хотят. Не забудьте про ограничения заказчика. Познакомьтесь с фреймворком Jobs To Be Done, чтобы лучше понимать суть продукта. Если сможете развить продуктовое мышление и при этом набрать опыт, то сможете прокачаться до архитектора ПО.

🧑‍💻 Обучаемость
Веб и ИТ-отрасль в целом постоянно меняются. Каждый месяц появляются новые технологии, готовые решения, обновляются библиотеки. Нельзя один раз научиться и просто работать разработчиком до пенсии.

Разработчику приходится регулярно осваивать новые библиотеки и инструменты. Интерес к новому, готовность искать непривычные маршруты, навыки запоминания и критического анализа информации помогут быстро обучаться и повышать свой уровень как разработчика.

Важно научиться самостоятельно выстраивать обучение в формате практического подхода learning-by-doing, чтобы эффективно нарабатывать новые навыки и после использовать их в работе. Разрабатывайте пет-проекты, прототипы, просите коллег с опытом сделать ревью ваших проектов.

Считаете ли вы софт скиллы важными для разработчика? Помогают ли они вам в работе? Делитесь мнением в комментариях 👉
🔥6👍2
Как AI влияет на индустрию разработки ПО?

Во вторник в 14:00 обсудим влияние AI на индустрию разработки ПО в прямом эфире

В рамках дискуссии поговорим о:

⚡️ Реальности угрозы замены программистов на AI на базе o1
⚡️ Изменении роли программиста в связи с появлением подобных систем и навыках, которые потребуются разработчикам в будущем
⚡️ Ограничениях у AI на базе o1 в контексте реальной разработки ПО
⚡️ Влиянии внедрения подобных систем на процессы разработки
⚡️ Этических и правовых вопросах использования AI для создания кода
⚡️ Возможных изменениях на рынке труда программистов в ближайшие 5-10 лет
⚡️ Стратегии адаптации для разработчиков, чтобы оставаться востребованными в новых условиях

Дискуссия пройдет в прямом эфире на Ютуб 1 октября в 14:00.

Длительность 1 час 20 минут.

От нас участвуют Евгений Евсеев — сооснователь Devman и Артем Каменев — операционный директор подразделения заказной разработки.

Приглашаем вас присоединиться и послушать! ➡️

Ссылку на трансляцию пришлем в день дискуссии
👍7🔥4
Обязательной частью онлайн курса «Профессия Middle Python/Django разработчик» от Devman является стажировка на коммерческом проекте. Стажировка подходит внутри нашей компании, в соседнем подразделении. В этом году подразделение заказной разработки получило свое название PelidTeam, логотип и и отдельный сайт

🤝 Симбиоз Devman и PelidTeam
Два направления — обучение и разработка — тесно связаны и на данный момент не существуют по отдельности. Devman готовит квалифицированных бэкенд-разработчиков, часть из которых теперь после стажировки получают оффер остаться на фулл-тайм в PelidTeam и продолжить свое развитие в сторону тим- или техлида, а в скором времени, возможно, фулл-стек разработчика.

🚀 Звездолёты
PelidTeam практически не занимается простыми типовыми проектами. Большинство проектов — это разработка с нуля, сложные, высоконагруженные веб-сервисы. И уровень наших выпускников как раз позволяет такие продукты делать. Большинство стажеров уже в течение первых двух месяцев получают не просто задачи по исправлению мелких багов, но разрабатывают новые фичи, активно участвуют в проектировании.

📈 Активный рост
PelidTeam за прошедший год вырос в 10 раз по выручке. За последние 3 месяца 10 выпускников Devman устроились к нам в компанию как бэкенд-разработчики на фулл-тайм. Это около 30% от количества выпускников, прошедших стажировку за прошедший год.

⚡️Своя методика
Как и в обучении, мы не пошли обычным путем и разработали свою методику для проектирования и управления разработкой ПО. Методика получила название ProductFlow и, если вы будете участвовать в стажировке, то познакомитесь с ней. ProductFlow позволяет объективно отслеживать прогресс, проводить приемку работ, описывать контекст задачи и прорабатывать критически важные детали. ProductFlow позволяет разрабатывать большие и сложные программные продукты, удобные пользователю.

🧑‍💻Трудоустройство
Мы ценим сообщество, которое образовалось вокруг курсов Devman, и при найме отдаем предпочтение именно нашим ученикам. Сообщите нам, если заинтересованы стать частью постоянной команды PelidTeam.

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

➡️ А пока рекомендуем присоединиться и послушать дискуссию о влиянии AI на индустрию разработки ПО. В дискуссии участвуют Евгений Евсеев — учредитель и технический директор компании, и Артем Каменев — операционный директор PelidTeam

Подключиться можно по ссылкам:
- Трансляция на Ютуб
- Ретрансляция на VK (появится в группе автоматически)
🔥8👍3
❗️ Вчера мы обсудили влияние AI на индустрию разработки ПО

Говорили о:

⚡️ Реальности угрозы замены программистов на AI на базе o1
⚡️ Изменении роли программиста в связи с появлением подобных систем и навыках, которые потребуются разработчикам в будущем
⚡️ Ограничениях у AI на базе o1 в контексте реальной разработки ПО
⚡️ Возможных изменениях на рынке труда программистов в ближайшие 5-10 лет
⚡️ Стратегии адаптации для разработчиков, чтобы оставаться востребованными в новых условиях

Делимся ссылками на записи трансляции для тех, кто не смог подключиться вчера!
Запись на YouTube
Запись в VK

Позже будет текстовая версия на Хабре. Мы пришлем ссылку на нее.

Были вчера на дискуссии? Делитесь впечатлениями в комментариях ➡️
🔥1
А вы уже разобрались как работают операторы is и == в Python?

Выберите вариант ответа, не запуская код:

a = 5
b = 5
c = 16789
d = 16789
print(a == b, a is b, sep=', ')
print(c == d, c is d, sep=', ')


➡️ Пишите в комментариях, почему выбрали именно этот вариант, а мы вернемся завтра с правильным ответом и описанием механизма работы операторов!
🔥1
К сожалению, опросник не поддерживает форматирование с переносом строк, поэтому продулирую сюда более читаемые варианты:
Вариант А.
>>>print(a == b, a is b, sep=', ')
True, False
>>> print(c == d, c is d, sep=', ')
True, False

Вариант B.
>>>print(a == b, a is b, sep=', ')
True, True
>>> print(c == d, c is d, sep=', ')
True, False

Вариант C.
>>>print(a == b, a is b, sep=', ')
True, True
>>> print(c == d, c is d, sep=', ')
True, True
🔥1
🥳 Итак, правильный ответ - B!

Оператор == вызывает магический метод __eq__() объекта и проверяет равенство значений объектов. Если этот метод не реализован у кастомного класса объектов, то == по умолчанию сравнивает адреса памяти двух объектов, т.е. проверяет идентичность объектов. А значит, результат сравнения может быть неожиданным для программиста.

c = 16789
d = 16789
>>> print(c == d)
True

Оператор is проверяет идентичность объектов. В Python все является объектом, а каждый объект размещается в памяти по определенному адресу. Оператор is проверяет, ссылаются ли две переменные на один и тот же объект в памяти. Для проверки адреса, используйте функцию id():

>>> id(a)
9776800
>>> id(b)
9776800
>>> id(c)
139766195519312
>>> id(d)
139766195945264


Но почему же c и d указывают на разные объекты в памяти, а a и b на один и тот же? Здесь включается механизм интернирования объектов Python, иначе он называется кэшированием объектов.

Для экономии ресурсов самые часто используемые объекты хранятся в фиксированном месте памяти в единственном экземпляре. Пример — сколько бы переменных вы не создали со значением 2, все они будут привязаны к одному и тому же адресу памяти. По умолчанию в CPython интернируются следующие типы объектов:
- None,
- True, False
- простые строки
- числа от -5 до 256

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

>>> str1 = 'hello world'
>>> str2 = 'hello world'
>>> str1 is str2
False
>>> str1 = intern(str1)
>>> str2 = intern(str2)
>>> str1 is str2
True


Рекомендуется использовать оператор is для сравнения с None вместо оператора ==. Он не только быстрее, поскольку сравнивает адреса памяти, но и безопаснее, поскольку не зависит от логики каких либо методов __eq__() класса.

Поскольку булевые значения True и False интернируются, то оба оператора дадут одинаковый результат. Мы рекомендуем и вовсе отказаться от сравнения с ними, т.к. это позволяет упростить код, не ограничивая функциональность:

c = 5
d = 3

if c > d is True:
do_something()

# высушим код, но получим тот же результат
if c > d:
do_something()

result = c > d # True


Подведем итоги:
Используйте операторы Python == и != для сравнения равенства объектов.
Используйте операторы Python is и is not для сравнения с None. Сравнивать с None по адресу памяти быстрее и безопаснее, чем с помощью методов класса.
Используйте операторы Python is и is not, если хотите сравнить идентификатор объекта, т.е. указывают ли переменные на один и тот же адрес в памяти
Избегайте сравнений с True/False, используйте готовые результаты логических операций, чтобы высушить код.
🔥4
Курсам Девмана уже 8 лет. Изначально они появились как решение собственной проблемы дефицита программистов для заказной разработки, необходимости долго и дорого дообучать новых сотрудников. Поэтому в приоритете было качество и высокая доходимость до конца.

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

➡️ Шаги и модули. Добавили в уроки шаги — сложность снизилась. Разбили уроки на тематические мини-курсы. Проходить стало легче, но ученики часто терялись, учились медленно, часто забрасывали.

➡️ Менторы. Прорыв случился в 2021 году, когда мини-курсы объединили в единый трек и добавили менторов. Доходимость ступени курса «Профессия Middle Python/Django разработчик» длительностью 5 месяцев увеличилась до 60% даже с учётом времени ожидания код-ревью, локальных проблем с уроками и проектами при доработке курса и из-за изменений условий использования сторонних веб-сервисов, используемых в уроках.

➡️ Проблема выделения времени. И все ещё ученики уходят с курса по схожим причинам — не выделяют время на обучение, теряют мотивацию и силы.

С менторами собрали частные ошибки, которые значительно влияют на на шансы дойти до конца курс:
👍1
Обязательная часть техинтервью — Live coding. Live coding позволяет дать оценку способности кандидата разбираться с основными концепциями языка или фреймворка, применять алгоритмический подход к решению задач, а также оценить навыки отладки и тестирования кода. И один из самых распространенных видов задач — алгоритмические. И тут важно регулярно тренироваться, т.к. такие задачки не встречаются в реальной практике и нужно набить руку для успешного прохождения собеса.

Пишите в комментариях свой вариант, а мы проверим и выберем завтра лучшее решение.

☑️ Задача

Палиндром — строка, которая читается в обоих направлениях одинаково. Напишите функцию, которая определяет, является ли строка палиндромом.
Учитывайте только буквы, регистр не важен.

👉 Примеры палиндромов:
«Шалаш»
«А роза упала на лапу Азора»
«И темен город. Мороз, узором дорог не мети»
«Кинь лед зебре, бобер — бездельник!»

➡️Рекомендации для нашего интерактива и для реального собеса:
Постарайтесь решить задачу без импортов библиотек, даже стандартных – на собеседованиях они часто запрещены
Не забудьте про нейминг и чистоту кода
Задайте вопросы, если не до конца понятна задача или критерии приемки
Не жульничайте — попытка загуглить решение или воспользоваться ChatGPT может закончится разоблачением и провалом собеса
Смотреть документацию можно
По возможности добавьте тесты, хотя бы те же assert
🔥3
☑️ Возвращаемся к вам с нашим вариантом решения:

def is_palindrome(input_line: str) -> bool:
cleared_line = ''.join([symbol for symbol in input_line.lower() if symbol.isalpha()])
return len(cleared_line) > 1 and cleared_line == cleared_line[::-1]

test_palindromes = [
'Шалаш',
'А роза упала на лапу Азора',
'И темен город. Мороз, узором дорог не мети.',
'Кинь лед зебре, бобер - бездельник!',
]
test_not_palindromes = [
'Шалаши',
'12f21',
'Кинь лед зебре, бобер - крутой зверь!',
]

for palindrome in test_palindromes:
assert is_palindrome(palindrome)

for not_palindrome in test_not_palindromes:
assert not is_palindrome(not_palindrome)


Это не единственная возможная реализация решения.

В данном решении учтены следующие детали:
не забыли вычистить строку и преобразовать регистр букв к единому нижнему
воспользовались встроенными возможностями для инвертирования строки
использовали list_comprehension для простого цикла, чтобы упростить код
код отформатирован согласно PEP8
переменным и функции даны понятные названия
не забыли про корнер-кейсы — когда после удаления лишних символов остается пустая строка или всего один символ, который не является палиндромом
добавлены простые автотесты assert как для палиндромов, так и для строк, которые не являются палиндромами


У @LuSP7 получился отличный вариант, близкий к нашему. Вынос чистки от лишних символов в отдельную функцию приветствуем и оставляем обоим вариантам право на существование. Спасибо всем, кто поделился идеями здесь и в ВК!

На курсе «Профессия Middle Python/Django разработчик» мы готовим к прохождению технического интервью и разбираем похожие задачки.

➡️ Был опыт live coding на технических интервью? Делитесь своим опытом в комментариях!
👍1
⚡️ 17-19 октября примем участие в форуме Innovation week и расскажем о том, как сделать свою рабочую систему контрактов и не сойти с ума 🔥

От нас выступают спикерами Евгений Евсеев — основатель и технический директор Devman и Артем Каменев — операционный директор подразделения заказной разработки PelidTeam

🔄 На форуме будем обсуждать самые актуальные вопросы, связанные с технологиями в бизнесе, трансформациями бизнес-моделей, прогнозами и трендами.

🔣Дата мероприятия: 17-19 октября.

🔣Место: Москва, ВЭБ центр. Новинский бульвар д.31

➡️ Будете там же? Отмечайтесь в комментариях и увидимся на форуме!
🔥3