Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Лекция про основы Python #17

Closed
11 tasks done
Yorko opened this issue Mar 17, 2021 · 29 comments · Fixed by #70, #79, #80, #114 or #124
Closed
11 tasks done

Лекция про основы Python #17

Yorko opened this issue Mar 17, 2021 · 29 comments · Fixed by #70, #79, #80, #114 or #124
Assignees
Labels

Comments

@Yorko
Copy link
Collaborator

Yorko commented Mar 17, 2021

Ликбез про Python + как развернуть среду. Ничего сложного, ЦА – люди, вообще не знакомые с питоном.
Детального плана мы тут не делали. Лекция пойдет сюда в репу и на сайт qmlcourse.ai, но конечно, не на хабр.

Формат – JupyterBook (markdown).



@Yorko Yorko added enhancement New feature or request help wanted and removed enhancement New feature or request labels Mar 17, 2021
@Yorko Yorko added enhancement New feature or request and removed help wanted labels Mar 18, 2021
@Yorko
Copy link
Collaborator Author

Yorko commented Mar 18, 2021

Можно начать обсуждать, Игорь @stalkermustang тогда – главный автор, если никто (в том числе сам Игорь) не против – т.к. первый откликнулся.

@SemyonSinchenko
Copy link
Collaborator

Идеально еще пре-тест по теме, чтобы люди могли оценить свои навыки и понять, нужна ли им эта лекция.

@Hedgehogues
Copy link

Я на себя могу взять. Начал делать. На какой стадии данный раздел? Мой вижн:

  • Введение
  • Окружения для python, IDE и подготовка к работе
  • Стандартная библиотека и типы данных
  • Условия
  • Функции
  • Циклы и рекурсия
  • Структуры данных
  • Простейшие алгоритмы и O-o нотация
  • ООП
  • Качество кода

@stalkermustang
Copy link
Collaborator

stalkermustang commented May 12, 2021

