Want to Become a Python Back-end Developer? Start Here.
![]()
If you take a quick perusal through Reddit or speak with other developers who are more set in their ways, you might run into one of these (incorrect) opinions.
Don’t listen to them.
Python is great for back-end development, and many employers feel the same way — just check out LinkedIn, Indeed, or Glassdoor and you’ll see thousands of jobs for Python back-end developers.
Who uses Python backends? More companies than you might expect. Google, Spotify, and Pinterest all use Python.
Aside from employer demand, there are plenty of reasons to want to become a Python back-end developer. Back-end development is a solid job, secure and with great job prospects and benefits. Python is a fun programming language that can help you do a lot of different tasks. It’s the most popular programming language, too, and the associated Python back-end salary is high — around $114k a year.
The issue is Python is typically taught either as a beginner’s programming language or specifically for data science. It’s great for both those purposes — the syntax and simple vocab make it a breeze to pick up, while extensive libraries make it ideal for data science.
That’s not a problem, it just means you’ll need to also learn some back-end skills on top of just Python programming if you want to become a back-end developer who writes Python.
In this article, I’ll break down how to become a Python back-end developer. I’ll discuss:
- What exactly a Python back-end developer does
- What back-end development skills you need
- What Python skills you need, aside from the usual suspects
- What projects and certifications can help
I mean, what even does a Python back-end developer do all day?
Pretty much the same as a Javascript, Go, Rust, or any other kind of back-end developer. The job description of a back-end developer remains pretty stable no matter what kind of programming language you use to accomplish your goals.
As a Python back-end developer, you’ll:
- Create the back-end of a website or app
- Maintain and robustify the servers that house data
- Deploy code to production
- Work with DevOps teams
- Work with the frontend team to integrate your back-end logic with a user interface
- Integrate with and query databases
- Do some security testing and hardening
- Look at a lot of logs
If you know anything about back-end development, that list of tasks should look pretty familiar to you since it’s basically unchanged from any other back-end job description.
(If you don’t know much about back-end development and want to learn more, I’ve covered back-end development job descriptions pretty here if you want to check out more info about that.)
Let’s take a closer look at where you can learn the skills you need to become a Python back-end developer specifically.
I already know Python, can I be a Python back-end developer yet?
Let’s take a moment and reflect on how great a language Python is. It’s so flexible, so scalable, and so rich in libraries and frameworks that make it so useful for doing so many things. That’s awesome.
But that also means you can spend years programming in Python without ever touching any of the skills you’d need to become a Python back-end developer.
Basic Python
Of course, to become a Python backend developer, you will need basic Python skills. These you probably already know, so I won’t spend much time here — just make sure you’re comfortable writing for loops, you know how to write functions, and you’re familiar with classes and objects.
If you want a quick revision, we’ve got a solid Python course here, or you can review Python’s shockingly readable documentation.
Frontend
“Did I click on the wrong article? Why am I learning about front-end?”
As I alluded to above, the back-end of an app doesn’t work in a vacuum. You’ll be building a system that talks to the front-end, or what your user sees and interacts with.
Imagine trying to design a plug that fits into a socket you’ve never seen. Possible, right? But hard. It’s much easier if you are familiar with the socket first.
Similarly, it’s possible to do back-end work without ever knowing how the front-end works, but it’s so much easier once you know a bit about the front-end.
You don’t have to be an expert by any means, but I recommend picking up some basic front-end skills, or at the very least, the networking layer than acts as the glue between a front-end and back-end. Let’s talk about that.
Networking
I’m not talking about making friends, although that never hurts. I’m talking about the services that allow communication between different systems and services.
Here are a few networking skills it’s useful to know as a Python back-end developer, along with a few places to learn more about them:
- Understand TCP/IP and HTTP protocols. Check out this HTTP course to learn all you’ll need to know about how front-end apps request information from a back-end.
- Be familiar with RESTful API design. This is a common architectural pattern to build web APIs that are scalable, maintainable, and easy to use. StackOverflow has a solid guide on the subject.
- Be aware of some of the networking libraries such as Requests, Twisted, or SocketIO. These help services communicate over the network, handling connections and data exchange. I’ve linked to the relevant documentation for each library.
Linux
As you may already know, Linux is the most popular operating system for servers and cloud-based infrastructure.
As a Python back-end developer, you should know how to operate in a Linux environment, which you’ll almost certainly be working with. Do you know how the command line works? Can you work without a GUI?
The answer to both of those questions should be “yes” before you pursue your path any further.
API Design
API design is a pretty critical part of being a Python back-end developer. As a backend developer, you could be in charge of designing and implementing the API endpoints that power the front-end or client side of the application. You need to ensure that the API is well-designed, scalable, and secure, and can handle expected traffic levels.
To secure your job, you should be intimately familiar with concepts such as:
- Endpoint design
- Data modeling
- Request and response formats
- Authentication and authorization
- Rate limiting
- Error handling
- and more.
Now, web frameworks, such as Flask and FastAPI, provide built-in support for building RESTful APIs. But as I’ll get into below, it’s good to know the “why” before you look for “how” shortcuts.
Web frameworks: Django, Flask, and FastAPI
One reason Python is good for back-end development is its frameworks. They make complex, hairy, repetetive things simple.
This is the longest section because as a Python back-end dev, this is the real non-negotiable bit. You should be deeply familiar with at least one of these frameworks since any Python back-end development job will require at least one of them.
But… before I jump in, a brief caveat as promised. Over here at Boot.dev, we’ve got a complex relationship with frameworks. (You can read more about that here if you’re interested.)
The TL;DR is that we don’t recommend starting with frameworks to learn back-end development, since it’s like learning to bake by using cake mix.
You can get a result that looks good, but you’re left with no understanding of the chemistry that makes it all work. And that means that when things go wrong, you have no clue how to look under the hood and get things working again.
But once you’re familiar with the why behind the tasks that frameworks do, like building a server, it often makes sense to use frameworks to make your work go faster.
There’s some discussion about which of these frameworks is “better,” but in reality each has its place.
I recommend beginning with Flask since it’s simpler. It’s so easy to get up and running * you can easily build a little demo prototype app, but it’s also easy to scale it up. It offers basic features, but if you want to get more complex, you’ll need to know how to add libraries or plugins.
Django is a good next step. It’s commonly described as a comprehensive, batteries-included web framework for Python. A team player that can do it all. It’s got a much steeper learning curve, but it’s typically used in bigger enterprises because of its standard structure and conventions.
FastAPI is perfect for building high-performance APIs and web applications, especially if you need async support and automatic API documentation.
However, at the end of the day, you should research which technologies are being used by the companies you’re interested in working for. If you’re applying for a job at a company that uses Django, you should know Django. If they use Flask, you should know Flask. And so on.
Security and authentication protocols
A lot of being a back-end dev is doing things that rightfully should be their jobs, like DevOps, database admin, and security, without complaining. As a Python back-end developer, it’s no different.
As a backend developer, you need to be aware of security issues that can arise when communicating over the network. You should have a thorough understanding of concepts like encryption, SSL/TLS, and OAuth that can help you build more secure and reliable systems. While not required, understanding the basics of the cryptography involved in these protocols can help you build more secure systems.
Databases * SQL and NoSQL
As a Python back-end developer, most employers will expect you to know all about backend technology, and that includes SQL and NoSQL databases.
I think SQL is more standard and hence more important to know, but it’s a good idea to be familiar with NoSQL as well.
SQL is a language used to query relational databases, which store more standard data formats. NoSQL databases store less conventional data, such as images, graphs, or key-value pairs.
I’ve touched on these before in this article, but I’ll briefly summarize them again here. To be a good back-end developer, you should be familiar with the following SQL database concepts:
- Data modeling and database schema design
- SQL queries, subqueries, and joins
- Indexing and optimizing database performance
- Relational data integrity and constraints
I recommend getting your feet wet with PostgreSQL, SQLite, MySQL, and MariaDB. If you want to learn SQL, check out this course.
As for NoSQL, these are the concepts you’ll need:
- Data modeling and document design
- Distributed architecture and scaling
- Querying and indexing with NoSQL-specific query languages or APIs
- Data sharding and partitioning strategies
- Key-value storage and caching
You’re most likely to come across MongoDB, but you might also stumble upon Redis, Elasticsearch, or Firebase.
As a Python back-end developer specifically, I recommend checking out SQLalchemy and PyMongo libraries, which are used respectively for SQL and NoSQL.
DevOps
If you’re not directly doing DevOps tasks like automating the build, testing, and deployment of software, you’ll be working closely with the DevOps teams who do.
As a Python back-end developer, understanding DevOps has become increasingly important. In fact, at smaller companies, sometimes the roles of DevOps and Backend Developer are combined.
DevOps is a set of practices that combines software development and IT operations to create a more efficient and reliable software development process. Along with automation, you should know how to manage infrastructure and monitor performance and logs.
To be fair, this is true of all flavors of back-end developers, not just a Python exclusive.
How do I prove I know all this Python stuff to become a back-end dev?
OK, say you know all these technologies, frameworks, and concepts already. Employers won’t just take your word for it.
You’ll be tested on these concepts at the interview stage, but A) anyone can be trained to parrot out the correct answer, and b) employers will be looking at your portfolio pre-interview. If you want to become a Python back-end dev, your project portfolio is of utmost importance.
There are two paths I recommend to develop projects you can put on your portfolio: come up with your own projects that illustrate your mastery (or at least familiarity) with the skills above, and nab certificates from external, trusted sources.
Both are good at polishing your skills and giving you a tangible thing you can point to and say, “Yeah, I know how APIs work.”
Let’s take a look at a few examples of both.
Personal portfolio projects
I’ve covered what I consider to be the best backend project ideas here, most of which you can repurpose to use with Python. I’ll add a few more options for Python back-end development project ideas, with linked tutorials:
-
. Use a popular web framework like any of the ones I mentioned above. This will help show that you know how REST APIs work, you’re familiar with the framework you use, and if you want, you can add user authentication. . This proves you’re familiar with Working with Python Modules, creating Python Libraries/Packages, and uploading and maintaining packages on PyPI. More importantly, it helps prove that you want to build things that make an impact on other programmers, which is a key part of being a back-end developer.
- Develop a platform-specific app (like Alexa, Monday, and Whatsapp). Bonus points if you do this especially for an employer’s platform, like Meta or Slack. This is so useful to show that you have read the platform’s documentation and that you’re flexible enough to adopt a tech stack, learn how to debug, and build something to purpose. It is also a great chance to show off your front-end skills.
Get Certified
Once you’ve added all your projects to your custom-build portfolio, you may want to add some certificates in Python back-end development. A certificate is just like a shiny badge saying to employers, “Look, someone other than my mom thinks I’m great at Python” or any other back-end development skill.
Here are some options to pursue which will demonstrate your capability in Python, back-end development, or both.
-
at Boot.dev. To get the certificate, you’ll need to prove mastery of Python (as well as Javascript and Go, two other important back-end programming languages). This course runs through all the critical skills I mentioned in the earlier section about necessary competencies. You’ll also get some extra projects, as a bonus, to put on your portfolio.
- Check out Coursera — they have a slew of back-end certificates available from IBM to Meta to Microsoft.
- Look to your local (or not-so-local) universities to see if they offer any certificates.
I’m finally ready to get the job!
By now, you should know:
- What a Python back-end developer does
- What Python and non-Python skills you need to be hired as a Python back-end developer
- How to can prove and demonstrate those competencies with portfolio projects and certifications
All you need is to look for a job.
You can find jobs simply by searching “Python back-end developer” on any of the big job boards, but you also shouldn’t be afraid to apply to any back-end development job that doesn’t specify a particular language. As I’ve stressed throughout this article, many of the skills, competencies, and technologies overlap for Python back-end devs and back-end devs of any other language.
If you’re set on specifically being a Python back-end dev, I recommend keeping a close eye on Python.org’s job board, which as you may imagine offers exclusively Python-related jobs. As I write this, there are 25 back-end jobs available!
No matter if you’re an experienced back-end dev, looking to get more into Python-based work, or you’re a die-hard Pythonista who wants to get a back-end job, you’ll be able to find the perfect career opportunity for you. Python is great, and being a back-end developer is (in my biased opinion) one of the best jobs in the world.
Подробный план самообучения на бэкенд-разработчика (Python или Ruby) "c нуля до профи"
— план предполагает, что вы уже определились с выбором желаемого языка программирования и направлением, которым хотите заниматься. Здесь это именно веб-разработка в части бэкенда. Выбор направления выходит за рамки этого плана.
— что выбрать Python или Ruby? Если у вас нет никакого опыта программирования, то Python. Ruby выбираем только в том случае, если а) у вас есть хоть какой-то опыт программирования б) вы уже попробовали Ruby и вам понравилось.
— перед началом плана прочитайте все уровни и определитесь, на каком находитесь вы. С этого уровня и начинайте.
— нужно ли строго придерживаться того порядка изучения, который предложен в плане? Нет, это не обязательно. Очевидно, что нет смысла изучать фреймворки, если вы еще не выучили язык. Или изучать продвинутые понятия ООП, если нет понятия об основах. Но в то же время, например, базы данных я поместил в Уровень 2 совершенно произвольно. Можно их начать изучать хоть с самого начала.
— нужно ли все указанные книги прочитывать от корки до корки, а курсы проходить от начала до конца? Нет. Читайте то, что вам заходит сейчас. Бросайте книгу/курс, если вам стало скучно.
Отсутствует опыт программирования. Совсем.
На этом уровне главная задача — научиться азам программирования и основам выбранного языка. Освоить синтаксис и основные конструкции.
Ну и побочная задача — понять, насколько это интересно, действительно ли хочется посвятить этому какую-то значительную часть жизни.
Книги и курсы для начинающих:
Бесплатные курсы на stepik:
Легкий способ выучить Python. Зед Шоу
Изучаем Python. Марк Лутц
Python на примерах. А. Васильев
На всякий случай напомню, что просто читать книги без практики абсоютно бесполезно. Делайте примеры и упражнения из книг, придумывайте свои задачи. Чем больше практики, тем лучше.
Внимание! Начинаем учить английский и не заканчиваем на всех уровнях. Первоначальная цель: научиться читать технические тексты и документацию. Следующая цель: разговорный язык уровня B1 (лучше B2).
Уже разобрались с основами, теперь учимся писать хороший код.
На этом этапе мы уже твёрдо убеждены, что хотим быть профессиональным разработчиком и готовы копать в глубину. На этом уровне нас ждёт настоящий хардкор.
Главная задача — изучить принципы ООП, научиться писать чистый код.
Побочная задача — освоить профессиональные инструменты разработчика: IDE/редактор (в том числе дебаггинг), Линукс, Git. Помимо самого языка изучаем его инфраструктуру: пакетные менеджеры, виртуальные окружения. Стандарты оформления кода, линтеры, статические анализаторы.
— устанавливаем линукс в качестве второй ОС (ну или единственной, если прям в омут с головой). Если вы богатенький буратино, то просто купите себе Мак. Профессиональная разработка бэкенда на Питон/Руби не ведётся на Windows. Просто смиритесь с этим. Я рекомендую не заморачиваться с выбором дистрибутива, а просто установить Ubuntu.
— начинаем изучать Git: https://git-scm.com/book/ru/v2 и заводим аккаунт на Github
— КЛЮЧЕВОЙ ПУНКТ. Мы учимся применять на практике теорию, о которой пойдет речь дальше. Делаем маленькие (МАЛЕНЬКИЕ!) проектики. Это должны быть библиотеки и/или консольные программы, чтобы не заморачиваться с GUI или вебом (он нас ждёт на следующем уровне). Придумывайте себе задачи сами, можно погуглить идеи. Это может быть текстовая игра/квест, хранилище паролей, список дел, и т.п. Проекты обязательно ведём в Git и выкладываем на Github.
— разбираемся, что такое виртуальное окружение и используем его
— используем пакетные менеджеры
— используем линтеры и учимся оформлять код в соотсветствии со стандартами
— в python привыкаем ставить type hints и использовать mypy
Теория на этом уровне
Теории будет много. Прежде всего, это углубление в язык.
Для Python читаем книгу «Python. К вершинам мастерства» Лучано Рамальо.
Для Ruby читаем «Metaprogramming Ruby» Paolo Perrotto и «Ruby. Объектно-ориентированное проектирование» С. Метц
Далее теория по ООП. Читаем книги:
— «Чистый код» Роберт Мартин
— книги по паттернам проектирования
* Паттерны объектно-ориентированного проектирования. Э. Гамма, Р. Хельм, Р. Джонсон, Дж. Влиссидес. Это легендарная книга, в которой появилось само понятие паттернов проектирования. Авторов еще называют «бандой четырех» (Gang of Fourth, сокращенно GoF). Это первоисточник по данной теме, все остальные книги вторичны. Недостаток: академический стиль изложения.
* Шаблоны корпоративных приложений. Мартин Фаулер. Еще одно академическое издание. Сложно читается, читать всё не нужно, но можно брать что-то для себя.
* Любый другие книги по паттернам, в т.ч. применительно к вашему языку.
— погуглить как можно больше материалов про SOLID. Начать можно с https://habr.com/ru/post/348286/
В целом, все материалы по паттернам надо воспринимать как сборник рецептов. Главное в них — это научится использовать на практике.
Изучаем разработку веб-приложений: базы данных, фреймворки. Делаем проекты. Начинаем рассылать резюме
Главная задача на этом уровне — научиться делать веб-приложения и сколотить из них портфолио.
Итак, для начала сосредоточимся на базах данных. Учить всё на Postgresql, это самая популярная СУБД.
— азы реляционной теории. Не нужно слишком глубоко здесь закапываться. Надо понять основные идеи. На уровне того, что есть «отношения» (это типа «таблицы»), которые состоят из «кортежей» (это типа строки таблиц), и есть еще «атрибуты» (это как бы заголовки столбцов). А между таблицами есть связи.
— язык SQL вплоть до извлечения данных из нескольких таблиц (join) включительно
Ключевой пункт: изучаем фреймворки. Для python это Django, для ruby это Ruby on Rails.
Как изучать фреймворки и по каким источникам? Я думаю, одним из лучших источников является официальная документация. Кроме этого есть книги и курсы на ютубе. Не буду указывать никакие ссылки, всё гуглится без проблем.
Пара книжек по Django, которые лично мне помогли больше всего:
— Django 3.0. Практика создания веб-сайтов на Python. Владимир Дронов
— Two Scoops of Django. D.R. Greenfiled, A.R. Greenfiled
Список книг по Ruby on Rails:
Самое главное: изучать нужно на практике, только так. Ваши источнки, будь то официальная документация или ютуб-канал, нужно читать/смотреть только до тех пор, пока вы не ухватили идею, как всё это работает. Должно быть ощущение «Ага, я понял!»
После этого придумываем маленькие (МАЛЕНЬКИЕ!) веб-проекты и начинаем делать. Книги, документацию и ютуб используем как справочные материалы. Всё выкладываем на Гитхаб.
Составляем резюме, в котором в качестве «опыта работы» у нас будут наши «пет-проекты». (как правильно составить резюме погуглите, это выходит за рамки данного плана). Веерно рассылаем куда только можно.
На этом этапе возможна следующая ситуация. Вам в ответ на ваше резюме придет предложение выполнить тестовое задание. Выполняем и добавялем его в коллекцию своих «пет-проектов». Плюс, получаем фидбэк от профессионалов, которые ваше тестовое задание оценивали. Становимся сильно лучше, как программисты 🙂 Приглашают на собес — идём, собесы также дают взрывной рост навыков.
Вероятно, на этом этапе вы еще не сможете трудоустроится. Но может быть и так, что сможете 🙂
Полезные общеразвивающие книги:
— «Совершенный код». С. Макконелл
— «Программист-прагматик». Э. Хант, Д. Томас
— «Программист-фанатик». Чед Фаулер
— «Человек эпохи IT». Сомнез
Осваиваем деплой на реальные сервера
Главная задача — задеплоить наши проекты, которые мы делали на предыдущем уровне.
Для этого надо освоить:
— docker, docker-compose. Пожалуй самая сложна тема на данном уровне, но её освоение даёт огромное преимущество соискателю, плюс сильно облегчает жизнь разработчику. Вот несколько вводных статей с Хабра для начала:
— понятие о CI/CD на примере Github Actions
— думаю, понадобится научиться на элементарном уровне настравивать nginx
Как здесь действовать? Есть разные облачне сервисы типа heroku и pythonanywhere, куда можно деплоить. Но мне всегда нравилось купить самый дешевый VPS и деплоить туда. В любом случае, ваша задача в том, чтобы ваш веб-сервис был доступен в интернете по ссылке (думаю, домен второго уровня покупать смысла нет, достаточно что-то типа blalbal.herokuapp.com ).
Заворачивайте ваши проекты в docker-compose.
Настройте https, сделайте, чтобы ваш пет-проект выглядел «как настоящий». Ссылку обязательно добавить в резюме! Это серьёзно повысит ваши шансы на трудоустройство.
Настройте CI/CD-пайплайн с помощью Github Actions. После этого ваш проект будет и с точки зрения разработки выглядеть почти профессионально. Еще плюсцы к вашему резюме.
По идее, если у вас будет 1-3 таких проекта, вас уже должны взять джуном без проблем. Если пока не берут, продожаем усиленно рассылать резюме и терпеливо ждём своего часа )
Уровень 4. Устроились на работу, что дальше?
Главное на этом уровне — найти хорошую команду с высокой инженерной культурой, желательно с тимлидом-ментором. Если при трудоустройстве будет выбор, обязательно спросите на собесе о команде, о том как выстраивается трек развития сотрудника внутри компании, будет ли у вас наставник.
Довольно часто бывает, что первая работа не самая удачная. Это нормально, потому что стояла задача заскочить в это поезд. Но когда вы уже в нём, то можно оглядеться и оценить ситуацию. Подходите к работе прагматично. Тут действительно классные дружелюбные ребята, с которым приятно работать? Или сборище мрачных снобов-мудаков? Или (что довольно часто бывает) просто нет никакой команды, и ты один сидишь со своими задачами и только google да stackoverflow твои лучше друзья и наставники?
Не надо бояться искать и выбирать. Работа — это не семья, начальник — не папа с мамой, а коллеги — не братья. Если работа говно — меняем без лишних сентименов.
Если что-то не получается — это не твои проблемы, а проблемы тех, кто тебя нанял. Потому что либо они решили сложные задачи подешевке свалить на джуна, либо не могут организовать эффективное обучение или взаимодействие с командой.
Вообще, на данном уровне главные проблемы которые возникают — это проблемы психологического характера. Поэтому гуглим всё что можно по теме «синдром самозванца» и излечиваемся 🙂
В любом случае, если ты прошёл (прошла) весь этот путь, ты уже просто огромный молодец и крутой/крутая чувак/чувиха! Проделать такую колоссальную работу дорогого стоит. Даже не думайте позволять кому-нибудь (чаще всего самому себе) обесценивать свои достижения.

1.1K поста 9.8K подписчиков
Правила сообщества
— Будьте взаимовежливы, аргументируйте критику
— Приветствуются любые посты по тематике программирования
— Если ваш пост содержит ссылки на внешние ресурсы — он должен быть самодостаточным. Вариации на тему «далее читайте в моей телеге» будут удаляться из сообщества
Я 15 марта этого года начал с Python 3.x возиться с нуля. Прошёл почти всю теорию до классов по Эрику Мэтизу, споткнулся на одном из упражнений и понял, что сначала надо вообще почитать по CS. После CS и Мэтиза вижу свой путь таким — Лутц, параллельно «Грокаем алгоритмы» (интересно написана, зацепила), «Чистый код» + «Совершенный код», паттерны (4 совы), SQL, Django. Планирую учиться по книгам, видеокурсы и pdf не идут никак.
В этом году будет 30 лет. По образованию — гуманитарий, с математикой в неплохих отношениях, но кое-где проседаю. Знакомых в IT тоже нет, так что всё сам.
Единственное, пока не определился, фронтенд или бэкенд.
Спасибо за пост! Сохранил.
Для ЛЛ план ещё проще:
1. Выучить английский
2. Выучить питон
3. Устроиться на работу
4. Подписаться на телегу
Понял, что у меня нет мотивации. Нужна реальная задача, для которой все это нужно, но где ее взять
Добрый день. Очень интересный пост, и все же хотел уточнить — почему для бэка Вы выбрали Python и Ruby, не упомянув Java? как я знаю, он является чуть ли не фундаментально значимым для этого направления, да и как первый язык прекрасно подходит
Читать ещё на Пикабу

Простыми словами о фреймворках
Всем привет, работаю java разработчиком последние 9 лет, хотел бы пояснить на максимально простом примере зачем нужны фреймворки и в чем их отличие от библиотек.
И те и другие созданы для исключения дублирования часто используемой функциональности: не нужно повторно писать и тестировать код, разработчики знакомы с распространенными решениями, что облегчает вход в проект.
Библиотеки имеют определенный интерфейс, который позволяет вызывать их код из вашего проекта. За интерфейс и его реализацию отвечают авторы библиотеки. Фреймворки же напротив, являются точкой входа и вызывают код вашего проекта. А это значит что теперь уже вы должны реализовать определенный интерфейс, который предлагает автор фреймворка. Это похоже на подключение плагинов в других программах.
Часть кода переезжает в настройки или в иной форме становится декларативной. Приведу пример конфигурации одного из самых популярных java фреймворков Spring. Проект будет загружать из БД список пользователей и отдавать их «как есть» через REST апи:
application.yml — конфигурируем порт для апи и настройку подключения к бд:
server.port: 8080
spring.datasource.url: jdbc:postgresql://localhost:5432/mydb
В формате фреймворка объявляем репозиторий — компонент для получения записей о пользователях из таблицы БД:
interface UserRepository extends CrudRepository<User, Long> <>
В формате фреймворка объявляем эндпоинт — точку для подключения других сервисов к REST апи нашего проекта:
Теперь другие сервисы могут через апи нашего сервиса получить список пользователей из БД:
С минимальными настройками можно подключить и другие необходимые компоненты — для работы с разными БД, очередями, логгированием, можно настроить транзакции, ретраи, авторизацию и всё остальное.
Если вы только начинаете карьеру в it, есть смысл попробовать воспроизвести пару примеров из интернета по вашему фреймворку, а также пройтись по теоретическим вопросам (вроде «жизненный цикл спринг бинов»), но было бы разумней потратить время на общие алгоритмические и технические темы. Всем удачи!

«А если изменить скорость открывания, то можно сделать самолетный движок»


Первый опыт работы в 16 лет в IT
Я хотел изначально написать этот пост на хабре, но это скорее просто личное желание поделиться опытом, радостью и слить накопленное, чем информативная статья с моими анализами и выводами.
Я занимаюсь программированием с детства, а веб разработкой всего пару лет, но тем не менее собрал достаточно знаний, чтобы попробовать найти работку в IT. Оно знаете, было как-то лень и интересно одновременно, я люблю приключения и к тому же я собирался работать удалённо. Мой системник уже проситься на тот свет, иногда просто может не включиться, помогает передёрнуть ОЗУ и почистить от пыли и он снова работает (Кому интересно, p7p55le + i5 750, 8 gb DDR3 и две Radeon HD 5830). Апгрейдить там бессмысленно, нужно с нуля собирать. Не то что бы меня это сильно мотивировало, ну останусь без пк, жизнь же продолжается; но он не ломается к удивлению, заставляя меня угрожать кулаком в монитор и по клавиатуре, когда курсор останавливается, а IDE (От реактивных мозгов) вылетает.
Путь до оффера
Приблизительно начало февраля 2022. Тихонько себе листал вакансии на hh и habr карьере, откликался, получал отказы, решал тестовые (увы, тестовой зарплаты не было), но я остановлюсь на собесах. Хотя и там особо всё просто, коммерческого опыта нет, ты маленький, и вообще что ты тут забыл. Потому я продолжал откликаться уже по приколу, на middle даже, ну прокатит и круто.
Ивент от яндекса.
Осень 2022. Яндекс приглашает поучаствовать в соревновании YaCup 2022. До денежного приза вряд ли дойду, а вот пройти отбор на стажировку по упрощённой схеме, если попал в топ 50 уже не так уж и не возможно. Рвя жопу и нервы, я занял 36 место (в направлении фронтенд) и через неделю меня пригласили пройти удалённо отбор. Подробно не буду. Прошёл первый этап, на том конце были весёлые ребята и прикольные задачи (относительно простые, по этому не нервничал). На втором этапе меня встретил мужик который вероятно давно не ухаживал за своей растительностью на лице. За ним была доска, где я должен был бы решать задачи, но у меня была фора, однако я всё равно завалил. В яндекс я не попал (
Удача?
Февраль 2023. Вечерочком сижу и листаю вакансии на хабре и откликаюсь на «Typescript Lead». Странное название, просто Typescript и просто Lead. В описании написано «в поисках джуна», ну а кто я, чтобы не тригернуться на слово «джун». Через часок, уже полностью сонный, смотрю пишет мужик с этой вакансии, мол, вообще смотришь куда откликаешься. Я подумал, ну бывает, хотя это не hh и на кассира случайно тут не откликнешься. Проверяю отклики и всё ок. Он зовёт поболтать.
Первый разговор был без вебки, так что я не знал кто там. По голосу лет на 20. Попросил выполнить тестовое к завтрашнему дню и втирал какую-то дичь про тёплую атмосферу в команде и что-то ещё, я не помню, хотел спать. Тестовое было простенькое, но я всё равно потратил на него пол дня.
На «собесе» меня встретил бородатый мужик далеко не 20ти лет, а как оказалось почти сорока. Вебку тоже пришлось включить, переборов себя. Это был просто разговор по интересам, был только один тех. вопрос (что такое DI?) на который я нашёл много что ответить (мог бы больше, но моя речь не поспевает за моими мыслями, я вообще довольно не общительный). Потом я ничего не помню, помню только конец. Через полтора часа разговора с меня уже стекли литры пота, пытаюсь сдерживать судороги в ногах и шею, которая тоже вот-вот пойдёт в разнос. Меня он оценил в 50к рублей и объявил испытательный срок — 3 месяца с 75% ставкой. Завершил разговор, требуя готовиться к первому рабочему дню. От меня он потребовал мой плейлист spotify, любимые фильмы, книги и moodboard, дабы «знать мой психотип», чтобы это не значило.
Надо сказать я устраивался на Frontend, он меня направил на FullStack и спойлер работал как Backend.
Первый рабочий день
Было так круто, что я аж в 6 утра подскочил. Меня добавили в телеграм группу по разработке. И к обеду мне прилетела задача (issue) в гитхаб. Единственное, что мне сказал руководитель — «Иди раскуривай».
Кстати про команду: руководитель(он же тот самый мужик), дизайнер(парень где-то лет 20ти) и два фронта, с которыми особо не контактировал.
Так вот возвращаясь к задаче. Я нихера не понял. Задача была наполнена непонятными мне терминами. Я подумал это нормально, капец какого опыта я наберусь (спойлер, это правда).
Чтож. Делать нечего, я пишу, что-то вроде «памагите, я ничего не понимаю». Меня направили почитать про [куча терминов]. «Раскуриванием» задачи я занимался следующую неделю.
Из будущего: задача была в том, чтобы доить базы сети аптек по всей России, готовить данные и кормить ими с ложечки аналитические сервисы. Ведь просто, правда? Как будто я с базами данных не работал или бэкэндом. Но вот данных там на сотни гигабайт и это вполне тянет на биг дату. Обрабатывать их нужно грамотно, чтобы не было утечки памяти. А как это делать, я не знал.
Медленно, но уверенно
Я погружался в новые технологии, местный стек и так любимое в этом месте DDD. И вот первый потребитель данных доволен. Всё работает как надо, спустя сотни исправлений. И прошло уже чуть больше двух недель. Всё время я работал над проектом один, и настраивал его с полного нуля.
А вот и первая ЗП за 2 недели. Что кстати удивило, с самого начало думал, что кинут.
Отношение начинает меняться
На одном из one-to-one
— Ну как там?
— Первый потребитель готов, ещё два осталось
— Замечательно. За этот день добьёш?
— Нууу. Эээ.. Тут я думаю где-то к концу следующей недели доделаю.
— Б*ть, какой следующей недели. У нас уже сроки на этой недели заканчиваются. Чё там делать, то. Ты должен был по моим предположениям ещё на прошлой неделе всё сдать и перейти к следующему проекту.
Дальше на меня льётся куча критики и мата, а с моими то социальными навыками, я просто сижу как камень, слушаю, говорю «ага» и со всем соглашаюсь.
Что-то похожее происходило каждую неделю. «Ну чё за день осилишь», «Так, тогда через час идём в прод, да?», а там работы на неделю.
Затем мне пришло сообщение, что мой испытательный срок нужно продлить на ещё один месяц. Я поинтересовался, как это повлияет на ЗП. Оказалось всё нормально, на ЗП это продление не влияет. Держите это в голове, пригодится.
С проекта на проект
Сроки просрались, меня ведут на другой проект, а там прод лежит, и вообще что-то там наворотили и не работает, иду на следующий, через дня 2 всем говорят бросать этот проект и идти на другой.
Чтож на этот раз это бот для подготовки формы(pdf файла) для миграции в США. Он уже был готов, но там нужно было что-то «поправить». Пока я это правил, появились подробности, что оказывается там вообще сценарий вопросов не правильный. Ну ладно, сел переписывать. Ну и как обычно, я должен был сделать это вчера, а почему-то потратил на это три недели. Ну работает и ладно.
Вообще я много когда узнавал новые подробности в не подходящее время.
Последняя капля
Напоминаю, что частенько меня кроют в чате и one-to-one. Так, что мотивации и настроения, что-то делать у меня нет. Каждый день жду увольнения.
У меня есть такая особенность, что я копирую манеру общения собеседника. Так что отвечать добром на такие сообщения я не мог, а в one-to-one просто говорю «ага» и стараюсь как можно быстрее уйти, потому что такой разговор мне не приятен. Чтобы вы не думали, что я так всегда общаюсь, с дизайнером общаться вообще по кайфу, нет желания уйти, хотя и поддержать разговор также не получается.
На проекте с ботом у меня возникла проблема, с тем, что бот падает при создании pdf, но ошибки нет, точнее она пустая. Я обращаюсь к руководителю (больше не к кому)
— У меня не собирается pdf, падаёт ошибка в виде пустого объекта
. не помню точно, но разговор зашёл к тому, что зачем мне linux, если я им не умею пользоваться, и вообще — купи мак. Вот у тебя docker стартует из под рута, потому и не работает
— Слушай. Ну вот! Да! У меня всё собирается. Это у тебя Docker из под рута стартует.
— Ладно, буду разбираться.
Посидев, я понял в чём ошибка. И тут до меня доходит. Как он мог сгенерировать pdf, если ошибка совсем в другом. Я начал кое что подозревать, что уже давно подметил.
Часто на мои глупые вопросы, я получаю слишком умные(тупые) ответы, по сути это просто каша из умных терминов. Вместо того чтобы переспросить, уточнить, руководитель мне либо посылают такой ответ, либо наезжает.
Ответ на один из моих глупых вопросов
Эти вещи нужно оборачивать в модельные сущности и эксплуатировать в рамках стекового инструментария, приватизация тут ничего не решает
Поняли? Контекст тут не важен, чтобы понять, что это отборный бред. Такие ответы я получал почти всегда.
Так, вот я решил проверить мою теорию(обращаясь к руководителю)
— А можно pdf который вчера удалось сгенерировать?
— [скидывает пустой pdf (бланк для заполнения)]
— Не, это бланк, мне нужно заполненный со вчера.
— Ты сказал не собирается, ну я и собрал. Генерация это уже другая задача.
И да. Я подтвердил свою теорию. Он придрался к термину. Я сказал «собрать», вместо «сгенерировать». Я окончательно сгорел, и назвал его душнилой, а потом не сдержался и ещё жёстче его покрыл. На что он ответил что-то вроде: что ты себе позволяешь, вы(команда), должны целовать мне ноги, я вам тут плачу, я собрал команду, я, я, я.
К этому времени в команде остался только я, приходили иногда новички (с не плохим таким опытом уже), но уходили через день, два. Мне кажеться они сразу понимали, что тут что-то не так.
Саботаж
С этого момента, почти каждый день продолжалась эскалация конфликта. Я больше не задавал вопросов по задаче (поскольку от этого я только теряю время на бессмысленный токсичный разговор), и шёл на one-to-one только со словом «ага» и каменным лицом.
Одним утром, без настроения пытаясь разобрать очередную задачу, уже по другому проекту, я вылетаю из группы в телеграме. Я сначала не понял, что произошло, потом зашёл на github и увидел, что больше не состою в их организации. И я понял — я уволен. Однако в течении дня мне ничего не написали. Так, что это сделал я.
— Это типо увольнение? Тогда уж можно пожалуйста официальную причину и ЗП за 12 дней?
— Официальная причина — некомпетентность, саботаж
— Официально — ты у меня не работал, по документам, благо, не успел тебе контракт оформить. Я рекомендую тебе походить к врачу и начать общаться с людьми, у тебя большие проблемы, которые тебе предстоит решить.
— А зп за 12 дней? Если я получаю 50тр в месяц, то за 12 дней это должно быть 20тр
— Ты не получаешь 50к в месяц, я продлил твой испытательный, ты согласился
Поняли, да? Я там даже и не работал. И что ещё за «саботаж».
Где же обещанное обучение к которому вы так ответственно относитесь, ламповая атмосфера и уважение к неопытным сотрудникам, о чём мне заливали в самом начале?
Вот такие мои весёлые приключения в мире трудоустройства в IT, так ещё и в 16 лет.
P.S. Ах, да. Мне хватило ровно на новый ПК. Так, что я не сильно расстроился.

Опять все забыли про мидлов


Что не так с Шедеврумом и моя попытка это исправить
Недавно прокатилась волна о том, как Шедеврум от Яндекса замечательно рисует флаги США по запросу «наша родина», и меня, как специалиста, это сильно кольнуло. Настолько, что я решил что-то с этим сделать.
Вот пример такого художества, взял у Tagash, потому что уже закрыли костылем конкретно этот запрос, но основной проблемы это не решает:

Почему вообще складывается такая картина: алгоритмы может быть и отечественные, но результат, что-то, говорит об обратном.
Такие системы создаются на основе огромного количества данных — баз на сотни терабайт, состоящих из различных изображений и маркировок к ним, которые их описывают. Почти все существующие системы тренировались именно на таких открытых, огромных каталогах, которых довольно немного, а все они, как вы могли догадаться, сделаны на английском.
Данных с маркировкой на русском просто нет, либо их ничтожно мало, поскольку никому это просто не было нужно. А теперь, несмотря на наличие одареннейших специалистов у нас (к счастью, еще далеко не все разбежались), которые работают над отечественными решениями, без нужной информации им будет крайне тяжело продвигаться и приходится подпирать решения костылями, но это все равно не будет наш продукт до конца.
Так вот, есть предложение помочь им. Если создать такую базу или каталог изображений с описаниями на русском, то вся система заговорит совсем по другому. В качестве первой инициативы, я накидал сайт, где можно добавить маркировку изображениям на русском и загрузить свои картинки для последующей маркировки:

(для названия решил скаламбурить: взял «AI» (Искусственный интеллект на английском), поменял буквы местами и получился ослик Иа. Не кидайте тапками за лого, это лучший осел, которого я осилил нарисовать, да и то через Dall-E 2).
Хочу сказать, что коллективно мы можем подготовить фундамент на котором у нас появится реальный шедеврум, который будет думать на русском!
Плюс в том, что мы уже понимаем, что от этого нужно и можем создать базу данных, которая будет более разнообразной и яркой, чем англоязычные аналоги. Звучит странно, но здесь у нас есть фора, потому что мы точно знаем каким должен быть сервис и можем именно под него собрать и составить информацию.
Итак, как все это работает:
Нажимаем «Предложить ассоциацию». Система даст картинку для описания, которую кто-то ранее загрузил. Опишите одним словом, потом чуть подробнее и какие эмоции вызывает. Нажали на кнопку, описание улетело, получили следующую картинку и плюс в карму.
Там же можно загрузить свою картинку, но она сначала пройдет модерацию, чтобы всякой жути не заливали.

Неплохим примером описания было бы:
— Одним словом: лисы
— Подробнее: мама лиса с двумя лисятками, которые держатся за ее хвост на фоне травы
— Эмоции: милота, любопытсво (можно любой формат эмоций, прямо так как хочется сказать)
Кстати, если у вас есть желание помочь, то мне нужна юридическая помощь, а также с модерацией, разработкой, наполнением, да и вообще предложения приветствуются. Есть пара вопросов о том, как не угодить в «места не столь отдаленные» за инициативность)
Пока все это хранится на Amazon, но как только будут решены юридические вопросы, буду переносить всё на отечественный хостинг. Цель — создать собственную базу, чтобы можно было гордиться отечественным продуктом.
А для братьев технарей — весь код лежит в открытом виде, все как положено.

Топ-25 бесплатных курсов обучения Python 2023 года
Подготовили для вас статью с бесплатными курсами по Python. В некоторых курсах есть тренажеры: можно проходить теории и там же практиковаться.
Покликайте на курсы, выбирайте. Важно, чтобы вам был удобен курс, понятен язык изложения, и ваш уровень знаний подходил для конкретного курса.
Python — это один из наиболее популярных языков программирования в мире, широко применяемый как в создании программного обеспечении, так и в Data Science B Machine Learning.
Тренажеры
Тип: тренажер состоит из блоков теории, после которых сразу идет практика с задачами внутри тренажера. Бесплатный сертификат о прохождении выдается после окончания курса.
Тип: обучающий тренажер.
Тип: обучающий тренажер.
Бесплатные курсы от школ
Курс на платформе Stepik от онлайн-школы BEEGEEK для начинающих и учащихся образовательных учреждений. Программа предлагает изучить основы владения Python, а по окончании участников ждет электронный сертификат.
Бесплатный курс от Мичиганского университета на платформе Coursera предлагает участником набор онлайн-лекций по базовым навыкам владения языком Python. Каждый поток длится 7 недель, в рамках которых профессор Чарльз Северанс преподносит знания из своей книги «Python for Everybody».
Бесплатный курс по Python от Хекслет для начинающих программистов. Материалы, среди которых — 7 уроков в формате текста или видео и тесты, раскрывают основы написания кодов на языке, а также описывают ключевые аспекты работы в его экосистеме.
В рамках этих курсов по Python от Skillbox автор Артем Манченков расскажет обо всем, что пригодится начинающему программисту, используя реальные примеры. Вместе участники пройдут путь от написания интерфейса мессенджера до создания голосового помощника — и все это в формате видео.
Как заявляет автор курса, его программа рассчитана для программистов Python с любым уровнем знаний. По мере прохождения участников ждут 90 видеоуроков и практических заданий. По окончании курса платформа Stepik выдает электронный сертификат.
Бесплатный курс от Академии IT с рейтингом 4,75. Обучение состоит из прохождения 42 уроков, во время которых автор Михаил Тарасов расскажет все об основах программирования на Python, а также поделится ценной информацией о будущей карьере программиста.

Курсы с Youtube
Курс YouTube-лекций по программированию на Python. Вся программа состоит из 123 видео длительность от 5 до 12 минут. При желании можно найти те же видео на языке оригинала.

Что можно писать на Python
Практически как Java, Python находит применение во многих областях программирования. Так, например, язык применяют в:
Создании систем автоматизации;
Математических расчетах и других продуктах.
Сколько приносит знание Python в 2023 году?
Средняя заработная плата Python-программистов, согласно данным портала ГородРабот.ру, составляет 131 478 рублей — лучший показатель на рынке труда. А вот новички, основываясь на информации HH.ru , могут получать оплату от 70 000 рублей.
Ключевой недостаток владения Python — это необходимость конкурировать с другими кандидатами за место в штате. По подсчетам того же ГородРабот.ру, количество вакансий на позицию Python-разработчика достигает до 203 мест ежемесячно, однако и предложение труда уверенно растет: так, команда Skillbox посчитала, что на одно место программиста Python в 2023 году приходятся сразу 20 кандидатов.
Почему Python?
Python — идеальное решение для каждого и предлагает:
Доступность — из-за простого синтаксиса язык понятен даже новичкам;
Кроссплатформенность — интерпретаторы Python поддерживаются большинством операционных систем;
Разнообразие применения — язык нужен везде: от веб-разработки до геймдева;
Интегративность — Python можно применять в сочетании с другими системами и встраивать его коды как компоненты.
Парсим яндекс диск при помощи Python
В данный момент я работаю контент-менеджером в «крупном» интернет — магазине. В моём случае, это больше 100 000 позиций.
Иногда приходится сталкиваться с такой проблемой: поставщик присылает фотографии со ссылками на яндекс диск. Это крайне неудобно, потому что приходится ходить по каждой ссылке и скачивать изображение к себе, а затем уже загружать на сервер и т.д.
Готового решения я не нашел и решил написать свою реализацию работы с яндекс диском. Хорошо, что я знаю python.
У меня было 2 версии программы:
когда по ссылке находится папка с картинками, python скачивает эту папку как зип файл, затем распаковывает. Все манипуляции записываются в csv файл, путь до файла с картинками
когда по ссылке идёт только одна картинка, в данном случаи все немного проще, не нужны лишние действия с распаковкой картинок
p.s. ещё были 2 побочные небольшие программки: 1-я для уменьшения размера картинки, 2-я для переименования картинок (менялся пробел на дефис)
Приступим к реализации
скачать и установить python c официального сайта https://www.python.org/downloads
открыть любимый редактор кода (я использую vscode) https://code.visualstudio.com
подключить следующие стандартные библиотеки: urllib.parse, csv, os, zipfile. Установить библиотеку requests https://pypi.org/project/requests/ (для отправки запроса на сервер)
для полного фен-шуя можно использовать виртуальное окружение, дабы не засорять систему ненужными пакетами. Подробнее о virtualenv можно ознакомится по ссылке https://docs.python.org/3/tutorial/venv.html или же использовать poetry.
Ссылки на яндекс диск имеют вид: https://disk.yandex.ru/d/xNBn7lE1_Y5knQ . Чтобы их можно было скачать, они должны быть публичными.
Обратимся к API яндекс. После ключа public_key=»вставляем_ссылку_на_файл»
В ответе мы получаем json, из которого нам нужно получить значение по ключу href. Полученное значение и будет нашей прямой ссылкой к файлу.

Пожалуй, на этом хватит теории, теперь, постараюсь внятно объяснить, как всё это можно применить в контексте python.
# создаем новый файл и подключаем нужные нам библиотеки
import requests
from urllib.parse import urlencode
import csv
import os
import zipfile
Для начало создадим функцию, которая будет возвращать нам ссылку для скачивания:
final_url = base_url + urlencode(dict(public_key=public_link))
response = requests.get(final_url)
parse_href = response.json()[‘href’]
return parse_href
Файлы могут быть в разных форматах: ссылки могут быть на одну или несколько картинок. В первом случае можно напрямую скачивать картинку по ссылке. Во втором, если по ссылке несколько картинок, то при скачивании мы получаем архив, который требует дополнительных действий (распаковку).
Далее, мы скачиваем файлы и в зависимости от его типа выполняем действия: просто записываем в результирующий файл или же переходим к его распаковке с последующей записью.
В итоге, мы получаем файл result_data.csv со ссылками на фотографии на нашем жестком диске:

В добавок, у нас на жёстком диске появляется папка со скаченными картинками в папке download_files.
Полностью посмотреть код можно в репозитории на гитхаб.
p.s. Официальная документация по API Яндекс. Диска
Братишка с пикабу подсказал готовую библиотеку на питоне. Спасибо b4ro тык.
p.s.s. Немного поразмышляв, я подумал, что неплохо было бы написать, тесты. Пройтись линтером по коду. Добавить функцию переименования файлов. Может быть что-нибудь ещё?)
Спасибо за прочтение! Комментарии, лайки, дизлайки, предложения, пожелания крайне приветствуются.

А я всего лишь пишу калькулятор на Python


Отчёт и благодарность Силе Пикабу
Здравствуйте, нежноуважаемые пикабушники!
Мне очень неловко. Я исчезла, хотя обещала появиться в январе, и, могло показаться, что, получив оперативную и душевную помощь от вас, я слилась в небытие.
Был цейтнот, школьная нагрузка была очень серьёзной. В настоящее время стало полегче. К тому же именно сейчас по проекту есть очень хорошие результаты, и я могу ими поделиться с вами.
С этим проектом наша команда участвовала в двух конкурсах и одной научно-практической конференции:
1. Проект стал победителем в заключительном этапе » Городского конкурса проектов «Юные техники и изобретатели – 2023»;
2. Занял призовое место с Дипломом 3 степени на конкурсе «Новые вершины Поиск НИТ»;
3. Занял призовое место в заключительном этапе городской открытой научно-практической конференции «Инженеры будущего».

Для первого опыта, считаю, что это замечательный результат.
Очень хочу вас всех поблагодарить потому, что именно ваше доброе участие так сильно меня вдохновило и придало уверенности!
Ведь слова поддержки очень важны, а вы предлагали поддержку не только на словах! Я всегда знала, что если в работе случится тупик, если мне не хватит знаний и накатит отчаяние, то я смогу обратиться к пикабушникам @gurux13, @girogor333, @havaec. Я по-настоящему чувствовала, что за моей спиной сила Пикабу! Спасибо вам!
Работа над проектом продолжается и сейчас, т.к. есть некоторые ответственные перспективы на будущее.
Если вам интересно, то можете посмотреть сайт проекта, там, кроме полезной информации, будет немного пруфов наших достижений и наши счастливые лица)
А вот и сам герой, благодаря которому я познакомилась с благородством и силой Пикабу. Встречайте: Тренажёр решения задач по теме графики функций!
Скачать exe-файл (для системы Windows 7/10/11) можно по ссылке https://disk.yandex.ru/d/phzR8yJKwJn9OQ .
Тренажёр был написан на Python, поэтому поиграть в графики функций получится только на компе или ноутбуке.

Повторится ли история с промышленной революцией в мире IT?
Стремительное развитие нейронных сетей заставляет задуматься многих представителей(или будущих представителей) IT-профессий о том, есть ли вероятность того, что меня заменят?
Да, сеньор и миддл разработчиков может рассмешить данный пост, ведь нейронные сети не имеют такого же опыта, они не умеют работать в команде и тем более мыслить дальше, чем заданный запрос. Софт-скиллы важный навык для любого программиста, но интеграция ChatGPT в разработку может помочь с написанием более мелких частей кода или с разъяснением некоторых аспектов для джунов, чтобы те не бежали и не отвлекали своих коллег с большим опытом по разным глупым моментам(тем же синтаксисом).
Но все же, нейронные сети лишь в начале пути своего развития, они уже умеют писать посты, составлять курсы и отвечать на многие вопросы людей(кроме конечно же философских), вдруг даже этот пост был написан с помощью него?). Сам факт их быстрого самообучения может пугать, они развиваются намного быстрее людей, но и требуют больше ресурсов для этого
Во времена промышленной революции поднялся большой шум, много людей потеряли работу из-за станков, но тут вопрос в другом, станки заменили людей которые занимались ручным трудом или же люди, которые научились пользоваться этими станками?
Оставлю этот вопрос открытым и задам еще один.
Мне хотелось бы узнать у опытных программистов, которые читают этот пост, пользуетесь ли вы ChatGPT в своей работе?🤔

Топ 5 бесплатных курсов по Python для начинающих
1. Учебники Python — на сайте pythonworld опубликованы уроки для изучении основы Python функции, циклы, кортежи, словари и т.д
2. Курсы от Яндекс-Практикум — тут рассказывают о самых азах бесплатно, а дальше платно.
3. Уроки на сайте academiait — доступный курс для изучении Python. Всего 42 бесплатных курса.
4. «Поколение Python» для начинающих от stepik — знакомит с Python новичков.
5. Инди курс от stepik — этот курс подойдет для программиста с любым уровнем вне зависимости от опыта.
Ответ на пост «Культ IT»
Давно написал (не здесь), повторю в качестве ответа
Два баяна, просто чтоб не искать когда в очередной раз спросят «за что тебе такие деньги платят»
Если бы водителей нанимали как программистов
Требования: профессиональные навыки в управлении легковыми и грузовыми автомобилями, троллейбусами, трамваями, поездами метрополитена и фуникулера, экскаваторами и бульдозерами, спецмашинами на гусеничном ходу, боевыми машинами пехоты и современными легкими/средними танками, находящимися на вооружении стран СНГ и НАТО.
Навыки раллийного и экстремального вождения обязательны. Опыт управления болидами «Формулы-1» — приветствуется. Знания и опыт ремонта поршневых и роторных двигателей, автоматических и ручных трансмиссий, систем зажигания, антиблокировочных систем, навигационных систем и автомобильных аудиосистем ведущих производителей — обязательны. Опыт проведения кузовных и окрасочных работ — приветствуется. Претенденты должны иметь сертификаты Mercedes, BMW, а также справки об участии в крупных международных ралли не более чем двухлетней давности.
Зарплата: испытательный срок 1-3 месяца, зарплата по результатам собеседования.
— Слушай, ты разработчик. Ответь, почему разработчики всегда неправильно оценивают время на создание программ?
— Представь что тебе надо разгрузить машину, сколько времени это займет?
— КАМАЗ, груженый песком
— У тебя нет лопаты и инструментов, только твои руки
— КАМАЗ вообще под водой
— Так же нечестно, ты постоянно придумываешь новые условия! К чему ты мне вообще все это рассказываешь? Вы, разработчики, вечно всякую фигню рассказываете! Вместо этого могли бы просто оценить правильное время на разработку.
Так что это не культ, это следствие того, что внедрение ИТ позволяет экономить деньги или зарабатывать больше — иначе всех нас поперли бы поганой метлой.
Мальчик Леша, в ИТ с 1999 года.

Astra Linux и жадность

Казалось бы, что нужно отечественным разработчикам операционных систем для популяризации и продвижения их продуктов на отечественном рынке кроме текущей непростой ситуации и кучи государственных и ведомственным приказов по импортозамещению?
Сделать свою операционную систему доступной по стоимости.
Сделать её удобной для эксплуатации в организациях и оперативно исправлять возникающие проблемы.
Сделать доступным обучение технических специалистов для последующего перехода с Windows на отечественные ОС.
Если первые два пункта весьма дискуссионные (что и у кого дороже, функциональней и удобней), то в третьем пункте Astra Linux внезапно оказалась впереди планеты всей по стоимости обучения (указаны цены за 1 академический час очного обучения):
Альт — от 500 до 750 рублей
Причём ещё недавно академический час у Astra Linux стоил также 1000 рублей, но с февраля у них вырос аппетит и цены на обучение внезапно подпрыгнули в полтора раза (письмо ООО «РусБИТех-Астра» от 31.01.2023 № РА-109). Понятное дело, что в этом наверняка виноваты санкции, курс доллара, повышение качества обучающих материалов и многое-многое другое, но точно не обычная жадность отечественных разработчиков.
P.S. Кстати, новостей об этом на официальном сайте вы не найдёте — видимо в «РусБИТех-Астра» решили не делиться ни с кем столь радостными известиями.

HapDoc — утилита для генерации документации
Приветствую.
Хочу поделиться с вами проектом и услышать ваше мнение о нем. Может быть чего-то не хватает? Может быть вы видите его как-то иначе? А может быть вы хотели бы присоединиться к разработке вместе со мной 🙂
Я разрабатываю утилиту для автоматической генерации документации под названием HapDoc. На данном этапе разработке возможно сгенерировать документацию для 3-х типов проектов:
Основными командами являются:
gen — Генерация Markdown файлов документации.
build — Генерация Markdown файлов документации с последующей сборкой в static HTML.
serve — Запускает сервер с помощью FastAPI и uvicorn, для self-host документации.
tmpl-new — Создает новый шаблон для документации
tmpl-list — Возвращает список имен сохраненных шаблонов
В будущем я хочу добавить включение и отключение различных типов файлов для генерации, например при генерации Python документации будет возможность включить также все .js файлы

Байки погромиста. Если кто-то скажет, что программирование — это скучно

Детектив kesn всегда готов помочь!
Вообще я, как правило, нормально программирую. Иногда даже такое заворачиваю, что сам тащусь весь день.
Но если б я писал, какой я красавчик, то никому не было бы интересно. Поэтому сегодня — очередная партия программистских историй от меня любимого, с косяками, багами и болью. Иногда это происходило по запарке, или когда я торопился, или после нудной работы, когда мозг уже плавился, а иногда просто я тупил, потому что я человек. В общем, такие вот типичные будни кодера. Наслаждайтесь!
❯ Функция не выполняется
Попросил меня как-то клиент отладить его скрипт. Говорит, не работает. Невероятно!

Я, когда клиент говорит, что ничего не работает
Скрипт секретный — ну как, для трейдинга на бирже, и принесёт миллионы денег, конечно же, но только когда заработает без ошибок. Поэтому клиент не пересылает мне его, а запускает screen share и делает, что я ему говорю. То ещё удовольствие, но хозяин-барин — оплата почасовая.
Всё шло хорошо, я потихоньку распутывал кривую логику, говорил как лучше сделать, а потом мы дошли до неё. До функции, которая не выполнялась. То есть буквально, чел вызывает функцию, а она ничего не возвращает и ничего не делает.
Смотрим в содержимое функции. Как и положено, это полотно кода на пару экранов, сходу так и не поймёшь, что она делает. Повсюду return что-то там, ветвления всякие итд. То глупое чувство, когда клиент тебя ждёт, а ты ничо не понимаешь и косплеишь рыбу.
Осложнялось всё тем, что отлаживать через клиента — ну такое. Он может запустить скрипт, но вот отладчик для него — страшное слово, и максимум, на что можно рассчитывать — это поставить print() в нужных местах. Разгадка оказалась проста: где-то в середине функции, там, где это было менее всего заметно, вместо return клиент написал yield. А в питоне yield — это магическое слово, которое превращает функцию в генератор, а все return . — в как бы raise StopIteration(. ), и вместо результата возвращается итератор, и выполнение кода останавливается до следующего обращения. Короче говоря, всего-навсего одним ключевым словом клиент полностью раздолбал логику своей программы. Маэстро!
❯ Как ловить эксепшн из генератора
Вообще генераторы в питоне — это и добро, и зло, и я ещё напишу про это в следующей статье (поэтому подписывайтесь, чтобы не пропустить). И хотя я программирую где-то со времён построения египетских пирамид, всё равно я умудряюсь делать ошибки.
Вот, например, кусок кода:


Тут у меня есть функция cache.apply(), которая берет quota_chunks, делает с ними какой-то вжух-вжух и возвращает новые quota_chunks. Я нарисовал диаграмму, чтобы изобразить этот процесс в более понятной форме.

Иногда случается так, что эта вжух-функция не срабатывает, и тогда, как и положено приличному питон-коду, бросается исключение.
Возможно, раньше эта вжух-функция была действительно функцией, но потом она превратилась в генератор (для большей эффективности). Генераторы всем хороши, кроме одного: они откладывают выполнение кода, и в реальности узнать, когда ваш код выполнится, бывает затруднительно. Вы можете создать генератор, отправить его на вход другому генератору, затем передать это в функцию, и уж тогда где-то внутри этой функции вызовется код.
Если проводить аналогию с реальностью, то это как, скажем, банковский чек: вы выписываете чек на сто тыщ мильонов, видите, что чек не сломался и отдаёте его другу, друг заворачивает в декоратор конверт и отдаёт подруге, подруга кладёт в коробку и отправляет по почте бабушке на деревню, бабушка распаковывает коробку, распаковывает конверт, приходит в банк с чеком и ловит эксепшн, потому что на вашем банковском счёте нет такой суммы и никогда не было.
Именно это тут и случилось. Я вызвал этот генератор и проверил, что он отработал без ошибок, но на самом деле генератор отработал совершенно в другом месте — там, где вызывается spy() — и именно там он и упал.
А знаете как я это отловил? В тестах. Поэтому пишите тесты.
❯ Строго по инструкции
Клиенты бывают разные: какие-то умеют немножко в HTML и frontend, а некоторые из наших клиентов умеют в backend. Один из таких клиентов часто сам писал backend логику и давал нам её на проверку, чтобы мы ему исправили баги, а может быть где-то сделали рефакторинг или code review.
В этот раз клиент решил сам попробовать сделать деплой небольшого проекта на сервер. У нас есть стандартный шаблон, который мы используем для всех новых проектов, и клиент взял его. Всё, что ему нужно было сделать — просто следовать шагам, которые там написаны. В идеале такие шаблоны должны сами разворачиваться при помощи скриптов, но мы заленились и просто написали список команд, которые нужно выполнить. Ну например, в каком-то месте нужно было зайти по ssh в машину и запустить какую-то команду.
И вот клиент взял нашу инструкцию и начал следовать тому, что там написано, слово в слово. Надо понимать, что разработчики обычно пытаются понять, что они делают (по крайней мере я на это надеюсь). Соответственно, те, кто читал этот скрипт, понимали, что должно быть сделано, и в случае, если у них, например, вместо pip используется poetry, а вместо apt-get у них pacman (i use arch btw), то они заменяли соответствующие команды.
Клиент же делал всё слово в слово, и он написал нам, потому что на одном из шагов у него случилась проблема. Если быть точнее, у нас в инструкции была описана ветка master, а на гитхабе по умолчанию ветка main, поэтому какая-то команда не находила нужную ветку.
«Изи фикс» — подумал я, созвонился с клиентом объяснил, что нужно делать, и хотел отключаться. когда возникла ещё одна ошибка. Оказывается, в инструкции был косяк, и при выполнении команды шелл делал подстановку, когда видел $SOMETHING — то есть не было экранирования. Мы исправили и это, и буквально через несколько секунд всплыл ещё один косяк. А потом ещё. И ещё.

Где-то через час я сказал клиенту, что пусть он всё бросит и я задеплою всё сам, а потом мы обновим ридми. Было стыдно.
❯ Ответочка
Когда-то я работал на интернет-магазин, и мы заметили, что у нас появляются фейковые заказы каждые утро и вечер. Сначала мы не смекнули, что к чему, но потом поняли фишку: идентификаторы заказа у нас были обычные IDшки из Postgres, поэтому конкурент мог сделать заказ утром (номер заказа 10), сделать заказ вечером (номер заказа 15) и просто вычесть второй номер заказа из первого и получить количество заказов, которые мы получили за день (15 — 10 = 5). Я до сих пор часто нахожу эту ошибку во многих проектах, и примерно могу оценить размер этих проектов.
Эту ошибку легко исправить: достаточно заменить последовательные ID на случайные — например, вместо номера заказа использовать timestamp или UUID.
Но сам факт мониторинга нашего магазина конкурентом меня здорово раззадорил, и я полез к нему на сайт что-нибудь тоже искать.
Мой девиз — «кто ищет тот всегда найдёт» (посмотрите мои статьи про уязвимости на хабре — 1, 2). Так и тут, я искал и обнаружил, что конкурент выкладывает розничные прайсы публично, а вот оптовые — только для зарегистрированных и проверенных партнёров. Сам файл он раздаёт nginx’ом с адреса вроде http://some-site.com/files/розничный_прайс.xls. А если так, то, скорее всего, никакой аутентификации при помощи бэкенда для самого файла нет, а значит, можно попробовать найти оптовый прайс.
Используя весь опыт, накопленный человечеством за все годы его существования, я заменил слово розничный на оптовый в названии файла. и совершенно забесплатно, без регистрации и смс получил ежедневное обновление оптовых цен конкурентов. Соответственно, я мог предлагать оптовикам цены те же или ниже и получать больше профита. Хехе.
❯ Скрапинг со скоростью света
В одном из моих проектов я использовал api ВКонтакте, чтобы анализировать кожаные мешки. Там не нужна была супер-скорость, поэтому я не полез в async, а просто написал функцию и распараллелил её по потокам при помощи ThreadPoolExecutor.
Программа начала просто летать! Вот как это делают сеньоры! Саенс, бич!

Слева направо: саенс, бич
Потом я начал подозревать, что программа работает слишком быстро даже для такого классного парня, как я. Я полез смотреть результаты, а там ничего не было, потому что в каждом из потоков программа очень быстро падала с ошибкой, а так как это потоки, то exception в потоке не «всплывал» в основную программу, и я думал, что всё норм.
Поэтому если всё работает слишком хорошо, то, возможно, всё очень плохо.
❯ Бог рефакторинга
Пришел ко мне клиент и говорит: Саня, давай позумимся и посмотрим, что-то вебхук отвалился и ничего не принимает.
Ну я такой про себя «опять клиент что-то сломал, бывает», полез туда смотреть. Глядел-глядел, глаз вообще ни за что не цеплялся. Ошибок в sentry не было. Потом нашёл вот такой код:

На этом моменте я распушил свой хвост и начал рассказывать клиенту, что нельзя вот так декорировать метод, ибо этот декоратор только для функций, да и вообще аргумент self пропущен. Короче, комбо из двух ошибок.
К несчастью, у меня стоит расширение git lens, которое пишет, кто именно написал каждую строчку кода. Я в основном использую это, когда вижу какую-то хрень: если автор кода — чувак из наших, то, скорей всего, это я тупой и что-то не понимаю в задумке автора; в других же случаях это, как правило, обычный плохой код.
И вот я смотрю, а этот код написал. я сам. Вот так я примерно выглядел:

Самое смешное, что в оригинале клиент написал рабочий код, потом пришёл я всё рефакторить и случайно сломал. Я много раз извинялся перед клиентом. Ух, до сих пор стыдно.
❯ Детектив kesn и тайна ssh
Говорят мне как-то: клиент, с которым мы работали год назад, восстал из мертвых, и теперь ему нужно перенести и обновить проект в AWS. Вон там наш девопс написал какие-то скрипты сто лет назад, возьми их и задеплой.
Я человек простой, мне сказали задеплоить — я и задеплою, хоть на AWS, хоть на тапок.
Запускаю я скрипт, он всё делает, и теперь я хочу зайти на сервер и вручную проверить, что всё работает. И тут всё заверте.
Сначала пробую ssh -i ключ root@ip. Не работает. Потом вспоминаю, что юзер в AWS обычно ec2-user, поэтому пробую ssh -i key ec2-user@ip. Не работает. Может, там авторизация не по ключу? Пробую ssh ec2-user@ip. Не работает. Сделал dig, попробовал подключиться не напрямую, а через load balancer. Согласен, тупая затея.
Пошел в дэшборд AWS смотреть настройки файрволла. Вижу два странных айпишника. Очень странно. Беру первый, проверяю геолокацию по ip. По локации понимаю, что это, кажется, статический ip девопса. Какого хрена? У нас же есть бастион, и все соединения должны проходить через него. Проверяю второй ip из файрволла. О, так это же и есть бастион. Ну отлично, теперь делов-то — добавить всю эту конфигурацию с бастионом в .ssh/config, чтобы в будущем было легко подключиться. Лезу в конфиг, а там уже есть эта конфигурация.

Итого, в поисках настроек доступа я полностью проверил всю инфраструктуру, чтобы обнаружить эти настройки на моем же компе.
❯ Ошибка платежа
На sentry прилетел отчёт об ошибке, попросили посмотреть. Стал разбираться. Мой код двухгодичной давности.
Логика была простая: есть намерение клиента платить за подписку, и есть прикрепленная карта клиента. Пока намерение активно, мы пытаемся списывать деньги с карты. Это логично: даже если на карте нет денег, то раз клиент хочет пользоваться сервисом, мы будем пытаться списать до тех пор, пока это не получится. Если клиенту не нужна подписка — он отзывает намерение.
Единственное, что я не учел — что клиент может просто всё забросить, ничего не отменяя. И вот на протяжении года наш сельдерей-разнорабочий (celery worker) запускался, пытался списать у клиента деньги, получал отлуп, жаловался в sentry, и засыпал, чтобы назватра всё повторилось, и так каждый день, без конца и края.

❯ Лёгким движением руки сэкономить кучу денег
Я заметил, что очень часто клиенты могут сэкономить неплохую такую кучу денег, сделав просто какое-то минимальное телодвижение. Вот несколько примеров:
Чувак хостил видео на aws s3 и раздавал через амазоновский CDN. Выходило $655 в месяц. Потом нашёл BunnyCDN, я перенастроил приложение (заменил где-то 4 строчки минуты за две), и внезапно с новым CDN в месяц стало уходить только $70. Ну не эпично ли за пару строчек кода?
Клиент платил сотни долларов за жирный инстанс Elasticsearch на AWS. Почему — я хз. Потом он заподозрил неладное. Мы замерили реальную нагрузку и перенесли Elastic на одну из самых дешёвых машин в digital ocean, за которую клиент теперь платит $24 в месяц. Профит!
У клиента было много файлов на s3, платил он тоже много. Потом перенесли всё на b2, там даже делать почти ничего не надо — у них интерфейс совместим с s3. Получили экономию раза в 4.
❯ От судьбы не уйдёшь
У нас есть шаблон для новых проектов на cookiecutter. Он удобен тем, что если мы что-то меняем в шаблоне, то можем легко обновить проекты клиентов при помощи cruft.
Как-то меня наняли как раз обновить проект. Проект был старый, отстал от нашего шаблона очень прилично, и когда я попытался его обновить, то обнаружил, что изменилось почти всё. Я начал аккуратно разрешать конфликты, и как раз примерно в этот момент штатные сотрудники клиента начали пилить что-то эпичное в своей ветке.
И вот дело подходит к концу, у них куча изменений, у меня столько же. Мы говорим «ну мы всё», они такие «мы тоже вот уже заканчиваем». Начальник мне пишет: «Заливай быстрее в мастер, пока они не залили своё, а то будем потом всю жизнь конфликты разбирать. одинодин». Ну я на скорости слил наши обновления в мастер-ветку и мысленно пожелал удачи их разрабам: наша работа сделана, мастер мы обновили, а то, что их разработчики отстали от мастера и у них конфликты — ну штош.

Прошло много месяцев, и угадайте, кого они наняли, чтобы разрешить все конфликты и залить их ветку в мастер?
❯ Детектив kesn и поиски пароля
Настраивал я как-то инстанс elasticsearch. Там была отдельная машина, я на ней с помощью docker разворачивал ElasticSearch. Сначала делал всё в ручном режиме, проверял, потом писал скрипт для автоматизации. Для начала просто запустил сервер без всего, потом начал разбираться с авторизацией.
Что должен знать Python разработчик в 2020 году

Добрый день, дорогие читатели блога ITVDN! Предлагаем вашему вниманию новую публикацию в рубрике “Что должен знать разработчик. ”, в которой мы пишем о самых популярных IT-профессиях. Ранее уже были опубликованы обзоры по FrontEnd и .NET. В этот раз в центре внимания язык Python. В каких сферах он успешно применяется, а в каких буквально незаменим? Какими знаниями нужно обладать, чтобы стать, к примеру, Python BackEnd разработчиком? Все это вы узнаете в нашей статье. Приятного чтения!
В последние годы язык программирования Python стремительно набирает популярность. По данным Stack Overflow Developer Survey 2019, в котором приняли участие более 87 тысяч IT специалистов из разных стран, Python в 2019 году опередил даже таких постоянных и несомненных лидеров как Java, С# и С++. Сейчас он широко используется в Data Science (машинное обучение, анализ данных, визуализация), разработке встроенного программного обеспечения и в реализации серверной части веб-приложений. Также при помощи Python можно создавать игры, десктопные и мобильные приложения, писать тесты для ПО, а также упрощать администрирование ОС.
Как видите, сферы применения довольно обширны. Мы постараемся затронуть самые популярные, в которых Python используется в качестве основного средства программирования.
Начнем с технологий, которые должен знать любой Python-разработчик вне зависимости от специализации.
Python
Многие сходятся во мнении, что язык программирования Python — один из самых легких для изучения, его часто рекомендуют в качестве первого языка начинающим программистам. В то же время это высокоуровневый язык программирования общего назначения, с большим потенциалом повышения производительности программиста, скорости разработки и читаемости кода. Каждый Python-девелопер должен владеть таким набором знаний:

- Синтаксис языка Python: типы данных, строки и символы, операции с целыми и вещественными числами, отступы, условные и циклические конструкции, функции, списки, словари, классы, файловый ввод-вывод, логические операции и операции сравнения.
- Популярные библиотеки и фреймворки. Этот пункт зависит от выбранного IT-направления. К примеру, если вы планируете себя реализовать в веб-разработке, отличным выбором станет библиотека Requests, которая облегчит процессы составления HTTP-запросов, также будут полезны фреймворки Django и Flask. Если же вас увлекает машинное обучение, то Theano, TensorFlow, Keras и другие библиотеки помогут с построением и тренировкой нейронных сетей.
- IDE и редактором кода. Проекты лучше создавать в интегрированной среде разработки (IDE) или в редакторе кода. Это позволяет сделать написание кода максимально удобным: подсветка синтаксиса, автодополнение, инструменты сборки, возможность отладки код и прочее. Самыми популярными платформами являются PyCharm, WingWare IDE, Komodo.
Открытым остается и вопрос, какую версию Python стоит изучать: 2.x либо 3.х? Согласно информации из официального источника разработчиков python.org, в 2020 году прекращается поддержка Python 2.7. Соответственно, стоит сконцентрировать усилия на изучении именно версии 3.х.
Разработчик должен иметь глубокие знания языка Python, понимать и уметь применять на практике принципы объектно-ориентированного программирования (ООП).
Английский язык
Знание английского языка — естественное требование для каждого разработчика в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде разработчиков обычно знаний языка на уровне чтения технической документации и комментирования кода вполне достаточно, однако если вы планируете самостоятельно вести переговоры и переписку с иностранным заказчиком, ваш уровень должен быть выше.
Git & GitHub
Git — наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии.
Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.
Алгоритмы и структуры данных
Понимание алгоритмов и структур данных является очень важным для любого программиста. Исключением могут быть разве что FrontEnd разработчики.
Данные используются во всех сферах нашей жизни: от банковских счетов и медицинских карт вплоть до списка оплаченных покупок в супермаркете. Знание структур данных поможет вам хранить информацию в упорядоченном виде, что упростит работу с ней. Также это повысит общую производительность ваших программ.
Тема связана со специальностями:
Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач.
Методологии разработки Agile/Scrum
Методологии разработки — это своеобразные путеводители по процессам эффективной разработки ПО. Их применение помогает организовать максимально продуктивную работу всех участников, которые напрямую или косвенно задействованы в разработке продукта в соответствии с выбранной стратегией.
Agile — семейство гибких методологий разработки программного обеспечения, которое позволяет выпускать продукт небольшими частями, постоянно его дополняя и совершенствуя. При таком подходе технические и бизнес-подразделения работают совместно, ПО постоянно обновляется, обеспечивается быстрое принятие решений и выявление неправильных подходов, приложение проще обслуживать, а качество кода готового продукта более высокое. Agile имеет собственный манифест, который подробно описывает основные принципы, на которых строится гибкая разработка.
Scrum является одной из реализаций agile-подхода. Его используют многие команды, поэтому знание особенностей работы со scrum-моделью для разработчика серверного ПО является востребованным и весьма полезным.
Итак, мы рассмотрели технологии, которыми должны владеть все Python разработчики, не зависимо от прикладной области, в которой они работают. Теперь давайте рассмотрим наиболее популярные специализации, в которых может себя реализовать Python разработчик, а это:
- Data Scientist
- BackEnd Developer
- DevOps Engineer
- Automation QA Engineer (Python)
Проанализируем каждое направление, затронув основные технологии. Также расскажем, каким образом Python используется в Desktop, Mobile и Game разработке.
Что должен знать Python Developer, работающий в сфере Data Science
Легкий и лаконичный Python нашел себе широкое применение в такой важной сфере разработки, как Data Science. Почему именно Python? Он прост в изучении и способен в несколько строк кода создать искусственный интеллект, который будет способен к самообучению, либо посчитать матрицу внушительных размеров.
Data Science подразумевает работу с большими объемами данных и включает в себя сбор, анализ, структурирование и дальнейшую визуализацию информации. Каждый специалист данной области занимается:
- сбором большого количества неупорядоченных данных и преобразованием их в удобный формат;
- решением бизнес-задач с использованием данных;
- программированием на Python, R и других языках;
- работой со статистикой;
- использованием Machine Learning, Deep Learning и текстовой аналитике;
- сотрудничеством с IT и бизнесом в равной мере;
- изучением современных тенденций, которые могут помочь в разработке, которая ведется на данный момент в компании.
Итак, какими технологиями необходимо владеть, чтобы стать Data Scientist?
Линейная алгебра и математический анализ
Data Science — это как раз та область, в которой без знаний математики ну никак. Работа с колоссальным объемом данных предусматривает в обязательном порядке применение аппарата линейной алгебры. А это матрицы, векторы, линейные уравнения, различные алгоритмы классификации и кластеризации, которые широко используются (подробнее в следующих разделах). Также необходимо знать оптимизацию средствами матанализа.
Статистика
Наука, которая применяет совокупность методов и приемов по сбору, обработке, представлению и анализу числовых данных, чтобы впоследствии на их основании сделать те или иные выводы.
Статистика содержит такие важные разделы, как: выборка, распределение частот, среднее значение, взвешенное среднее значение, медиана, вероятность, распределения вероятностей, тестирование значимости, а также ряд других тем и понятий. В интернете есть множество хороших англоязычных курсов, которые помогут освоить разделы статистики, которые обязательны для специалиста Data Science.
Библиотеки и дополнительные инструменты Python
Для всевозможных математических вычислений используется Python, а точнее — его библиотеки. К примеру, Matplotlib и Seaborn используются при необходимости визуализации данных, NumPy для работы с уже упомянутой линейной алгеброй. Для научных вычислений прибегают к использованию SciPy. Pandas позволяет выполнять быстрый анализ, очистку и подготовку данных из разных источников — Excel, SQL, веб-страницы, файлы CSV. Таким образом, библиотеки Python предоставляют отличный набор для анализа данных и визуализации.
Среди дополнительных инструментов особого внимания заслуживает Jupyter Notebook, который позволяет создавать очень наглядные и информативные аналитические отчеты путем совместного хранения кода, иллюстраций, комментариев, формул и графиков.
Базы данных
Поскольку работа Data Scientist-а плотно связана с обработкой большого количества информации, очевидно, что без баз данных тут не обойтись. Необходимо знать, как извлекать и обрабатывать данные, уметь писать и выполнять сложные запросы.
Существуют реляционные базы данных (так называемые, SQL базы данных) которые используют структурированный язык запросов, и нереляционные (NoSQL), которые предлагают динамическую структуру для определения и обработки данных. К системам управления баз данных (СУБД) первого типа относят MySQL, PostgreSQL, Microsoft SQL Server, Oracle. Ко второму типу — MongoDB, Cassandra, BigTable, Redis, RavenDB и прочие.
Несмотря на широкое распространение NoSQL, специалисты Data Science все же используют SQL технологии, поскольку зачастую работают именно с упорядоченным множеством данных (медицинские карты пациентов, транзакции клиентов и т. д.). Здесь наилучшим выбором станет PostgreSQL/MySQL/SQL Server.
Машинное обучение
Это ответвление искусственного интеллекта, основная идея которого состоит в следующем: компьютер должен не просто использовать заранее написанный алгоритм, а самостоятельно обучаться решению поставленной задачи (например, задачи определения символов по отсканированному изображению текста, опознавания лиц и голосов, подборки видеороликов на YouTube с учетом просмотренных ранее).
Минимальный набор базовых алгоритмов машинного обучения, который необходимо знать: линейная регрессия, логистическая регрессия, SVM (метод опорных векторов), random forest (“случайный лес”), дерево принятия решений, Gradient Boosting, РСА (метод главных компонент), k-means (кластеризация методом k-средних), k-NN (классификация методом k-ближайших соседей), ARIMA (интегрированная модель авторегрессии скользящего среднего).
Что нужно знать начинающему бэкенд-разработчику, кроме языка программирования
Некоторые новички считают, что достаточно выучить нужный язык программирования — и всё, это знание по умолчанию делает из вас отличного бэкендера. Помните подход «купил зеркалку — стал фотографом»? Но это далеко не так.
Меня зовут Лера Солодовникова, я продакт-менеджер на программе «Python-разработчик» в Яндекс.Практикуме, сегодня хочу обсудить необходимые для работы бэкендера смежные знания и умения. По большей части текст ориентирован на Python-разработчиков, но пригодится и тем, кто работает с другими языками, — принципы довольно общие, разница лишь в инструментах.
Ещё в посте — отношение различных компаний к вашим навыкам, их важность для прохождения собеседования, а также подборка полезных книг по теме.
Базис
Начнём с главного — с ОС. Хороший бэкендер должен быть знаком с unix-подобной операционной системой. Это могут быть не только разные Linux-дистрибутивы, но и macOS или FreeBSD, но общепринятым стандартом всё же является Linux. Работать вы можете на ПК или ноутбуке с любой ОС, но Linux нужно знать. Ведь вам придётся довольно активно взаимодействовать с серверами, а большая часть из них работает на Linux.
Из этого пункта плавно вытекает второй — работа с командной строкой. Это нужно для того, чтобы говорить с сервером на его языке. Нужно не просто знать, как нагуглить ту или иную команду и что она делает, а разбираться в командном интерфейсе. Опять же, допустимы варианты в зависимости от личных предпочтений или литературы, по которой вы учились: zsh, bash, fish, но стандарт — bash.
Следующее требование ― знание систем контроля версий. И тут уже без особых альтернатив: нужен именно Git, несмотря на наличие выбора. Изучите сам Git и механику взаимодействия с ветками, если собираетесь работать в команде. Впрочем, если вы интересуетесь бэкенд-разработкой и сейчас читаете этот текст, аккаунт на GitHub у вас уже наверняка есть (а если нет, вы знаете, что делать).
Очень пригодится базовое знание принципа работы Сети в целом. Мы сейчас не говорим о доскональном изучении HTTP и всех тонкостей DNS, но вы должны представлять, что именно происходит при попытке зайти на какой-то сайт. Что к чему подключается, какие работают связки, что грузится в первую очередь и тащит за собой остальное.
Дополнительным преимуществом для начинающего бэкенд-разработчика будет знание хотя бы одного веб-фреймворка — для Python это Django или Flask. Плюс базовые знания SQL. Никто не будет выставлять вас на ежемесячные соревнования SQL-программистов, но важно уметь самому проектировать БД, работать с ними через ORM, если мы говорим про Django, или через SQLAlchemy в случае с Flask.
Ну и, конечно, никуда без основ администрирования сервера, хотя бы на уровне «Я могу сам задеплоить свой проект по SSH, не отвлекая коллег от чтения Хабра».
Алгоритмы и тестирование
В плане базовых требований к кандидату и знания основ профессии компании делятся на два лагеря.
В первом сидят серьёзные практики, которых волнует только то, что вы умеете делать. У вас может быть любое образование, и, если вы докажете им, что на текущем жизненном этапе вы в состоянии выполнять все задачи, которые они взвалят на бэкендера, вы в деле.
Второй лагерь более требователен — для них важны фундаментальные знания. Техническое образование, математическое мышление и знание алгоритмов — вот тот набор, с которым надо заходить в такие компании. Например, в Яндексе без алгоритмов никуда. Послабление могут сделать в плане самого образования — оно тут как дополнительный плюс, потому что бывают ситуации, когда человек обладает такими знаниями, даже не обучаясь этому в вузе: самоучек много и курсов тоже.
Если вы хотите в Яндекс, то самое важное, на что будут смотреть HR и на техническом собеседовании — это на результаты прохождений самих секций собеседования и на то, насколько вы знаете алгоритмы. Ваш диплом и название вуза здесь как вишенка на торте. Вишенки может и не быть — без неё торт не перестанет быть тортом.
Примерно такое же отношение у работодателей к тестированию. Кто-то уверен, что джун должен заниматься тестированием, и это будет чуть ли не первым вопросом на собеседовании. Кто-то замечает, что для тестирования есть тестировщики. Кто-то вообще ничего не тестирует.
GitHub и хакатоны
Иногда в комментариях к подобным постам встречаются теории о важности наличия у кандидата прокачанного профиля на GitHub или опыта участия в хакатонах. Ваши проекты на GitHub, множество коммитов и форков, килограммы бейджиков с IT-конференций и хакатонов — это дополнительный фактор вашей оценки как специалиста.
Прежде всего на собеседованиях смотрят на практическое решение конкретных задач в рамках прохождения секций. Иногда дополнительно могут посмотреть ваш проект на GitHub, иногда — нет. Если вы идёте на мидла, то хакатонский опыт поможет вам быстрее и легче проходить секции собеседования. Для джуна опыт участия в хакатонах, даже без призовых мест, будет реальным подтверждением того факта, что человеку интересна профессия, он старается быть в курсе новых решений и инструментов, пытается самостоятельно прокачивать навыки. Да, это тоже плюс.
Командная работа
Про soft skills написано множество постов и, скорее всего, несколько книг, поэтому я не будут сильно вдаваться в их важность и необходимость — вы всё это уже читали много раз.
На мой взгляд, главное — уметь работать в команде. Это не значит, что условный интроверт не справится, никто не требует от вас быть душой компании и зажигать на тимбилдингах. В этом пункте речь о способности задавать вопросы. Вы не представляете, сколько проблем в проектах бывает связано с тем, что человек просто вовремя не спросил, не уточнил, не сообщил коллегам, что заметил потенциальный баг.
Разговаривайте, спрашивайте, уточняйте. Это нормально. Так же нормально, как пойти и усердно погуглить что-то, если не получается.
Говоря об отношениях в команде, стоит упомянуть дедлайны. Их важно соблюдать, особенно если они командные. Ситуации, в которых кто-то один просто забыл что-то сделать или не успел (и не сказал об этом), часто заканчиваются тем, что у всей команды съезжает график. Как это отражается на отношении к человеку, регулярно срывающему сроки, вы и без меня знаете.
Ещё несколько советов. Спокойно реагируйте на критику и замечания, прокачивайте уровень самоорганизованности, давайте коллегам обратную связь, не бойтесь ошибаться в работе и исправлять ошибки. И учитесь — возможностей для этого сейчас множество.
Полезные книги
Марк Лутц, «Изучаем Python». Марк написал эту книгу по мотивам собственных курсов, которые ведёт уже более 10 лет. Здесь всё важное: обзор инструментов, типы объектов, функции плюс описания моделей и инструкции по обработке исключений.
Антонио Меле, «Джанго 2 в примерах». Книга делает упор на практическое создание приложений для реальных задач. Кроме непосредственной работы с компонентами самого фреймворка, рассматриваются также и возможности интеграции сторонних инструментов.
Лекции Тимофея Хирьянова по алгоритмам. Тимофей — один из преподавателей МФТИ. Лекций по алгоритмам множество, но эти наглядные. Особенно полезны для новичков, но и разработчику с опытом тоже пригодятся.
Если вы можете свободно читать профильную литературу на английском, то порекомендуем ещё и пару книг о разработке на основе тестов: Harry Percival, «Test-Driven Development with Python» и Kevin Harvey, «Test-Driven Development with Django».