Основы программирования python

Содержание:

Введение в написание программ

Последнее обновление: 23.04.2017

Программа на языке Python состоит из набора инструкций. Каждая инструкция помещается на новую строку. Например:

print(2 + 3) 
print("Hello")

Большую роль в Python играют отступы. Неправильно поставленный отступ фактически является ошибкой. Например, в следующем случае мы получим ошибку, хотя код будет практически аналогичен приведенному выше:

print(2 + 3) 
	print("Hello")

Поэтому стоит помещать новые инструкции сначала строки. В этом одно из важных отличий пайтона от других языков программирования, как C# или Java.

Однако стоит учитывать, что некоторые конструкции языка могут состоять из нескольких строк. Например, условная конструкция if:

if 1 < 2:
    print("Hello")

Таких конструкций не так много, поэтому особой путаницы по поводу где надо, а где не надо ставить пробелы, не должно возникнуть.

Регистрозависимость

Python — регистрозависимый язык, поэтому выражения и или представляют разные выражения.
И если вместо метода print для вывода на консоль мы попробуем использовать метод Print:

Print("Hello World")

то у нас ничего не получится.

Комментарии

Для отметки, что делает тот или иной участок кода, применяются комментарии. При трансляции и выполнении программы интерпретатор игнорирует комментарии,
поэтому они не оказывают никакого влияния на работу программы.

Комментарии в Python бывают блочные и строчные. Все они предваряются знаком решетки (#).

Блочные комментарии ставятся в начале строки:

# Вывод сообщения на консоль
print("Hello World")

Строчные комментарии располагаются на той же строке, что и инструкции языка:

print("Hello World")  # Вывод сообщения на консоль

Основные функции

Python предоставляет ряд встроенных функций. Некоторые из них используются очень часто, особенно на начальных этапах изучения языка, поэтому рассмотрим их.

Основной функцией для вывода информации на консоль является функция print(). В качестве аргумента в эту функцию передается строка, которую мы хотим вывести:

print("Hello Python")

Если же нам необходимо вывести несколько значений на консоль, то мы можем передать их в функцию print через запятую:

print("Full name:", "Tom", "Smith")

В итоге все переданные значения склеятся через пробелы в одну строку:

Full name: Tom Smith

Если функция print отвечает за вывод, то функция input отвечает за ввод информации. В качестве необязательного параметра
эта функция принимает приглашение к вводу и возвращает введенную строку, которую мы можем сохранить в переменную:

name = input("Введите имя: ")
print("Привет", name)

Консольный вывод:

Введите имя: Евгений
Привет Евгений

НазадВперед

Читайте также

Основы Python №1: переменные и типы данных

В Python значения присваиваются переменным. Почему? Потому что это улучшает код — делает его более гибким, понятным и позволяет легко использовать повторно. В то же время «концепция присваивания» является одной из самых сложных в программировании. Когда код ссылается на элемент, который в свою очередь ссылается на другой элемент… это непросто. Но как только привыкаете, это начинает нравиться!

Посмотрим, как это работает!

Предположим, что есть собака (“Freddie”), и нужно сохранить ее черты (, , , и так далее) в переменных Python. В ячейке Jupyter Notebook нужно ввести следующее:

С этого момент если вводить названия переменных, то те будут возвращать соответствующие значения:

Как и в SQL в Python есть несколько типов данных.

Например, переменная хранит строку: . В Python 3 строка — это последовательность символов в кодировке Unicode (например, цифры, буквы, знаки препинания и так далее), поэтому она может содержать цифры, знаки восклицания и почти все что угодно (например, ‘R2-D2’ — допустимая строка). В Python легко определить строку — она записывается в кавычках.

и хранят целые числа ( и ) — это числовой . Другой тип данных — числа с плавающей точкой (float). В примере это со значением .

Значение переменной — это логический тип (или булевый тип). В этом типе есть только два значения: и .

Резюме в таблице:

Имя переменной Значение Тип данных
str (сокр. от ‘string’ — строка)
int (сокр. от ‘integer’ — целое число)
bool (сокр. от Boolean — булев тип)
float (сокр. от floating — с плавающей запятой)
int (сокр. от integer)

Есть и другие типы данных, но для начала этих четырех будет достаточно.

Важно знать, что любую переменную Python можно перезаписать. Например, если запустить:. в Jupyter Notebook, тогда имя пса больше не будет ‘Freddie’…

в Jupyter Notebook, тогда имя пса больше не будет ‘Freddie’…

Переменные Python — основные операторы

Вы знаете, что такое переменные. Пора поэкспериментировать с ними! Определим две переменные: и :

Что можно сделать с и ? В первую очередь, есть набор арифметических операций! Ничего необычного, но вот список:

Оператор Что делает? Результат
Складывает a и b 7
Вычитает b из a -1
Умножает a на b 12
Делит a на b 0.75
Делит b на a и возвращает остаток 1
Возводит a в степень b 81

Вот как это выглядит в Jupyter:

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

Оператор Что делает? Результат
Оценивает, больше ли чем
Оценивает, меньше ли чем
Оценивает, равны ли и

В Jupyter Notebook:

В итоге, переменные сами могут быть логическими операторами. Определим и :

Оператор Что делает? Результат
, если и —
, если или —
Противоположное

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

Время переходить к заданиям.

Проверьте себя №1

Вот несколько переменных:

Какой тип данных вернется, и каким будет результат всей операции?

Ответ: это будет логический тип данных со значением .

Почему? Потому что:

  • Значение равно , поскольку 1 не равняется ‘cool’
  • Значение равно по определению
  • Значение равно , потому что 3 больше 2

Таким образом, превращается в , что в итоге приводит к .

Проверьте себя №2

Используйте переменные из прошлого задания:

Но в этот раз попробуйте определить результат слегка измененного выражения:

Чтобы правильно решить эту задачку, нужно знать порядок исполнения :

  1. not
  2. and
  3. or

Ответ: .

Почему? Разберем.

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

Первым исполняется оператор . После того как все оценены, остается: .

Второй шаг — определить оператор . Переводим и получаем , что приводит к .

И финальный шаг — :

Операции со строками

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

3. Объединение с преобразованием

Вы можете объединить строку с числом или логическим значением. Но для этого нужно использовать преобразование. Для этого существует функция str():

4. Поиск подстроки

Вы можете найти символ или подстроку с помощью метода find:

Этот метод выводит позицию первого вхождения подстроки losst.ru если она будет найдена, если ничего не найдено, то возвращается значение -1. Функция начинает поиск с  первого символа, но вы можете начать с энного, например, 26:

В этом варианте функция вернет -1, поскольку строка не была найдена.

5. Получение подстроки

Мы получили позицию подстроки, которую ищем, а теперь как получить саму подстроку и то, что после нее? Для этого используйте такой синтаксис , просто укажите два числа или только первое:

Первая строка выведет подстроку от первого до второго символа, вторая — от второго и до конца

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

Вы можете заменить часть строки с помощью метода replace:

Если вхождений много, то можно заменить только первое:

7. Очистка строк

Вы можете удалить лишние пробелы с помощью функции strip:

Также можно удалить лишние пробелы только справа rstrip или только слева — lstrip.

Для изменения регистра символов существуют специальные функции:

9. Конвертирование строк

Есть несколько функций для конвертирования строки в различные числовые типы, это int(), float() , long() и другие. Функция int() преобразует в целое, а float() в число с плавающей точкой:

10. Длина строк

Вы можете использовать функции min(), max(), len() для расчета количества символов в строке:

Первая показывает минимальный размер символа, вторая — максимальный, а третья — общую длину строки.

11. Перебор строки

Вы можете получить доступ к каждому символу строки отдельно с помощью цикла for:

Для ограничения цикла мы использовали функцию len()

Обратите внимание на отступ. Программирование на python основывается на этом, здесь нет скобок для организации блоков, только отступы

Где брать информацию

Сайты

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

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

Хороший пример сайта для обучения: “all-python.ru”. Здесь можно найти всю необходимую теорию с примерами, а также реализацию простых программ, таких как калькулятор и календарь.

Видео-уроки на YouTube

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

Курсы

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

Курсы — отличная возможность выучить Python для новичков, однако они не станут самодостаточным источником информации, особенно при углублённом изучении.

Техническая литература

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

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

Практика: мелкие скрипты just for fun и для облегчения работы

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

Проблем, впрочем, не возникло.  Свой первый простенький калькулятор на php я писал около 3 часов (сейчас справился бы за 15 минут). Потом пошло куда легче. Мне скучно было искать новые учебники и выполнять задания по порядку, я с первых дней работал над интересными задачами.

Так появились:

  • Инструмент для принятия рациональных решений.
  • Калькулятор расчета окупаемости бизнес-идеи (не дожил до наших дней).
  • сервис smmup.ru.

Чуть позже стал писать скрипты для SEO, использующие API различных сервисов  (Яндекс.Метрика, Search Console). Тогда я на потоке делал SEO-аудиты на заказ, так что экономия времени благодаря автоматизации оказалась очень существенной.

Еще один приятный бонус от новых навыков — стало гораздо легче общаться с программистами (этого SEO-шнику не избежать).

Станьте Junior Python разработчиком

В начале пути программирование кажется сложным предметом, но Python проще, чем вы думаете. Развивайте привычку учиться и не бойтесь ошибок. Используйте pythonru.com, ютуб и онлайн курсы — вы научитесь программировать, не выходя из дома!

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

Учитесь вместе с отраслевыми экспертами и приобретайте навыки, необходимые работодателям. SkillBox предлагает оплату в рассрочку и гарантирует трудоустройство по окончанию обучения.

Как использовать Jupyter Notebeook

Теперь разберем, как пользоваться Jupyter Notebook!

  1. Введите команду Python! Это может быть команда на несколько строк — если нажать Enter, ничего не запустится, а в этой же ячейке появится новая строка!

  1. Для запуска команды Python нужно нажать !

  1. Введите что-то и нажмите . Если это возможно, Jupyter автоматически закончит выражение (для команд ). Если вариантов несколько, появится выпадающее меню.

Основы Python

Прекрасно! Вы знаете все, что может понадобиться с технической стороны. Дальше речь пойдет об основных концепциях, которые нужно изучить, прежде чем переходить к использованию Python в Data Science. Вот эти 6 концепций:

  1. Переменные и типы данных
  2. Структуры данных в Python
  3. Функции и методы
  4. Инструкция (оператор) if
  5. Циклы
  6. Основы синтаксиса Python

Чтобы упростить процесс изучения и практики, эти 6 тем разбиты на 6 статей. Вот первая.

Вышла версия 1.0 фреймворка Tornado

Популярный проект, по созданию неблокирующего web-сервера и «сопутствующего» фреймворка на языке Python, объявил о релизе версии 1.0.
Скачать новую версию можно тут:
По сравнению с последним релизом версии 0.2, было добавлено множество новшеств,
— возможность запуска WSGI-приложений, под управлением сервера Tornado (например приложения Django и CherryPy)
— улучшенная производительность в MacOS X (с использованием kqueue) и экспериментальная поддержка win32
— переписан класс AsyncHTTPClient
— поддержка .mo файлов в модуле локализации
— поддержка пре-форкинга для запуска нескольких процессов Tornado
— поддержка SSL и gzip в HTTP-сервере
И многое другое.

Интерактивные курсы

  • CheckiO — это геймифицированный веб-сайт, содержащий задачи по программированию, которые можно решить на Python 3.
  • Python on Codecademy — портал для обучения.
  • Code the blocks объединяет программирование на Python с трехмерной средой, в которой вы можете «размещать блоки» и строить структуры. Также вы найдете там учебные пособия, которые постепенно научат Вас создавать сложные 3D-структуры.
  • Computer Science Circles содержит 30 уроков, 100 упражнений. На сайте есть встроенный чат, куда ученик может обратиться за помощью к учителю. Общение в чате происходит на голландском, французском, немецком и литовском языках.
  • DataCamp Python Tutorial. В отличие от большинства других учебных пособий по Python, этот 4-х часовой учебный курс от DataCamp фокусируется на Python для Data Science. Он содержит 57 интерактивных упражнений и 11 видеоуроков.
  • Finxter. Насколько хороши Ваши навыки Python? Более 300 отобранных головоломок на Python для тестов и тренировок.
  • How to Think Like a Computer Scientist: Interactive Edition — это интерактивное переосмысление книги Элкнера, Дауни и Майера с визуализацией и звуковыми пояснениями.

Шаг 5: Знакомство с другими источниками по Python для начинающих

Изучение основ Python для начинающих с помощью онлайн-курсов — это хорошо, но что же делать, когда ваш курс закончится?

Что ж, ответ на этот вопрос прост — ниже вы найдете больше ресурсов, которые позволят вам продолжать изучать и практиковать свой навык!

К счастью для вас, есть множество различных ресурсов, которые вы можете использовать. Среди них:

Справочные руководства

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

Видео-уроки

Если вы застряли в работе над проектом и вам нужна помощь — и вы мне поверите — короткие видеоуроки могут помочь вам взглянуть на привычные вещи по-другому

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

Преимущества

  • Профессиональный сервис
  • Гибкое расписание
  • Разнообразие вариантов обучения

Основные Функции

  • Профессиональные сертификаты
  • Курсы университетского уровня
  • Программы онлайн степеней

Посмотреть На Все Купоны Лучших Платформ Для Онлайн Обучения Преимущества

  • Простой в использовании
  • Предлагает качественный контент
  • Очень открытый в своих ценах

Основные Функции

  • Бесплатные сертификаты об окончании
  • Фокус на навыки науки о данных
  • Гибкое расписание занятий

Посмотреть На Все Купоны Лучших Платформ Для Онлайн Обучения

Задачки по программированию

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

Наследование: поведение и характеристики

Разные объекты могут иметь некоторую схожесть, обладать поведением и характеристиками.

Например, я унаследовал какие-то характеристики и поведение от своего отца. Я получил его глаза и волосы в качестве своих характеристик, а его нетерпеливость и интровертность в качестве своего поведения.

В объектно-ориентированном программировании классы могут наследовать простые характеристики(данные) и поведение(методы) от других классов.

Давайте посмотрим другой пример и реализуем его в Python.

Представьте машину. Количество колёс, сидячих мест и максимальная скорость — всё это атрибуты машины. Мы можем сказать, что класс электромашины наследует эти схожие характеристики от обычного класса машины.

class Car:    
  def __init__(self, number_of_wheels, seating_capacity, maximum_velocity):    
    self.number_of_wheels = number_of_wheels    
    self.seating_capacity = seating_capacity    
    self.maximum_velocity = maximum_velocity

Наш класс машины реализует:

my_car = Car(4, 5, 250)   
print(my_car.number_of_wheels)   
print(my_car.seating_capacity)   
print(my_car.maximum_velocity)

Один раз реализовав, мы можем использовать все созданные экземпляры переменных. Неплохо.

В Python, мы применяем класс-родитель к нашему классу-наследнику как параметр. Класс электромашины может наследоваться от класса машины.

class ElectricCar(Car):    
  def __init__(self, number_of_wheels, seating_capacity, maximum_velocity):    
    Car.__init__(self, number_of_wheels, seating_capacity, maximum_velocity)

Вот так просто. Нам не нужно реализовывать какой-либо другой метод, потому что этот класс уже имеет его(унаследовав от класса машины). Давайте докажем это:

my_electric_car = ElectricCar(4, 5, 250)   
print(my_electric_car.number_of_wheels) # => 4   
print(my_electric_car.seating_capacity) # => 5   
print(my_electric_car.maximum_velocity) # => 250

Прекрасно.

На этом всё!

Мы изучили множество вещей о базах Python:

  • Как работают переменные Python
  • Как работают блоки условий
  • Как работают циклы(while и for)
  • Как использовать списки: коллекции | массивы
  • Коллекция-словарь в виде ключ-значение
  • Как мы можем проводить итерации через эту структуры данных
  • Объекты и классы
  • Атрибуты как данные объектов
  • Методы как поведение объектов
  • Использование Python получателя и установщика, а также свойство @property
  • Инкапсуляция: сокрытие информации
  • Наследование: поведение и характеристики

Поздравляем! Вы освоили эту насыщенную и необходимую часть языка Python.

Перевод статьи TKLearning Python: From Zero to Hero

Deep Anomaly Detection

Из песочницы

Детекция аномалий с помощью методов глубокого обучения

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

Напоследок: зачем и как учиться программированию

Как ни странно, программирование — в первую очередь свобода. Свобода обращения с данными. Ты можешь как угодно их комбинировать, сравнивать, обрабатывать сложными алгоритмами, класть в основу моделей машинного обучения… При этом тебя не отвлекают мелочи вроде разных форматов и источников (API? просто сайт? куча файлов? — без разницы! под все давно есть готовые решения). Исключительно ценное умение для SEO-специалиста и интернет-маркетолога.

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

Сначала долгий период страха и сомнений. Суетливая, не слишком осмысленная подготовка (копание в статьях и мануале без системы).

И вдруг — полет наедине с небом. Все становится простым и понятным (чувство, когда написал свой первый настоящий скрипт).

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

Поделиться
Твитнуть
Поделиться
Отправить

Основы Python — кратко. Строки.

Поскольку число положительных отзывов превысило число отрицательных, продолжу выкладывание уроков. Те кто уже знаком с основами — можете или просто пропустить урок, или попробовать сделать задание 3 самым коротким способом 🙂
Для начала маленькое замечание.
Начиная с Python 2.3, всем, кто использует не-ASCII кодировку нужно добавлять указание о кодировке в самом начале программы. Для русского языка это будет в основном:

# -*- coding: cp1251 -*-

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

Где используется Python и для чего?

Основные сферы применения данного языка программирования:

Веб-разработка

Создание сайтов, интернет-сервисов, порталов, парсеров. Питон используют для программирования серверной части, то есть скриптов, которые отвечают за обработку информации и вычисления. Подробно об этом можно прочитать в описании профессии Backend-разработчик.

Машинное обучение и искусственный интеллект

Создание поисковых систем и других программ, где применяется AI. Например, в Яндексе и Google активно используют данную технологию.

Big Data (анализ и обработка больших массивов данных)

Проведение научных исследований и вычислений, анализ финансовых рынков и составление прогнозов. Основные работодатели – научные центры, банки, инвестиционные фонды.

Помимо указанных областей, язык программирования Питон используют в мобильной разработке (например, в приложении Инстаграм), компьютерных играх, в телекоммуникационном оборудовании, банкоматах, ЧПУ-станках. На этом языке пишут десктоп-программы, например, графический редактор GIMP.

В числе ИТ-компаний, где востребована данная технология: Facebook, Microsoft, Dropbox, Intel, Cisco, HP, IBM, Qualcomm, Seagate и множество других.

Что такое Python? Он подходит только для Data Science?

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

  1. Python — язык общего назначения и он используется не только для Data Science. Это значит, что его не нужно знать идеально, чтобы быть экспертом в сфере работы с данными. В то же время даже основ будет достаточно, чтобы понимать и другие языки, а это очень удобно для работы в IT.
  2. Python — высокоуровневый язык. Это значит, что в отношении процессорного времени он не самый эффективный. С другой же стороны, он был создан очень простым, «удобным для использования» и понятным. Так, пусть вы и проиграете в процессорном времени, но сможете отыграться в процессе разработки.

Преподаватель

Илья Фофанов

О преподавателе курса

  • Инженер-программист с опытом более 10 лет
  • Сертифицированный специалист по WPF и WCF
  • Организатор и координатор .NET митапов MskDotNet

«Я благодарен за то, что люблю своё дело.

Профессионально занимался проектированием и реализацией ПО больше 10 лет, преимущественно на платформе .NET. Люблю работать над созданием богатых и мощных приложений с использованием современных технологий. Сертифицированный специалист по WPF и WCF. Один из координаторов московских .NET митапов MskDotNet.

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

Пожелание студентам: Fake it Till You Make it! Это означает: притворяйся, пока не получится.  Хотите стать senior developer? Имитируйте его деятельность, старайтесь делать всё то же, что делает senior developer, и так или иначе — вы им станете. Поэтому — учиться, учиться и  ещё раз учиться. Нет унынию. Fake it Till You Make it!»

Как пользоваться ADB run

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector