C#razy
99 subscribers
215 photos
46 videos
2 files
345 links
Путь в IT, рост, менторство, поддержка, прокачка, мотивация

👨‍💻 Senior .NET dev с 12+ лет опыта
📚 Учусь в MIT по Computer Science
🖥 100+ дней подряд LeetCode
⚒️ Работаю на зарубеж
💻 Веду блог про рост в IT с нуля
🧭 Помогаю понять, куда двигаться
Download Telegram
#devops #vacancy

Девопсы, эта вакансия для вас

🔵 Требования:
- опыт работы на коммерческих проектах от 2-х лет;
- опыт работы в качестве DevOps-инженера или Linux-администратора с задачами #DevOps;
- опыт работы с #Kubernetes, #Helm, #Docker, #Containerd;
- опыт работы системами сборки и деплоя (#Gitlab CI, #Teamcity, Octopus Deploy);
- опыт работы с системами Configuration Management (#Ansible, #Chief, #Puppet);
- опыт работы с системами мониторинга, логирования и визуализации (#Zabbix, стек ELK, стек Prometheus -Grafana);
- опыт написания автоматизаций на #Bash, #Python/ #Go/ #Java.

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

Компания:
Aston, https://astondevs.ru/

#вакансии

💡 Канал | 💬 Чат
Python + GitHub -> Backdoor/Malware

Backdoor — скрытый способ доступа к системе, обходящий авторизацию и аутентификацию и всё такое.
Malware — вредоносный код, который выполняет нежелательные действия, такие как кража данных, повреждение файлов или передача контроля над системой злоумышленнику.


12 ноября 2024 была попытка backdoor посредством невинного на первый взгляд pull request. Основная мишень для злоумышленников — популярные Python-библиотеки и фреймворки от которых зависит огромный сегмент разработки. Оно и понятно Python сейчас на коне.

Pull request с простым названием пытался изменить файл на Python, добавив в него некую последовательность чисел. Каждое из этих чисел представляло собой символ Unicode, то есть Python-код был попросту преобразован в числовой эквивалент. Дальше последовательность символов в итоге превращалась в фрагмент кода. Дальше код используется для попытки подключения к сайту для перехода атаки в следующую фазу.

Сложно? - Нет.
Доступно? - Да.. и эта фича языка Python. Шутки которые вышли из под контроля.

Самое грустное что такие PR получали аппрувы и.. дальше вы сами понимаете. Есть кейсы что такие PR побывали в master/main ветках 😮

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

📎 Ссылки: xakep, github

#python
#github
#backdoor

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Python Package Index крадет AWS ключи

Вредоносный пакет PyPI под названием "Fabrice" был активен на платформе более 3 лет. Его скачали более 37 000 раз. Он крадет учетные данные AWS и выполняет другие вредоносные действия.

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

Как это работает?
Выполняет вредоносные действия в зависимости от операционной системы.
Linux: Он использует специальную функциональность для загрузки, декодирования и выполнения различных shell-скриптов с внешнего сервера.
Windows: Извлекаются и выполняются две разные полезные нагрузки: по VBS-скрипт и Python-скрипты.
Далее пакет как бы крадет AWS учетные данные используя Boto3 AWS Software Development Kit (SDK) для Python, и отправляют информацию на сторонний сервер.

Эта схема оставалась незамеченной, пока команда кибербезопасности не провела детальный анализ пакетов в PyPI. Они обнаружили, что «fabrice» — лишь верхушка айсберга. Подобные вредоносные пакеты активно внедряются в экосистему Python, чтобы красть данные и компрометировать проекты разработчиков.

📝 Итого:
1. Кодишь на Python - проверяй двойнее
2. Доверяй, но проверяй и смотри пункт 1

Ссылки: xakep.ru, securitymagazine.com, thehackernews.com

#aws
#python
#сybersecurity

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
This media is not supported in your browser
VIEW IN TELEGRAM
Как я отпраздновал 03.14

Современный мир требуют современное искусство.

Да-да это python. Я даже проникся как местами просто. НО pip и pip3 и какая то не совместимость с brew. Количество приседаний было утроено чтобы сделать рендеринг

#python
#ascii
#rendering
#pi

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍1🔥1
Ищу единомышленников. Пошёл в MIT.
Старт - уже на этой неделе!




Решил не откладывать и пошёл в MIT. Онлайн-курс, Python, основа Computer Science.
Хочу подтянуть фундамент, начать думать, как думают в топовых местах разработки.


MIT - это самый Массачусетский технологический , где варятся умные головы, которые потом запускают ракеты, делают стартапы, там делают ИИ, работают над квантовыми вычислениями или преподают.


➡️ Курс здорового человека
Название: "Introduction to Computer Science and Programming Using Python"
Платформа: edX
Ссылка: MITx
Обучение: бесплатно
Сертификат MITx: $100 (со скидкой). Я буду его брать в любом случае

➡️ Почему стоит залететь со мной
1⃣ Это инвестиция в себя
2⃣ MIT - если уж учиться, то у лучших
3⃣ Наконец разобраться в Python, а не просто писать скрипты
5⃣ Подтянуть основы Computer Science и системное мышление
5⃣ Базовый английский пригодится (всё на английском, но есть субтитры — заодно подтянем)
6⃣ Ну и просто проверить себя - могу ли я дойти до конца
7⃣ MIT за 100$ (опционально) и это будет как минимум в резюме/CV будет красиво


➡️ Насколько это по времени
Заявлено: 12 часов в неделюю По факту - можно пройти быстрее, особенно если делать стабильно
Python и CS можно с нуля - подойдёт даже новичкам


Стартуем уже на этой неделе
Если давно хотели, но всё откладывали - вот знак 🧙🏻‍♂️ <——
Я точно иду и зову вас со мной
Можно проходить вместе: обсуждать, делиться инсайтами, созваниваться и не сдаваться на середине.



Погнали? 🚀

*UPD:
Больше инфы в комментариях

Ссылка: https://www.edx.org/learn/computer-science/massachusetts-institute-of-technology-introduction-to-computer-science-and-programming-using-python

это код SMARTEDX25 скидка 30%
это код NEW2EDX скидка 30%

Группа по MITx 6.00.1x: MITx6001x

#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍2
Я программист с 12+ лет опыта и я не знаю Python

Вообщем, я не знаю Python, но я умею делать мемчики с ним))

Пишу на C#, строю бэкенд, оптимизирую, продакшн - огонь, но мне не стыдно признать, что я не знаю Python, я чего-то могу не знать и это ОК!1

Невозможно знать всё, да и это не всегда даже нужно или может даже не применительно на практике или в жизни.
Честно в IT каждый знает свой кусочек и это тоже нормально!
Вообщем ребята не знать не стыдно 🫠

Большинство думают, что Python все знают, даже я его интуитивно понимаю. Однако, писать код и читать это разные вещи. По сути это как говорить: что все говорят на Испанском и что его легко выучить, вроде даже понятный)

Вообщем недавно я открыл для себя Python. И скажу честно:
🐍 Он прост и пугающь одновременно 😅 и это только начало, а я ещё не пристегнулся))

Вот примеры, которые меня реально удивили:
3 * "bc"           # 'bcbcbca' - что это?
"abcd"[:] # LOL просто копия строки
"abcd"[:777] # просто вывод всей строки О_о
"0123456789"[0::2] # '02468' - каждый второй символ, изящно удобно
"python"[::-1] # 'nohtyp' - реверс строки, невероятно


to be continued

#humour
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Обучение в MIT: Первая секция


➡️ UNIT 1
В первой секции дали отличную базу по Computer Science - сразу с интересного примера: вычисление квадратного корня. Это не просто "изучим print и пошли дальше", а объяснение, почему это работает так, как работает. Подход прямо зашёл.

Ну и конечно когда изучаешь что то новое сравниваешь с тем что уже знаешь. При написание кода всегда писал так как привык на своих языках программирования которые знаю. Тут иначе)
За один лишний пробел в начале можно получить ошибки или неправильное поведение 🫠
Скриптовый язык какой он есть, но в этом и простота и лакончиность.


Первый модуль - скорее разогрев: быстро прошлись по if, while, for и базовым типам данных, всё с понятными задачами и регулярным закреплением. Не как в некоторых курсах, где 10 уроков про if, а потом ещё 20 про циклы дальше десяток закреплений для while.
Ну камон - циклы плюс-минус они одинаковые везде начиная от Pascal, C# и даже в SQL


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


🧙🏻‍♂️ Не пожалел, что начал. Вход очень комфортный, всё логично и по делу. Конечно, у меня есть преимущество благодаря опыту, но даже новички не будут отставать - материал даётся с темпом, но без перегруза. И это круто: сразу получаешь свою дозу дофамина от прогресса. Остальное добираешь в chatgpt и всё ок.


Финальные задания юнита уже подводят к следующему этапу - к алгоритмам.
Это чувствуется: упражнения не просто на знание синтаксиса Python, а на построение логики, принятие решений и анализ.

➡️ и да язык разработки - это просто инструмент, а настоящее обучение в Computer Science начинается с того, как думать как инженер, как строить алгоритмы, как решать задачи.

➡️ Итого
- Знания Python не нужны
- До 13 июня нужно закончить первую секцию
- Тратится НЕ 12-14 часов в неделю


#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🙏1
Обучение в MIT: Вторая секция


UNIT 2
Пристёгиваемся - разогрев закончился, начинается настоящее обучение 😎

➡️Уже чувствуется как по времени так и по сложности сама секция. После каждой лекции - задания на закрепление. И они реально заходят: помогают переварить материал и попробовать всё на практике.

➡️Начали давать базовые алгоритмы и это чувствуется, что нас постепенно подводят к более сложным концепциям. Апроксимация: линейная и бисекции - он же бинарный поиск. Не пугаемся там всё разжёвывают 😉

➡️Как хранятся дробные числа в компьютере (float) и почему нельзя на них всегда полагаться при точных вычислениях 🔥

➡️Освежил в памяти перевод чисел в двоичную систему - делал это лет 20 назад, было забавно вспомнить

➡️Познакомились с методом Ньютона (методом касательных) - на его примере считали квадратные корни. Один из первых «настоящих» алгоритмов в курсе.

➡️Дальше учились делать код чище. От "портянок" перешли к структурированному коду

➡️Учились декомпозировать, разбивать задачи на части, выносить логику в функции, распределять по файлам 💪

➡️Появилось понимание области видимости (scope) переменных, по сути, это про время жизни и зону действия переменной в программе.

➡️Делается акцент на комментарии, это прям очень круто, что с самого начала прививают культуру читаемого кода. Прямо респект авторам курса!

➡️Рекурсия и тут начинается веселье ребята 🤓
Добро пожаловать в ад начинающего разработчика - это мать рекурсия 🫣
Разбирали задачу про Ханойскую башню - и да, это больно, если раньше с таким не сталкивался 😭


➡️ Но главное, чему учат
Искать паттерны, начинать решение с простых входных данных
Учиться разделять проблему на подзадачи
Не бояться отступить и передумать подход, удалить всё и переписать 😅 - это тоже часть алгоритмического мышления.

➡️ Финальная проверка по Unit 2
В конце - контрольная работа с 3 задачами. Каждая задача сложнее предыдущей, это значит, что последняя задача прямо неплохая. Последняя по сути - это LeetCode и если бы они удали формулы😅 тогда это уровень Easy, но если ты совсем новичок в программировании, будет непросто.

➡️ Совет
1⃣ Не бойтесь обращаться к интернету или ChatGPT (это нормальная часть обучения) НО после просмотра лекции, чтобы закреплять материал, по сути мы рассматриваем частные случаи и их довольно много, но случаи выбираются самые показательные в лекциях.
2⃣ Не списывайте с инета или с ai чатов, это бестолку или в крайнем случае дальше вы просто не сможете решить следующие задачи. Сейчас строится фундамент для дальнейших секций. Мы не идём в параллель, где можно пропустить что-то и бог с ним, как в теории вероятности 😅, мы идём базируясь на том что выучили в прошлой секции.
3⃣ Выбирайте тот вариант который вам подходит для запоминания.
5⃣ Главное - понимать, а не просто копировать.

- Не обязательно решать всё идеально!!
- Курс не оценивается по баллам, здесь система зачёт / не зачёт.
- Чтобы пройти Unit, достаточно набрать чуть больше половины баллов. Так что не загоняйтесь.
- У каждого разный старт и база. Кто-то решает больше, кто-то меньше. Каждый бежит со своей скоростью.


➡️ Итого
Повторили основы, освежили математику, начали писать осмысленный код, залезли в рекурсию.
Курс начинает потихоньку чувствоваться как настоящий Computer Science фундамент и это только начало 😉
Так что, поехали дальше.

#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍321
Обучение в MIT: Третья секция


UNIT 3
Tuple, List, Dictionary и один шок из мира Python
Типы, типы вокруг одни типы

Делюсь впечатлениями от третьей секции курса 6.01 Introduction to Computer Science and Programming in Python от MIT. Как C#-разработчик, я знал, что Python - язык с "мягкими границами". Но не думал, что меня так быстро что-то удивит. И вот привет и я ошибся. Так что знания C# уже как бы начинают мешать порой)


➡️ Tuple vs List - что это вообще и почему я в шоке
Секция начинается с введения в коллекции - именно тех кирпичиков из которых в Python строят структуры данных.

Tuple - кортежи, неизменяемые "контейнеры"
List - списки, изменяемые, гибкие и местами очень «жидкие» по сравнению с массивами в C#

ШОК, по Tuple можно итерироваться 😲 и это работает ребята
for item in (1, 2, 3):
print(item)


🤯 В C# Tuple - это просто обёртка на два-три значения с имёнами вроде Item1, Item2. Ни о каких итерациях речи нет. В Python Tuple короче буквально как список. Просто ты его не можешь изменить. У Python своё видение на "контейнеры". Своеобразное, но удобное, не привычно вообщем



➡️ Изменяемость vs Неизменяемость
Разработчики, особенно с опытом в строго типизированных языках, поначалу могут запутаться:

Tuple - неизменяемый (immutable)
List - изменяемый (mutable)
Вообщем все эти типы - ссылочные, поняли, были, проходили
a = [1, 2, 3]
b = a
b.append(4)
print(a) # [1, 2, 3, 4]

Для тех кто не в курсе: a тоже изменился, потому что и a и b указывают на один и тот же список. Это очень похоже на поведение ссылочных типов в C#, но с одним отличием - в Python почти всё ссылочное. Даже int и str - ссылочные, просто они неизменяемые 😳

⚠️ Изменяемость нужно держать в голове. Особенно если ты решаешь задачи и используешь .append() или .sort() - можно ненароком модифицировать структуру, о чём потом будешь жалеть (и дебажить долго). Но в C# всё так же, но не во всех языках



➡️ А теперь король Dictionary
dict = {"key": "value"}

Всё просто, но мощно. Особенно для задач на LeetCode

Эту вещь надо писать часто в задачах
counts = {}
for num in nums:
counts[num] = counts.get(num, 0) + 1



➡️ Задачи и практика
После каждой темы - закрепляющие задачки.
Они не просто "для галочки" реально заставляют понять, где у тебя пробелы в понимании. Ну и в конце, задача про подсчёт налогов 🙉


➡️ Итого
Секция 3 - это та самая секция, где Python перестаёт быть просто "ещё одним языком". Ты видишь, как много всего можно делать мало кода ну и насколько важно понимать, что mutable/immutable и ссылочные типы.

Для меня, я пришёл из мира C#, то мне не много странно ну и круто в тоже время. в Python всё ещё легко ошабиться и ошибиться, но продолжаем работать 😎


#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Обучение в MIT: Четвёртая секция


UNIT 4
Programming Challenges & Debugging

Делюсь впечатлениями от четвёртой секции курса 6.01 Introduction to Computer Science and Programming in Python от MIT.

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

Один из ключевых блоков - Classes of Tests, включая концепции "чёрного ящика" (black-box) и "стеклянного ящика" (glass-box).

Black-box тестирование - это подход, при котором ты проверяешь систему, не зная, как она устроена внутри. Представь, что тебе дали API и ты просто должен понять, что оно делает, подавая различные входные данные и анализируя выход.

Glass-box (или white-box) тестирование - это противоположность. Ты видишь внутренности системы: циклы, условия, ветвления. Такой подход помогает проверить, покрыты ли все ветки кода, правильно ли работают крайние случаи и насколько всё логично устроено изнутри.

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

Отдельное внимание в секции уделяется Debugging. Казалось бы, что может быть проще - поставил точку останова (брейкпоинт), посмотрел стек вызовов и вперёд. Но всё гораздо глубже.

➡️ В Debugging хорошо раскрываются реальные сложности
Баг может быть неопределённым во времени (например, гонка потоков);
Он может проявляться только на проде (а у тебя нет логов);
Или воспроизводится только при определённой комбинации входов, которые ты даже не подумал проверить.

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

Я бы сказал, что эта секция учит не кликать по кнопкам IDE, а развивать в себе "Шерлока" внимательного, логичного, системного. Это тот самый навык, который отличает хорошего инженера от того, кто просто пишет код.

#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻4🔥31
Обучение в MIT: Первый экзамен


Midterm exam

Делюсь впечатлениями от сдачи первого экзамена 6.01 Introduction to Computer Science and Programming in Python от MIT.

➡️ Экзамен, на который не нашлось времени
У курса есть midterm экзамен - на него выделяется 8 часов, но доступен он несколько дней. Ну и как это обычно бывает: времени не было, поэтому сел в последнюю ночь без особой подготовки 🙉
Кратко повторил, освежил в памяти пару тем и пошёл вывозить на своих знаниях 😅

➡️ Теория и логика: как по мне кайф
Всего попалось 22 вопроса из них где-то 5 практических задач.
Первая часть - теоретическая и мне она очень зашла. Вопросы были не на банальное угадай-слово, а на понимание Python и логики работы программ. Методом исключения пройти не выйдет это прям хорошо. Всё нужно осознанно продумать. Прямо удовольствие получил, пока проходил эту часть. Прошёл её довольно быстро.

➡️ Тесты с множественным выбором
А вот дальше началось веселье с множественным выбором, где если хотя бы один вариант неверен - весь вопрос = 0 баллов. Прямо с двух ног влетел: был вопрос на 3 балла с 6 вариантами ответа - выбрал, как думал правильно… и получил 0 🫣

Со следующим та же история.
Потом уже собрался с мыслями и начал внимательно читать каждый пункт, взвешивать и проверять.
Стал подходить как к код-ревью и результаты улучшились. P.S. Теперь понимаю, зачем дают 8 часов не потому что сложно, а потому что нужно вдумчиво 😉

➡️ Практикая часть
Потом пошли практические задачи. Как я понял выпадают полный рандом
У меня было:
Рекурсия, разобрался быстро.
Доработка чужого кода, вот тут потерял время.
Пытался понять "а зачем они это так сделали и как это работает? 😅" короче профдеформация. Минус 15 минут.
Хорошо, что не учитывалис попытки и можно было прогонять да и плюс тесты показывались, чтобы пофиксить код
Задача с удалением данных из списка по условиям, мини-алгоритмическая, справился легко.

Потом были задачи без тест-кейсов. Пиши код и гадай, почему не проходит 😄
Зато они оценивались в 10 баллов. Даже если не всё работает, но часть проходит можно получить 2–5 баллов. Это круто.

Последнюю задачу пришлось полностью переписать, но в итоге она тоже сдалась.
На всё ушло 1 час и 16 минут. Можно было медленнее и это было бы правильнее, но мне нужно было просто сдать 😅 иначе я не успевал

➡️ Итого
Не всегда надо отвечать и бежать на 100%. Цель тут это просто пройти и закрепить знания.
Python, это не зубрёжка как в универе или в школе, а понимание логики, структуры и подходов.
MIT делает хорошие задания: не банальные, а те, которые развивают.
В любом случае, я многое повторил, кое-что усвоил, кое-что нет и это нормально, что то уже забыл 🥲
Главное это не останавливаться и стараться понимать, а не просто запоминать.
Решай задачи на рекурсию, генераторы, работу со строками и списками они встречаются часто.
Не бойся делать ошибки. Главное разобраться, почему НЕ РАБОТАЕТ 🥹
Ну и на последок, не оставляй экзамен на последнюю ночь, как я 😅

#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Обучение в MIT: Пятая секция

Уже скоро получим сертфикаты ребята

UNIT 5
Object Oriented Programming

Делюсь впечатлениями от пятой секции курса 6.01 Introduction to Computer Science and Programming in Python от MIT.

В этой части началось знакомство с ООП (объектно-ориентированным программированием). С одной стороны - ура и ужас с другой это множественное наследование в Python 🙉 может вызывать диссонанс, особенно если ты до этого писал на C# или на С++(а я писал и знаю к чему приводит множественное наследование)

🧱 Что такое ООП и зачем оно нужно?
ООП (объектно-ориентированное программирование) - это такой подход, при котором мы моделируем программу через объекты - экземпляры классов. Эти объекты хранят данные (поля) и поведение (методы). Повышается структурность и это классика: инкапсуляция, наследование, полиморфизм



➡️ Множественное наследование
class Animal:
def speak(self):
return "Some sound"

class Flyer:
def fly(self):
return "Flying high"

class Bird(Animal, Flyer): # множественное наследование
def speak(self):
return "Chirp"

b = Bird()
print(b.speak()) # Chirp
print(b.fly()) # Flying high

При совпадении методов работает MRO (Method Resolution Order) - сначала ищется в классе, затем по порядку наследования.


Наследование нормального человека
class Animal
{
public virtual string Speak() => "Some sound";
}

class Bird : Animal
{
public override string Speak() => "Chirp";
}

var bird = new Bird();
Console.WriteLine(bird.Speak()); // Chirp

В C# нет множественного наследования классов (только интерфейсы). Всё строго, понятно и предсказуемо.



➡️ Конструктор
и в Python он только один 😱
class Dog:
def __init__(self, name):
self.name = name

def bark(self):
return f"{self.name} says woof!"

d = Dog("Rex")
print(d.bark()) # Rex says woof!

__init__ - это конструктор, вызывается при создании объекта.
self - ссылка на текущий экземпляр.



➡️ Методы vs функции: в чём разница?
Функция - самостоятельный блок кода и не привязан к объекту.
Метод - функция, которая внутри класса и работает с данными объекта.


➡️ Генераторы
тут также как C# всё довольно понятно, но тут как то скучно и примитивно, у нас (C#) это сделано гораздо прикольнее и есть всякие async foreach и трюки


➡️ Итого
Unit 5 - это первая настоящая архитектурная тема в MIT-курсе. Всё становится ближе к тому, как пишется код в реальных проектах. Немного больно от Python (множественное наследование, self, отсутствие типов), но мозг включается и перестраивается. Надо ли оно мне, узнаем позже)

Если ты хочешь расти вместе, проходи курс, пиши, как ты справляешься с ООП - особенно если ты из C# мира, как и я.


#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👾3🥴11
Обучение в MIT: Шестая секция

UNIT 6
Algorithmic Complexity and Sorting

Делюсь впечатлениями от шестой секции курса 6.01 Introduction to Computer Science and Programming in Python от MIT.

Ну вот, наконец-то ну. После первых пяти секций начинается то, что у меня ассоциируется с настоящим Computer Science. В этой секции Algorithmic Complexity, и это как раз про то, как быстро или медленно работают наши алгоритмы.

➡️ Что такое Algorithmic Complexity?
Это способ оценить эффективность алгоритма, чаще всего в зависимости от размера входных данных (n) Основной инструмент - Big-O нотация. Она показывает, как сильно увеличится время работы алгоритма или используемая память при росте данных.

➡️ Основные виды сложности (Big-O)
1. O(1) — константная
   def get_first_element(arr):
return arr[0]

Сколько бы элементов ни было - всегда одно действие изи вообщем

2. O(log n) - логарифмическая
   def binary_search(arr, target):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1


Пример - бинарный поиск. Отсортируйте данные

3. O(n) - линейная
   def find_max(arr):
max_el = arr[0]
for el in arr:
if el > max_el:
max_el = el
return max_el

Нужно пройтись по всем элементам.

4. O(n log n) - почти "линейная"
Пример - быстрая сортировка, сортировка слиянием.
   arr.sort()  # Python Timsort (O(n log n))


5. O(n²) - квадратичная и дальше это уже полиномиальная
   def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr

Вложенные циклы по всем элементам - медленно.

5. O(2ⁿ) - Экспоненциальная сложность
Ханойская башня и флэшбэки 🙉
def hanoi(n, src, aux, dst):
if n == 1:
print(f"Move {src} → {dst}")
return
hanoi(n-1, src, dst, aux)
hanoi(n-1, aux, src, dst)



➡️ Сортировки - какими пользуемся?
Та которая есть по дефолту в коробке 😅

В реальной жизни все почти всегда используем встроенные методы (sorted() или list.sort() в Python) и работают в среднем за O(n log n).

Классические алгоритмы (QuickSort, MergeSort, BubbleSort) чаще изучаются для понимания
Алгоритм    | Time        | Space
------------|-------------|----------
Bubble sort | O(n^2) | O(1)
Insertion | O(n^2) | O(1)
Selection | O(n^2) | O(1)
Merge sort | O(n log n) | O(n)
Quick sort | O(n^2) | O(log n)


➡️ Что такое Space Complexity?
Это оценка того, сколько дополнительной памяти требует алгоритм помимо входных данных.
O(1) - константная: используется фиксированное количество памяти (сортировка выбором).
O(n) - линейная: нужно место, пропорциональное размеру входных данных (merge sort).

#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥21
Обучение в MIT: Седьмая секция

Заключительная 🦾

UNIT 7
Plotting рисуем графики быстро не отходя от кассы

Делюсь впечатлениями от последней седьмой секции курса 6.01 Introduction to Computer Science and Programming in Python от MIT.

Ну вот и финиш, остался только экзамен.

➡️ Почему и как использовать import pylab as plt?
import pylab as plt - удобный способ работать с графиками и визуализацией данных в Python.

➡️ Что такое pylab?
pylab - модуль, объединяющий возможности matplotlib (для построения графиков) и numpy (для работы с массивами и математикой). Импортирую pylab других и не знаю пока 😅,

➡️ Зачем это нужно?
* Быстро создавать красивые графики - линии, точки, гистограммы, диаграммы.
* Делать математические вычисления перед визуализацией.

➡️ Основные функции `plt`:
* plot() — рисует линии и графики
* scatter() — точечный график (диаграмма рассеяния)
* bar() — столбчатая диаграмма
* hist() — гистограмма распределения
* xlabel() и ylabel() — подписи осей X и Y
* title() — заголовок графика
* legend() — легенда для нескольких линий
* grid() — отображение сетки
* clf() — очищает текущее окно графика (для перерисовки новых данных)
* show() — выводит график на экран

Всё довольно просто, честно я в восторге что так просто
в C# в WPF нужно было много выпить разного и плюс этом танцевать с бубном

➡️ Пример
import pylab as plt

plt.figure(figsize=(10,6))

# Буква M
x_m = [0, 0, 1, 2, 2]
y_m = [0, 5, 2, 5, 0]
plt.plot(x_m, y_m, linewidth=10, color='red')

# Буква I
x_i = [5, 5]
y_i = [0, 5]
plt.plot(x_i, y_i, linewidth=10, color='blue')

# Буква T
plt.plot([7,10], [5,5], linewidth=10, color='green')
plt.plot([8.5,8.5], [0,5], linewidth=10, color='green')

plt.title('MIT', fontsize=24, weight='bold')
plt.show()


#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Обучение в MIT: Финальный экзамен

Final Exam
Ну всё пристёгиваюсь и сдаю, пока сдавал забыл как работать с tuple в Python 😅😅

Делюсь впечатлениями от экзамена в 6.01 Introduction to Computer Science and Programming in Python от MIT.

Экзамен, как обычно, сдавал в самый последний день и снова ночью😅. Задачи были классные - я не набрал 100%, но это не главное. Пару вопросов завалил, а задачи решал порой интуитивно, порой писал так называемый "быдло код"

➡️ Что такое "быдло код"?
Это код, который написан быстро и грубо, без особого внимания к структуре, стилю и чистоте. Главное, чтобы работал и проходил тесты))) а что ещё надо. Такой код почти всегда не оптимален или страшен с виду), но помогает быстро решить задачу и двигаться дальше. Иногда именно так приходится работать, особенно под дедлайны или когда нужно быстро проверить идею ну или проходить экзамен 🙉


По сути, теперь остаётся только ждать сертификат) Условия выполнил

Самое главное, со мной впрыгнули ребята которые уже прошли экзамен и все секции и да быстрее меня 🦾🦾


#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Обучение в MIT: Cертификат и отзыв

Делюсь впечатлениями от пройденного курса 6.01 Introduction to Computer Science and Programming in Python от MIT.

➡️ Мои впечатления о курсе
Понравился ли мне курс? - Да!
Это была отличная вводная часть в Python и Computer Science. Было ли легко? В целом да, но местами встречались интересные и сложные моменты. Задачи были прикольными - иногда они напомнили мне время учёбы в университете.

Мы прошли много тем из области Computer Science некоторые давали базу довольно быстро. С этой базой уже можно работать, искать дополнительную информацию и дополнять знания с ChatGPT

Мы - это значит что нас было 5 человек +/- 2
Нас была команда)


У меня не было стремления просто пройти курс ради сертификата я хотел именно получить знания по Python. И Python действительно оказался несложным, но это пока 🫠. Мы изучили простые подходы, по сути кирпичики для дальнейшего построения знаний.

Сейчас я понимаю, как работает код в Python, что куда и как вызывается примерно знания думаю на уровне школьника 🫣, но это отличная база. И да, конечно, я планирую двигаться дальше

Продолжение курса начнётся уже в ноябре версия 6.00.2x Там будет продолжение и более глубокое погружение в CS. Кстати, классно, что дают паузу между курсами время отдохнуть, осмыслить пройденное и решить оно вообще надо или стоит ли идти дальше. Но я уже принял решение и записался на следующий курс 🦾

Если интересно погнали вместе!

P.S.: Уже добавил его в LinkedIn 😋

📎 Пруф: MITx | edx

#mit
#обучение
#python

💡 Channel | Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥821