Python для чего?


Друзья, забирайте в закладки подборку из 17 книг по Python.
Подборка поможет вам освоить язык программирования с нуля или с минимальными знаниями.
Готовы приступить к изучению Python?
Тогда начнем!

Начинаем подготовку к изучению Python

Если вы не переходите на Python с другого языка программирования, а начинаете с нуля, сначала разберитесь в базовых понятиях разработки. Чтобы читать техническую литература на английском, подтяните уровень языка. В этом помогут книги:
«Computer Programming for Beginners: Fundamentals of Programming Terms and Concepts», Натан Кларк
Новички могут легко утонуть в профессиональных понятиях. Эта книга поможет разобраться в терминологии: что такое функции, функциональное и объектно-ориентированное программирование, как структурировать и развернуть программу, как хранить, управлять и обмениваться данными.
«English for Information Technology», Пирсон Лонгман
Даже если вы хорошо владеете английским, профессиональная терминология может загнать в тупик — потратите время на гугление. Этот учебник с аудиокнигой и интерактивными словарями поможет подтянуть уровень грамматики и пополнить словарный запас техническими терминами.
«Basic English for Computing», Оксфорд
Учебный курс, который поможет улучшить навыки грамматики, пополнить словарный запас техническими терминами. Фишка книги — она содержит тексты и диаграммы для лучшего понимания материала, словарь современных вычислительных терминов, сокращений и символов.

Знакомимся с Python

Начните изучать язык программирования с теоретических основ — разберитесь в терминах, принципах работы языка. Для этого изучите книги:
«Hello World. Занимательное программирование», Картер Сэнд, Уоррен Сэнд
Простая книга для введения в Python — автор объясняет основные термины, особенности языка доступным языком. Издание в основном теоретическое, из практики — руководства по созданию нескольких элементарных программ.
«Программируем на Python», Майкл Доусон
Опытный разработчик и преподаватель рассказывает об основных принципах разработки на примерах создания простых игр. После каждой главы автор предлагает проект игры, резюме пройденного материала и задачи для закрепления. После прочтения вы освоите базовые навыки разработки на Python и научитесь применять их на практике.

Переходим к практике

Когда разберетесь в теоретических основах, переходите на книги с практикой — реальными примерами кода, задачами, руководствами по разработке первых простых проектов:
«Изучаем Python», Марц Лутц
Автор описывает основные типы объектов в Python, порядок их создания и дальнейшей работы с ними, рассказывает об основном процедурном элементе языка — функциях. После каждой главы приводит контрольные вопросы для закрепления материала, а после каждой части — практические упражнения.
«Программирование на Python», Марк Лутц
Руководство по использованию Python в различных сферах — системном администрировании, создании веб-приложений и графических интерфейсов. Автор рассказывает, как работать с базами данных, программировать сетевые взаимодействия, создавать интерфейсы для сценариев и других задач.

«Python — к вершинам мастерства», Лучано Рамальо
Книга разработчика Лучано Рамальо для тех, кто уже научился писать на языке Python, но еще не использует все его возможности. Автор рассказывает о базовых средствах и библиотеках языка и приводит наглядные примеры, как сделать код короче, понятнее и быстрее.
«Python Programming: A Step By Step Guide For Beginners», Брайан Дженкинс
Пошаговое руководство для новичков, которые хотят освоить язык программирования с нуля. Автор объясняет базовый синтаксис, учит работать с типами данными и переменными, классами и объектами, обрабатывать файлы и исключения.
«Python Programming: The Basic, Blackhat, Intermediary and Advanced Guide to Python Programming», Ричард Озер
Эта книга — полноценное руководство по Python, состоящее из четырех частей. Новичкам стоит изучить первую часть книги. Автор просто и понятно рассказывает о механизмах работы Python, как разобраться в основах языка и написать свою первую программу.
«Python Programming Illustrated For Beginners & Intermediates: «Learn By Doing» Approach-Step By Step Ultimate Guide To Mastering Python: The Future Is Here!», Вильям Салливан
Пошаговое руководство, которое поможет освоить язык Python и применять его на практике. Автор рассказывает, как запустить первую программу, описывает переменные, типы данных, идентификаторы и делится другой полезной информацией.
«Python на практике», Марк Саммерфилд
Книга для новичков, которые уже освоили язык Python и хотят программировать лучше. Автор рассказывает, как использовать паттерны программирования, чтобы улучшить код, проводить распараллеливание и компиляцию программ, объясняет принципы высокоуровневого сетевого программирования и графики.

Продолжаем изучение: книги о Python по направлениям

Python можно использовать для решения многих задач — работы с сайтами, веб-приложениями, машинного обучения. Определитесь, в каком направлении хотите развиваться, и начните с профильной литературы:
«ГИС-приложения — Разработка геоприложений на языке Python», Эрик Вестра
Автор подробно рассказывает, как писать геоприложения. Вы научитесь получать доступ к геоданным и визуализировать их, читать и записывать данные в векторном и растровом формате, хранить и получать доступ, выполнять геопропространственные расчеты на языке Python.
«Скрапинг сайтов — Скрапинг веб-сайтов с помощью Python», Райан Митчелл
Руководство, как примененять скрипты Python и веб-API, чтобы собирать и обрабатывать данные с тысяч сайтов. Будет интересна программистам и веб-администраторам, которые хотят изучить работу веб-скраперов, освоить анализ сырых данных и тестирование интерфейса.
«Введение в машинное обучение с помощью Python. Руководство для специалистов по работе с данными», Андреас Мюллер, Сара Гвидо
Книга для новичков. Авторы доступно для понимания рассказывают, как строить системы машинного обучения, подробно объясняют этапы работы с применением Python и библиотек scikit-learn, NumPy и matplotlib.
«Django. Подробное руководство», Адриан Головатый, Джейкоб Каплан-Мосс
Книга о Django — фреймворке для разработки веб-приложений на Python. Авторы рассказывают о компонентах фреймворка и методах работы с ним, приводят примеры применения в разных проектах.
«Разработка веб-приложений с использованием Flask на языке Python», Мигель Гринберг
Автор учит работать с популярным фреймворком Flask, приводит пошаговое руководство, как создать приложение социального блогинга. Узнаете возможности фреймворка, научитесь расширять приложения дополнительными технологиями.

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

Нахождение 10 наиболее частых слов на web странице

Данный пример чисто демонстрационный, так как его можно значительно улучшить.

from urllib2 import urlopen # из модуля urllib2 импортируем функцию urlopen u = urlopen(«http://python.org») # открываем URL на чтение words = {} # связываем имя words с пустым словарём # (словарь — неупорядоченный ]) for line in u: # читаем u по строкам line = line.strip(» \n») # отбрасываем начальные и конечные пробелы for word in line.split(» «): # режем каждую строку на слова, ограниченные пробелами try: # блок обработки исключений words += 1 # пытаемся увеличить words на единицу except KeyError: # если не получилось (раньше words не было) words = 1 # присваиваем единицу # теперь словарь words содержит частоту встречаемости каждого слова. # Например, words может содержать {«яблоко»:5, «апельсин»: 12, «груша»: 8} pairs = words.items() # делаем из словаря список пар # pairs == pairs.sort(key=lambda x: x, reverse=True) # сортируем по убыванию второго элемента пары for p in pairs: # печатаем первые 10 элементов списка print(p, p)

Текст для версии 3.7.1

from urllib.request import urlopen # из модуля urllib импортируем функцию urlopen u = urlopen(«http://python.org») # открываем URL на чтение words = {} # связываем имя words с пустым словарём # (словарь — неупорядоченный ]) for line in u: # читаем u по строкам line =line.decode(«utf-8″) # преобразуем байт-строку в строку line = line.strip(» \n») # отбрасываем начальные и конечные пробелы for word in line.split(» «): # режем каждую строку на слова, ограниченные пробелами try: # блок обработки исключений words += 1 # пытаемся увеличить words на единицу except KeyError: # если не получилось (раньше words не было) words = 1 # присваиваем единицу # теперь словарь words содержит частоту встречаемости каждого слова. # Например, words может содержать {«яблоко»:5, «апельсин»: 12, «груша»: 8} pairs = words.items() # делаем из словаря список пар # pairs == A= sorted (pairs, key=lambda x: x, reverse=True) # сортируем по убыванию второго элемента пары for p in A: # печатаем первые 10 элементов списка print(p, p)

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

Иллюстрируют особенности индексации элементов и срезов: при взятии среза нумеруются не сами элементы, а промежутки между ними.

>>> l = # исходный список >>> # 0 1 2 3 4 5 # пронумерованные промежутки между элементами >>> # -5 -4 -3 -2 -1 # нумерация с конца >>> l # срез от нулевого до второго промежутка >>> l # срез от второго до второго с конца элемента >>> l # каждый второй элемент начиная с первого >>> l # все элементы в обратном порядке

Функции подобные range() поддерживают то же правило (для версий языка 2.x):

>>> range(2, 5) >>> range(5)

Генерация коллекций:

>>> *10 >>>

Реализация перегрузки функций

Это пример простой реализации поддержки перегрузки функций на Python.

Она демонстрирует, как, используя уже имеющиеся в Python средства, можно обойти одно из ограничений базовой реализации. Поддерживается минимум возможностей (только фиксированное количество позиционных аргументов, нет именованных аргументов, нет приведения типов (например int -> float) и т. п.), но работает достаточно быстро.

import sys # для получения объектов из вышележащих фрэймов стека class CannotResolve(Exception): # класс исключения для случая ненахождения функции pass class Resolver(object): # класс, реализующий разрешение на этапе исполнения emess = «Can’t found appropriate signature of func %s() for call with» + \ » params %r» # сообщение об ошибке def __init__(self,name): # конструктор self.function_map = {} # словарь, отображающий типы параметров на функции self.default = None # функция по умолчанию self.name = name # имя функции для вывода сообщений об ошибках def __call__(self,*dt): # имитируем функцию, принимающую любое количество # позиционных параметров cls = tuple(map(type,dt)) # создаем tuple из типов переданных аргументов # функция type возвращает тип своего параметра # map вызовет type для каждого элемента из dt try: x = self.function_map # пытаемся получить функцию из словаря except KeyError: # если подходящей нет, if self.default is not None: # используем функцию по умолчанию x = self.default else: # если её нет — возбуждаем исключение raise CannotResolve(self.emess % (self.name,cls)) return x(*dt) # вызываем функцию и возвращаем результат def overload(*dt): # декоратор для перегрузки в качестве параметров # принимает типы параметров def closure(func): name = func.__name__ # получаем имя функции fr = sys._getframe(1).f_locals.get(name,Resolver(name)) # опускаемся на один шаг вниз по стеку и находим # локальную переменную с именем функции # если же ее нет, то используем новый # Resolver-объект fr.function_map = func # добавляем новую функцию к словарю # разрешения вызовов return fr return closure def overdef(func): # для создания функции по умолчанию name = func.__name__ # аналогично как и в функции overload fr = sys._getframe(1).f_locals.get(name,Resolver(name)) fr.default = func return fr # теперь воспользуемся полученными декораторами @overdef # это будет функция по умолчанию def f(*dt,**mp): print «Default call» # если нет явного return, то вернется None @overload(int) # единственный параметр — целое def f(x): return x + 1 @overload(str) # единственный параметр — строка def f(x): return x + «1» @overload(str,int) # строка и целое def f(x,y): return x + str(y) print f(1) # напечатает : 2 print f(«1») # напечатает : 11 f(2,2) # напечатает : Default call

Управление контекстом выполнения

Следующий пример из PEP343 иллюстрирует применение оператора with для защиты блока кода от одновременного выполнения двумя потоками:

from __future__ import with_statement # задействует оператор with в коде from contextlib import contextmanager from threading import Lock # Описание менеджера контекста @contextmanager def locked(lock): lock.acquire() try: yield finally: lock.release() # Определение блокировки myLock = Lock() # Применение оператора with locked(myLock): # print «Охраняемый блок кода. Блокировка будет освобождена при любом выходе из этого блока.» #

Генератор чисел Фибоначчи

Пример генератора чисел Фибоначчи и его использования:

def fibonacci(max): # генератор (а не функция, т.к. оператор return заменён на yield) a, b = 0, 1 while a < max: yield a # return a, + запоминаем место рестарта для следующего вызова a, b = b, a + b # параллельное присваивание, которое выполняется одновременно и параллельно for n in fibonacci(100): # используем генератор fibonacci() как итератор print(n) # печатаем все числа Фибоначчи меньшие 100 через пробел

Альтернативный синтаксис доступа к элементам словаря

Можно определить словарь, который в дополнение к обычному синтаксису доступа к значению по ключу d может предоставлять синтаксически более наглядный доступ к атрибуту d.key в случае алфавитно-цифровых ключей:

class Entity(dict): # наследуем класс от __builtin__.dict def __getattr__(self, key): # этот метод будет вызван, если атрибут # с именем key не будет найден у экземпляра класса try: return self # пытаемся вернуть элемент словаря except KeyError, k: # если такого элемента нет, то возбуждаем raise AttributeError, k # исключение AttributeError # по договоренности __getattr__ # не должно возбуждать других исключений def __setattr__(self, key, value): # этот метод будет вызван при присвоении self = value # атрибуту key значения value def __delattr__(self, key): # а этот при удалении атрибута try: # с помощью del mydict.g del self except KeyError, k: raise AttributeError, k def __repr__(self): # используется функцией repr return self.__class__.__name__ + «(» + dict.__repr__(self) + «)» d = Entity(a=1) d.b_100 = 100 assert d.a == d and d.b_100 == d

Функтор с генерацией байтокода

Пример эффективной реализации функтора, основанный на генерации байтокода во время исполнения. Этот пример демонстрирует следующие возможности/особенности Python:

  • Возможность реализации специфических средств функционального программирования наработками, уже имеющимися в языке
  • Работать с байтокодом в Python достаточно просто
  • Зачастую генерация байтокода способна значительно ускорить исполнение.

Это только пример, он реализует всего одну операцию — сложение и имеет несколько других ограничений.

#——————————————————————————- import byteplay # специальный модуль для удобной работы с Python-байтокодом import new # для создания функции во время исполнения import functools # для update_wrapper import inspect # для получения информации о параметрах, принимаемых функцией #——————————————————————————- class FastFunctor(object): def __init__(self,func,code = None): self.func = None # здесь будем хранить результирующую функцию self.ofunc = func # а здесь исходную(original) функцию if code is None: # конструируем байтокод для вызова функции self.code = rparams = inspect.getargspec(func) # получаем список параметров, принимаемых функцией self.code.extend((byteplay.LOAD_FAST,i) for i in rparams) self.code.append((byteplay.CALL_FUNCTION,len(rparams))) else: # если же функтор создан из другого функтора, # то только копируем переданный байтокод self.code = code # создаем новый объект кода self.ocode = bp.Code.from_code(func.func_code) def __add__(self,obj): # этот метод вызывается для операции ‘+’ code = self.code # копируем байтокод if isinstance(obj,FastFunctor): # если прибавляемый объект — функтор # просто дописываем его код к нашему # после своего исполнения он «оставит» в вершине стека результат code.extend(obj.code) else: # иначе загружаем объект в стек code.append((byteplay.LOAD_CONST,obj)) # дописываем байтокод, складывающий два верхних элемента в стеке code.append((byteplay.BINARY_ADD ,None )) # создаем новый функтор, с байтокодом получения суммы return self.__class__(self.ofunc,code = code) def __call__(self,*dt,**mp): # этот метод будет вызван для операции вызова object() return self.fast()(*dt,**mp) # конструируем и вызываем функцию def fast(self): # конструируем функцию из байтокода if self.func is None: # если функция не была создана раннее code = self.code + # добавляем байтокод возврата oc = self.ocode # создаем объект кода из байтокода и другой информации bin_code = byteplay.Code(code, oc.freevars, oc.args, oc.varargs, oc.varkwargs, oc.newlocals, «<just_code_%s>» % id(self), «<auto_gen_%s>» % id(self), 0, «auto_generated code») # конструируем новую функцию из объекта кода self.func = new.function(bin_code.to_code(),globals()) # после этой операции для всех средств интроспекции # созданная функция будет выглядеть как оригинальная self.func = functools.update_wrapper(self.func,self.ofunc) return self.func # Ниже представлено тестирование скорости объектов FastFunctor и SlowFunctor # (статья «Функциональное программирование на Python», см. сноску после блока кода) # из IPython (для удобства чтения лог немного изменен) # строки, начинающиеся с «In :» вводятся, остальные — вывод интерпретатора In : import fastfunctor In : func = lambda x : x + 1 # Создаем очень простую функцию In : vl = 1 # Переменная, для предотвращения оптимизации In : functor = fastfunctor.Functor(func) In : %timeit (functor + functor + 1)(vl) # Тестируем «лобовой» способ 1000 loops, best of 3: 661 mks per loop # Очень медленно In : functor2 = (functor + functor + 1) # Конструируем функтор один раз In : %timeit functor2(vl) # и тестируем только непосредственно вызов 100000 loops, best of 3: 4.52 mks per loop # Значительно лучше In : functor3 = (functor + functor + 1).fast() # Получаем результирующую функцию In : %timeit functor3(vl) 1000000 loops, best of 3: 1.42 mks per loop In : def of(vl): return x(vl) + x(vl) + 1 # Создаем функцию «вручную» In : %timeit of(vl) 1000000 loops, best of 3: 1.42 mks per loop # Скорость полностью совпадает со # скоростью функтора In : sfunctor = SlowFunctor(func) # Простая реализация функтора In : sfunctor = sfunctor + sfunctor + 1 # In : %timeit sfunctor(vl) # 100000 loops, best of 3: 12.6 mks per loop # Примерно в 9 раз медленнее, чем статический # вариант

Код SlowFunctor можно посмотреть .
Приведенные значения времени следует рассматривать только в сравнении друг с другом.
ipython — расширение интерпретатора Python для интерактивной работы.

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

Транспонирование матрицы

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

from pprint import pprint # модуль pprint используется для удобного вывода на экран matrix = , , , , ] matrix_t = list(zip(*matrix)) # непосредственно транспонирование pprint(matrix) pprint(matrix_t)

Вывод:

, , , , ] , , , , ]

Нахождение Факториала

factorial = lambda x: factorial(x — 1) * x if x > 1 else 1

Решение квадратного уравнения

Простая программа для решения квадратных уравнений (то есть вида: ax2+bx+c=0). Даются небольшие пояснения, каким образом уравнение решается в том или ином случае (например, для неполных квадратных уравнений).

a = int(input(‘a = ‘, )) # запрашиваем первый коэффициент b = int(input(‘b = ‘, )) # запрашиваем второй коэффициент c = int(input(‘c = ‘, )) # запрашиваем третий коэффициент if a!= 0 and b % 2 == 0 and c!= 0: # решение по сокращенной формуле, т.к. b — четное k = b / 2 d1 = k ** 2 — a * c k1 = (-k + d1 ** 0.5) / a k2 = (-k — d1 ** 0.5) / a print(‘так как коэффициент b — четное число, решаем по сокращенной формуле’) print(f’k1 = {k1}’) print(f’k2 = {k2}’) if a != 0 and b % 2 != 0 and c != 0: # решение полного уравнения d = b ** 2 — 4 * a * c if d > 0: k1 = (-b + d ** 0.5) / (2 * a) print(f’дискриминант равен: {d}’) print(f’первый корень равен: {round(k1, 2)}’) k2 = (-b — d ** 0.5) / (2 * a) print(f’второй корень равен: {round(k2, 2)}’) elif d < 0: print(f’так как дискриминант меньше нуля и равен: {d}’) print(‘действительных корней нет’) else: k = -b / (2 * a) print(f’уравнение имеет один корень: {k}’) if a != 0 and c != 0 and b == 0: # решение уравнения при b = 0 if (- c / a) >= 0: k1 = (-c / a) ** 0.5 print(f’первый корень равен: {k1}’) k2 = (-1) * ((-c / a) ** 0.5) print(‘второй корень равен: {k2}’) if (- c / a) < 0: print(f’ -c / a = : {-c / a}, т.е. < 0, поэтому действительных корней нет’) if a != 0 and c== 0 and b != 0: # решение уравнения при с = 0 print(f’корень уравнения равен либо нулю, либо {-b / a}’) if a != 0 and b== 0 and c == 0: # решение уравнения при b = 0 и c = 0 print(f’корни уравнения равны нулю, a*x**2 = 0′)

Благодаря Unity сегодня разработкой игр может заниматься любой желающий, достаточно за несколько месяцев пройти экспресс-обучение работе с платформой и подтянуть один из языков программирования. Многие новички ошибочно полагают, что для работы с Unity необходимым и достаточным является C#, однако возможности платформы куда шире.

C#

Такое мнение относительно C# в Unity — не пустой слух. Помимо того, что это относительно простой и производительный язык программирования, есть и исключительно аппаратная причина. Unity использует open-source проект Mono, который является одной из многочисленных реализаций платформы Microsoft. NET. По факту, все библиотеки Unity написаны на C#.

Так что использовать все возможности платформы, не зная C#, у вас не получится. Но это не означает, что нельзя ограничиться базовым уровнем языка. Напротив, движок Unity тем и хорош, что здесь основными могут быть несколько языков — в зависимости от задач и разработчика. Но C# необходим. К счастью, его довольно легко изучить, а применять можно далеко за пределами Unity.

JavaScript

UnityScript был вторым базовым языком платформы. Вы можете убедиться в этом, открыв описания скриптов, где коды даны как на C#, так и на UnityScript. Если вам знаком и симпатичен синтаксис JavaScript — вам понравится работать с Unity.

Но будет ошибкой полагать, что UnityScript — это тот же JavaScript, но с другим названием. К примеру, US поддерживает классы, но при этом в нем нельзя переназначать переменные и использовать необязательные точки с запятой.

Плохая новость в том, что с лета 2017 года разработчики усиленно искореняют UnityScript из платформы. Это не ограничивается прекращением поддержки в оболочке — создатели пакетов со скриптами получают предупреждения о необходимости перевести весь код в C#.

К счастью, есть компилятор на GitHub, который все еще позволяет работать с JavaScript в Unity, и эту лазейку никто не собирается закрывать. Но удовольствие определенно потеряно.

Boo

Продолжая тему языков, от которых отказались разработчики Unity, вспомним Boo. По структуре он похож на Python, прост в освоении, у него краткий и удобный синтаксис, который поддерживается .NET и Mono. В Unity он появился благодаря одному из создателей платформы — Родриго Де Оливейре, который также разработал Boo.

От языка отказались по банальной причине — из-за низкой популярности. Boo не привносил новых возможностей в Unity, не привлекал армию разработчиков, так что его поддержка была жестом доброй воли. Поэтому, когда пути Оливейры и Unity разошлись, Boo оставили за бортом.

IronPython и IronRuby

Для любителей Python все же есть возможность поработать с Unity. Решение — IronPython, набор библиотек, расположенных в GitHub. Позволяет запускать «змеиные» скрипты прямо из C#-кода. Полезное расширение — возможность вызывать .NET-библиотеки из Python.

Аналогичной функциональностью обладают библиотеки под общим названием IronRuby. Синтаксис похожий, поэтому придется потратить время лишь на подключение исходников, зато в ответ Unity станет поддерживать еще один язык.

Lua

Lua не входит в топ самых популярных языков программирования. Но он обитает преимущественно в играх, так что в Unity должен быть представлен. За это отвечает MoonSharp — интерпретатор для Mono, платформы .NET и Unity. MoonSharp не заменяет C#, а дает разработчику возможность подключить сторонний код на Lua. Такой принцип реализован, к примеру, в WoW, где огромное количество модов написано именно на Lua.

C/C++

Как и в подавляющем большинстве продуктов, где требуется быстродействие, определенный фронт работ поручают C или C++. Unity не требует установки дополнительных надстроек или подключения библиотек, здесь «из коробки» можно создавать DLL-плагины.

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

Rust

Чтобы повысить скорость обработки информации, в Unity можно использовать другой язык — Rust. Функции и методы напрямую писать не получится, но их можно вызвать из Unity-кода. Пик популярности Rust позади, но, по свежим рейтингам, до 1,5 % программистов периодически используют его в работе. И им эта функция Unity наверняка придется по душе.

Как видите, несмотря на необходимость знать C# хотя бы на базовом уровне, Unity позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.

»щ^шздим-^оигм&ь^щжшшш / technical science_23

УДК: 004

Бухаров Т.А., Нафикова А.Р.

Стерлитамакский филиал БашГУ Мигранова Е.А.

МАОУ «СОШ №10»

ОБЗОР ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON И ЕГО БИБЛИОТЕК

Bukharov T A, Nafikova A.R.

Sterlitamak branch of BSU Migranova E.A.

MАEI «SES №10»

AN OVERVIEW OF THE PYTHON PROGRAMMING LANGUAGE AND ITS LIBRARIES

Аннотация

В данной статье рассматриваются возможности и краткие характеристики языка программирования Python и его библиотек. Приводится пример реализации программного кода на данном языке программирования.

Ключевые слова: Python, язык программирования, web-разработка. Key words: Python, programming language, web-development.

В настоящее время с развитием сетевых технологий, глобальная сеть Internet стала использоваться в очень многих областях нашей жизни. Все больше и больше людей пользуются интернетом, и в связи с этим появилось множество технологий, которые предоставляют возможность создания и разработки web-приложений. Одним из популярных является язык программирования «Python» на среде PyCharm.

PyCharm — это самая интеллектуальная Python IDE (Integrated Development Environment — Интегрированная среда разработки) с полным набором средств для эффективной разработки на языке Python. Выпускается в двух вариантах — бесплатная версия PyCharm Community Edition и поддерживающая больший набор возможностей PyCharm Professional Edition. PyCharm выполняет инспекцию кода «на лету», автодополнение, в том числе основываясь на информации, полученной во время исполнения кода, навигацию по коду, обеспечивает множество рефакторингов.

Приведем сравнительный анализ возможностей данных сред:

Community Edition:

1. Облегченная IDE для разработки только на Python.

2. Бесплатная, с открытым кодом, под лицензией Apache 2.

3. Понимающий контекст редактор, отладчик, рефакторинги, инспекции, интеграция с VCS.

4. Навигация по проекту, поддержка тестирования, настраиваемый UI, горячие клавиши Vim.

Professional Edition:

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

2. Поддержка фреймворков Django, Flask, Google App Engine, Pyramid, web2py.

3. Поддержка языков JavaScript, CoffeeScript, TypeScript, CSS, Cython и др.

4. Удаленная разработка, Поддержка работы с БД и языка SQL.

5. Обнаружение дублирующегося кода.

6. Диаграммы UML & SQLAlchemy.

7. Python Profiler .

Данный язык программирования является сравнительно немолодым языком для web-разра-ботки, задуманный в 1980-ом, а реализован ближе к девяностым. Его автор, Гвидо ван Россум, хотел усовершенствовать язык «ABC» (ABC — императивный, процедурный, структурный высокоуровневый язык программирования общего назначения и IDE), который использовался для обучения, но имел ряд недостатков. В итоге, после долгой и продолжительной работы Россума получился высокоуровневый, скриптовый PL (PL — Procedural Language), благодаря чему web-разработка поднялась на новый уровень.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Python поддерживает несколько стилей программирования. Он не принуждает разработчика придерживаться определенной парадигмы. Python поддерживает объектно-ориентированное и процедурное программирование. Существует и ограниченная поддержка функционального программирования. Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью, благодаря чему исходный код написанных на Python программ легко читаем.

Основным лозунгом данного языка программирования является читаемость, она напрямую влияет на его распространенность в web-разра-

technical science / <<шцшмум-шу®ма1>>#3(ш7)),2(0]9

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

«Python» используют многие программисты, так как он эффективен и имеет большой список преимуществ, которые характеризуют работу с этим языком программирования:

• простота языка. Его можно использовать не только как в web-разработке, но и в любой другой области, где специалисты не имеют каких-либо глубоких познаний в программировании. Сам синтаксис данного языка программирования схож с обычными математическими операциями, которые не несут в себе никаких особых сложностей;

• разнообразие реализаций. Самая известная и каноническая — это «CPython», реализация на «С». Это значит, что код, написанный на нем, полностью взаимодействует с «С», и библиотеки этого языка также можно применять для реализации. То же самое касается и языка «Java», существует и реализация на нем — «Jython». Таких примеров масса, вплоть до взаимодействия Питона с «Android» и «iOS»;

• широкое распространение. «Python» используют даже Disney. Следствием этого факта является то, что многое о нем уже известно. Как только вы сталкиваетесь с проблемой при программировании на Python, тотчас же можете обратиться за помощью интернете: скорее всего, вашу проблему уже кто-то решал. К тому же, для реализации практически любого проекта уже существуют заготовки, которые можно применить для себя;

• не требует компиляции. «Python» — интерпретируемый язык, а значит, запустить программу можно сразу после внесения изменений в ее файл. Это приводит к тому, что доработка, переработка и отладка программ происходит намного быстрее, чем во многих других языках.

Рассмотрим пример в реализации кода на Python «Текстовый редактор» (рис. 1, рис. 2), который создан в графической библиотеке Tkinter (Tkinter — это графическая библиотека, позволяющая создавать программы с оконным интерфейсом).

Эта библиотека является интерфейсом к популярному языку программирования и инструменту создания графических приложений tcl/tk. Tkinter, как и tcl/tk, является кроссплатформенной библиотекой и может быть использована в большинстве распространённых операционных систем (Windows, Linux, Mac OS X и др.).

Так как Tkinter является достаточно прозрачным интерфейсом к tcl/tk, то основным источником информации для неё являются man-страницы tcl/tk. Эти страницы имеются в любой Unix-системе (в разделе n или 3tk).

Первым делом при работе с Tkinter необходимо создать главное (корневое) окно (рис. 1), в котором размещаются остальные графические элементы — виджеты. Существует большой набор ви-джетов на все случаи жизни: для ввода текста, вывода текста, выпадающие меню и т.д. Среди ви-джетов есть кнопка, при нажатии на которую происходит заданное событие. Некоторые виджеты (фреймы) используются для группировки других виджетов внутри себя.

Также в Tkinter существует три стандартных GM (Geometry Manager — менеджер геометрии), которые управляют тремя размещениями: «Grid», «Pack» и «Place». «Grid» делит все пространство ви-джета на ячейки, количество которых определяется дочерними виджетами. Сама ячейка идентифицируется по номерам строк и столбцов, а также они объединяются, как и по горизонтали, так и по вертикали. «Pack» располагает виджеты друг за другом по той или иной стороне. Оно подойдет для более простого схемного расположения. «Place» указывает виджету на его место при помощи координат, как в абсолютных, так и относительных значения общего окна.

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

«c©yl@qyiym-j©y©mal»#3i27),2©19 / technical science 25

import tkinter

from tkinter.filedialog import asksaveasfile, askopenfile from tkinter.meaaagebox import ahowerror

FILE NAME = tkinter.NONE

def new_file():

global FILE_NAME FILE_NAME = «Untitled» text.delete(‘1.0rr tkinter.END)

def save_file():

data = text.get(‘1.0r, tkinter.END) out = open(FILE_NAME, ‘w’) out.write(data) out. close {)

def 3ave_as():

out = аз ks ave аз file(mode=’ w’, de faultexten3 i on=’.txt’)

data = text.get(‘1.0r, tkinter.END)

out.write (data.rstrip()) except Exception:

ahowerror(тезaage=»Ошибка при сохранении файла»)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

def open_file() :

global FILE_NAME

inp = askopenfile(mode=»r»)

if inp is None:

return FILE_NAME = inp. name

data = inp.read()

text.delete(‘1.0r, tkinter.END)

text.insert(‘1.0r, data)

Рисунок 1. Текстовый редактор.

def about_che_prograin (): root = tkinter. Tk() root.title(«О программе») lab = tkinter.Label(root,

lab.pack ()

root = tkinter.Tk() root.title(«Txfc Editor vfl.l») root.minsize(width=4G0, height=4Q0) root.maxsise(width=4QQ, height=4Q0)

text = tkinter .Text (root, width=400, height=4QQ) text, pack {)

menuBar = tkinter.Menu(root) fileMenu = tkinter.Menu(menuBar) fileMenul = tkinter.Menu(menuBar)

root.config(menu=menuBar) root.mainloop()

Рисунок 2. Текстовый редактор

Список литературы

1. PyCharm — интеллектуальная Python IDE . — URL:

https://jetbrains.ru/products/pycharm/ (дата обращения: 10.02.2019).

2. Курс по библиотеке Tkinter языка Python . — URL:

26 _TECHNICAL SCIENCE / <<C©yL©»UM»J©UrMAL>>ffiM27)),2<0]9

УДК 65.014.12

Григорьев Д.Ю., Грубич Т.Ю.

ФГБОУ ВО «Кубанский государственный аграрный университет имени И. Т. Трубилина»

ОПЕРАЦИОННАЯ СИСТЕМА FUCHSIA: ВОЗМОЖНОСТИ И ПЕРСПЕКТИВЫ РАЗВИТИЯ

GrigorievD.Yu, Grubich T.Yu.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

FSBEI HE Kuban SA U

OPERATIONAL SYSTEM FUCHSIA: OPPORTUNITIES AND DEVELOPMENT PROSPECTS

Аннотация

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

Ключевые слова: мобильные приложения, операционная система, Android, IOS, Windows, Fuchsia.

Keywords: mobile applications, operating system, Android, IOS, Windows, Fuchsia.

Такой крупный мировой IT-гигант как Google всегда славился доминирующей, а где-то и агрессивной политикой разработки своих технологий в различных передовых сферах. Именно поэтому, помимо создания крупнейшего поисковика в мире, компания существенно преуспела на рынке мобильных устройств со своей операционной системе.

На сегодняшний день Android — самая популярная мобильная операционная система в мире. На её долю выпадает около 1,4 млрд. проданных устройств, что составляет около 85% всего рынка и это, как минимум, впечатляет. За чуть более 10 лет существования «Зеленого робота» было выпущено 9 полноценных номерных версий, преобразовавших его из скучной и однотипной, но «единой» мобильной платформы в передовую и мощную базу как для разработчиков мобильных устройств, так и для сторонних разработчиков.

Однако при всех преимуществах Android, те недостатки, которыми обладает система, а также крупные финансовые иски (в связи с использованием виртуальной Java-машины, на базе которого и работает система) и вынудили Google искать альтернативные решения на рынке мобильных гадже-тов. И оно нашлось. И имя этому решению — Fuchsia OS.

Статистика от компании NetMarketShare показывает, что падение и без того мизерной доли Windows-смартфонов происходит медленнее, чем многие думают. В январе её доля составляла 1,48%, а после февраля уже 1,41%. Это означает спад на 0,07%, что нельзя назвать большим провалом, хотя рост был бы предпочтительнее.

Компания Gartner отдаёт Windows 0,3% продаж и к 2020 году прогнозирует 0,1%, остальные уйдут на платформы Android и iOS. Это происходит и сейчас, причём уходят не только пользователи, но

и разработчики, которые не видят смысла терять время ради столь незначительной аудитории.

Сегодня рынок мобильных операционных систем поделен между тремя игроками: Apple (iOS), Google (Android) и Microsoft (Windows). Хотя доля последней операционной системы и очень мала, она всё же внушает надежды, ведь популярная раньше Blackberry уже осталась позади. Но на самом деле количество альтернативных ОС для мобильных устройств больше и каждый год они демонстрируют свои наработки на Mobile World Congress. Это Jolla (Sailfish OS), Mozilla (Firefox OS) и Canonical (Ubuntu Touch). Jolla и Canonical делают ставку на Linux-энтузиастов и гиков, Mozilla пытается зарекомендовать себя на рынках развивающихся стран и налаживает связи с операторами. Конечно, уже сейчас понятно, что ни одна из них не сможет тягаться с Apple, Google, Microsoft и на передел рынка в будущем вряд ли можно надеяться, но альтернативные операционные системы всё же нужны по одной простой причине: их большая открытость дает более широкие возможности для самых безумных экспериментов. А ведь именно такие эксперименты двигают индустрию вперед.

Впервые о новой ОС стало известно в августе 2016 года, когда СМИ сообщили о таинственной записи кодовой базы, опубликованной в GitHub, которая ясно дала понять, что Google занимается разработкой новой операционной системы под названием «Fuchsia». Несмотря на отсутствие официальных объявлений, в ходе проверки кода в записи стало известно о феноменальных кроссплат-форменных возможностях новой ОС, позволяющих ей работать как на привычных нам повседневных гаджетах (смартфоны, планшеты, смарт-часы и т.д.), так и на менее встречающихся, таких, как интеллектуальные информационные системы для автомобилей, светофоры и интерактивные доски.

<<шцшмум~^(Щугпа1>#Щ27)),2©1]9 а technical science

В отличие от Android, в основе которой лежит ядро операционной системы Linux, работающее на виртуальной Java-машине, новую ОС от Google разрабатывают с нуля, взяв в качестве основы лишь некоторые технологии Little Kernel (небольшая и быстрая операционная система, созданная для «легких» IoT девайсов) и Magenta (более многофункциональная система, используемая на устройствах помощнее). Таким образом, благодаря использованию этих двух подсистем, Fuchsia является гибридной системой, которая может работать и на IoT устройствах, и на современных ПК или телефонах.

Одним из существенных преимуществ новой операционной системы от Google, как отмечалось уже ранее, является её полная независимость от языка программирования Java, который помимо того, что способствовал созданию крупнейшей мобильной системы, навлёк, с другой стороны, кучу проблем IT-гиганту с другой американской корпорацией — Oracle.

Сам язык был разработан в 1991 году компанией Sun Microsystems, которая в свою очередь не заявляла абсолютных прав на использование Java, так как основной доход ей приносило лицензирование решений на полное соответствие всем стандартам языка. Однако после покупки Sun другой крупной компанией Oracle, ко второй перешла значительная часть активов, связанная с технологиями Java. С тех пор последовали многочисленные иски и судебные дела, в ходе которых затрагивались сразу три проблемы: нарушение авторского права (использование чужого программного кода), нарушение патентного права (часть программных наработок специалистов Sun Microsystems были запатентованы), а также требование компенсации ущерба компанией Google. Все эти внешние проблемы, безусловно, стали огромной предпосылкой к созданию новой операционной системы.

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

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

Ключевой особенностью Fuchsia OS является работа в режиме многозадачности. Пользователи могут располагать на рабочем столе сразу несколько окон приложений, «склеивая» их между собой, а затем переключаясь между ними подобно тому, как мы преключаемся между вкладками в любом браузере.

Проектируя новую систему, в Google решили отказаться от привычной файловой модели, используемой во всех нынешних мобильных платформах, в пользу модели «Сущность — Агент», в основе которой лежит полное управление системой различными встроенными сервисами (агентами). Данные сервисы взаимодействуют между собой посредством генерирования и обработки любых данных (сущностей), которыми оперирует пользователь. Огромным преимуществом такой модели будет то, что она, подобно самообучающейся системе, контролируя всю активность пользователя посредством агентов, будет выдавать владельцу того или иного устройства наиболее релевантный контент.

Отдельного внимания заслуживает тесная интеграция в систему уже зарекомендовавшего себя голосового помощника Google Assistant. Именно благодаря тому, что данный ассистент является «центром управления» других агентов системы, пользователь устройства с легкостью может управлять как существующими, так и создавать новые компоненты системы посредством голосовых команд. Составить новый музыкальный плейлист, решить куда сходить пообедать или забронировать номер в вашем любимом отеле — всё это решается теперь в несколько секунд, благодаря тому, что система, посредством анализа ваших данных, досконально знает всё о вас и может самостоятельно это выполнять по соответствующей команде.

Что касается облачной технологии, то и её реализацию в компании решили вывести на новый уровень. В Fuchsia облако станет не просто местом бэкапа данных, оно превратится в связующее звено для всего. Система облачного хранения Ledger обеспечивает быструю синхронизацию между всеми вашими устройствами, работающих в одной «экосистеме», позволяя не беспокоиться за утерю ваших данных, а наоборот, оставаться вам всегда «в сети». Всё это происходит примерно так — вы заходите в свой аккаунт Google и все приложения автоматически сохраняют своё состояние на всех устройствах. Например, вы закрываете браузер Chrome на своем смартфоне, а затем запускаете его на планшете, и открытые ранее вкладки остаются именно в том состоянии, в котором вы их оставили. Стоит, конечно же отметить, что столь мощная технология переносимости будет весьма требовательной к качеству и скорости интернет-соединения. Однако с появлением сетей пятого поколения (5G) и эта проблема становится вполне решаема.

Как говорилось уже ранее, будущая операционной система от Google базируется на новом микроядре собственной разработки под названием «Zircon». Данное ядро будет играть роль «сердца» системы, распределяющего ресурсы системы между остальными системными компонентами. В качестве языка программирования в Fuchsia выступит Dart, который также является собственной разработкой Google и позиционируется как альтернатива JavaScript. Все это даёт нам понять, что новая операционная система будет максимально защищена от вмешательства извне и будет лишь отчасти

technical science / <<c@yl©qu]um~j©u®nal>>#3(i27)),2(0]9

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

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Если говорить о распространении новой операционной системы, то здесь Google решила воспользоваться той же схемой, какой придерживалась и в Android — система будет распространяться бесплатно. Однако за счёт модульной архитектуры кода разработчики смогут вносить изменения только в тех участках, где это необходимо, без затрагивания системно важных объектов. В теории, такой принцип должен способствовать более оперативному обновлению системы разработчиками.

На данный момент известно о двух вариантах интерфейса новой системы: «Armadillo», предназначенного в основном под мобильные устройства, и «Capybara», разработанного для ПК и ноутбуков. Оба варианта разработаны на Google Flutter SDK -кросс-платформенном SDK с открытым исходным кодом, поддерживающем работу на различных операционных системах вроде Android, iOS и Fuchsia. Стоит отметить, что на данный момент Flutter — это пока единственный вариант разработки приложений под грядущую операционную систему.

Что же касается непосредственно интерфейса — он будет представлять собой некую систему карточек. Для рендеринга визуальной составляющей отвечает специальный движок на основе Vulkan под названием «Escher», который специализируется на глубине изображения и тенях. Всплывающие окна, уведомления, кнопки и прочие элементы интерфейса здесь накладываются и затеняют друг друга, словно перед вами не виртуальные объекты на экране, а реальные.

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

УДК 65.014.12

Интерфейс Capybara больше похож на гибрид привычного Android с «карточным» дизайном.

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

Как заявляет сама Google, уже в ближайшие три года Fuchsia будет работать на устройствах типа Google Home, а еще через два года вполне возможно заменит Android. Совсем недавно также появилась информация, что в Fuchsia будет реализована полноценная поддержка приложений Android. При этом, запускаться они будут не в эмуляторе, как это происходит, например, в Chrome OS, а в полноценной среде исполнения Android, встроенной в Fuchsia. Однако стоит отметить, что, хотя Fuchsia в её текущем состоянии и выглядит симпатично, в плане функциональности ей предстоит пройти ещё долгий путь.

Умные устройства всё больше заполняют нашу жизнь, в то же время облегчая её. Голосовые помощники, интернет вещей, нейронные сети в задачах отображения релевантного контента — когда-то всё это было лишь необозримым будущим. Но сегодня — это реальность. Однако всё это не имеет значения без по-настоящему «умного» интерфейса системы. И похоже именно это — идеальное время для выхода нового продукта Google.

Список литературы

2. Google Fuchsia. : https://ru.wikipedia.org/wiki/Google_Fuchsia (дата обращения:03.02.2019).

Григорьев Д.Ю., Грубич Т.Ю.

ФГБОУ ВО «Кубанский государственный аграрный университет имени И. Т. Трубилина»

ПРОФАЙЛИНГ ДАННЫХ И ВОЗМОЖНОСТИ ЯЗЫКА C++ ПРИ РЕШЕНИИ ЗАДАЧ

ПРОФАЙЛИНГА

Что делать, если вы решили изучать Python 3 с нуля? Как нужно действовать, что надо учить в первую очередь, а также где лучше брать информацию, которой, как известно, сегодня слишком много? Поговорим об этом в нашей статье.

Зачем вообще надо учить Python?

Язык программирования Python, который ещё называют Питон или Пайтон, очень популярен и перспективен. Его используют для создания своих продуктов такие компании, как Red Hat, Microsoft, Google, Mozilla, Facebook, Dropbox, Yandex, Intel и многие другие.

Рассмотрим его плюсы: • Python используется во многих современных проектах; • язык относительно прост, хотя имеет строгий синтаксис; • существует много доступных сред разработки, а также фреймворков и всевозможных сервисов; • даже в стандартной библиотеке языка Python есть большое количество средств, предназначенных для работы с онлайн-почтой, интернет-протоколами, базами данных и прочими инструментами; • Python-разработчики сегодня востребованы на рынке труда.

Что касается особенностей Python, то тут следует отметить: — динамическую типизацию, — наличие проблем с совместимостью версий, — низкую скорость выполнения кода, если сравнивать с некоторыми другими языками; — если Python не является для вас первым языком, то его синтаксис может показаться немного непривычным.

Что именно надо учить?

Во-первых, необходимо изучить синтаксис. Нужно освоить: • операции с целыми и вещественными числами; • переменные; • типы данных; • ветвления, стандартный ввод/вывод; • условия: if, else, elif; • логические операции, операции сравнения; • строки и символы; • циклы while, for; • блоки и отступы; • установку и подключение модулей; • операторы break, continue; • функции; • словари; • списки; • интерпретатор (установку, запуск скрипта); • файловый ввод/вывод.

Также вам будут полезны: 1) карта развития разработчика; 2) весь Python в одной картинке:

Теперь поговорим про IDE и редакторы кода

Считается, что писать в Python Shell или IDLE удобно лишь простой код, поэтому для проектов лучше отдать предпочтение интегрированной среде разработки (IDE) либо редактору кода. IDE включает и редактор с автодополнением и подсветкой синтаксиса, и инструменты для сборки и отладки, и различные дополнительные функции. Если же говорить о редакторах, то во многих из них тоже есть функция подсветки синтаксиса, возможность форматирования, возможность выполнения и отладки кода. Обычный редактор работает быстрее IDE, правда, имеет меньшую функциональность. Наиболее популярные сегодня платформы — PyCharm, Komodo, Wing IDE и прочие. Вот и есть более подробные обзоры..

Git

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

Где и как учить?

Инструментов для получения знаний сегодня существует очень много. Лучше всего подойти к изучению комплексно, например, купить учебник по основам и проходить онлайн-видеоуроки (есть как платные, так и бесплатные). Если говорить о платных предложениях на рынке, то существуют полноценные специализации, позволяющие освоить профессию Python-разработчика в течение года практически с нуля. Конечно, сеньором вы за такой короткий срок не станете, но уметь будете больше, чем Junior.

Если же говорить про учебники по основам, то вот некоторые из них: 1. Учебник от Devpractice. Прост и краток, самое то.

  1. Учебник от Марка Лутца. Очень популярное издание. Включает в себя примеры, советы и задачи.

Теперь давайте перейдём к онлайн-курсам: 1. Программирование на Python от Stepik. 2. Python для начинающих программистов от OTUS. 3. Факультет Python от Geekbrains. 4. Питонтьютор — бесплатный курс по Пайтон-программированию с нуля, который работает прямо в браузере. 5. Курс, созданный МФТИ и Mail.Ru Group. 6. Англоязычный вариант — PyCharm Edu от JetBrains.

Также рекомендуют вот эту серию уроков для новичков на YouTube.

Как действовать дальше?

Если вы прошли основы и уже умеете создавать простые программы, необходимо понять, куда двигаться дальше. Для этого: • пройдите тест на читабельность кода; • пройдите тест на знание языка программирования Python; • изучите проект Эйлера, который научит составлять правильные алгоритмы (есть версия на английском и на русском; • пройдите игру со встроенной средой программирования; • пройдите квест, где надо составлять алгоритмы на каждом шаге.

Получив и закрепив базовые знания, вы можете переходить на следующий уровень. Получить этот уровень вы сможете на курсах для опытных разработчиков в OTUS:

У вас всё получится, не сомневайтесь!