Ребят, написал подробный проработанный план, чтоб чуть ли не прям садиться и делать (и был +- понятен скоуп каждого параграфа). Подразумевается, что каждый буллет здесь это 1-5 ёмких абзацев. Если есть какая-то микро-тема, которую я упустил - укажите, пожалуйста, иначе (вероятно) пропустим её :(

@Yorko @maruschin @sharthZ23 @SemyonSinchenko

давайте решим, что нужно вырезать, что делать в последнюю очередь (если время останется, например, про git)
По этим же пунктам в целом +- ясно, какие вопросы во вступительный тест утащить надо.

(!!!) В тексте стоят сноски, нужны ваши советы по поводу контента всего курса QML. Хорошо, если прошли какую-то тему и прям сразу показали на примере будущего когда, что там что обозначает. Мол, вот конструкция
qubits = [qml.GetQubit(params) for _ in range(n_cubits)], и в ней то и то означает вот это.

Детальный тезисный план блока по питону
  1. Вводное занятие про питон.
  • кем и для чего используется, в чем плюсы (easy to learn, hard to master - будьте аккуратны)
  • высокоуровневый язык для быстрой разработки
  • имеет множество библиотек (что это?), плюсы и выгода от этого (ml->qml, qrl, etc)
  • элегантный синтаксис (но в нем и сложность для новичка, легко запутаться и потеряться)
  1. Установка питона и poetry ( + git?)
  • как скачать проект с гита
  • (опционально) как поставить гит и пользоваться им (и зачем?)
  • ставим pyenv
  • ставим питон в pyenv
  • как установить poetry (Mac+Unix / Win)
  • как создать окружение из репозитория (ведь все наши зависимости, включая питон, зашиты в .toml ?)
  • проверка запуском Jupyter
  • проверка работоспособности каким-нибудь кодом (мол, скопируйте 3 ячейки и вставьте, если работает - кул)
  • Colab/аналоги (+ установка PennyLane), буквально пару слов для тех, кто не хочет/не может ставить питон
  1. Ориентация в Jupyter
  • что такое юпитер, в чем плюсы
  • ориентация по ячейкам и UI (создание, удаление, откат изменений)
  • режим редактирования и запуска
  • хоткеи
  1. Основы питона
  • базовые типы: int, float, str
  • базовые операции с числами
  • функция print
  • формат-строка, подстановка значений (видел, что есть в курсе)
  • лайфхак: табуляция для дополнения кода и уменьшения количества ошибок + просмотра подсказок
  1. Условные конструкции
  • тип bool
  • if/else, сравнение
  • операции сравнения, как можно получить bool
  • отступы в питоне как разграничители блоков кода
  1. Списки и циклы
  • list и его методы (len, append), in и not in
  • индексация
  • срезы по списку (почему не включительно правая граница)
  • цикл for и range для итерации
  • переход к итерации по объектам списка и объяснение генератора (Comprehensions)
  • (опционально) цикл while (когда лень считать или не знаешь кол-во итераций)
  1. Словари (опционально?)
  • dict и его методы (len, get, set - через скобочки квадратные, in)
  • для чего нужен, когда полезен
  • итерация по ключам, значениям
  • hashable
  • mutable/unmutable
  1. Промежуточные итоги (опционально?)
  • сводка по структурам, в общих словах что и когда использовать (диаграмма принятия решения? особенно если dict давать)
  • типовые конструкции (массив + цикл для заполнения массива, etc)
  • несколько примеров кода из курса, чтобы в будущем они были понятны (нужно выбрать, какие именно, хз)
  1. Функции
  • функции и их смысл: уход от копирования кода, повторение вычислений.
  • локальность переменных в функциях, снова про отступы и формат написания
  • примеры простейших и уже знакомых (print/type/str)
  • как объявить функцию, как использовать (про круглые скобки, вызов функции)
  • кейворды, аргументы функции
  • пустые скобки aka параметры по умолчанию
  • пример сложной функции с развилкой логики
  • функция для функций: декораторы и их смысл
  1. Классы и методы
    (будут ли сами классы юзать или достаточно описать поведение объектов?)
  • основы ООП: зачем классы?
  • что такое инстанс класса?
  • разбор list как объекта класса (или что-то другое выбрать)
  • (опционально) примеры интеракций классов (написать два класса)
  • атрибуты и методы, self
  1. Финальный блок
  • классы (атрибуты и методы) и функции/методы из библиотек (импорт стейта qml, чет такое видел, один глобальный объект)
  • типовые ошибки и их дебаг, анализ трейсбека ошибки? (хз, над надергать каких-то глупых ошибок и показать, как распарсить ошибку + как решить проблему)

@SemyonSinchenko
Copy link
Collaborator

@stalkermustang Выглядит круто!

Еще пара мыслей в голову пришла:

  • mutable/unmutable и hashable (просто в Pennylane дифференциирования реализовано так, что аргументы в QNode должны быть hashable и мы там будем юзать костыли типа tuple внутри которого массив или что-то такое, когда захотим ручками менять параметры). Пару слов, чтобы люди вообще втыкали зачем это и почему так криво
  • Colab и аналоги - буквально пару слов для тех, кто не хочет/не может ставить себе питон. Как в колаб установить PennyLane (остальное там все есть)

@vvssttkk
Copy link
Member

а про numpy где собираетесь писать?
а то примеры кода в первых лекциях на нем

@stalkermustang
Copy link
Collaborator

stalkermustang commented May 13, 2021

@vtrokhymenko
про нампай вроде как целый отдельный блок, который, полагаю, идёт сразу после обсуждаемого:
#18
потом ещё курс по базовому ML от Юры, если верно понимаю, и дальше уже попадаем в квантовый мир так скозатб

@vvssttkk
Copy link
Member

точно, не увидел его

@Yorko
Copy link
Collaborator Author

Yorko commented May 13, 2021

@stalkermustang отличный план, мне прям нечего особо добавить. Единственное, для глав 5-10 я бы по ходу давал простые примеры задачек в литкод-стиле, чтоб на деле показать, что зачем нужно. Пусть настолько просто, как сгенерировать члены посл-ти Фибоначчи. Но просто чтоб по ходу примеры были, а не чисто в теория отрыве.

@Yorko
Copy link
Collaborator Author

Yorko commented May 13, 2021

Во, кстати, я несколько лет назад читал в Вышке курс по питону, немного с алго и структурами данных. Можно какие-то задачи отсюда подрезать https://github.com/Yorko/python_intro.

А ещё в п. 2, может, ещё пару слов про IDE рассказать. Холиварчик, конечно, PyCharm или VSCode, но можно какую-то из них вкратце, чтоб люди понимали, где код пишется. Заодно в последней главе про дебаггинг пригодится.

@Yorko
Copy link
Collaborator Author

Yorko commented May 13, 2021

И последнее: по ходу, как будешь материал готовить, можно набросать вопросов 7-8 для теста на входе #29. То же самое сделаем с NumPy/математикой и базовым ML.

@stalkermustang
Copy link
Collaborator

@Yorko идея оч хорошая, но я хотел пойти даже дальше (собсна, поэтому хотел вашего вовлечения :) ) - разбирать куски кода со следующих модулей. Вот например QRL, объявление класса среды, оп, класс агента, вот у него методы, туда сюда.

Но если там еще мало чего готово или это много времени займет - то ок, тогда конечно примеры будут, тут без вопросов. За ссылку спаиб, гляну.

Про IDE и дебаг - я на самом деле хотел рассказать про принты и чтение трейсбека, а не именно дебаггер. Это точно не quick start будет :) мб потом допишем, хз

про тест - да, как написал выше, из этого плана уже +- понятно, что дергать, какие вопросы составлять. Думаю, что за него можно сесть в последнюю очередь, когда модуль готов будет (это, во первых, логично, чтобы программу проверить, а во вторых горит меньше всего, ведь их не надо записывать на видео).

