Что должен знать junior python – Профессия Python разработчик: чем занимается, зарплата, как стать программистом на Питоне

Содержание

Какие знания нужны для Python Junior-а? — Хабр Q&A

Мне когда-то на подобный вопрос дали развернутый ответ (еще раз спасибо этому человеку). Я не смог найти ссылку на тот форум, но сам ответ у меня был сохранен:
Вот список знаний, которыми должен обладать потенциальный Junior Python developer:

Уметь самообучаться, находить нужную информацию.

Иметь общие представления о том, что такое ОС и зачем она появилась.
Понимать что такое процесс и как он “живёт” в ОС.
Понимать что такое поток.
Понимать что такое сокеты и зачем они нужны.
Иметь представление о том, как устроен стек протоколов TCP/IP.

Понимать что такое Linux.
Уметь работать в sh.
Понимать что такое виртуализация и знать какие бывают типы.
Уметь настраивать виртуальные машины через vagrant или подобные инструменты.
Уметь работать с GIT(создавать ветки, разрешать конфликты, etc)

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

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

Уметь работать с БД(хотя бы CRUD, join)
Уметь работать с nginx(хотя бы проксирование настроить)

(можно просто написать — “прочитать Лутца”, но выделю пару вопросов)
Знать чем отличаются new style классы от old style.
Знать чем отличаются Python2 от Python3
Знать чем отличается str от unicode и почему в программе нужно работать с unicode.
Понимать алгоритм импорта модулей в Python.
Понимать что такое генераторы и итераторы.
Понимать что такое дескрипторы.
Понимать что такое GIL и зачем он нужен.
Понимать что такое WSGI и зачем он появился.

+ Уметь писать тесты, понимать зачем это нужно.
+ Практические и теоритические основы по framework.

+ выполнить норматив по ГТО
+ не пить и не курить.

Так же можешь потренироваться по заданиям Юры Юревича.


Заданиям Юры Юревича — тыц.

15 вопросов по Python: как джуниору пройти собеседование

Готовитесь к собеседованию на позицию Python-джуниора? Подборка важных вопросов по Python с объяснением и полезными ссылками вам поможет.

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

О Питоне в двух словах

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

Мировые IT-лидеры, такие как Google и Dropbox, активно используют Python в своих проектах. Причина популярности кроется в его простоте и мощности.

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

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

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

10 базовых вопросов по Python

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

Изменяемые и неизменяемые типы данных

Все данные относятся к одному из двух типов – неизменяемые или изменяемые. Очевидно, что первые в конце программы выглядят точно так же, как и в начале. К ним относятся числа, строки и кортежи. С другой стороны, списки и словари могут измениться в процессе работы. Например, добавятся или удалятся элементы.

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

def foo(a=[]):
    a.append(1)
    print(a)

foo()
foo()
foo()

Первый вызов функции foo предсказуемо выведет список, состоящий из одного элемента 1. Однако если вы ожидаете такого же результата от второго и третьего вызовов, то будете удивлены. На самом деле, вывод будет следующим:

# [1]
# [1, 1]
# [1, 1, 1]

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

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

Хеширование

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

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

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

Часто говорят, что изменяемые объекты Python в принципе нельзя хешировать, а неизменяемые – всегда можно. На самом деле, возможность хешировать объект и его неизменяемость – понятия разные.

Лучше разобраться в концепции поможет видео:

Виды строк

Оперировать строками в Python – одно удовольствие, так как язык предоставляет для них множество удобных методов. Также имеется поддержка «сырых» строк и строковых литералов.

Чтобы строка стала «сырой», перед ней необходимо поставить символ

r в любом регистре:

common_string = 'C:\file.txt'
raw_string = r'C:\file.txt'
print(common_string) # C: ile.text
print(raw_string) # C:\file.txt

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

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

s = '''<div>
  <a href="#">content</a>
</div>'''
print(s)

Этот код выведет все, что находится между тройными апострофами. При этом кавычки в значении атрибута и переносы строк сохранятся.

Лямбда-выражения

Лямбды пришли в Python из языка Lisp. Это простые анонимные функции, записанные в одну строку. Их можно объявить даже там, где нельзя воспользоваться инструкцией

def. Например, эти выражения часто используются в методах filter и map.

foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]

print(list(filter(lambda x: x % 3 == 0, foo)))
# [18, 9, 24, 12, 27]

print(list(map(lambda x: x * 2 + 10, foo)))
# [14, 46, 28, 54, 44, 58, 26, 34, 64] 

Списки

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

Вот небольшая задачка по python-спискам для тренировки мозга:

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
A1 = range(10)
A2 = sorted([i for i in A1 if i in A0])
A3 = sorted([A0[s] for s in A0])
A4 = [i for i in A1 if i in A3]
A5 = {i:i*i for i in A1}
A6 = [[i,i*i] for i in A1]

Определите, что находится в каждой переменной, и сравните свои предположения с ответом.

A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} 
A1 = range(0, 10)
A2 = []
A3 = [1, 2, 3, 4, 5]
A4 = [1, 2, 3, 4, 5]
A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

Если эти преобразования вам непонятны, потратьте на них немного времени.

Итераторы и генераторы

Итератор – это интерфейс, который позволяет перебирать элементы последовательности. Он используется, например, в цикле for ... in ..., но этот механизм скрыт от глаз разработчика. При желании итератор можно получить «в сыром виде», воспользовавшись функцией iter().

Чтобы получить следующий элемент коллекции или строки, нужно передать итератор функции next().

Под капотом функциональность реализуется в методах __iter__ и __next__.

Пример простого итератора:

class SimpleIterator:
    def __iter__(self):
        return self

    def __init__(self, limit):
        self.limit = limit
        self.counter = 0

    def __next__(self):
        if self.counter < self.limit:
            self.counter += 1
            return 1
        else:
            raise StopIteration

simple_iter = SimpleIterator(5)

for i in simple_iter:
    print(i)
# 1
# 1
# 1
# 1
# 1

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

numbers = range(10)
squared = [n ** 2 for n in numbers if n % 2 == 0]
print(squared)   # [0, 4, 16, 36, 64]

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

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

Очевидно, что генераторы могут выполнять работу функций map и filter. Более того, они справляются с этой задачей эффективнее.

*args и **kwargs

Иногда нельзя предсказать, сколько аргументов получит функция. Чтобы обработать их, используются специальные конструкции *args и **kwargs.

На самом деле, названия переменных – args, kwargs – это просто соглашение. Важны здесь только звездочки. Они обозначают сборку аргументов в коллекцию (список или словарь). Одна звездочка предназначена для обычных аргументов, две – для именованных.

Можно заменить *args на *vars, а **kwargs на **options или другое слово. Программа будет работать так, как ожидается. Однако, другие разработчики могут вас не понять.

def test_args(farg, *args):
    print("Первый известный аргумент: ", farg)
    for arg in args:
        print("Один из оставшихся аргументов: ", arg)

test_args(1, "two", 3)
# Первый известный аргумент: 1
# Один из оставшихся аргументов: two
# Один из оставшихся аргументов: 3

def test_kwargs(farg, **kwargs):
    print("Первый известный аргумент: ", farg)
    for key in kwargs:
        print("Один из оставшихся аргументов: %s: %s" % (key, kwargs[key]))

test_kwargs(farg=1, myarg2="two", myarg3=3)
# formal arg: 1
# Один из оставшихся аргументов: myarg2: two
# Один из оставшихся аргументов: myarg3: 3

Конструкции *args и **kwargs можно использовать как самостоятельно, так и в комбинации с любым количеством обычных аргументов. Например, в коде выше первый параметр farg обрабатывается отдельно, а все остальные собираются в коллекцию.

Декораторы

Функции и классы в Python – объекты удобные. Они сами могут быть входящими и исходящими аргументами функций. Это свойство можно использовать, чтобы сделать жизнь разработчика немного приятнее.

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

Декораторы в Python – это, по сути, синтаксический сахар. Для их обозначения используется символ @.

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

def bread(func):
  def wrapper():
      print "</''''''\>"
      func()
      print "<\______/>"
  return wrapper

def vegetables(func):
  def wrapper():
      print "#помидорка#"
      func()
      print "~лист салата~"
  return wrapper

def sandwich(food="--ветчина--"):
  print food

sandwich = bread(vegetables(sandwich))
sandwich()

#</''''''\>
# #помидорка#
# --ветчина--
# ~лист салата~
#<\______/>

Изначально функция sandwich только печатает начинку, а затем она становится полноценным бутербродом. То же самое можно сделать чуть проще:

@bread
@vegetables
def sandwich(food="--ветчина--"):
  print food

sandwich()

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

В Python есть несколько встроенных декораторов, например, @classmethod, @staticmethod, @property.

Исключения

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

В Питоне определен главный класс BaseException, от которого наследуются все остальные классы ошибок. У него есть четыре прямых наследника:

  • SystemExit – произошел выход из программы.
  • KeyboardInterrupt – пользователь прервал выполнение программы (комбинация Ctrl+C).
  • GeneratorExit – завершена работа объекта generator.
  • Exception – родительский класс для пользовательских исключений.

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

  • IOError – ошибка ввода-вывода, например, «файл не найден».
  • ImportError – ошибка импорта модуля.
  • IndexError – обращение к несуществующему индексу последовательности.
  • OSError – ошибка системы.
  • SyntaxError – синтаксическая ошибка.
  • TypeError – ошибка типа данных, например, функция вызывается с неподходящим по типу аргументом.
  • ZeroDivisionError – деление на ноль.

Чтобы поймать и обработать исключения, нужно использовать конструкцию try – except – finally.

try:
    k = 1 / 0
except ZeroDivisionError:
    k = 0

print(k)

# 0

В блоке try размещается код, который должен быть выполнен. Блок except дает возможность поймать и обработать нужные ошибки. При необходимости можно добавить еще инструкцию finally, которая выполнится в любом случае.

ООП

В Python изначально заложена поддержка ООП, метаклассов, наследования, включая множественное, и инкапсуляции.

Пример наследования в Python:

class Animal(object):
    def __init__(self, name):
        self.name = name

    def say(self):
        print(self.name + " хочет что-то сказать")

    def swim(self):
        print(self.name + " подходит к воде")


class Cat(Animal):
    def say(self):
        super(Cat, self).say()
        print(self.name + " говорит Мяу")

    def swim(self):
        super(Cat, self).swim()
        print(self.name + " боится воды")


class Dog(Animal):
    def say(self):
        super(Dog, self).say()
        print(self.name + " говорит Гав")

    def swim(self):
        super(Dog, self).swim()
        print(self.name + " плывет по-собачьи")


class CatDog(Cat,Dog):
    swim = Dog.swim

    def say(self):
        super(CatDog, self).say()

cat = Cat("Кот")
dog = Dog("Пес")
catDog = CatDog("КотоПес")

cat.say()
# Кот хочет что-то сказать
# Кот говорит Мяу

dog.say()
# Пес хочет что-то сказать
# Пес говорит Гав

catDog.say()
# КотоПес хочет что-то сказать
# КотоПес говорит Гав
# КотоПес говорит Мяу

cat.swim()
# Кот подходит к воде
# Кот боится воды

dog.swim()
# Пес подходит к воде
# Пес плывет по-собачьи

catDog.swim()
# КотоПес подходит к воде
# КотоПес плывет по-собачьи

В коде определяется родительский класс Animal с базовой реализацией методов say() и swim(). У Animal есть два наследника: Cat и Dog.

Дочерние классы дополняют методы родителя собственным поведением. Чтобы сделать это, им приходится вызывать метод суперкласса с помощью функции super().

Класс CatDog демонстрирует пример множественного наследования в Python. Он берет лучшее от обоих родителей: плавает как Dog и говорит на двух языках.

5 вопросов о Python-технологиях

Потоки

Вопрос о потоках – один из самых животрепещущих в сообществе. Поэтому вполне можно ожидать, что он прозвучит на собеседовании по Python.

Работа нескольких потоков иногда заканчивается конфликтом. Чтобы защититься от этого, CPython использует технологию Global Interpreter Lock.

Глобальный блокировщик следит за тем, чтобы активен был всегда только один поток. По сути, он просто запрещает параллельность. Хотя такой подход очень упрощает работу, он фактически убирает все преимущества многопоточной модели. Например, нельзя ускорить программу, разделив один поток на несколько. Python-сообщество неоднократно просило убрать GIL, однако, создатель языка решил оставить все как есть.

Впрочем, иногда потоки нужны. Например, на них можно переложить загрузку файлов с сервера. Для этого в Python используется модуль threading.

Код ниже демонстрирует добавление функции clock в поток.

import threading
import time
def clock(interval):
    while True:
        print("The time is %s" % time.ctime())
        time.sleep(interval)
t = threading.Thread(target=clock, args=(15,))
t.daemon = True
t.start()

Асинхронность

Асинхронность – еще один способ выполнения нескольких задач сразу. Она предлагает решать проблему с помощью функций обратного вызова (callback).

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

В Python есть несколько асинхронных библиотек. Самые популярные из них – стандартная AsyncIO и Tornado.

В последних версиях языка появились новые синтаксические конструкции async и await.

Тестирование

В Python есть стандартный модуль unittest. Он позволяет объединять тесты в группы, настраивать и автоматизировать их. Дополнение Mock дает возможность использовать mock-объекты, что облегчает тестирование.

Отладка

Python-код можно и нужно отлаживать. Для этого в языке есть специальный интерактивный дебаггер pdb.

Расширения на C/C++

Интерпретатор CPython позволяет внедрять в программы расширения, которые написаны на C и C++. Разработчик может оптимизировать код и пользоваться библиотеками языка C. Кроме того, можно управлять ресурсами на низком уровне.

Другие вопросы

Список из 15 вопросов по Python не является исчерпывающим.

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

Тем не менее вопросы охватывают большую часть знаний, которые нужны разработчику. Разобравшись в них, вы улучшите свои шансы на успех.

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

Путь Python Junior-а в 2017

Инфографика о минимум знаний и навыков, необходимых современному python джуниору. Без каких технологий не обойтись начинающему разработчику?

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

  • Git — контроль версий
  • SSH — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов)
  • HTTP — протокол прикладного уровня передачи данных
  • Базовые навыки пользования терминалом
  • Алгоритмы и структуры данных — основа основ
  • Кодировки
  • SQL, базы данных
  • nginx — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах
  • GitHub
    • создайте свой профиль
    • изучайте интересные вам проекты, учитесь читать чужой код, выработайте привычку разбираться в том, как он работает
    • создайте свой проект с открытым кодом или присоединитесь к уже существующему
  • ООП
    • основные принципы ООП
    • императивный и декларативный стили
    • замыкания и интроспекция
    • асинхронная концепция программирования
  • ОС
    • потоки
    • процессы
    • сокеты
    • стек протоколов TCP/IP
  • Python2 vs Python3 — различия синтаксиса
  • Дескрипторы — очень мощный инструмент в Python. Дескрипторы — это классы, в которых определены методы __get__, __set__ и __delete__
  • GIL — способ синхронизации потоков
  • WSGI — стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером
  • Генераторы и итераторы
  • Импорт модулей

Фреймворки

Асинхронные

  • Tornado
  • gevent
  • aiohttp
  • Celery

Синхронные

Тестирование

  • doctest
  • py.test
  • Selenium
  • unittest/pyUnit

Менеджеры пакетов

что нужно знать джуниору, чтобы работать и развиваться

Мы сделали сокращенную расшифровку с главными мыслями из Python Junior Podcast: в нем мы обсудили, с чего начинать и куда податься начинающему разработчику на Python. В последнее время у нас много контента для миддлов и сеньоров, но этот выпуск — точно для джунов.

Python для Веба: что нужно знать джуниору, чтобы работать и развиваться - 1

Главные темы:

  • Какие знания нужны начинающему программисту, чтобы заниматься
    веб-разработкой?
  • Чего ждут работодатели от разработчиков?
  • Что делать, чтобы найти работу без опыта?
  • Как может развиваться Python-разработчик?

Python Junior Podcast — подкаст о программировании для тех, кто хочет лучше разбираться в Python. Эфиры ведут евангелисты сообщества MoscowPython и преподаватели курсов Learn Python.

В разговоре участвовали:

  • Валентин Домбровский,сооснователь MoscowPython
  • Злата Обуховская, тимлид NVIDIA
  • Григорий Петров, евангелист MoscowPython
  • Алексей Штырняев, разработчик в FinEx, преподаватель курсов Learn
    Python

Почему Python хорош для веб-разработки

Валентин Домбровский: Почему именно Python подходит для веб-разработки? Почему не PHP или JavaScript, например?

Григорий Петров: Так ведь выбора особо нет. Несмотря на то что в современном Вебе можно фактически без бэкенда — чисто на фронтенд-технологиях, на JavaScript — собрать себе single page application или progressive web application, все равно это слишком сложно, плохо индексируется и требует крутых разработчиков.

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

Давайте рассмотрим возможные варианты.

  • C#. Microsoft действительно молодцы, они сделали .NET Core и всячески ее продвигают. Но, во-первых, это новая кроссплатформенная технология, и там еще не все гладко. Во-вторых, это действительно дорого, разработчиков C# мало — просто потому, что она непопулярна.
  • Java. Это сложно. Сделать нормальный сайт на Java — это не 10 строчек кода, как на Python. Это много кода, это фреймворки, и нужно знать специфику настройки Java-серверов. В общем, сплошные боль и страдания.
  • PHP. В последних версиях он замечательный. Я даже так скажу: PHP 7.2 не хуже Python. Но нельзя просто так взять и использовать PHP 7.2. Если обычный, не топовый разработчик делает сайт на PHP, он не будет писать только на 7.2: все равно придется читать какие-то учебники, туториалы, везде куча legacy-кода, и это не очень хорошо.
  • JavaScript и Node.js. Это замечательно и очень современно, когда один язык и на фронтенде, и на бэкенде. Только не очень стабильно. Node.js — хорошая штука, но проблематично развернуть ее в продакшене так, чтобы она не падала и работала устойчиво. Плюс, если мы хотим писать качественный код на JavaScript, нам нужен не JavaScript, а TypeScript. А вот TypeScript неожиданно сложный, при виде него у рядового разработчика вскипают мозги.

Давайте опустим Ruby, Haskell, Erlang и другие нишевые штуки, и у нас остается… Python. Язык с консистентным синтаксисом, единообразной стандартной библиотекой, лучшей документацией, популярными легкими фреймворками, мегапопулярным комбайном Django.

Получается, что, несмотря на широчайший выбор, если у нас обычные, не топовые разработчики, мы обычный бизнес, который хочет делать обычные сайты, у нас нет отдела разработки на 50 человек, то мы берем Python.

Какие знания нужны для входа в профессию

Злата Обуховская: Я считаю, что один фреймворк нужно знать хорошо — и знать, какие еще бывают и когда они используются. Где Tornado, где Django, где Flask, где aiohttp и так далее.
Пригодится знать, что есть такая штука, как протоколы. В частности, знание протокола http — центральное для построения веб-приложений.

Еще нужно хотя бы приблизительно представлять себе, как в веб-проектах устроен фронтенд: что есть HTML, CSS, JS.

Алексей Штырняев: И знать, где лежит документация. Это самое главное.

Григорий Петров: Тут мы ступаем на очень зыбкую почву. Если нам не повезло и мы начали как-то серьезно изучать современный фронтенд, то он будет примерно раз в 10 сложнее, чем бэкенд на Python. Начинающему разработчику нужно ограничить свой фокус так, чтобы начать изучать HTML, но чтобы не провалиться во все эти div, span, float, как там все выравнивается и выстраивается.

Алексей Штырняев: Нужен базовый курс по Bootstrap. И основы HTML.

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

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

Григорий Петров: Да, порекомендую сразу на тот случай, если вы выбрали Python в качестве языка бэкенд разработки и, например, Django в качестве фреймворка: у Django есть документация в Django Book, она реально клевая, в ней все то, о чем сказала Злата, она и правда хороша для начинающего.

Алексей Штырняев: Еще для быстрого старта подойдет какой-нибудь Django Girls, если цель — изучить именно Django. Это такой туториал, где за один день можно пройти по верхам, понять основы и то, на что способен фреймворк.

Валентин Домбровский: Готовясь к записи подкаста, мы составили список того, что нужно программисту на Python для веб-разработки, чем и резюмируем ранее сказанное.

Что входит в базис для веб-разработки на Python

  • Веб-фреймворки Django, Flask, aiohttp, Tornado и т. д. (и знать о существовании остальных).
  • Протоколы и API: в первую очередь http, JSON-RPC, Protocol Buffers, gRPC.
  • ORM и миграции, реляционные базы данных, SQLAlchemy, SQL, PostgreSQL, MySQL.
  • Основы HTML, CSS, Bootstrap, а также JS-фреймворки и JQuery.
  • Принципы работы приложений на продакшене, тестирование, юнит-тесты, автотесты, системы контроля версий, git.

Нужны ли джуниору алгоритмы

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

Григорий Петров: Я хочу подлить масла в огонь. Вот откуда вообще берется наша тяга к алгоритмам?

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

Это пытаются делать, но тут у нас история Хогвартса: мы не можем сделать школу волшебников, пока у нас нет ни одного волшебника. Поэтому что делать университету, в который приходят и просят: «Начните обучать программистов», а программистов у них нет, потому что все работают в Mail.ru, Rambler и «Яндексе», им там хорошо?

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

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

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

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

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

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

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

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

Григорий Петров: Бизнесу нужен писатель, а не лингвист. Писателю не нужно знать, почему тысячу лет назад это слово трансформировалось вот в то. Ему надо уметь применять эти слова.

Что нужно, чтобы найти первую работу разработчиком

Алексей Штырняев: Наверное, нет универсального рецепта, по которому нужно готовить джуниора.

Если вы приходите в какую-то компанию, вас возьмут не за то, что вы знаете Django, JSON и немного алгоритмов. Вас, скорее всего, возьмут за те скиллы, которые здесь и сейчас нужны этой компании.

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

Григорий Петров: Когда мы в VoxImplant искали нескольких джунов, наш технический директор сформулировал базовое требование так: человек должен уметь решать задачи. Понятно, что джун это будет делать не всегда эффективно, не лучшим способом и не всегда правильно, но в идеале ты ставишь человеку задачу, он напрягается и решает ее. Это тот скилл, который в первую очередь ищут работодатели.

Злата Обуховская: Люди, которые ищут работу, переходя из других областей, имеют с точки зрения бизнеса некоторое преимущество, потому что уже прошли какой-то путь и умеют решать задачи быстро. Это soft skills, я бы это назвала даже трудовой культурой. Зачастую у выпускников вузов эта трудовая культура еще не наработана.

Но мне бы хотелось все-таки попытаться дать какой-то рецепт начинающим.

Первые шаги для начинающего разработчика

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

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

Валентин Домбровский: Кстати, мы на курсах готовим учеников к тому, чтобы у них появился свой проект за 10 недель обучения. Плюс тренируем навык командной разработки. Это как раз те soft skills, о которых говорила Злата.

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

Валентин Домбровский: Можно пилить свои проекты или брать простые проекты на фрилансе и параллельно заниматься рассылкой резюме.

Какие перспективы есть у Python-разработчика

Злата Обуховская: Python-разработчик может пойти куда угодно. Можно пойти в тестирование, продолжить развиваться до senior-архитектора. Или даже в менеджмент. Технические менеджеры бывают разные, и можно дорасти до топ-менеджмента. Можно развиваться в data science, DevOps, пойти в автотесты или machine learning.

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

***

Это лишь часть выпуска Python Junior. Полную версию эпизода можно послушать.

Или даже посмотреть:

RSS подкаста

Спасибо, что прочитали, послушали или посмотрели.

Автор: MBode

Источник

как прокачать знания junior Python

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

Привет, дорогой друг! Значит, ты уже джуниор Python разработчик? Полагаю, ты уже прочел PEP-8 и согласен с философией Тима Петерса? Возможно, ты читаешь эти строки, так как, поработав годик-другой, увидел, столько возможностей, сфер и направлений для этого прекрасного языка, и хочешь выбрать правильный вектор для своего развития? Увы, не существует единого мнения. И моё представление пути Python-дева основывается на личном опыте, холиварах с коллегами и положении вещей в данный момент времени. Я не стану перечислять свои настольные книги, ведь ты сам можешь открыть Amazon и выбрать всё, что понравится: от компьютерного зрения и Data Science до Embedded и администрирования. Первый шаг ты уже сделал. И если у тебя есть пару минут, я расскажу, на что следует обратить внимание.

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

Во-первых, у него минимальный порог входа — я знаю много непрограммистов из сферы, которым однажды ночью было «видение», что они могут и должны написать новый проект на Джанге (ведь это так просто), который порешает все вопросы компании, этим же программистам так долго объяснять, их вечно нету, они вечно заняты. Такие проекты порой доходят до прод-стадии и вполне себе работают годами, что говорит о том, что любой айтишник может быстро научиться писать сайты на Python и что любой Python-разработчик обязан уметь запилить веб на этом супер-мега-популярном Web-фреймворке не хуже этого непрограммиста, при том не допуская ошибок, о которых я позже расскажу. Да, да, Django — это мастхев. И поскольку веб-разработка — это не только бекенд, то тебе придется также уметь нарисовать красивые кнопочки или хотя бы сделать всё возможное, чтобы эти кнопочки нарисовали другие разработчики. Спагетти jQuery в прошлом, тренд фронтенда — веб-компоненты, я бы уделил время на разбор хотя бы этого фреймворка (ссылка на YouTube) со всеми его производными: версткой, сборщиками фронтенда, стандартами ECMAScript и т. д.

Во-вторых, Python-код читаемый. Вспомним «видение непрограммиста» — обычно в таких видениях не показывают те его части про «хоть какие-нибудь тесты» и архитектуру. И вот потом это произведение инженерной мысли попадает тебе на поддержку и доработку! Ты знаешь, что с Python проблем не будет, ведь, повторюсь, код читаемый, даже без комментариев. Да, Python решает вопрос, где открывать фигурную скобочку вместо тебя! Конечно, понять, зачем необходимо тестирование и зачем продумывать перед написанием кода архитектуру, чтобы не делать ошибок выше, вроде как надо. Но на практике не всегда ясно, зачем. Часто начинающие разработчики берут это как правило и потом, устав от поддержки этого правила и не увидев явного профита в разработке, бросают это дело. Мой совет — постарайся найти компанию/проект, где есть поставленный процесс и есть много разных участников: от РО, РМ до разных девелоперов и дизайнеров, которые этот процесс реально используют, т. е. есть командная работа. Пусть это будет не высокооплачиваемая работа, получи профит от изучения культуры программирования. Это не должен быть Scrum по утрам, потому что так везде. Ты должен почувствовать, что без написания тестов у тебя уходит больше времени на согласование и коммуникацию, поиск ошибки, рефакторинг или объяснению коллеге на код-ревью, что ты хотел сказать в этой небольшой функции на 100 строк. Со временем твой стиль написания спагетти-кода эволюционирует, станет более структурированным и компактным.

В-третьих, Python можно применить практически везде. Мой первый язык был Delphi, потом я работал сисадмином. В Python я пришел через книгу «Python в системном администрировании UNIX и Linux», позже я начал применять Python для решения других задач. Возможно, ты ранее тоже писал на чем-то другом или окончил курсы и теперь веб-разработчик. Не останавливайся — посмотри, как еще можно применить Python, и ты сильно удивишься, ведь это и вычисления на графических адаптерах, распознавание изображений, посмотри, как с его помощью управляют разными GPIO, USB, RS232. И напоследок — Python-комьюнити. По питону проходят интересные конференции, митапы в Украине и ЕС. Сходи познакомься с ребятами, послушай доклады. Барин из-за границы одобряет Python! А значит, при желании можно будет и уехать.

Не бойся поменять работу, если появится чувство, что всё стоит на месте, надоел проект или остановилось развитие. Да, не быть джампером и продолжительно работать на одном месте работы очень важно, но еще важнее быть высококлассным специалистом, разбираться в технологиях, «решать проблемы». Одно место работы в CV навряд ли охватит многие области применения, а вот практический опыт асинхронного программирования, нагруженных, многопоточных систем ценится больше. Обязательно сходи на интервью в другую компанию, если пригласят — это тоже развитие, которое укажет на твои слабые стороны и, возможно, мотивирует на изучение нового материала. Попробуй придумать написать какой-то pet-проект/стартап с нуля или же поучаствовать в open source. Изучай, развивайся, придумывай, пиши, рефактори — в конце концов, ты ж программист.

Вчера я проводил урок по Python и около часа говорил об особенностях языка. В конце мне задали вопрос о важности глубокого понимания алгоритмов и структур данных, а я (дурак!) ответил, что крутил их вокруг того дуба из Пушкинской сказки. Во всяком случае до тех пор, пока мы не выучили, как правильно ветвиться в git, как пользоваться Sphinx и для чего нужно всегда иметь актуальное описание проекта и инструкций к запуску в README. Я чертовски устал от споров о том, какой алгоритм быстрее справится с задачей, когда внутри исходников отсутствуют docstrings, а написание unittests оставлено до лучших времен.

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

Начиная свой путь, разработчик будет большим молодцом, если вместо сложных структур данных освоит рефакторинг — «Совершенный Код», «Чистый Код». Научится правильно вести свои проекты в git — хорошая статья о ветвении. Научится тестировать свои приложения и разрабатывать через TDD — курс по тестированию, книга «Экстремальное Программирование».

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

Игорь Павленко, CTO, 7 лет опыта Python разработки

Будьте Хакером. В хорошем смысле этого слова. Во всём стремитесь дойти до самой сути происходящих вещей. Понять, как устроен интернет, софт, с которым вы работаете, библиотеки, фреймворки, инструменты.

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

Цените свой труд. Не позволяйте себе халтурить или лениться. Всегда пишите самый лучший код, который вы можете написать. Покрывайте его тестами, вычищайте и оформляйте согласно всем стилевым и корпоративным стандартам. Уважайте ваших коллег и PEP-8. Обязательно включайте pylint, sonar или другие анализаторы в самом строгом режиме.

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

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

Непрерывно тренируйтесь. Просто получать знания — мало. Нужно постоянно закреплять их на практике. Пишите код. Делайте пул реквесты в open source библиотеки, которыми пользуетесь. Просите коллег делать вам код-ревью. А ещё помните, что написание кода — это лишь малая часть работы. Куда больше времени в разработке отнимает чтение кода. Поэтому постоянно читайте хороший код. Постоянно ищите хорошие open source библиотеки и разбирайте, как они устроены. Прорисуйте модульные и компонентные их диаграммы, data-flow чарты. Попробуйте понять, почему разработчики принимали именно такие решения. Для начала хорошо подойдут Werkzeug, Django REST Framework и Requests. После этого можно попробовать проанализировать исходный код async.io и сопутствующих ей библиотек.

Научитесь пользоваться Google. Если вы сталкиваетесь с какой-то проблемой, то не бегите сразу к коллегам, потратьте 15 минут на её анализ и поиск похожих решений в сети. Научитесь формализовать проблемы и задавать правильные вопросы. Научитесь искать нужные вам ресурсы. Перед тем, как задать свой вопрос, не спешите, постарайтесь его максимально четко сформулировать. Возможно, что ответ на вопрос уже кроется в самом вопросе. Тренируйтесь излагать свои мысли максимально чётко и лаконично. Желательно сразу на английском языке. 😉

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

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

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

Организуйте себя. Займитесь тайм-менеджментом. Управляйте своим временем. Обязательно стройте план своего развития, и тщательно планируйте свои задачи. Давайте эстимейты всем вашим задачам и обязательно анализируйте причины провала ваших дедлайнов и причины успехов. И помните: «К цели движется тот, кто хотя бы ползёт».

Андрій Силка, Senior Engineer, 5+ років досвіду Python розробки

Якщо спробувати відповісти на питання, як з джуна влетіти в синьйори, то крім банальщини «учиться, учиться и еще раз учиться» плюс реальні бойові завдання/проекти, коли волосся від страху стає дибки на спині, нічого не спадає на думку.

Це означає, що не боїмося, беремо на себе відповідальність і працюємо. Це як музиканти: або по 8 годин ти граєш і ти віртуоз, або йдеш в директори театру.

Якщо простіше, то запитайте в себе: як ви себе почуваєте, коли вихідні реально починаються тільки в п’ятницю ввечері «та фіча» таки взлетіла (боже, збав вам закоммітитись в мастер: я тут про задоволення, а не про бестпрактіс).

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

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

В процесі допомагають книжки та блоги (не боїмося витратити 15-50 баксів за платні штуки):

Тренуємося на чомусь цікавому:

І, звичайно, їдемо на всякі туси, бажано тематичні:

Пробуємо Python і вибираємо до душі:

  • WEB (Flask/Django)
  • ComputerVision
  • Data Science
  • BigData
  • System tools

Отже, не боятися брати відповідальність на себе та ловити кайф від зробленого. Далі вже якось саме прилипне.

Похожие статьи:

Время: вторник + четверг, 19:00 — 21:00 24 марта стартует курс QA Auto. На данном курсе вы узнаете, что такое автоматизированное тестирование Web…

Сьогодні хочу зачепити тему локалізації в світлі якості ПЗ. Я давно вже спостерігаю не зовсім правильну тенденцію до того,…

[DOU Hobby — рубрика про нетехнічні проекти IT-фахівців: творчість, цікаві хобі та інші lifestyle-досягнення. Якщо вам є про…

Длительность курса: 120 академических часов (3 месяца): 3 занятия по 3 часа в неделюГрафик занятий: вторник,…

Всем привет! В этом году Oracle зарезилил свои экзамены по Java 8 — для сдачи стали доступны Associate (1Z0-808)…

Советы сеньоров: как прокачать знания junior Python

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

Привет, дорогой друг! Значит, ты уже джуниор Python разработчик? Полагаю, ты уже прочел PEP-8 и согласен с философией Тима Петерса? Возможно, ты читаешь эти строки, так как, поработав годик-другой, увидел, столько возможностей, сфер и направлений для этого прекрасного языка, и хочешь выбрать правильный вектор для своего развития? Увы, не существует единого мнения. И моё представление пути Python-дева основывается на личном опыте, холиварах с коллегами и положении вещей в данный момент времени. Я не стану перечислять свои настольные книги, ведь ты сам можешь открыть Amazon и выбрать всё, что понравится: от компьютерного зрения и Data Science до Embedded и администрирования. Первый шаг ты уже сделал. И если у тебя есть пару минут, я расскажу, на что следует обратить внимание.

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

Во-первых, у него минимальный порог входа — я знаю много непрограммистов из сферы, которым однажды ночью было «видение», что они могут и должны написать новый проект на Джанге (ведь это так просто), который порешает все вопросы компании, этим же программистам так долго объяснять, их вечно нету, они вечно заняты. Такие проекты порой доходят до прод-стадии и вполне себе работают годами, что говорит о том, что любой айтишник может быстро научиться писать сайты на Python и что любой Python-разработчик обязан уметь запилить веб на этом супер-мега-популярном Web-фреймворке не хуже этого непрограммиста, при том не допуская ошибок, о которых я позже расскажу. Да, да, Django — это мастхев. И поскольку веб-разработка — это не только бекенд, то тебе придется также уметь нарисовать красивые кнопочки или хотя бы сделать всё возможное, чтобы эти кнопочки нарисовали другие разработчики. Спагетти jQuery в прошлом, тренд фронтенда — веб-компоненты, я бы уделил время на разбор хотя бы этого фреймворка (ссылка на YouTube) со всеми его производными: версткой, сборщиками фронтенда, стандартами ECMAScript и т. д.

Во-вторых, Python-код читаемый. Вспомним «видение непрограммиста» — обычно в таких видениях не показывают те его части про «хоть какие-нибудь тесты» и архитектуру. И вот потом это произведение инженерной мысли попадает тебе на поддержку и доработку! Ты знаешь, что с Python проблем не будет, ведь, повторюсь, код читаемый, даже без комментариев. Да, Python решает вопрос, где открывать фигурную скобочку вместо тебя! Конечно, понять, зачем необходимо тестирование и зачем продумывать перед написанием кода архитектуру, чтобы не делать ошибок выше, вроде как надо. Но на практике не всегда ясно, зачем. Часто начинающие разработчики берут это как правило и потом, устав от поддержки этого правила и не увидев явного профита в разработке, бросают это дело. Мой совет — постарайся найти компанию/проект, где есть поставленный процесс и есть много разных участников: от РО, РМ до разных девелоперов и дизайнеров, которые этот процесс реально используют, т. е. есть командная работа. Пусть это будет не высокооплачиваемая работа, получи профит от изучения культуры программирования. Это не должен быть Scrum по утрам, потому что так везде. Ты должен почувствовать, что без написания тестов у тебя уходит больше времени на согласование и коммуникацию, поиск ошибки, рефакторинг или объяснению коллеге на код-ревью, что ты хотел сказать в этой небольшой функции на 100 строк. Со временем твой стиль написания спагетти-кода эволюционирует, станет более структурированным и компактным.

В-третьих, Python можно применить практически везде. Мой первый язык был Delphi, потом я работал сисадмином. В Python я пришел через книгу «Python в системном администрировании UNIX и Linux», позже я начал применять Python для решения других задач. Возможно, ты ранее тоже писал на чем-то другом или окончил курсы и теперь веб-разработчик. Не останавливайся — посмотри, как еще можно применить Python, и ты сильно удивишься, ведь это и вычисления на графических адаптерах, распознавание изображений, посмотри, как с его помощью управляют разными GPIO, USB, RS232. И напоследок — Python-комьюнити. По питону проходят интересные конференции, митапы в Украине и ЕС. Сходи познакомься с ребятами, послушай доклады. Барин из-за границы одобряет Python! А значит, при желании можно будет и уехать.

Не бойся поменять работу, если появится чувство, что всё стоит на месте, надоел проект или остановилось развитие. Да, не быть джампером и продолжительно работать на одном месте работы очень важно, но еще важнее быть высококлассным специалистом, разбираться в технологиях, «решать проблемы». Одно место работы в CV навряд ли охватит многие области применения, а вот практический опыт асинхронного программирования, нагруженных, многопоточных систем ценится больше. Обязательно сходи на интервью в другую компанию, если пригласят — это тоже развитие, которое укажет на твои слабые стороны и, возможно, мотивирует на изучение нового материала. Попробуй придумать написать какой-то pet-проект/стартап с нуля или же поучаствовать в open source. Изучай, развивайся, придумывай, пиши, рефактори — в конце концов, ты ж программист.

Евгений Климов, CTO, 7 лет опыта Python разработки

Вчера я проводил урок по Python и около часа говорил об особенностях языка. В конце мне задали вопрос о важности глубокого понимания алгоритмов и структур данных, а я (дурак!) ответил, что крутил их вокруг того дуба из Пушкинской сказки. Во всяком случае до тех пор, пока мы не выучили, как правильно ветвиться в git, как пользоваться Sphinx и для чего нужно всегда иметь актуальное описание проекта и инструкций к запуску в README. Я чертовски устал от споров о том, какой алгоритм быстрее справится с задачей, когда внутри исходников отсутствуют docstrings, а написание unittests оставлено до лучших времен.

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

Начиная свой путь, разработчик будет большим молодцом, если вместо сложных структур данных освоит рефакторинг — «Совершенный Код», «Чистый Код». Научится правильно вести свои проекты в git — хорошая статья о ветвении. Научится тестировать свои приложения и разрабатывать через TDD — курс по тестированию, книга «Экстремальное Программирование».

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

Игорь Павленко, CTO, 7 лет опыта Python разработки

Будьте Хакером. В хорошем смысле этого слова. Во всём стремитесь дойти до самой сути происходящих вещей. Понять, как устроен интернет, софт, с которым вы работаете, библиотеки, фреймворки, инструменты.

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

Цените свой труд. Не позволяйте себе халтурить или лениться. Всегда пишите самый лучший код, который вы можете написать. Покрывайте его тестами, вычищайте и оформляйте согласно всем стилевым и корпоративным стандартам. Уважайте ваших коллег и PEP-8. Обязательно включайте pylint, sonar или другие анализаторы в самом строгом режиме.

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

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

Непрерывно тренируйтесь. Просто получать знания — мало. Нужно постоянно закреплять их на практике. Пишите код. Делайте пул реквесты в open source библиотеки, которыми пользуетесь. Просите коллег делать вам код-ревью. А ещё помните, что написание кода — это лишь малая часть работы. Куда больше времени в разработке отнимает чтение кода. Поэтому постоянно читайте хороший код. Постоянно ищите хорошие open source библиотеки и разбирайте, как они устроены. Прорисуйте модульные и компонентные их диаграммы, data-flow чарты. Попробуйте понять, почему разработчики принимали именно такие решения. Для начала хорошо подойдут Werkzeug, Django REST Framework и Requests. После этого можно попробовать проанализировать исходный код async.io и сопутствующих ей библиотек.

Научитесь пользоваться Google. Если вы сталкиваетесь с какой-то проблемой, то не бегите сразу к коллегам, потратьте 15 минут на её анализ и поиск похожих решений в сети. Научитесь формализовать проблемы и задавать правильные вопросы. Научитесь искать нужные вам ресурсы. Перед тем, как задать свой вопрос, не спешите, постарайтесь его максимально четко сформулировать. Возможно, что ответ на вопрос уже кроется в самом вопросе. Тренируйтесь излагать свои мысли максимально чётко и лаконично. Желательно сразу на английском языке. 😉

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

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

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

Организуйте себя. Займитесь тайм-менеджментом. Управляйте своим временем. Обязательно стройте план своего развития, и тщательно планируйте свои задачи. Давайте эстимейты всем вашим задачам и обязательно анализируйте причины провала ваших дедлайнов и причины успехов. И помните: «К цели движется тот, кто хотя бы ползёт».

Андрій Силка, Senior Engineer, 5+ років досвіду Python розробки

Якщо спробувати відповісти на питання, як з джуна влетіти в синьйори, то крім банальщини «учиться, учиться и еще раз учиться» плюс реальні бойові завдання/проекти, коли волосся від страху стає дибки на спині, нічого не спадає на думку.

Це означає, що не боїмося, беремо на себе відповідальність і працюємо. Це як музиканти: або по 8 годин ти граєш і ти віртуоз, або йдеш в директори театру.

Якщо простіше, то запитайте в себе: як ви себе почуваєте, коли вихідні реально починаються тільки в п’ятницю ввечері «та фіча» таки взлетіла (боже, збав вам закоммітитись в мастер: я тут про задоволення, а не про бестпрактіс).

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

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

В процесі допомагають книжки та блоги (не боїмося витратити 15-50 баксів за платні штуки):

Тренуємося на чомусь цікавому:

І, звичайно, їдемо на всякі туси, бажано тематичні:

Пробуємо Python і вибираємо до душі:

  • WEB (Flask/Django)
  • ComputerVision
  • Data Science
  • BigData
  • System tools

Отже, не боятися брати відповідальність на себе та ловити кайф від зробленого. Далі вже якось саме прилипне.


См. также другие советы сеньоров:
— .NET
— Front-end/JavaScript
— Java
— QA

Стать Python Junior

Настает такой момент в жизни, когда устаешь от постоянных отговорок и ощущений что топчешься на месте. Выбрана цель: создать проект и устроиться на работу Python Junior.

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

Git — контроль версий

SSH — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов)

HTTP — протокол прикладного уровня передачи данных

Базовые навыки пользования терминалом

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

Кодировки

SQL, базы данных

nginx — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах

GitHub

создайте свой профиль

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

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

ООП

основные принципы ООП

императивный и декларативный стили

замыкания и интроспекция

асинхронная концепция программирования

ОС

потоки

процессы

сокеты

стек протоколов TCP/IP

Основы

Python2 vs Python3 — различия синтаксиса

Дескрипторы — очень мощный инструмент в Python. Дескрипторы — это классы, в которых определены методы __get__, __set__ и __delete__

GIL — способ синхронизации потоков

WSGI — стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером

Генераторы и итераторы

Импорт модулей

Фреймворки

Асинхронные

Tornado

gevent

aiohttp

Celery

Синхронные

Pyramid

Flask

Django

Тестирование

doctest

py.test

Selenium

unittest/pyUnit

Менеджеры пакетов

pip

Основные действия:

— Общаться с комьюнити

— Ходить на конференции

— Постоянно писать код

— Наблюдать и участвовать в open source проектах

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

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