Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
![image](https://habrastorage.org/webt/my/d5/az/myd5azyrmgirbj-wj2y_x_ogk9i.png)
Вчера мы опубликовали первый выпуск в цикле «Кем работать в ИТ». Для него я поговорил с двумя бывшими студентами и деканом факультета Python в GeekBrains. Когда я «смонтировал» рассказы в одну историю, стало жалко, что многое осталось лежать в черновиках.
Поэтому сегодня выкладываю полную расшифровку интервью с Алексеем Петренко, деканом GeekBrains — почти без редактирования и вырывания из контекста. Возможно, оно будет даже более прикладным, полезным и сконцентрированным, чем основной выпуск.
Вот что, например, осталось за кадром: Почему Python не хуже других языков? Какие фреймворки стоит смотреть кроме Django? Где лучше учиться писать — в современной IDE или в блокноте? По каким сайтам и книгам стоит учиться самостоятельно и многое другое.
— Что сейчас делают Python-разработчики?
— Разработчик на Python может делать много всего — от простейших скриптов до анализа данных и построения нейронных сетей.
Если говорить именно про разработка — это бэкенд для веб-серверов. Скрытая часть интернета, та, которую не видят обычные пользователи. Сервер, его логику, взаимодействие с базами данных.
— Пайтон не хуже для серверной разработки, чем остальные языки?
— На самом деле нет, не хуже. Например, на С разработчик тратит много времени на написание кода. Это язык-дедушка. На С# писать легче и быстрее — но это детище Microsoft — они продвигали язык для системы Windows. А вот Java универсальная… На самом деле можно вести споры, какой язык лучше.
У Python низкий порог вхождения, на нем очень легко освоить азы программирования. Пайтон — это интерпретируемый язык. Соответственно, если две одинаковые программы, написаны на Пайтоне и на С — то на Пайтоне программа будет работать медленнее. У него очень большая аудитория, обширная библиотека, плюс много внешних библиотек, которые делают разработчики по всему миру. И за счет этого он становится языком, который подойдет для всего.
— Может быть такое, что зная Python легче устроиться на специфические профессии, вроде ИИ и аналитики, а на обычный бэкенд ребят с Java возьмут охотнее?
— Если мы посмотрим статистику нескольких лет назад, то язык PHP занимал 80% бэкенда всех серверов. Но PHP начинает сдавать позиции. Python на этой волне выпустил различные фреймворки для веб-разработки, и самый популярный из них — Django. Он набирает популярность, и многие работодатели ищут разработчиков которые знают именно этот фреймворк.
Конкуренция есть всегда. Но начинающий студент должен понимать, чему бы он себя не посвятил целиком — Пайтону или Джаве — он в любом случае найдет себе работу.
— Изучать Python как первый язык — хорошее решение?
— Думаю, хорошее. 20 лет назад моим первым языком был Бейсик. И мне тогда казалось, как прикольно и легко на нем программировать. Когда я впервые увидел синтаксис Python, первая мысль была: «это же как бейсик, только круче». Он дает те же ощущения — легко, весело, все моментально понятно. То есть, Python — лучший язык для первого.
— Именно из-за простоты?
— Да, из-за простого синтаксиса. Он прощает мелкие ошибки разработчика, в отличие от компилируемых языков, где если опечатался, программа уже не компилируется.
Хотя надеюсь разработчики не будут надеяться, что интерпретатор сам исправит все их ошибки.
Самое главное, что разработчик понимал — после легкой базы придется приложить усилия, чтобы освоить более серьезные аспекты. Библиотеки и фреймворки, которые делают Python еще более крутым и продвинутым языком.
— Насколько это сложное и объемное знание — синтаксис?
— В базовой конфигурации Пайтона лежит около 70 функций (но даже крутой программист не обязательно использует их все) и несколько десятков зарезервированных слов. То есть, чтобы выучить сотню слов и понять, что они делают, можно потратить одну-три недели при желании и активной работе.
— Динамическая типизация — это не минус?
— У динамической типизации есть противники, которых изначально в вузе научили писать на С, вбили, что это основа всех языков и все должны равняться на него. Поэтому они крайне негативно относятся к динамической типизации. По факту динамическая типизация больше плюс, чем минус. Она ускоряет разработку.
Но если ты привык к статической типизации, то в языке есть возможность прописывать типы переменных, которые ты используешь. Типизация останется динамической, но ты можешь реализовать свою привычку.
— Но сейчас растет популярность Go и TypeScript благодаря как раз строгой типизации.
— Да, это так. Но языки всегда появляются и исчезают, а Python жив уже 30 лет и все еще продолжает набирать популярность. Язык Go молодой и хороший. Возможно он разовьется, а может мы про него забудем через несколько лет.
Если сравнить язык программирования с водоемом, то, например, язык С — это океан. Ты ныряешь с обрыва на огромную глубину, и ты либо поплывешь, либо утонешь. Язык Пайтон — это пляж с чистым песком, где ты можешь далеко зайти, спокойно поплавать, и если понял, что хочешь двигаться дальше — то за красивым пляжем есть огромная впадина по глубине, сопоставимая с С и Java.
— Зная Пайтон, сложно переключаться между профессиями, где он используется?
У Пайтона широкая библиотека. Если вдруг понял, что не хочешь заниматься сайтами и бэкендом, а хочешь перейти в искусственный интеллект, то зная базу, надо потратить несколько месяцев, чтобы подтянуть математику и изучить несколько дополнительных фреймворков.
Аналогичная ситуация с большими данными — надо вспомнить курс статистики, аналитики и посмотреть на две-три новые библиотеки. То есть трудозатраты заметно сократятся, если ты уже знаешь язык.
— Что сложнее?
Аналитика и большие данные — это программирование плюс математика. Если есть к ней предрасположенность, то почему бы не заняться нейронными сетями, системами распознавания. Если просто нравится программировать, но не на высоком уровне, то лучше пойти писать серверы. Там тоже нужна математика, но хотя бы не высшая. Никаких интегралов и факториалов. Элементарные сложение и вычитание.
— Что надо знать перед поступлением на курсы?
— Хорошо бы заранее знать, нравится программировать или нет. Я бы посоветовал попробовать написать несколько программ, попробовать бесплатные уроки. Лучше уже понимать, что такое переменная, как сложить две переменные.
— Если человек еще даже не начал, где и как ему это понять?
— У нас есть бесплатные интенсивы об основах программирования и переменных. Там надо писать на Javascript, потому что в любом современном браузере есть интерпретатор, ничего не придется устанавливать.
С Python, Java и другими языками немного сложнее — надо устанавливать среду разработки. Но если ты понял, что тебе это нравится, то почему нет. Можно потратить десять минут и потихоньку становиться программистом.
— Как учиться чтобы курс не стал бесполезной корочкой?
— Одно слово — практика. Если просто смотреть и слушать, ничего не получится. Для новичка практикой будет даже переписать код, который преподаватель показывает на экране. Переписывать и думать, как он работает. Надо выполнять практические задания — в рамках курсов, искать самому в интернете. Если обучение идет ради трудоустройства — то практика нужна тем более. Тяжело в учении, легко в бою.
Необходимый минимум практики — четыре часа в неделю. Два дня под два часа практики. Но я бы рекомендовал выделять час в день на написание собственного кода.
— Что лучше изучать — фундаментальные вещи или популярное и прикладное?
— Новичку лучше разобраться в синтаксисе. А когда — для кого-то спустя неделю, для кого-то спустя месяц — человек скажет «я знаю синтаксис и могу написать элементарные конструкции и алгоритмы», только тогда стоит задуматься, куда хочется идти дальше. Чем больше ты учишься, тем больше уходишь от синтаксиса к отдельным библиотекам, паттернам проектирования, отдельным шаблонам.
Главное не нырять в программирование с головой, чтобы не было буйства магии. Когда три дня учишь все подряд, и в голове получается каша.
— Какие тонкости надо знать, чтобы сразу не свернуть не туда?
— Есть такой стандарт Pep8 — это соглашение программистов, которые пишут на Пайтон. Оно указывает, как правильно писать, а как неправильно: если хочешь написать конструкцию с условиям, то напиши ее подобным образом. Если что-то еще, например, создать функцию — то назови ее в таком-то стиле.
Если есть желание работать в команде и показывать код кому-то еще, если код в будущем надо будет поддерживать, то обязательно знать общепринятый стандарт. Новичку хорошо бы читать его вместе с изучением синтаксиса.
Начинающие программисты, не зная Pep8, пишут программу, которая тоже работает. Но когда спустя время ее пытается прочитать другой человек, то возникают сложности. Код один раз пишут — десять раз читают.
— Что-то еще? Версии, например?
— Несколько лет назад в Python произошло разделение. Был Python 2.7, а потом вышла версия 3. Вторая версия все еще используется, но только в старых фирмах для поддержания легаси-кода. Если устроиться в такую фирму, то изучать Python 2 придется, но я бы рекомендовал учить третью версию. Все современные проекты и сторонние библиотеки пишутся под нее.
Приведу элементарный пример. Пайтоне третьей версии, команда для вывода сообщения на экран: мы пишем print, открываем скобку и внутри скобок передаем текст и переменные.
Во второй версии мы пишем print, никаких скобок, дальше пробел и переменная. То есть в одном случае пробел, в другом фигурные скобки. Человеку это понять не принципиально, а интерпретатору важно — пробел или скобки
— Какие лучшие способы для самообразования ты бы назвал?
— Параллельно с обучением можно пытаться реализовывать свои идеи и проекты. Пока учишь основы — решаешь задачки и пишешь простые программы. Например изучил циклы, и почему бы не написать программу, которая выводит таблицу умножения.
Дальше ты изучаешь фреймворк Django, который позволяет создавать сайты. Почему бы сразу не попробовать написать свой сайт, который давно хотелось.
Еще есть такой сайт — проект Эйлера. Там есть набор задач на построение программ.
Человек, который умеет программировать, может реализовать задачу, но если он напишет некачественный код — даже современный компьютер будет решать ее несколько минут, часов или даже дней. То есть проект заставляет думать об оптимизации. Потому что правильный код решает задачи из проекта Эйлера за секунды.
Из книги: «Изучаем Python» Марка Лутца и «Чистый Python». Дэна Бейдера.
— С каких инструментов и фреймворков начинать?
Начинающему программисту можно взять например Flask. Он простой, не несет в себе лишней информации, его легко освоить. По сути это маленькая коробочка, в которой не лежит ничего лишнего. И она позволит написать простейшие сайты.
Если же думать на перспективу — то монстр среди фреймворков — это Django. Это уже не маленькая коробочка, а огромный ящик, в котором лежит много всего. Постепенно разбираясь во всех его возможностях можно писать хорошие масштабируемые сайты, которые позволяют обслуживать тысячи пользователей ежеминутно.
— Пакеты, библиотеки?
— Начинающим я бы советовал знакомиться со стандартной библиотекой Python. Это те самые модули, которые устанавливаются на компьютер вместе с интерпретатором. На самом деле стандартная библиотека настолько большая. что даже на ее изучение уйдет не одна неделя.
Некоторые модули стандартной библиотеки не понадобятся никогда, но иметь представление о них необходимо, чтобы однажды не начать изобретать велосипед. Все велосипеды собраны там.
В программировании часто используется такая структура данных как «очереди». И если человек только изучил синтаксис, он понимает, что в Пайтоне нет очередей. Хотя в других языках очереди активно используются и позволяют решать большие объемы задач.
Но стоит копнуть в стандартную библиотеку, и мы находим там модуль collections. Внутри этого модуля лежит структура данных «очередь» и оказывается, что она давно реализована, просто чуть-чуть скрыта. Она максимально оптимизирована и будет работать в любом случае лучше, чем если писать самому.
— А элементарные вещи? Какую IDE брать?
— По этому поводу мнения расходятся. Некоторые считают, что начинающий программист должен писать в блокноте (не в стандартном конечно, а хотя бы в notepad++).
Идея заключается в том, что когда ты начинаешь программировать, ты должен писать весь код вручную. Это позволит запомнить описание структур, базовых функций. Но проблема в том, что блокнот не подсказывает, где ты ошибся. Если новичок не будет видеть где ошибки, он может отчаяться из-за того, что ничего не работает, и бросить это дело.
Поэтому есть мнение, что лучше взять современные IDE. Здесь надо отдать должное jetbrains. Они сделали IDE PyCharm у которого есть абсолютно бесплатная Community версия. Она подсказывает обо всех элементарных ошибках.
— Какого подхода придерживаешься ты?
Я за второй подход, чтобы не отбивать у новичка желание писать код. Когда код работает, есть и желание развиваться дальше. Но если увидел ошибку, разберись, как ты ее допустил и как ее исправить.
Хотя, буду честен, сам начинал со старых блокнотов.
— Каким должен быть минимальный уровень, чтобы устроиться на работу?
— Мой опыт в Geekbrains показывает, что некоторые студенты находят работу, до того как они заканчивают годовой курс обучения. Всё зависит от того, как студент учился, какая у него была мотивация, насколько активно он вкладывался.
Если говорить о навыках, которые работодатель хочет видеть у серверного разработчика — это элементарная работа с синтаксисом, знание того, как работают сайты, бэкенд, Django. Программист должен знать, как быстрее и правильнее писать код.
Я бы ещё добавил работу в команде и знания баз данных, Потому что любой backend любого сайта неразрывно связан с хранением информации.
— На какие деньги можно рассчитывать на начальном уровне?
— Зависит от региона. Кто-то устроиться за 40 тысяч как начинающий, кто-то может и за 100 тысяч. Смотря как себя проявит. Для этого надо доказать, что можешь писать не только код, но и разбираешься в архитектуре, можешь набросать схему проекта целиком, модулей, сервисов и схем их взаимодействия.
— Наверное, это редкость у начинающих?
— Мы проходим проектирование в четвертой четверти, почти в конце обучения.
— Сколько нужно качаться на работе, чтобы случился левел-ап?
— До мидла можно прокачаться в течение года обучения в Geekbrains. Там есть обязательные курсы и дополнительное. Студент сам выбирает когда их проходить, но основные и дополнительные курсы надо пройти полностью, чтобы честно называть себя мидлом. То есть — год основной программы и ещё полгода параллельных.
— Кто тогда такой синьор разработчик?
— Это человек, у которого есть богатый опыт. Это тот, кто разбирается в разных фреймворках, способен масштабировать задачи, понимать каких ресурсов они требуют. Человек, который не изобретает велосипеды. Кто на собственном опыте разобрался во всех аспектах и нюансах работы.
— Если ты встретишь человека, который три года назад ничего не знал, а сейчас называет себя синьором, что ты подумаешь?
— Почему бы и нет. Зависит от фирмы, стремления и навыков. Если человек одаренный, то я поверю. Если он скажет, что знает Питон, а не Пайтон, то наверное он все-таки прокололся.
— А если ты не настолько гений, то сколько в среднем надо опыта?
— Если человек не целеустремлен, то может комфортно работать на уровне мидла и пять, и десять лет. Выполнять тот объем задач, который дают, получать от этого удовольствие.
— То есть, мидл это просто тот, кто не берет на себя ответственность?
— Да, синьор готов брать на себя ответственность за решения, руководить командами. Будем честны — есть ведущие, есть ведомые. Кто-то готов рискнуть, поучаствовать в стартапе, и если он выстрелит через год, то человек сразу будет называть себя директором, синьором и как угодно еще.
А есть программисты, которым просто нравится программировать, но они не готовы принимать глобальные решения.
— Звучит так, что градация джуниор-мидл-синьор не совсем про знание языка.
— Эта градация вообще условна и отличается от компании к компании. Если совсем элементарно — джуниор это человек который знает синтаксис. Мидл — знает все дополнительные библиотеки, фреймворки, умеет всем этим пользоваться. Синьор — не просто умеет пользоваться, а имеет богатый опыт в разработке разных вещей.
— Какую работу искать, чтобы сразу не разочароваться?
— Надо сразу сделать заметку в голове: «Если ничего не получится, я не расстроюсь». Стоит попрактиковаться на фрилансе или поделать во время обучения совместные проекты.
— Как на собеседовании не ударить в грязь лицом?
— Во-первых, не молчать. Если дают задачу, на которую не получается сходу ответить, то рассуждать вслух, показывать, как думаешь, что ты способен двигаться к решению. На собеседованиях могут давать и элементарные вопросы. Студенты рассказывали, как им выпадали задачки, которые мы с ними и разбирали. То есть не надо прослушивать курсы мимо ушей
Главное не отчаиваться, если первое собеседование оказалось неудачным. Сходя на два-три собеседования заметишь, что вопросы начинают повторяться. И тогда уже сам будешь выбирать, куда устроиться, потому что на трех очередных собеседованиях однажды пройдешь везде.
— По каким вопросам ты бы понял, что от этой компании лучше бежать?
— Возможно, если покажут код, и ты поймешь, что он нечитаемый. Есть так называемый «спагетти-код» когда приходится читать не сверху вниз, а прыгать по строкам. Если такой код показывают, то либо специально пытаются вывести из себя, либо реально так пишут. С этими ребятами лучше не работать.
— А если не видишь код?
— Кроме общих вопросов должны быть задачи на написание кода. Даже если на бумаге карандашом — это нормально. Но если ты пришел на собеседование программиста и не получил ни одного вопроса о программировании — то тебя либо собеседовал некомпетентный человек, либо ты будешь заниматься вообще чем-то непрограммистским.
Программистов надо проверять на программирование.