@Yorko
Copy link
Collaborator Author

Yorko commented May 13, 2021

Ладно, про дебаггер в IDE не обязательно, правда, но как начать проект в IDE – это я бы показал. А то будут потом на винде IDLE открывать :el_risitas:

@Yorko
Copy link
Collaborator Author

Yorko commented May 13, 2021

Да, пожалуй во введении в Python разбирать QRL – лишка. Но я подумаю, можно во введении в ML рассмотреть реализацию, скажем SGD-классификатора, заодно показать ООП и всё такое.

@stalkermustang
Copy link
Collaborator

ну я не имел в виду прям запускать и прочее, а показать, что вот этот сниппет кода означает. Тут объект agent - это инстанс класса Agent, в нем методы 1 2 3 4. В методе 3 вот есть генератор с условием if. Тип такого (хз что там дальше в курсе)

@stalkermustang
Copy link
Collaborator

Тэк, и еще я с poetry не работал, план по установке я просто нагуглил. Все с ним согласны? мб как то лучше можно сделать (готовый .sh скачать, который сразу всё ставит/етц).

Как вы ставили, как разворачиваете окружение? @Yorko @SemyonSinchenko

@Yorko
Copy link
Collaborator Author

Yorko commented May 13, 2021

Мне просто pipenv/Docker хватает, poetry тоже не юзал. Так что, может, Семён тут что добавит.

@SemyonSinchenko
Copy link
Collaborator

SemyonSinchenko commented May 14, 2021

Ну типа poetry более "правильный" в плане работы с зависимостями. По крайней мере все так говорят. Типа .toml это "новый стандарт". В целом мне на самом деле все равно).

Там полторы команды на самом деле чтобы установить все из готового .toml.

Про docker "для разработки" не знаю ничего, так как не разделяю идею хранить ~1.5 Гб барахла под каждое окружение (у меня диск всего 256).

@stalkermustang
Copy link
Collaborator

Начал работу в #70 , там вкратце рассказывается про питон (на 10-30 минут)
Соответствует пункту 1 плана:

Вводное занятие про питон.

Пункт 2 (про установку poetry + jupyter) пока пропустил.
Пункт 3 "Ориентация в Jupyter + интерфейс" почти доделал, сейчас немного переверстываю + переношу в MD.

Дайте, пожалуйста, фидбек по первой пробной части, по стилю написания, обрамлению, etc, чтобы я понимал, в каком формате давать материал. Ориентировочно к среде выложу 3й блок.

@SemyonSinchenko
Copy link
Collaborator

@stalkermustang Мне оч нравится! Приятно и легко читать, стиль 👍

@Yorko
Copy link
Collaborator Author

Yorko commented Jun 15, 2021

Годно! Я в самом PR #70 дал фидбек

@SemyonSinchenko SemyonSinchenko added lecture and removed enhancement New feature or request labels Jul 27, 2021
@stalkermustang
Copy link
Collaborator

Пажите а почему Issue закрыто?

@stalkermustang stalkermustang linked a pull request Jul 29, 2021 that will close this issue
@SemyonSinchenko
Copy link
Collaborator

Пажите а почему Issue закрыто?

PR смержили оно и закрылось

@vvssttkk
Copy link
Member

vvssttkk commented Aug 3, 2021

про while собираетесь рассказывать?

@stalkermustang
Copy link
Collaborator

про while собираетесь рассказывать?

image
включено в план

@vvssttkk
Copy link
Member

vvssttkk commented Aug 3, 2021

про while собираетесь рассказывать?

image
включено в план

спс, план скрытый, вот и прошляпил

@stalkermustang stalkermustang linked a pull request Aug 3, 2021 that will close this issue
@stalkermustang
Copy link
Collaborator

stalkermustang commented Aug 4, 2021

@vtrokhymenko как то можно сделать чтобы оно не закрывало его каждый раз с новым MR? при том что вообще то висит еще один открытый (по 6й лекции), и правила переноса не должны срабатывать

@stalkermustang
Copy link
Collaborator

/reopen

@stalkermustang stalkermustang reopened this Aug 4, 2021
@stalkermustang stalkermustang linked a pull request Aug 4, 2021 that will close this issue
@vvssttkk
Copy link
Member

vvssttkk commented Aug 4, 2021

@vtrokhymenko как то можно сделать чтобы оно не закрывало его каждый раз с новым MR? при том что вообще то висит еще один открытый (по 6й лекции), и правила переноса не должны срабатывать

можно, но для этого нужно создать родительский issue, где прописать отдельные дочерние (вот видео для примера)

@vvssttkk vvssttkk linked a pull request Aug 5, 2021 that will close this issue
@stalkermustang stalkermustang linked a pull request Sep 20, 2021 that will close this issue
@vvssttkk vvssttkk reopened this Sep 24, 2021
@vvssttkk vvssttkk removed a link to a pull request Sep 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment