├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── bp.sh ├── dist ├── assets │ └── img │ │ ├── favicon.ico │ │ ├── profile.jpg │ │ └── python.png ├── css │ └── styles.css ├── index.html └── js │ └── scripts.js ├── package-lock.json ├── package.json ├── scripts ├── build-assets.js ├── build-pug.js ├── build-scripts.js ├── build-scss.js ├── clean.js ├── render-assets.js ├── render-pug.js ├── render-scripts.js ├── render-scss.js ├── sb-watch.js ├── start-debug.js └── start.js └── src ├── assets └── img │ ├── favicon.ico │ ├── profile.jpg │ └── python.png ├── js └── scripts.js ├── pug ├── index.html └── index.pug └── scss ├── _global.scss ├── _variables.scss ├── components ├── _icons.scss └── _sidenav.scss ├── sections └── _resume-section.scss ├── styles.scss └── variables ├── _colors.scss ├── _grid.scss ├── _spacing.scss └── _typography.scss /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 4 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .idea 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Start Bootstrap LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Learn Python Road Map 2 | 3 | https://pymentor.org 4 | 5 | ### Steps to build 6 | 7 | - `npm install` - downloads all required deps 8 | - `npm run build` - builds the project - this builds assets, HTML, JS, and CSS into `dist` 9 | - `npm run start` - runs the project, launches a live preview in your default browser, and watches for changes made to files in `src` 10 | 11 | ### License and Copyright 12 | 13 | Project landing page is based on [startbootstrap-resume](https://github.com/StartBootstrap/startbootstrap-resume) project under the [MIT](https://github.com/StartBootstrap/startbootstrap-resume/blob/gh-pages/LICENSE) license. 14 | -------------------------------------------------------------------------------- /bp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | COMMIT_MESSAGE=$1 6 | 7 | npm run build 8 | git add . 9 | git commit -m "${COMMIT_MESSAGE}" 10 | git push origin master 11 | -------------------------------------------------------------------------------- /dist/assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pymentor/python-roadmap/b81e5de268038c1a2cabb7c8a6ff4d4ff912f9d2/dist/assets/img/favicon.ico -------------------------------------------------------------------------------- /dist/assets/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pymentor/python-roadmap/b81e5de268038c1a2cabb7c8a6ff4d4ff912f9d2/dist/assets/img/profile.jpg -------------------------------------------------------------------------------- /dist/assets/img/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pymentor/python-roadmap/b81e5de268038c1a2cabb7c8a6ff4d4ff912f9d2/dist/assets/img/python.png -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Python Mentor 9 | 10 | 11 | 12 | 13 | 14 | 15 | 33 | 36 | 37 | 38 | 39 | 40 | 61 | 62 |
63 |
64 |
65 |

Привет! Это Python Mentor!

66 |

Слева дорожная карта (road map), в которой перечислено все то, что поможет освоить Python 3 в контексте задач автоматизации, веб-разработки и машинного обучения.

67 |

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

68 |

Временных рамок нет, занимаетесь с той скоростью, с которой у вас получается заниматься.

69 |

Путь предстоит не легкий, но увлекательный. Успехов!

70 | 74 |
75 |
76 |
77 |
78 | 79 |
80 |
81 |

Настройка окружения и среды разработки

82 |
Установка интерпретатора Python 3, среды разработки (IDE) и подготовка к работе с ними
83 |

84 | Скачать Python 3 с официального сайта 85 |
86 | Кликнуть на желтую кнопку "Download Python 3.*.*", скачать и затем установить 87 |

88 |

89 | Скачать IDE PyCharm 90 |
91 | Выбрать Community версию (она бесплатная), скачать и затем установить 92 |

93 |

94 | Установка и настройка среды разработки (IDE) PyCharm в Windows 95 |
96 | Видео, 13 минут 97 |

98 |
99 |
100 |
101 | 102 |
103 |
104 |

Введение

105 |
Основы синтаксиса языка и его основные механизмы
106 |

107 | 1) "Поколение Python": курс для начинающих 108 |
109 | Интерактивный видео-курс. 61 урок, 215 тестов, 294 интерактивных задания 110 |

111 |

112 | 2) "Как устроен Python. Гид для разработчиков, программистов и интересующихся" Мэтт Харрисон 113 |
114 | Книга, 272 с. Для закрепления знаний полученных в курсе "Программирование на Python 3" 115 |

116 |

117 | 3) "Поколение Python": курс для продвинутых 118 |
119 | Интерактивный видео-курс. 63 урока, 428 тестов, 285 интерактивных задания 120 |

121 |

122 | 4) Стандарт PEP-8 123 |
124 | Справочник по стандарту PEP-8 - основополагающему стандарту по программирования на Python. 125 |

126 |
127 |
128 |
129 | 130 |
131 |
132 |

Продолжение + основы системы контроля версий Git

133 |
Углубленное изучение механизмов языка и особенностей интерпретатора Python. Использование системы контроля версий (Git)
134 |

135 | 5) Python: основы и применение 136 |
137 | Интерактивный видео-курс. 20 уроков, 5 часа видео, 26 тестов, 36 интерактивных задания 138 |

139 |

140 | 6) Объектно-ориентированное Программирование в Python 141 |
142 | Неплохая статья, охватывающая многие аспекты ООП в Python 143 |

144 |

145 | 7) "Чистый Python. Тонкости программирования для профи" Дэн Бейдер 146 |
147 | Книга, 288 с. Для закрепления знаний полученных в курсе "Python: основы и применение" 148 |

149 |

150 | 8) "Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию" Джульен Данжу 151 |
152 | Книга, 252 с. Для закрепления знаний полученных в курсе "Python: основы и применение" 153 |

154 |

155 | 9) Решение задач после пройденных курсов 156 |
157 | Интерактивный задачник-тренажер, который предлагает задачи, основываясь на результатах решения предыдущих задач 158 |

159 |

160 | 10) Transforming Code into Beautiful, Idiomatic Python 161 |
162 | Доклад на тему как улучшить код и сделать его более чистым, читаемым и красивым. Видео, 48 минут 163 |

164 |

165 | 11) Базовый курс по Git 166 |
167 | Видео уроки. Плейлист 168 |

169 |

170 | 12) Тренажер по Git 171 |
172 | Интерактивный онлайн-тренажер. Очень даже ничего такой 173 |

174 |
175 |
176 |
177 | 178 |
179 |
180 |

Веб, фреймворки и сервера

181 |
Веб-технологии, популярные фреймворки и веб-сервера
182 |

183 | 13) Топовый онлайн курс по HTML/CSS 184 |
185 | Интерактивные уроки по верстке. Перейти на сайт и нажать на зеленую кнопку "Начать учиться". Очень много бесплатного очень годного материала 186 |

187 |

188 | 14) Уроки по фреймворку Flask 189 |
190 | 23 видео урока. Плейлист 191 |

192 |

193 | 15) "Разработка веб-приложений с использованием Flask на языке Python" Мигель Гринберг 194 |
195 | Книга, 272 с. Введение в фреймворк Flask и разработка на нем блога с пользователями, БД и регистрацией 196 |

197 |

198 | 16) Уроки по Django 3 199 |
200 | Плейлист, 26 видео уроков 201 |

202 |

203 | 17) Что такое веб-сервера и для чего они нужны 204 |
205 | Видео, 1 час 26 минут. Лекция идет в контексте ОС Linux и ее деталей, но пока это можно игнорировать, и вникать только в общую концепцию 206 |

207 |
208 |
209 |
210 | 211 |
212 |
213 |

Базы данных, SQL и ORM

214 |
Введение с системы управления базами данных, язык SQL и то, как с этим всем принято работать в настоящее время
215 |

216 | 18) Базы данных 217 |
218 | Интерактивный видео-курс. 22 уроков, 5 часа видео, 100 тестов 219 |

220 |

221 | 19) Введение в базы данных 222 |
223 | Интерактивный видео-курс, затрагивающий ORM. 23 уроков, 7 часа видео, 80 тестов 224 |

225 |

226 | 20) Интерактивный тренажер по SQL 227 |
228 | Для закрепления пройденного материала. Интерактивный задачник-тренажер 229 |

230 |

231 | 21) ORM в Python: Sqlalchemy 232 |
233 | Введение в SQLAlchemy, лекции 234 |

235 |

236 | 22) Вебинар про Sqlalchemy 237 |
238 | Видео, 1 час 26 минут 239 |

240 |
241 |
242 |
243 | 244 |
245 |
246 |

Unit-тесты и статические анализаторы кода. PEP-8

247 |
Тестирование кода, сканирование кода на соответствие стандарту PEP-8
248 |

249 | 23) Pytests: введение в автотесты 250 |
251 | Видео, 1 час 35 минут. Вебинар по pytests в Python 3 252 |

253 |

254 | 24) Использование модуля Unittests 255 |
256 | Видео, 35 минут. Урок по модулю unittests в Python 3 257 |

258 |

259 | 25) Статический анализ кода 260 |
261 | Справочник по статическим анализаторам кода в Python 3 262 |

263 |
264 |
265 |
266 | 267 |
268 |
269 |

Асинхронное программирование

270 |
Использование модуля asyncio. Корутины, событийный цикл и кооперативная многозадачность
271 |

272 | 26) Асинхронный Python глазами начинающего 273 |
274 | Видео-доклад, 21 минута. Введение в концепцию асинхронного программирования 275 |

276 |

277 | 27) Асинхронное программирование в Python 278 |
279 | Видео-доклад, 28 минут. Шикарный доклад, дающий представление о том, как работает asyncio под капотом 280 |

281 |

282 | 28) Уроки по асинхронному программированию на Python от Олега Молчанова 283 |
284 | Плейлист, 8 видеоуроков. Врядли найдете лучше 285 |

286 |

287 | 29) AsyncIO для практикующего python-разработчика 288 |
289 | Статья. Содержит разбор основных терминов и понятий из мира asyncio, а также многочисленные примеры кода 290 |

291 |

292 | 30) Описание работы с asyncio от разработчиков Python 293 |
294 | Страница из официальной документации (PEP 3156). Содержит большое количество примеров кода с использованием asyncio 295 |

296 |
297 |
298 |
299 | 300 |
301 |
302 |

Автоматизация тестирования. QA automation

303 |
Автоматизированное тестирование пользовательских интерфейсов веб-приложений
304 |

305 | 31) Что такое автоматизация тестирования 306 |
307 | Видео, 51 минута. 308 |

309 |

310 | 32) Автоматизация тестирования с Pytest и Python 311 |
312 | Плейлист. 18 уроков. 313 |

314 |

315 | 33) Автоматизация тестирования с помощью Selenium и Python 316 |
317 | Интерактивные видео уроки. 26 уроков, 80 тестов, 6 заданий 318 |

319 |
320 |
321 |
322 | 323 |
324 |
325 |

Алгоритмы и структуры данных

326 |
Источники для самостоятельного изучения алрогитмов и структур данных
327 |

328 | 34) "Грокаем алгоритмы" Адитья Бхаргава 329 |
330 | Книга, 290 с. Отличная книга для начинающих с примерами кода на Python 331 |

332 |

333 | 35) "Классические задачи Computer Science на языке Python" Девид Копец 334 |
335 | Книга, 256 с. В книге разобраны наиболее известные задачи CS с примерами кода на Python 336 |

337 |

338 | 36) Алгоритмы: теория и практика. Структуры данных 339 |
340 | Интерактивные видео-уроки. 11 уроков, 17 интерактивных заданий 341 |

342 |

343 | 37) Алгоритмы: теория и практика. Методы 344 |
345 | Интерактивные видео-уроки. 47 уроков, 21 интерактивных заданий, 10 тестов 346 |

347 |

348 | 38) Базовый курс по структурам данных 349 |
350 | Интерактивные видео-уроки. 50 уроков, 174 тестов, 84 интерактивных задания 351 |

352 |
353 |
354 |
355 | 356 |
357 |
358 |

Паттерны (шаблоны) проектирования и архитектура приложения

359 |
Введение в архитектуру приложения и популярные шаблоны проектирования
360 |

361 | 39) "Python на практике" М. Саммерфилд 362 |
363 | Книга, 338 с. Детальный разбор всех популярных паттернов с примерами кода на Python. Много примеров, очень много 364 |

365 |

366 | 40) "Секреты Python Pro" Д. Хиллард 367 |
368 | Книга, 320 с. Книга рассказывает, как правильно и эффективно писать код и как должны быть архитектурно построены программы 369 |

370 |

371 | 41) Паттерны с примерами кода и описанием 372 |
373 | Github репозиторий 374 |

375 |

376 | 42) "Паттерны разработки на Python: TDD, DDD и событийно-управляемая архитектура" Г.Персиваль, Б.Грегори 377 |
378 | Книга, 336 с. Очень крутая книга, рассказывающая как на практике применять концепции DDD и TDD. Рекомендую! 379 |

380 |

381 | 43) "Микросервисы. Паттерны разработки и рефакторинга" К. Ричардсон 382 |
383 | Книга, 544 с. Крутейшая книга, в которой автор рассказывает про то, как надо создавать микросервисные приложения, а также как их рефакторить и тестировать. Примеры кода в книге на Java, но это не помешает уловить суть микросервисного подхода 384 |

385 |
386 |
387 |
388 | 389 |
390 |
391 |

Анализ данных и машинное обучение на Python

392 |
Теория и работа с фреймворками
393 |

394 | 44) Машинное обучение простыми словами 395 |
396 | Шикарнейшая 397 | статья на тему что такое машинное обучение, где применяется и с чего начать изучение 398 |

399 |

400 | 45) Основы статистики ч.1 401 |
402 | Интерактивные видео-уроки. 29 уроков, 4 часа видео, 105 тестов 403 |

404 |

405 | 46) Основы статистики ч.2 406 |
407 | Интерактивные видео-уроки. 24 урока, 6 часов видео, 74 теста, 22 интерактивных задание 408 |

409 |

410 | 46) Основы статистики ч.2 411 |
412 | Конспект лекций по курсу "Основы статистики" Анатолия Карпова 413 |

414 |

415 | 47) Введение в Data Science и машинное обучение 416 |
417 | Интерактивные видео-уроки. 30 уроков, 9 часов видео, 54 теста, 21 интерактивное задание 418 |

419 |

420 | 48) Нейронные сети 421 |
422 | Интерактивные видео-уроки. 24 урока, 6 часов видео, 90 тестов, 27 интерактивных заданий 423 |

424 |

425 | 49) Машинное обучение 426 |
427 | Интерактивные видео-уроки. 71 урок, 7 часов видео, 68 тестов 428 |

429 |

430 | 50) Машинное обучение и анализ данных 431 |
432 | Специализация на Coursera от Yandex и МФТИ 433 |

434 |

435 | 51) Анализ данных 436 |
437 | Интерактивный курс от Яндекса. Платный 438 |

439 |

440 | 52) Анализ данных 441 |
442 | Курс от Анатолия Карпова (@mail.ru). Платный 443 |

444 |

445 | 53) "Python для сложных задач. Наука о данных и машинное обучение" Дж. Вандер Плас 446 |
447 | Книга, 576 с. Справочник по библиотека и фреймворкам для анализа данных и машинного обучения на Python 448 |

449 |

450 | 54) "Однострочники Python. Лаконичный и содержательный код" К. Майер 451 |
452 | Книга, 256 с. Справочник по применению однострочников при решении задач анализа данных на Python 453 |

454 |
455 |
456 |
457 | 458 |
459 |
460 |

Введение в архитектуру операционных систем. OC Linux. Непрерывная интеграция и доставка (CI/CD), развертывание и управление конфигурацией (Ansible), контейнеризация (Docker)

461 |
Современные ОС и Linux
462 |

463 | 55) Основы Linux 464 |
465 | Интерактивные видео-уроки. 34 урока, 147 тестов, 18 интерактивных заданий 466 |

467 |

468 | 56) "Внутренее устройство Linux" Брайан Уорд 469 |
470 | Топовая книга! 384 с. 471 |

472 |

473 | 57) "Сетевые операционные системы" Олифер В.Г. 474 |
475 | Книга, 544 с. Скачивание по прямой ссылке 476 |

477 |

478 | 58) "Безопасность контейнеров. Фундаментальный подход к защите контейнеризованных приложений" Л. Райс 479 |
480 | Книга, 224 с. Автор описывает простыми словами то, как работает контейнеризация в Linux под капотом, и показывает, как можно запускать контейнеры, вручную, без использования систем контейнеризации 481 |

482 |

483 | 59) "Kubernetes. Лучшие практики" Б. Бернс, Э. Вильяльба 484 |
485 | Книга, 288 с. Книга рассказывает о том, что такое Kubernetes, как им пользоваться и как настраивать 486 |

487 |

488 | 60) Что такое CI/CD (непрерывная интеграция и доставка) 489 |
490 | Видео, 9 минут 491 |

492 |

493 | 61) Сравнение существующих систем CI/CD 494 |
495 | Видео, 15 минут 496 |

497 |

498 | 62) Уроки по Jenkins с нуля 499 |
500 | Плейлист. 14 уроков 501 |

502 |

503 | 63) Ansible: быстрый старт 504 |
505 | Вебинар, 1 час 43 мин 506 |

507 |

508 | 64) Основы Docker. Большой практический выпуск 509 |
510 | Видео урок. 1 час 25 минут 511 |

512 |
513 |
514 |
515 | 516 |
517 |
518 |

YouTube каналы

519 |
Каналы, которые мы рекомендуем
520 |

521 | Тимофей Хирьянов 522 |
523 | Лекции и практические занятия от одного из топовых российских преподавателей по CS 524 |

525 |

526 | Олег Молчанов 527 |
528 | Канал посвящен программированию на языке Python 3. Здесь вы найдете видео уроки по программированию на Python, созданию сайтов и веб-приложений. Есть уроки парсингу сайтов, по Flask, уроки по Django 2, по созданию блокчейна на Python, ботов для Телеграма. 529 |

530 |

531 | dUdVstud 532 |
533 | Канал для изучающих (или просто любящих) прикладную математику и анализ данных. Математика для Data Science и Machine Learning с нуля. Есть и уроки по Python 534 |

535 |

536 | miracl6 537 |
538 | Канал, где автор делится своим опытом в области образования, карьеры, саморазвития в области Data Science. А также уроки по Python и DS 539 |

540 |

541 | АйтиБорода 542 |
543 | Проект, посвящен не столько программированию, сколько жизни айтишников изнутри. Образовательные ролики и 544 | интервью 545 | (очень много интервью) 546 |

547 |
548 |
549 |
550 |
551 | 552 | 553 | -------------------------------------------------------------------------------- /dist/js/scripts.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - Resume v6.0.1 (https://startbootstrap.com/template-overviews/resume) 3 | * Copyright 2013-2023 Start Bootstrap 4 | * Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-resume/blob/master/LICENSE) 5 | */ 6 | (function ($) { 7 | "use strict"; // Start of use strict 8 | 9 | // Smooth scrolling using jQuery easing 10 | $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function () { 11 | if ( 12 | location.pathname.replace(/^\//, "") == 13 | this.pathname.replace(/^\//, "") && 14 | location.hostname == this.hostname 15 | ) { 16 | var target = $(this.hash); 17 | target = target.length 18 | ? target 19 | : $("[name=" + this.hash.slice(1) + "]"); 20 | if (target.length) { 21 | $("html, body").animate( 22 | { 23 | scrollTop: target.offset().top, 24 | }, 25 | 1000, 26 | "easeInOutExpo" 27 | ); 28 | return false; 29 | } 30 | } 31 | }); 32 | 33 | // Closes responsive menu when a scroll trigger link is clicked 34 | $(".js-scroll-trigger").click(function () { 35 | $(".navbar-collapse").collapse("hide"); 36 | }); 37 | 38 | // Activate scrollspy to add active class to navbar items on scroll 39 | $("body").scrollspy({ 40 | target: "#sideNav", 41 | }); 42 | })(jQuery); // End of use strict 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Resume", 3 | "name": "startbootstrap-resume", 4 | "version": "6.0.1", 5 | "scripts": { 6 | "build": "npm run clean && npm run build:pug && npm run build:scss && npm run build:scripts && npm run build:assets", 7 | "build:assets": "node scripts/build-assets.js", 8 | "build:pug": "node scripts/build-pug.js", 9 | "build:scripts": "node scripts/build-scripts.js", 10 | "build:scss": "node scripts/build-scss.js", 11 | "clean": "node scripts/clean.js", 12 | "start": "npm run build && node scripts/start.js", 13 | "start:debug": "npm run build && node scripts/start-debug.js" 14 | }, 15 | "description": "Resume is a simple, yet elegant resume and CV theme for Bootstrap 4.", 16 | "keywords": [ 17 | "css", 18 | "sass", 19 | "html", 20 | "responsive", 21 | "theme", 22 | "template" 23 | ], 24 | "homepage": "https://startbootstrap.com/template-overviews/resume", 25 | "bugs": { 26 | "url": "https://github.com/StartBootstrap/startbootstrap-resume/issues", 27 | "email": "feedback@startbootstrap.com" 28 | }, 29 | "license": "MIT", 30 | "author": "Start Bootstrap", 31 | "contributors": [ 32 | "David Miller (http://davidmiller.io/)" 33 | ], 34 | "repository": { 35 | "type": "git", 36 | "url": "https://github.com/StartBootstrap/startbootstrap-resume.git" 37 | }, 38 | "dependencies": { 39 | "bootstrap": "4.5.0" 40 | }, 41 | "devDependencies": { 42 | "autoprefixer": "9.8.0", 43 | "browser-sync": "2.26.7", 44 | "chokidar": "3.4.0", 45 | "concurrently": "5.2.0", 46 | "postcss": "7.0.32", 47 | "prettier": "2.0.5", 48 | "pug": "3.0.0", 49 | "sass": "1.26.8", 50 | "shelljs": "0.8.4" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /scripts/build-assets.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const renderAssets = require('./render-assets'); 4 | 5 | renderAssets(); -------------------------------------------------------------------------------- /scripts/build-pug.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const path = require('path'); 3 | const sh = require('shelljs'); 4 | const renderPug = require('./render-pug'); 5 | 6 | const srcPath = path.resolve(path.dirname(__filename), '../src'); 7 | 8 | sh.find(srcPath).forEach(_processFile); 9 | 10 | function _processFile(filePath) { 11 | if ( 12 | filePath.match(/\.pug$/) 13 | && !filePath.match(/include/) 14 | && !filePath.match(/mixin/) 15 | && !filePath.match(/\/pug\/layouts\//) 16 | ) { 17 | renderPug(filePath); 18 | } 19 | } -------------------------------------------------------------------------------- /scripts/build-scripts.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const renderScripts = require('./render-scripts'); 4 | 5 | renderScripts(); -------------------------------------------------------------------------------- /scripts/build-scss.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const renderSCSS = require('./render-scss'); 4 | 5 | renderSCSS(); 6 | -------------------------------------------------------------------------------- /scripts/clean.js: -------------------------------------------------------------------------------- 1 | const sh = require('shelljs'); 2 | const path = require('path'); 3 | 4 | const destPath = path.resolve(path.dirname(__filename), '../dist'); 5 | 6 | sh.rm('-rf', `${destPath}/*`) 7 | 8 | -------------------------------------------------------------------------------- /scripts/render-assets.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const sh = require('shelljs'); 5 | 6 | module.exports = function renderAssets() { 7 | const sourcePath = path.resolve(path.dirname(__filename), '../src/assets'); 8 | const destPath = path.resolve(path.dirname(__filename), '../dist/.'); 9 | 10 | sh.cp('-R', sourcePath, destPath) 11 | }; -------------------------------------------------------------------------------- /scripts/render-pug.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const pug = require('pug'); 5 | const sh = require('shelljs'); 6 | const prettier = require('prettier'); 7 | 8 | module.exports = function renderPug(filePath) { 9 | const destPath = filePath.replace(/src\/pug\//, 'dist/').replace(/\.pug$/, '.html'); 10 | const srcPath = path.resolve(path.dirname(__filename), '../src'); 11 | 12 | console.log(`### INFO: Rendering ${filePath} to ${destPath}`); 13 | const html = pug.renderFile(filePath, { 14 | doctype: 'html', 15 | filename: filePath, 16 | basedir: srcPath 17 | }); 18 | 19 | const destPathDirname = path.dirname(destPath); 20 | if (!sh.test('-e', destPathDirname)) { 21 | sh.mkdir('-p', destPathDirname); 22 | } 23 | 24 | const prettified = prettier.format(html, { 25 | printWidth: 1000, 26 | tabWidth: 4, 27 | singleQuote: true, 28 | proseWrap: 'preserve', 29 | endOfLine: 'lf', 30 | parser: 'html', 31 | htmlWhitespaceSensitivity: 'ignore' 32 | }); 33 | 34 | fs.writeFileSync(destPath, prettified); 35 | }; -------------------------------------------------------------------------------- /scripts/render-scripts.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const fs = require('fs'); 3 | const packageJSON = require('../package.json'); 4 | const path = require('path'); 5 | const sh = require('shelljs'); 6 | 7 | module.exports = function renderScripts() { 8 | const sourcePath = path.resolve(path.dirname(__filename), '../src/js/scripts.js'); 9 | const destPath = path.resolve(path.dirname(__filename), '../dist/js/scripts.js'); 10 | 11 | const copyright = `/*! 12 | * Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage}) 13 | * Copyright 2013-${new Date().getFullYear()} ${packageJSON.author} 14 | * Licensed under ${packageJSON.license} (https://github.com/StartBootstrap/${packageJSON.name}/blob/master/LICENSE) 15 | */ 16 | ` 17 | const scriptsJS = fs.readFileSync(sourcePath); 18 | const destPathDirname = path.dirname(destPath); 19 | 20 | if (!sh.test('-e', destPathDirname)) { 21 | sh.mkdir('-p', destPathDirname); 22 | } 23 | 24 | fs.writeFileSync(destPath, copyright + scriptsJS); 25 | }; -------------------------------------------------------------------------------- /scripts/render-scss.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const autoprefixer = require('autoprefixer') 3 | const fs = require('fs'); 4 | const packageJSON = require('../package.json'); 5 | const path = require('path'); 6 | const postcss = require('postcss') 7 | const sass = require('sass'); 8 | const sh = require('shelljs'); 9 | 10 | const stylesPath = '../src/scss/styles.scss'; 11 | const destPath = path.resolve(path.dirname(__filename), '../dist/css/styles.css'); 12 | 13 | module.exports = function renderSCSS() { 14 | 15 | const results = sass.renderSync({ 16 | data: entryPoint, 17 | includePaths: [ 18 | path.resolve(path.dirname(__filename), '../node_modules') 19 | ], 20 | }); 21 | 22 | const destPathDirname = path.dirname(destPath); 23 | if (!sh.test('-e', destPathDirname)) { 24 | sh.mkdir('-p', destPathDirname); 25 | } 26 | 27 | postcss([ autoprefixer ]).process(results.css, {from: 'styles.css', to: 'styles.css'}).then(result => { 28 | result.warnings().forEach(warn => { 29 | console.warn(warn.toString()) 30 | }) 31 | fs.writeFileSync(destPath, result.css.toString()); 32 | }) 33 | 34 | }; 35 | 36 | const entryPoint = `/*! 37 | * Start Bootstrap - ${packageJSON.title} v${packageJSON.version} (${packageJSON.homepage}) 38 | * Copyright 2013-${new Date().getFullYear()} ${packageJSON.author} 39 | * Licensed under ${packageJSON.license} (https://github.com/StartBootstrap/${packageJSON.name}/blob/master/LICENSE) 40 | */ 41 | @import "${stylesPath}" 42 | ` -------------------------------------------------------------------------------- /scripts/sb-watch.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const _ = require('lodash'); 4 | const chokidar = require('chokidar'); 5 | const path = require('path'); 6 | const renderAssets = require('./render-assets'); 7 | const renderPug = require('./render-pug'); 8 | const renderScripts = require('./render-scripts'); 9 | const renderSCSS = require('./render-scss'); 10 | 11 | const watcher = chokidar.watch('src', { 12 | persistent: true, 13 | }); 14 | 15 | let READY = false; 16 | 17 | process.title = 'pug-watch'; 18 | process.stdout.write('Loading'); 19 | let allPugFiles = {}; 20 | 21 | watcher.on('add', filePath => _processFile(filePath, 'add')); 22 | watcher.on('change', filePath => _processFile(filePath, 'change')); 23 | watcher.on('ready', () => { 24 | READY = true; 25 | console.log(' READY TO ROLL!'); 26 | }); 27 | 28 | _handleSCSS(); 29 | 30 | function _processFile(filePath, watchEvent) { 31 | 32 | if (!READY) { 33 | if (filePath.match(/\.pug$/)) { 34 | if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { 35 | allPugFiles[filePath] = true; 36 | } 37 | } 38 | process.stdout.write('.'); 39 | return; 40 | } 41 | 42 | console.log(`### INFO: File event: ${watchEvent}: ${filePath}`); 43 | 44 | if (filePath.match(/\.pug$/)) { 45 | return _handlePug(filePath, watchEvent); 46 | } 47 | 48 | if (filePath.match(/\.scss$/)) { 49 | if (watchEvent === 'change') { 50 | return _handleSCSS(filePath, watchEvent); 51 | } 52 | return; 53 | } 54 | 55 | if (filePath.match(/src\/js\//)) { 56 | return renderScripts(); 57 | } 58 | 59 | if (filePath.match(/src\/assets\//)) { 60 | return renderAssets(); 61 | } 62 | 63 | } 64 | 65 | function _handlePug(filePath, watchEvent) { 66 | if (watchEvent === 'change') { 67 | if (filePath.match(/includes/) || filePath.match(/mixins/) || filePath.match(/\/pug\/layouts\//)) { 68 | return _renderAllPug(); 69 | } 70 | return renderPug(filePath); 71 | } 72 | if (!filePath.match(/includes/) && !filePath.match(/mixins/) && !filePath.match(/\/pug\/layouts\//)) { 73 | return renderPug(filePath); 74 | } 75 | } 76 | 77 | function _renderAllPug() { 78 | console.log('### INFO: Rendering All'); 79 | _.each(allPugFiles, (value, filePath) => { 80 | renderPug(filePath); 81 | }); 82 | } 83 | 84 | function _handleSCSS() { 85 | renderSCSS(); 86 | } -------------------------------------------------------------------------------- /scripts/start-debug.js: -------------------------------------------------------------------------------- 1 | const concurrently = require('concurrently'); 2 | const path = require('path'); 3 | 4 | const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync'); 5 | 6 | concurrently([ 7 | { command: 'node --inspect scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' }, 8 | { 9 | command: `${browserSyncPath} dist -w --no-online`, 10 | name: 'SB_BROWSER_SYNC', 11 | prefixColor: 'bgBlue.bold', 12 | } 13 | ], { 14 | prefix: 'name', 15 | killOthers: ['failure', 'success'], 16 | }).then(success, failure); 17 | 18 | function success() { 19 | console.log('Success'); 20 | } 21 | 22 | function failure() { 23 | console.log('Failure'); 24 | } -------------------------------------------------------------------------------- /scripts/start.js: -------------------------------------------------------------------------------- 1 | const concurrently = require('concurrently'); 2 | const path = require('path'); 3 | 4 | const browserSyncPath = path.resolve(path.dirname(__filename), '../node_modules/.bin/browser-sync'); 5 | 6 | concurrently([ 7 | { command: 'node scripts/sb-watch.js', name: 'SB_WATCH', prefixColor: 'bgBlue.bold' }, 8 | { 9 | command: `"${browserSyncPath}" --reload-delay 2000 --reload-debounce 2000 dist -w --no-online`, 10 | name: 'SB_BROWSER_SYNC', 11 | prefixColor: 'bgGreen.bold', 12 | } 13 | ], { 14 | prefix: 'name', 15 | killOthers: ['failure', 'success'], 16 | }).then(success, failure); 17 | 18 | function success() { 19 | console.log('Success'); 20 | } 21 | 22 | function failure() { 23 | console.log('Failure'); 24 | } 25 | -------------------------------------------------------------------------------- /src/assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pymentor/python-roadmap/b81e5de268038c1a2cabb7c8a6ff4d4ff912f9d2/src/assets/img/favicon.ico -------------------------------------------------------------------------------- /src/assets/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pymentor/python-roadmap/b81e5de268038c1a2cabb7c8a6ff4d4ff912f9d2/src/assets/img/profile.jpg -------------------------------------------------------------------------------- /src/assets/img/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pymentor/python-roadmap/b81e5de268038c1a2cabb7c8a6ff4d4ff912f9d2/src/assets/img/python.png -------------------------------------------------------------------------------- /src/js/scripts.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | "use strict"; // Start of use strict 3 | 4 | // Smooth scrolling using jQuery easing 5 | $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function () { 6 | if ( 7 | location.pathname.replace(/^\//, "") == 8 | this.pathname.replace(/^\//, "") && 9 | location.hostname == this.hostname 10 | ) { 11 | var target = $(this.hash); 12 | target = target.length 13 | ? target 14 | : $("[name=" + this.hash.slice(1) + "]"); 15 | if (target.length) { 16 | $("html, body").animate( 17 | { 18 | scrollTop: target.offset().top, 19 | }, 20 | 1000, 21 | "easeInOutExpo" 22 | ); 23 | return false; 24 | } 25 | } 26 | }); 27 | 28 | // Closes responsive menu when a scroll trigger link is clicked 29 | $(".js-scroll-trigger").click(function () { 30 | $(".navbar-collapse").collapse("hide"); 31 | }); 32 | 33 | // Activate scrollspy to add active class to navbar items on scroll 34 | $("body").scrollspy({ 35 | target: "#sideNav", 36 | }); 37 | })(jQuery); // End of use strict 38 | -------------------------------------------------------------------------------- /src/pug/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Python Mentor 9 | 10 | 11 | 12 | 13 | 14 | 15 | 33 | 36 | 37 | 38 | 39 | 40 | 61 | 62 |
63 |
64 |
65 |

Привет! Это Python Mentor!

66 |

Слева дорожная карта (road map), в которой перечислено все то, что поможет освоить Python 3 в контексте задач автоматизации, веб-разработки и машинного обучения.

67 |

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

68 |

Временных рамок нет, занимаетесь с той скоростью, с которой у вас получается заниматься.

69 |

Путь предстоит не легкий, но увлекательный. Успехов!

70 | 74 |
75 |
76 |
77 |
78 | 79 |
80 |
81 |

Настройка окружения и среды разработки

82 |
Установка интерпретатора Python 3, среды разработки (IDE) и подготовка к работе с ними
83 |

84 | Скачать Python 3 с официального сайта 85 |
86 | Кликнуть на желтую кнопку "Download Python 3.*.*", скачать и затем установить 87 |

88 |

89 | Скачать IDE PyCharm 90 |
91 | Выбрать Community версию (она бесплатная), скачать и затем установить 92 |

93 |

94 | Установка и настройка среды разработки (IDE) PyCharm в Windows 95 |
96 | Видео, 13 минут 97 |

98 |
99 |
100 |
101 | 102 |
103 |
104 |

Введение

105 |
Основы синтаксиса языка и его основные механизмы
106 |

107 | 1) "Поколение Python": курс для начинающих 108 |
109 | Интерактивный видео-курс. 61 урок, 215 тестов, 294 интерактивных задания 110 |

111 |

112 | 2) "Как устроен Python. Гид для разработчиков, программистов и интересующихся" Мэтт Харрисон 113 |
114 | Книга, 272 с. Для закрепления знаний полученных в курсе "Программирование на Python 3" 115 |

116 |

117 | 3) "Поколение Python": курс для продвинутых 118 |
119 | Интерактивный видео-курс. 63 урока, 428 тестов, 285 интерактивных задания 120 |

121 |

122 | 4) Стандарт PEP-8 123 |
124 | Справочник по стандарту PEP-8 - основополагающему стандарту по программирования на Python. 125 |

126 |
127 |
128 |
129 | 130 |
131 |
132 |

Продолжение + основы системы контроля версий Git

133 |
Углубленное изучение механизмов языка и особенностей интерпретатора Python. Использование системы контроля версий (Git)
134 |

135 | 5) Python: основы и применение 136 |
137 | Интерактивный видео-курс. 20 уроков, 5 часа видео, 26 тестов, 36 интерактивных задания 138 |

139 |

140 | 6) Объектно-ориентированное Программирование в Python 141 |
142 | Неплохая статья, охватывающая многие аспекты ООП в Python 143 |

144 |

145 | 7) "Чистый Python. Тонкости программирования для профи" Дэн Бейдер 146 |
147 | Книга, 288 с. Для закрепления знаний полученных в курсе "Python: основы и применение" 148 |

149 |

150 | 8) "Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию" Джульен Данжу 151 |
152 | Книга, 252 с. Для закрепления знаний полученных в курсе "Python: основы и применение" 153 |

154 |

155 | 9) Решение задач после пройденных курсов 156 |
157 | Интерактивный задачник-тренажер, который предлагает задачи, основываясь на результатах решения предыдущих задач 158 |

159 |

160 | 10) Transforming Code into Beautiful, Idiomatic Python 161 |
162 | Доклад на тему как улучшить код и сделать его более чистым, читаемым и красивым. Видео, 48 минут 163 |

164 |

165 | 11) Базовый курс по Git 166 |
167 | Видео уроки. Плейлист 168 |

169 |

170 | 12) Тренажер по Git 171 |
172 | Интерактивный онлайн-тренажер. Очень даже ничего такой 173 |

174 |
175 |
176 |
177 | 178 |
179 |
180 |

Веб, фреймворки и сервера

181 |
Веб-технологии, популярные фреймворки и веб-сервера
182 |

183 | 13) Топовый онлайн курс по HTML/CSS 184 |
185 | Интерактивные уроки по верстке. Перейти на сайт и нажать на зеленую кнопку "Начать учиться". Очень много бесплатного очень годного материала 186 |

187 |

188 | 14) Уроки по фреймворку Flask 189 |
190 | 23 видео урока. Плейлист 191 |

192 |

193 | 15) "Разработка веб-приложений с использованием Flask на языке Python" Мигель Гринберг 194 |
195 | Книга, 272 с. Введение в фреймворк Flask и разработка на нем блога с пользователями, БД и регистрацией 196 |

197 |

198 | 16) Уроки по Django 3 199 |
200 | Плейлист, 26 видео уроков 201 |

202 |

203 | 17) Что такое веб-сервера и для чего они нужны 204 |
205 | Видео, 1 час 26 минут. Лекция идет в контексте ОС Linux и ее деталей, но пока это можно игнорировать, и вникать только в общую концепцию 206 |

207 |
208 |
209 |
210 | 211 |
212 |
213 |

Базы данных, SQL и ORM

214 |
Введение с системы управления базами данных, язык SQL и то, как с этим всем принято работать в настоящее время
215 |

216 | 18) Базы данных 217 |
218 | Интерактивный видео-курс. 22 уроков, 5 часа видео, 100 тестов 219 |

220 |

221 | 19) Введение в базы данных 222 |
223 | Интерактивный видео-курс, затрагивающий ORM. 23 уроков, 7 часа видео, 80 тестов 224 |

225 |

226 | 20) Интерактивный тренажер по SQL 227 |
228 | Для закрепления пройденного материала. Интерактивный задачник-тренажер 229 |

230 |

231 | 21) ORM в Python: Sqlalchemy 232 |
233 | Введение в SQLAlchemy, лекции 234 |

235 |

236 | 22) Вебинар про Sqlalchemy 237 |
238 | Видео, 1 час 26 минут 239 |

240 |
241 |
242 |
243 | 244 |
245 |
246 |

Unit-тесты и статические анализаторы кода. PEP-8

247 |
Тестирование кода, сканирование кода на соответствие стандарту PEP-8
248 |

249 | 23) Pytests: введение в автотесты 250 |
251 | Видео, 1 час 35 минут. Вебинар по pytests в Python 3 252 |

253 |

254 | 24) Использование модуля Unittests 255 |
256 | Видео, 35 минут. Урок по модулю unittests в Python 3 257 |

258 |

259 | 25) Статический анализ кода 260 |
261 | Справочник по статическим анализаторам кода в Python 3 262 |

263 |
264 |
265 |
266 | 267 |
268 |
269 |

Асинхронное программирование

270 |
Использование модуля asyncio. Корутины, событийный цикл и кооперативная многозадачность
271 |

272 | 26) Асинхронный Python глазами начинающего 273 |
274 | Видео-доклад, 21 минута. Введение в концепцию асинхронного программирования 275 |

276 |

277 | 27) Асинхронное программирование в Python 278 |
279 | Видео-доклад, 28 минут. Шикарный доклад, дающий представление о том, как работает asyncio под капотом 280 |

281 |

282 | 28) Уроки по асинхронному программированию на Python от Олега Молчанова 283 |
284 | Плейлист, 8 видеоуроков. Врядли найдете лучше 285 |

286 |

287 | 29) AsyncIO для практикующего python-разработчика 288 |
289 | Статья. Содержит разбор основных терминов и понятий из мира asyncio, а также многочисленные примеры кода 290 |

291 |

292 | 30) Описание работы с asyncio от разработчиков Python 293 |
294 | Страница из официальной документации (PEP 3156). Содержит большое количество примеров кода с использованием asyncio 295 |

296 |
297 |
298 |
299 | 300 |
301 |
302 |

Автоматизация тестирования. QA automation

303 |
Автоматизированное тестирование пользовательских интерфейсов веб-приложений
304 |

305 | 31) Что такое автоматизация тестирования 306 |
307 | Видео, 51 минута. 308 |

309 |

310 | 32) Автоматизация тестирования с Pytest и Python 311 |
312 | Плейлист. 18 уроков. 313 |

314 |

315 | 33) Автоматизация тестирования с помощью Selenium и Python 316 |
317 | Интерактивные видео уроки. 26 уроков, 80 тестов, 6 заданий 318 |

319 |
320 |
321 |
322 | 323 |
324 |
325 |

Алгоритмы и структуры данных

326 |
Источники для самостоятельного изучения алрогитмов и структур данных
327 |

328 | 34) "Грокаем алгоритмы" Адитья Бхаргава 329 |
330 | Книга, 290 с. Отличная книга для начинающих с примерами кода на Python 331 |

332 |

333 | 35) "Классические задачи Computer Science на языке Python" Девид Копец 334 |
335 | Книга, 256 с. В книге разобраны наиболее известные задачи CS с примерами кода на Python 336 |

337 |

338 | 36) Алгоритмы: теория и практика. Структуры данных 339 |
340 | Интерактивные видео-уроки. 11 уроков, 17 интерактивных заданий 341 |

342 |

343 | 37) Алгоритмы: теория и практика. Методы 344 |
345 | Интерактивные видео-уроки. 47 уроков, 21 интерактивных заданий, 10 тестов 346 |

347 |

348 | 38) Базовый курс по структурам данных 349 |
350 | Интерактивные видео-уроки. 50 уроков, 174 тестов, 84 интерактивных задания 351 |

352 |
353 |
354 |
355 | 356 |
357 |
358 |

Паттерны (шаблоны) проектирования и архитектура приложения

359 |
Введение в архитектуру приложения и популярные шаблоны проектирования
360 |

361 | 39) "Python на практике" М. Саммерфилд 362 |
363 | Книга, 338 с. Детальный разбор всех популярных паттернов с примерами кода на Python. Много примеров, очень много 364 |

365 |

366 | 40) "Секреты Python Pro" Д. Хиллард 367 |
368 | Книга, 320 с. Книга рассказывает, как правильно и эффективно писать код и как должны быть архитектурно построены программы 369 |

370 |

371 | 41) Паттерны с примерами кода и описанием 372 |
373 | Github репозиторий 374 |

375 |

376 | 42) "Паттерны разработки на Python: TDD, DDD и событийно-управляемая архитектура" Г.Персиваль, Б.Грегори 377 |
378 | Книга, 336 с. Очень крутая книга, рассказывающая как на практике применять концепции DDD и TDD. Рекомендую! 379 |

380 |

381 | 43) "Микросервисы. Паттерны разработки и рефакторинга" К. Ричардсон 382 |
383 | Книга, 544 с. Крутейшая книга, в которой автор рассказывает про то, как надо создавать микросервисные приложения, а также как их рефакторить и тестировать. Примеры кода в книге на Java, но это не помешает уловить суть микросервисного подхода 384 |

385 |
386 |
387 |
388 | 389 |
390 |
391 |

Анализ данных и машинное обучение на Python

392 |
Теория и работа с фреймворками
393 |

394 | 44) Машинное обучение простыми словами 395 |
396 | Шикарнейшая 397 | статья на тему что такое машинное обучение, где применяется и с чего начать изучение 398 |

399 |

400 | 45) Основы статистики ч.1 401 |
402 | Интерактивные видео-уроки. 29 уроков, 4 часа видео, 105 тестов 403 |

404 |

405 | 46) Основы статистики ч.2 406 |
407 | Интерактивные видео-уроки. 24 урока, 6 часов видео, 74 теста, 22 интерактивных задание 408 |

409 |

410 | 46) Основы статистики ч.2 411 |
412 | Конспект лекций по курсу "Основы статистики" Анатолия Карпова 413 |

414 |

415 | 47) Введение в Data Science и машинное обучение 416 |
417 | Интерактивные видео-уроки. 30 уроков, 9 часов видео, 54 теста, 21 интерактивное задание 418 |

419 |

420 | 48) Нейронные сети 421 |
422 | Интерактивные видео-уроки. 24 урока, 6 часов видео, 90 тестов, 27 интерактивных заданий 423 |

424 |

425 | 49) Машинное обучение 426 |
427 | Интерактивные видео-уроки. 71 урок, 7 часов видео, 68 тестов 428 |

429 |

430 | 50) Машинное обучение и анализ данных 431 |
432 | Специализация на Coursera от Yandex и МФТИ 433 |

434 |

435 | 51) Анализ данных 436 |
437 | Интерактивный курс от Яндекса. Платный 438 |

439 |

440 | 52) Анализ данных 441 |
442 | Курс от Анатолия Карпова (@mail.ru). Платный 443 |

444 |

445 | 53) "Python для сложных задач. Наука о данных и машинное обучение" Дж. Вандер Плас 446 |
447 | Книга, 576 с. Справочник по библиотека и фреймворкам для анализа данных и машинного обучения на Python 448 |

449 |

450 | 54) "Однострочники Python. Лаконичный и содержательный код" К. Майер 451 |
452 | Книга, 256 с. Справочник по применению однострочников при решении задач анализа данных на Python 453 |

454 |
455 |
456 |
457 | 458 |
459 |
460 |

Введение в архитектуру операционных систем. OC Linux. Непрерывная интеграция и доставка (CI/CD), развертывание и управление конфигурацией (Ansible), контейнеризация (Docker)

461 |
Современные ОС и Linux
462 |

463 | 55) Основы Linux 464 |
465 | Интерактивные видео-уроки. 34 урока, 147 тестов, 18 интерактивных заданий 466 |

467 |

468 | 56) "Внутренее устройство Linux" Брайан Уорд 469 |
470 | Топовая книга! 384 с. 471 |

472 |

473 | 57) "Сетевые операционные системы" Олифер В.Г. 474 |
475 | Книга, 544 с. Скачивание по прямой ссылке 476 |

477 |

478 | 58) "Безопасность контейнеров. Фундаментальный подход к защите контейнеризованных приложений" Л. Райс 479 |
480 | Книга, 224 с. Автор описывает простыми словами то, как работает контейнеризация в Linux под капотом, и показывает, как можно запускать контейнеры, вручную, без использования систем контейнеризации 481 |

482 |

483 | 59) "Kubernetes. Лучшие практики" Б. Бернс, Э. Вильяльба 484 |
485 | Книга, 288 с. Книга рассказывает о том, что такое Kubernetes, как им пользоваться и как настраивать 486 |

487 |

488 | 60) Что такое CI/CD (непрерывная интеграция и доставка) 489 |
490 | Видео, 9 минут 491 |

492 |

493 | 61) Сравнение существующих систем CI/CD 494 |
495 | Видео, 15 минут 496 |

497 |

498 | 62) Уроки по Jenkins с нуля 499 |
500 | Плейлист. 14 уроков 501 |

502 |

503 | 63) Ansible: быстрый старт 504 |
505 | Вебинар, 1 час 43 мин 506 |

507 |

508 | 64) Основы Docker. Большой практический выпуск 509 |
510 | Видео урок. 1 час 25 минут 511 |

512 |
513 |
514 |
515 | 516 |
517 |
518 |

YouTube каналы

519 |
Каналы, которые мы рекомендуем
520 |

521 | Тимофей Хирьянов 522 |
523 | Лекции и практические занятия от одного из топовых российских преподавателей по CS 524 |

525 |

526 | Олег Молчанов 527 |
528 | Канал посвящен программированию на языке Python 3. Здесь вы найдете видео уроки по программированию на Python, созданию сайтов и веб-приложений. Есть уроки парсингу сайтов, по Flask, уроки по Django 2, по созданию блокчейна на Python, ботов для Телеграма. 529 |

530 |

531 | dUdVstud 532 |
533 | Канал для изучающих (или просто любящих) прикладную математику и анализ данных. Математика для Data Science и Machine Learning с нуля. Есть и уроки по Python 534 |

535 |

536 | miracl6 537 |
538 | Канал, где автор делится своим опытом в области образования, карьеры, саморазвития в области Data Science. А также уроки по Python и DS 539 |

540 |

541 | АйтиБорода 542 |
543 | Проект, посвящен не столько программированию, сколько жизни айтишников изнутри. Образовательные ролики и 544 | интервью 545 | (очень много интервью) 546 |

547 |
548 |
549 |
550 |
551 | 552 | 553 | -------------------------------------------------------------------------------- /src/pug/index.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html(lang='en') 3 | 4 | head 5 | meta(charset='utf-8') 6 | meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no') 7 | meta(name='description', content='') 8 | meta(name='author', content='') 9 | 10 | title Python Mentor 11 | 12 | link(rel='icon', type='image/x-icon', href='assets/img/favicon.ico') 13 | 14 | script(src='https://use.fontawesome.com/releases/v5.13.0/js/all.js', crossorigin='anonymous') 15 | link(href='https://fonts.googleapis.com/css?family=Saira+Extra+Condensed:500,700', rel='stylesheet', type='text/css') 16 | link(href='https://fonts.googleapis.com/css?family=Muli:400,400i,800,800i', rel='stylesheet', type='text/css') 17 | 18 | link(href='css/styles.css', rel='stylesheet') 19 | 20 | | 21 | | 33 | | 34 | | 35 | 36 | body#page-top 37 | // Navigation 38 | nav#sideNav.navbar.navbar-expand-lg.navbar-dark.bg-primary.fixed-top 39 | button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbarSupportedContent', aria-controls='navbarSupportedContent', aria-expanded='false', aria-label='Toggle navigation') 40 | span.navbar-toggler-icon 41 | #navbarSupportedContent.collapse.navbar-collapse 42 | ul.navbar-nav 43 | li.nav-item 44 | a.nav-link.js-scroll-trigger(href='#main') Главная 45 | li.nav-item 46 | a.nav-link.js-scroll-trigger(href='#env_setup') 0. Настройка среды разработки на компьютере 47 | li.nav-item 48 | a.nav-link.js-scroll-trigger(href='#introduction') 1. Введение 49 | li.nav-item 50 | a.nav-link.js-scroll-trigger(href='#advanced') 2. Продолжение + Основы Git 51 | li.nav-item 52 | a.nav-link.js-scroll-trigger(href='#web_and_frameworks') 3. Веб, веб-фреймворки и сервера 53 | li.nav-item 54 | a.nav-link.js-scroll-trigger(href='#db_and_orm') 4. Базы данных, SQL и ORM 55 | li.nav-item 56 | a.nav-link.js-scroll-trigger(href='#tests') 5. Модульные (unit) тесты и качество кода 57 | li.nav-item 58 | a.nav-link.js-scroll-trigger(href='#async') 6. Асинхронное программирование 59 | li.nav-item 60 | a.nav-link.js-scroll-trigger(href='#qa_automation') 7. Автоматизированное тестирование (QA automation) 61 | li.nav-item 62 | a.nav-link.js-scroll-trigger(href='#algo') 8. Алгоритмы и структуры данных 63 | li.nav-item 64 | a.nav-link.js-scroll-trigger(href='#patterns') 9. Паттерны (шаблоны) проектирования 65 | li.nav-item 66 | a.nav-link.js-scroll-trigger(href='#da_and_ml') 10. Анализ данных и машинное обучение 67 | li.nav-item 68 | a.nav-link.js-scroll-trigger(href='#os_cicd_linux') 11. Операционные системы, Linux, CI/CD 69 | li.nav-item 70 | a.nav-link.js-scroll-trigger(href='#youtube_channels') 🔔 Рекомендуемые YouTube каналы 71 | 72 | // Page Content 73 | .container-fluid.p-0 74 | section#main.resume-section 75 | .resume-section-content 76 | h3 77 | span.text-primary Привет! Это Python Mentor! 78 | p.subheading.mb-4 79 | | Слева дорожная карта (road map), в которой перечислено все то, что поможет освоить Python 3 в контексте задач автоматизации, веб-разработки и машинного обучения. 80 | p.subheading.mb-4 81 | | Книги, видео-курсы и лекции приведены в том порядке, в котором рекомендуется их изучать, для того, чтобы делать это продуктивно, и чтобы минимизировать возможную кашу в голове. 82 | p.subheading.mb-4 83 | | Временных рамок нет, занимаетесь с той скоростью, с которой у вас получается заниматься. 84 | p.subheading.mb-4 85 | | Путь предстоит не легкий, но увлекательный. Успехов! 86 | p.social-icons 87 | a.social-icon(href='https://t.me/pymentor') 88 | i.fab.fa-telegram-plane 89 | a.social-icon(href='https://www.linkedin.com/company/69804122') 90 | i.fab.fa-linkedin 91 | 92 | .container-fluid.p-0 93 | // Env & IDE setup 94 | section#env_setup.resume-section 95 | .resume-section-content 96 | h3 97 | span.text-primary Настройка окружения и среды разработки 98 | .subheading.mb-5 99 | | Установка интерпретатора Python 3, среды разработки (IDE) и подготовка к работе с ними 100 | p.lead.mb-5 101 | a(href='https://www.python.org/downloads/' target='_blank') Скачать Python 3 с официального сайта 102 | br 103 | | Кликнуть на желтую кнопку "Download Python 3.*.*", скачать и затем установить 104 | p.lead.mb-5 105 | a(href='https://www.jetbrains.com/pycharm/download/#section=windows' target='_blank') Скачать IDE PyCharm 106 | br 107 | | Выбрать Community версию (она бесплатная), скачать и затем установить 108 | p.lead.mb-5 109 | a(href='https://www.youtube.com/watch?v=uWLwvhbbEe4' target='_blank') Установка и настройка среды разработки (IDE) PyCharm в Windows 110 | br 111 | | Видео, 13 минут 112 | hr.m-0 113 | 114 | // Introduction 115 | section#introduction.resume-section 116 | .resume-section-content 117 | h3 118 | span.text-primary Введение 119 | .subheading.mb-5 120 | | Основы синтаксиса языка и его основные механизмы 121 | p.lead.mb-5 122 | a(href='https://stepik.org/course/58852/promo' target='_blank') 1) "Поколение Python": курс для начинающих 123 | br 124 | | Интерактивный видео-курс. 61 урок, 215 тестов, 294 интерактивных задания 125 | p.lead.mb-5 126 | a(href='https://www.labirint.ru/books/670128/' target='_blank') 2) "Как устроен Python. Гид для разработчиков, программистов и интересующихся" Мэтт Харрисон 127 | br 128 | | Книга, 272 с. Для закрепления знаний полученных в курсе "Программирование на Python 3" 129 | p.lead.mb-5 130 | a(href='https://stepik.org/course/68343/promo' target='_blank') 3) "Поколение Python": курс для продвинутых 131 | br 132 | | Интерактивный видео-курс. 63 урока, 428 тестов, 285 интерактивных задания 133 | p.lead.mb-5 134 | a(href='https://peps.python.org/pep-0008' target='_blank') 4) Стандарт PEP-8 135 | br 136 | | Справочник по стандарту PEP-8 - основополагающему стандарту по программирования на Python. 137 | hr.m-0 138 | 139 | // Advanced 140 | section#advanced.resume-section 141 | .resume-section-content 142 | h3 143 | span.text-primary Продолжение + основы системы контроля версий Git 144 | .subheading.mb-5 145 | | Углубленное изучение механизмов языка и особенностей интерпретатора Python. Использование системы контроля версий (Git) 146 | p.lead.mb-5 147 | a(href='https://stepik.org/course/512/promo' target='_blank') 5) Python: основы и применение 148 | br 149 | | Интерактивный видео-курс. 20 уроков, 5 часа видео, 26 тестов, 36 интерактивных задания 150 | p.lead.mb-5 151 | a(href='https://python-scripts.com/object-oriented-programming-in-python' target='_blank') 6) Объектно-ориентированное Программирование в Python 152 | br 153 | | Неплохая статья, охватывающая многие аспекты ООП в Python 154 | p.lead.mb-5 155 | a(href='https://www.labirint.ru/books/654838/' target='_blank') 7) "Чистый Python. Тонкости программирования для профи" Дэн Бейдер 156 | br 157 | | Книга, 288 с. Для закрепления знаний полученных в курсе "Python: основы и применение" 158 | p.lead.mb-5 159 | a(href='https://www.labirint.ru/books/713544/' target='_blank') 8) "Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию" Джульен Данжу 160 | br 161 | | Книга, 252 с. Для закрепления знаний полученных в курсе "Python: основы и применение" 162 | p.lead.mb-5 163 | a(href='https://stepik.org/course/431/promo' target='_blank') 9) Решение задач после пройденных курсов 164 | br 165 | | Интерактивный задачник-тренажер, который предлагает задачи, основываясь на результатах решения предыдущих задач 166 | p.lead.mb-5 167 | a(href='https://www.youtube.com/watch?v=OSGv2VnC0go' target='_blank') 10) Transforming Code into Beautiful, Idiomatic Python 168 | br 169 | | Доклад на тему как улучшить код и сделать его более чистым, читаемым и красивым. Видео, 48 минут 170 | p.lead.mb-5 171 | a(href='https://www.youtube.com/playlist?list=PLIU76b8Cjem5B3sufBJ_KFTpKkMEvaTQR' target='_blank') 11) Базовый курс по Git 172 | br 173 | | Видео уроки. Плейлист 174 | p.lead.mb-5 175 | a(href='https://learngitbranching.js.org' target='_blank') 12) Тренажер по Git 176 | br 177 | | Интерактивный онлайн-тренажер. Очень даже ничего такой 178 | hr.m-0 179 | 180 | // Web and Frameworks 181 | section#web_and_frameworks.resume-section 182 | .resume-section-content 183 | h3 184 | span.text-primary Веб, фреймворки и сервера 185 | .subheading.mb-5 186 | | Веб-технологии, популярные фреймворки и веб-сервера 187 | p.lead.mb-5 188 | a(href='https://htmlacademy.ru' target='_blank') 13) Топовый онлайн курс по HTML/CSS 189 | br 190 | | Интерактивные уроки по верстке. Перейти на сайт и нажать на зеленую кнопку "Начать учиться". Очень много бесплатного очень годного материала 191 | p.lead.mb-5 192 | a(href='https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yrxtwgqBvT6OM4HkOU3xYn' target='_blank') 14) Уроки по фреймворку Flask 193 | br 194 | | 23 видео урока. Плейлист 195 | p.lead.mb-5 196 | a(href='https://www.labirint.ru/books/446705/' target='_blank') 15) "Разработка веб-приложений с использованием Flask на языке Python" Мигель Гринберг 197 | br 198 | | Книга, 272 с. Введение в фреймворк Flask и разработка на нем блога с пользователями, БД и регистрацией 199 | p.lead.mb-5 200 | a(href='https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xO_39zZll2u1lz_Q-Mwn1F' target='_blank') 16) Уроки по Django 3 201 | br 202 | | Плейлист, 26 видео уроков 203 | p.lead.mb-5 204 | a(href='https://www.youtube.com/watch?v=1Tp5TV3BVWE' target='_blank') 17) Что такое веб-сервера и для чего они нужны 205 | br 206 | | Видео, 1 час 26 минут. Лекция идет в контексте ОС Linux и ее деталей, но пока это можно игнорировать, и вникать только в общую концепцию 207 | hr.m-0 208 | 209 | // Db and ORM 210 | section#db_and_orm.resume-section 211 | .resume-section-content 212 | h3 213 | span.text-primary Базы данных, SQL и ORM 214 | .subheading.mb-5 215 | | Введение с системы управления базами данных, язык SQL и то, как с этим всем принято работать в настоящее время 216 | p.lead.mb-5 217 | a(href='https://stepik.org/course/2614/promo' target='_blank') 18) Базы данных 218 | br 219 | | Интерактивный видео-курс. 22 уроков, 5 часа видео, 100 тестов 220 | p.lead.mb-5 221 | a(href='https://stepik.org/course/1240/promo' target='_blank') 19) Введение в базы данных 222 | br 223 | | Интерактивный видео-курс, затрагивающий ORM. 23 уроков, 7 часа видео, 80 тестов 224 | p.lead.mb-5 225 | a(href='https://stepik.org/course/63054/promo' target='_blank') 20) Интерактивный тренажер по SQL 226 | br 227 | | Для закрепления пройденного материала. Интерактивный задачник-тренажер 228 | p.lead.mb-5 229 | a(href='https://lectureswww.readthedocs.io/6.www.sync/2.codding/9.databases/2.sqlalchemy/' target='_blank') 21) ORM в Python: Sqlalchemy 230 | br 231 | | Введение в SQLAlchemy, лекции 232 | p.lead.mb-5 233 | a(href='https://www.youtube.com/watch?v=PAKJpfxeXjc' target='_blank') 22) Вебинар про Sqlalchemy 234 | br 235 | | Видео, 1 час 26 минут 236 | hr.m-0 237 | 238 | // Unit tests and code quality 239 | section#tests.resume-section 240 | .resume-section-content 241 | h3 242 | span.text-primary Unit-тесты и статические анализаторы кода. PEP-8 243 | .subheading.mb-5 244 | | Тестирование кода, сканирование кода на соответствие стандарту PEP-8 245 | p.lead.mb-5 246 | a(href='https://www.youtube.com/watch?v=EBMXOsCL9AA' target='_blank') 23) Pytests: введение в автотесты 247 | br 248 | | Видео, 1 час 35 минут. Вебинар по pytests в Python 3 249 | p.lead.mb-5 250 | a(href='https://www.youtube.com/watch?v=Ynrwk5OLI5Q' target='_blank') 24) Использование модуля Unittests 251 | br 252 | | Видео, 35 минут. Урок по модулю unittests в Python 3 253 | p.lead.mb-5 254 | a(href='https://proglib.io/p/python-code-analysis/' target='_blank') 25) Статический анализ кода 255 | br 256 | | Справочник по статическим анализаторам кода в Python 3 257 | hr.m-0 258 | 259 | // Async programming 260 | section#async.resume-section 261 | .resume-section-content 262 | h3 263 | span.text-primary Асинхронное программирование 264 | .subheading.mb-5 265 | | Использование модуля asyncio. Корутины, событийный цикл и кооперативная многозадачность 266 | p.lead.mb-5 267 | a(href='https://www.youtube.com/watch?v=6KTjxQd1zjM' target='_blank') 26) Асинхронный Python глазами начинающего 268 | br 269 | | Видео-доклад, 21 минута. Введение в концепцию асинхронного программирования 270 | p.lead.mb-5 271 | a(href='https://www.youtube.com/watch?v=OEFsdk1tqAU' target='_blank') 27) Асинхронное программирование в Python 272 | br 273 | | Видео-доклад, 28 минут. Шикарный доклад, дающий представление о том, как работает asyncio под капотом 274 | p.lead.mb-5 275 | a(href='https://www.youtube.com/watch?v=ZGfv_yRLBiY&list=PLlWXhlUMyooawilqK4lPXRvxtbYiw34S8' target='_blank') 28) Уроки по асинхронному программированию на Python от Олега Молчанова 276 | br 277 | | Плейлист, 8 видеоуроков. Врядли найдете лучше 278 | p.lead.mb-5 279 | a(href='https://habr.com/ru/post/337420/' target='_blank') 29) AsyncIO для практикующего python-разработчика 280 | br 281 | | Статья. Содержит разбор основных терминов и понятий из мира asyncio, а также многочисленные примеры кода 282 | p.lead.mb-5 283 | a(href='https://docs.python.org/3/library/asyncio-task.html#coroutine' target='_blank') 30) Описание работы с asyncio от разработчиков Python 284 | br 285 | | Страница из официальной документации (PEP 3156). Содержит большое количество примеров кода с использованием asyncio 286 | hr.m-0 287 | 288 | // QA automation 289 | section#qa_automation.resume-section 290 | .resume-section-content 291 | h3 292 | span.text-primary Автоматизация тестирования. QA automation 293 | .subheading.mb-5 294 | | Автоматизированное тестирование пользовательских интерфейсов веб-приложений 295 | p.lead.mb-5 296 | a(href='https://www.youtube.com/watch?v=ooIjmhCpooU' target='_blank') 31) Что такое автоматизация тестирования 297 | br 298 | | Видео, 51 минута. 299 | p.lead.mb-5 300 | a(href='https://www.youtube.com/playlist?list=PLB2iiSfKWtvykq9s0plSVI_Du60i0iphU' target='_blank') 32) Автоматизация тестирования с Pytest и Python 301 | br 302 | | Плейлист. 18 уроков. 303 | p.lead.mb-5 304 | a(href='https://stepik.org/course/575/promo' target='_blank') 33) Автоматизация тестирования с помощью Selenium и Python 305 | br 306 | | Интерактивные видео уроки. 26 уроков, 80 тестов, 6 заданий 307 | 308 | hr.m-0 309 | 310 | // Algo 311 | section#algo.resume-section 312 | .resume-section-content 313 | h3 314 | span.text-primary Алгоритмы и структуры данных 315 | .subheading.mb-5 316 | | Источники для самостоятельного изучения алрогитмов и структур данных 317 | p.lead.mb-5 318 | a(href='https://www.labirint.ru/books/571060/' target='_blank') 34) "Грокаем алгоритмы" Адитья Бхаргава 319 | br 320 | | Книга, 290 с. Отличная книга для начинающих с примерами кода на Python 321 | p.lead.mb-5 322 | a(href='https://www.labirint.ru/books/720874/' target='_blank') 35) "Классические задачи Computer Science на языке Python" Девид Копец 323 | br 324 | | Книга, 256 с. В книге разобраны наиболее известные задачи CS с примерами кода на Python 325 | p.lead.mb-5 326 | a(href='https://stepik.org/course/1547/promo' target='_blank') 36) Алгоритмы: теория и практика. Структуры данных 327 | br 328 | | Интерактивные видео-уроки. 11 уроков, 17 интерактивных заданий 329 | p.lead.mb-5 330 | a(href='https://stepik.org/course/217/promo' target='_blank') 37) Алгоритмы: теория и практика. Методы 331 | br 332 | | Интерактивные видео-уроки. 47 уроков, 21 интерактивных заданий, 10 тестов 333 | p.lead.mb-5 334 | a(href='https://stepik.org/course/55971/promo' target='_blank') 38) Базовый курс по структурам данных 335 | br 336 | | Интерактивные видео-уроки. 50 уроков, 174 тестов, 84 интерактивных задания 337 | hr.m-0 338 | 339 | // Design patterns 340 | section#patterns.resume-section 341 | .resume-section-content 342 | h3 343 | span.text-primary Паттерны (шаблоны) проектирования и архитектура приложения 344 | .subheading.mb-5 345 | | Введение в архитектуру приложения и популярные шаблоны проектирования 346 | p.lead.mb-5 347 | a(href='https://www.labirint.ru/books/435407/' target='_blank') 39) "Python на практике" М. Саммерфилд 348 | br 349 | | Книга, 338 с. Детальный разбор всех популярных паттернов с примерами кода на Python. Много примеров, очень много 350 | p.lead.mb-5 351 | a(href='https://www.piter.com/product/sekrety-python-pro' target='_blank') 40) "Секреты Python Pro" Д. Хиллард 352 | br 353 | | Книга, 320 с. Книга рассказывает, как правильно и эффективно писать код и как должны быть архитектурно построены программы 354 | p.lead.mb-5 355 | a(href='https://github.com/faif/python-patterns' target='_blank') 41) Паттерны с примерами кода и описанием 356 | br 357 | | Github репозиторий 358 | p.lead.mb-5 359 | a(href='https://www.piter.com/collection/python/product/patterny-razrabotki-na-python-tdd-ddd-i-sobytiyno-orientirovannaya-arhitektura' target='_blank') 42) "Паттерны разработки на Python: TDD, DDD и событийно-управляемая архитектура" Г.Персиваль, Б.Грегори 360 | br 361 | | Книга, 336 с. Очень крутая книга, рассказывающая как на практике применять концепции DDD и TDD. Рекомендую! 362 | p.lead.mb-5 363 | a(href='https://www.labirint.ru/books/707677/' target='_blank') 43) "Микросервисы. Паттерны разработки и рефакторинга" К. Ричардсон 364 | br 365 | | Книга, 544 с. Крутейшая книга, в которой автор рассказывает про то, как надо создавать микросервисные приложения, а также как их рефакторить и тестировать. Примеры кода в книге на Java, но это не помешает уловить суть микросервисного подхода 366 | hr.m-0 367 | 368 | // DA and ML 369 | section#da_and_ml.resume-section 370 | .resume-section-content 371 | h3 372 | span.text-primary Анализ данных и машинное обучение на Python 373 | .subheading.mb-5 374 | | Теория и работа с фреймворками 375 | p.lead.mb-5 376 | a(href='https://vas3k.ru/blog/machine_learning/' target='_blank') 44) Машинное обучение простыми словами 377 | br 378 | strong Шикарнейшая 379 | | статья на тему что такое машинное обучение, где применяется и с чего начать изучение 380 | p.lead.mb-5 381 | a(href='https://stepik.org/course/76/syllabus' target='_blank') 45) Основы статистики ч.1 382 | br 383 | | Интерактивные видео-уроки. 29 уроков, 4 часа видео, 105 тестов 384 | p.lead.mb-5 385 | a(href='https://stepik.org/course/524/syllabus' target='_blank') 46) Основы статистики ч.2 386 | br 387 | | Интерактивные видео-уроки. 24 урока, 6 часов видео, 74 теста, 22 интерактивных задание 388 | p.lead.mb-5 389 | a(href='https://nbviewer.jupyter.org/github/KlukvaMors/basic_stat/blob/main/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82.ipynb?flush_cache=true' target='_blank') 46) Основы статистики ч.2 390 | br 391 | | Конспект лекций по курсу "Основы статистики" Анатолия Карпова 392 | p.lead.mb-5 393 | a(href='https://stepik.org/course/4852/promo' target='_blank') 47) Введение в Data Science и машинное обучение 394 | br 395 | | Интерактивные видео-уроки. 30 уроков, 9 часов видео, 54 теста, 21 интерактивное задание 396 | p.lead.mb-5 397 | a(href='https://stepik.org/course/401/promo' target='_blank') 48) Нейронные сети 398 | br 399 | | Интерактивные видео-уроки. 24 урока, 6 часов видео, 90 тестов, 27 интерактивных заданий 400 | p.lead.mb-5 401 | a(href='https://stepik.org/course/8057/promo' target='_blank') 49) Машинное обучение 402 | br 403 | | Интерактивные видео-уроки. 71 урок, 7 часов видео, 68 тестов 404 | p.lead.mb-5 405 | a(href='https://www.coursera.org/specializations/machine-learning-data-analysis' target='_blank') 50) Машинное обучение и анализ данных 406 | br 407 | | Специализация на Coursera от Yandex и МФТИ 408 | p.lead.mb-5 409 | a(href='https://praktikum.yandex.ru/data-scientist/' target='_blank') 51) Анализ данных 410 | br 411 | | Интерактивный курс от Яндекса. Платный 412 | p.lead.mb-5 413 | a(href='https://karpov.courses/' target='_blank') 52) Анализ данных 414 | br 415 | | Курс от Анатолия Карпова (@mail.ru). Платный 416 | p.lead.mb-5 417 | a(href='https://www.labirint.ru/books/609684/' target='_blank') 53) "Python для сложных задач. Наука о данных и машинное обучение" Дж. Вандер Плас 418 | br 419 | | Книга, 576 с. Справочник по библиотека и фреймворкам для анализа данных и машинного обучения на Python 420 | p.lead.mb-5 421 | a(href='https://www.labirint.ru/books/834363/' target='_blank') 54) "Однострочники Python. Лаконичный и содержательный код" К. Майер 422 | br 423 | | Книга, 256 с. Справочник по применению однострочников при решении задач анализа данных на Python 424 | hr.m-0 425 | 426 | // OS and Linux and CI/CD 427 | section#os_cicd_linux.resume-section 428 | .resume-section-content 429 | h3 430 | span.text-primary Введение в архитектуру операционных систем. OC Linux. Непрерывная интеграция и доставка (CI/CD), развертывание и управление конфигурацией (Ansible), контейнеризация (Docker) 431 | .subheading.mb-5 432 | | Современные ОС и Linux 433 | p.lead.mb-5 434 | a(href='https://stepik.org/course/762/promo' target='_blank') 55) Основы Linux 435 | br 436 | | Интерактивные видео-уроки. 34 урока, 147 тестов, 18 интерактивных заданий 437 | p.lead.mb-5 438 | a(href='https://www.labirint.ru/books/511420/' target='_blank') 56) "Внутренее устройство Linux" Брайан Уорд 439 | br 440 | | Топовая книга! 384 с. 441 | p.lead.mb-5 442 | a(href='https://www.labirint.ru/books/154977/' target='_blank') 57) "Сетевые операционные системы" Олифер В.Г. 443 | br 444 | | Книга, 544 с. Скачивание по прямой ссылке 445 | p.lead.mb-5 446 | a(href='https://www.labirint.ru/books/808992/' target='_blank') 58) "Безопасность контейнеров. Фундаментальный подход к защите контейнеризованных приложений" Л. Райс 447 | br 448 | | Книга, 224 с. Автор описывает простыми словами то, как работает контейнеризация в Linux под капотом, и показывает, как можно запускать контейнеры, вручную, без использования систем контейнеризации 449 | p.lead.mb-5 450 | a(href='https://urss.ru/cgi-bin/db.pl?lang=Ru&blang=ru&page=Book&id=273046' target='_blank') 59) "Kubernetes. Лучшие практики" Б. Бернс, Э. Вильяльба 451 | br 452 | | Книга, 288 с. Книга рассказывает о том, что такое Kubernetes, как им пользоваться и как настраивать 453 | p.lead.mb-5 454 | a(href='https://www.youtube.com/watch?v=7S1ndRRht6M' target='_blank') 60) Что такое CI/CD (непрерывная интеграция и доставка) 455 | br 456 | | Видео, 9 минут 457 | p.lead.mb-5 458 | a(href='https://www.youtube.com/watch?v=7SM8GLArTDY' target='_blank') 61) Сравнение существующих систем CI/CD 459 | br 460 | | Видео, 15 минут 461 | p.lead.mb-5 462 | a(href='https://www.youtube.com/watch?v=cyb10iplv7U&list=PLg5SS_4L6LYvQbMrSuOjTL1HOiDhUE_5a' target='_blank') 62) Уроки по Jenkins с нуля 463 | br 464 | | Плейлист. 14 уроков 465 | p.lead.mb-5 466 | a(href='https://www.youtube.com/watch?v=QvlWcxECzE8&list=RDCMUCemtVTjKhD_GcEOQ_rNOrRw' target='_blank') 63) Ansible: быстрый старт 467 | br 468 | | Вебинар, 1 час 43 мин 469 | p.lead.mb-5 470 | a(href='https://www.youtube.com/watch?v=QF4ZF857m44' target='_blank') 64) Основы Docker. Большой практический выпуск 471 | br 472 | | Видео урок. 1 час 25 минут 473 | hr.m-0 474 | 475 | // YouTube Channels 476 | section#youtube_channels.resume-section 477 | .resume-section-content 478 | h3 479 | span.text-primary YouTube каналы 480 | .subheading.mb-5 481 | | Каналы, которые мы рекомендуем 482 | p.lead.mb-5 483 | a(href='https://www.youtube.com/user/tkhirianov' target='_blank') Тимофей Хирьянов 484 | br 485 | | Лекции и практические занятия от одного из топовых российских преподавателей по CS 486 | p.lead.mb-5 487 | a(href='https://www.youtube.com/user/zaemiel' target='_blank') Олег Молчанов 488 | br 489 | | Канал посвящен программированию на языке Python 3. Здесь вы найдете видео уроки по программированию на Python, созданию сайтов и веб-приложений. Есть уроки парсингу сайтов, по Flask, уроки по Django 2, по созданию блокчейна на Python, ботов для Телеграма. 490 | p.lead.mb-5 491 | a(href='https://www.youtube.com/channel/UCeISxWd5UTxH6-uXp3ev-5w' target='_blank') dUdVstud 492 | br 493 | | Канал для изучающих (или просто любящих) прикладную математику и анализ данных. Математика для Data Science и Machine Learning с нуля. Есть и уроки по Python 494 | p.lead.mb-5 495 | a(href='https://www.youtube.com/channel/UCcrRKEJkKdhiYAuJ3cIYLZw' target='_blank') miracl6 496 | br 497 | | Канал, где автор делится своим опытом в области образования, карьеры, саморазвития в области Data Science. А также уроки по Python и DS 498 | p.lead.mb-5 499 | a(href='https://www.youtube.com/channel/UCeObZv89Stb2xLtjLJ0De3Q' target='_blank') АйтиБорода 500 | br 501 | | Проект, посвящен не столько программированию, сколько жизни айтишников изнутри. Образовательные ролики и 502 | strong интервью 503 | | (очень много интервью) 504 | hr.m-0 505 | -------------------------------------------------------------------------------- /src/scss/_global.scss: -------------------------------------------------------------------------------- 1 | // Global styling for this template 2 | 3 | body { 4 | padding-top: $navbar-base-height; 5 | color: $gray-600; 6 | } 7 | @include media-breakpoint-up(lg) { 8 | body { 9 | padding-top: 0; 10 | padding-left: $sidebar-base-width; 11 | } 12 | } 13 | 14 | h1, 15 | h2, 16 | h3, 17 | h4, 18 | h5, 19 | h6 { 20 | text-transform: uppercase; 21 | } 22 | 23 | h1 { 24 | line-height: 1; 25 | } 26 | 27 | p.lead { 28 | font-size: 1.15rem; 29 | font-weight: 400; 30 | } 31 | 32 | .subheading { 33 | //font-family: $headings-font-family; 34 | text-transform: uppercase; 35 | font-weight: 500; 36 | font-size: 1.5rem; 37 | } 38 | 39 | .bg-primary { 40 | background-color: #1e4ab5 !important; 41 | } 42 | 43 | .text-primary { 44 | color: #1e4ab5 !important; 45 | } 46 | -------------------------------------------------------------------------------- /src/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | @import "./variables/colors.scss"; 2 | @import "./variables/typography.scss"; 3 | @import "./variables/spacing.scss"; 4 | @import "./variables/grid.scss"; 5 | -------------------------------------------------------------------------------- /src/scss/components/_icons.scss: -------------------------------------------------------------------------------- 1 | // Styling for the rounded social media links 2 | 3 | .social-icons { 4 | .social-icon { 5 | display: inline-flex; 6 | align-items: center; 7 | justify-content: center; 8 | height: 3.5rem; 9 | width: 3.5rem; 10 | background-color: $gray-700; 11 | color: $white; 12 | border-radius: 100%; 13 | font-size: 1.5rem; 14 | margin-right: 1.5rem; 15 | &:last-child { 16 | margin-right: 0; 17 | } 18 | &:hover { 19 | background-color: $primary; 20 | } 21 | } 22 | } 23 | 24 | // Styling for the development technology icons 25 | .dev-icons { 26 | font-size: 3rem; 27 | } 28 | -------------------------------------------------------------------------------- /src/scss/components/_sidenav.scss: -------------------------------------------------------------------------------- 1 | #sideNav { 2 | .navbar-nav .nav-item .nav-link { 3 | font-weight: 800; 4 | letter-spacing: 0.05rem; 5 | text-transform: uppercase; 6 | font-size: 0.9rem; 7 | } 8 | .navbar-toggler { 9 | &:focus { 10 | outline-color: lighten($primary, 15%); 11 | } 12 | } 13 | } 14 | 15 | @include media-breakpoint-up(lg) { 16 | #sideNav { 17 | text-align: center; 18 | position: fixed; 19 | top: 0; 20 | left: 0; 21 | 22 | display: flex; 23 | flex-direction: column; 24 | 25 | width: $sidebar-base-width; 26 | height: 100vh; 27 | .navbar-brand { 28 | display: flex; 29 | 30 | margin: auto auto 0; 31 | padding: 0.5rem; 32 | .img-profile { 33 | max-width: 10rem; 34 | max-height: 10rem; 35 | border: 0.5rem solid fade-out($white, 0.8); 36 | } 37 | } 38 | .navbar-collapse { 39 | display: flex; 40 | align-items: flex-start; 41 | flex-grow: 0; 42 | 43 | width: 100%; 44 | margin-bottom: auto; 45 | .navbar-nav { 46 | flex-direction: column; 47 | 48 | width: 100%; 49 | .nav-item { 50 | display: block; 51 | .nav-link { 52 | display: block; 53 | } 54 | } 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/scss/sections/_resume-section.scss: -------------------------------------------------------------------------------- 1 | section.resume-section { 2 | display: flex; 3 | align-items: center; 4 | padding-left: 1rem; 5 | padding-right: 1rem; 6 | padding-top: 5rem; 7 | padding-bottom: 5rem; 8 | max-width: 75rem; 9 | .resume-section-content { 10 | width: 100%; 11 | } 12 | } 13 | @include media-breakpoint-up(md) { 14 | section.resume-section { 15 | min-height: 100vh; 16 | } 17 | } 18 | @include media-breakpoint-up(lg) { 19 | section.resume-section { 20 | padding-left: 3rem; 21 | padding-right: 3rem; 22 | padding-top: 5rem; 23 | padding-bottom: 5rem; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/scss/styles.scss: -------------------------------------------------------------------------------- 1 | // Import variables 2 | @import "./variables.scss"; 3 | 4 | // Import Bootstrap 5 | @import "bootstrap/scss/bootstrap.scss"; 6 | 7 | // Global CSS 8 | @import "./global.scss"; 9 | 10 | // Components 11 | @import "./components/sidenav.scss"; 12 | @import "./components/icons.scss"; 13 | 14 | // Sections 15 | @import "./sections/resume-section.scss"; 16 | -------------------------------------------------------------------------------- /src/scss/variables/_colors.scss: -------------------------------------------------------------------------------- 1 | // Pre-state grayscale colors used in other variables 2 | 3 | $gray-800: #343a40; 4 | 5 | // Override Bootstrap color system 6 | 7 | $orange: #bd5d38; 8 | 9 | // Override Bootstrap default state colors 10 | 11 | $primary: $orange; 12 | 13 | // Override Bootstrap yiq lightness value 14 | 15 | $yiq-contrasted-threshold: 205; 16 | -------------------------------------------------------------------------------- /src/scss/variables/_grid.scss: -------------------------------------------------------------------------------- 1 | // Override Bootstrap grid column variables 2 | // 3 | // Override the spacing between columns to add symmetry to the layout 4 | 5 | $grid-gutter-width: $spacer * 1.5; 6 | -------------------------------------------------------------------------------- /src/scss/variables/_spacing.scss: -------------------------------------------------------------------------------- 1 | // Restate and add to the Bootstrap default spacing variables 2 | // 3 | // The spacer is restated in order to add new entries to the $spacers map 4 | // The 10 and n1 through n10 spacers are newly added allowing for larger 5 | // spacing options and negative padding and margin utilities 6 | 7 | $spacer: 1rem; 8 | 9 | // Spacing variable to set the sidebar base width 10 | 11 | $sidebar-base-width: 17rem; 12 | 13 | // Spacing variable to add padding to the top of the body element that matches the height of the navbar 14 | 15 | $navbar-base-height: 3.375rem; 16 | -------------------------------------------------------------------------------- /src/scss/variables/_typography.scss: -------------------------------------------------------------------------------- 1 | // Override Bootstrap typography variables 2 | 3 | $font-family-base: "Muli", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 4 | "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", 5 | "Segoe UI Symbol", "Noto Color Emoji"; 6 | 7 | $headings-font-family: "Saira Extra Condensed", -apple-system, 8 | BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, 9 | "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 10 | 11 | $headings-font-weight: 700; 12 | 13 | $headings-color: $gray-800; 14 | 15 | $h1-font-size: 6rem; 16 | $h2-font-size: 3.5rem; 17 | $h3-font-size: 2rem; 18 | --------------------------------------------------------------------------------