Как стать программистом python – Обучение на Python Developer: программист питон — обучение на разработчика Python | GeekBrains — образовательный портал | GeekBrains

Полное интервью с деканом факультета Python в GeekBrains — как и для чего учить язык начинающим

Вчера мы опубликовали первый выпуск в цикле «Кем работать в ИТ». Для него я поговорил с двумя бывшими студентами и деканом факультета 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. Там есть обязательные курсы и дополнительное. Студент сам выбирает когда их проходить, но основные и дополнительные курсы надо пройти полностью, чтобы честно называть себя мидлом. То есть — год основной программы и ещё полгода параллельных.

— Кто тогда такой синьор разработчик?

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

— Если ты встретишь человека, который три года назад ничего не знал, а сейчас называет себя синьором, что ты подумаешь?

— Почему бы и нет. Зависит от фирмы, стремления и навыков. Если человек одаренный, то я поверю. Если он скажет, что знает Питон, а не Пайтон, то наверное он все-таки прокололся.

— А если ты не настолько гений, то сколько в среднем надо опыта?

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

— То есть, мидл это просто тот, кто не берет на себя ответственность?

— Да, синьор готов брать на себя ответственность за решения, руководить командами. Будем честны — есть ведущие, есть ведомые. Кто-то готов рискнуть, поучаствовать в стартапе, и если он выстрелит через год, то человек сразу будет называть себя директором, синьором и как угодно еще.

А есть программисты, которым просто нравится программировать, но они не готовы принимать глобальные решения.

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

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

— Какую работу искать, чтобы сразу не разочароваться?

— Надо сразу сделать заметку в голове: «Если ничего не получится, я не расстроюсь». Стоит попрактиковаться на фрилансе или поделать во время обучения совместные проекты.

— Как на собеседовании не ударить в грязь лицом?

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

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

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

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

— А если не видишь код?

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

Программистов надо проверять на программирование.

Что нужно знать, уметь и понимать, чтобы не иметь проблем с поиском работы питонистом

Язык — лишь малая часть того, что вам нужно знать. Может быть около 5%, а то и меньше.

Эта статья повторяет и дополняет содержание моего выступления «Что отличает джуниора от сеньора или как питонисту не иметь проблем с поиском работы» на последнем MoscowPython Meetup 39. Многие обращались ко мне после выступления с вопросами и я обещал опубликовать статью на Хабре и обсудить в комментариях.

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



Ответы будут чуть ниже


Сперва расскажу о результатах опроса с митапа (если кто был там или слушал трансляцию):

Кто же приходит на митап?


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

Есть ли вообще проблема?


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

Как устроиться работать джуниором?


Это почти самый популярный вопрос, на который я отвечу так: работодатель вряд ли наймёт вас, если вы вообще ничего не знаете и не имеете никакого опыта. Весьма редко работодатели нанимают джуниоров и это зачастую что-то типа экперимента — вдруг поймаем реально таланта, который резко станет мидом, а мы сможем платить ему зп джуниора? Поэтому мой вам совет: не старайтесь устроиться джуниором, а лучше как следует изучите то, что здесь написано и сразу цельтесь в миды. Многие не знают и половины того, что надо и их берут только из-за «опыта» (зачастую бестолкового). Короче не бойтесь и не считайте себя ни на что не способными, вооружайтесь знаниями, практикуйтесь и ничего не бойтесь!

Что нужно знать


  • Английский язык. Он нужен для чтения документации, примеров на stackoverflow и статьей, а так же чтобы клеить иностранок, когда будете ездите в отпуск. Многие в России имеют печальный опыт обучения языку в школе и в институте, но на самом деле, ребят, это действительно на 95% проблема системы образования, а на остальные 5% — отсутствие реальной необходимости в языке. Не существует людей (не считая немых и больных амнезией), которые не смогли бы научиться говорить на английском, а уж тем более свободно читать. Почти все вы уже умеете читать со словарем и для начала этого вполне достаточно.
  • POSIX-операционная система. Конечно с появлением docker и прочих vagrant'ов это стало не так критично как ранее, но все же работать на UBUNTU или MacOS на порядок комфортнее из-за нормальной нативной консоли (особенно под убунтой) с ее командами ls, cd, cat, ps, grep, kill, killall, vim, ssh, cp/scp и множеством других, используемых ежедневно в работе. Оболочка bash, переменные окружения, ssh и ключи доступа к удаленным машинам — все это используется весьма и весьма часто. Как изучать? Да никак особо, просто установите и пользуйтесь, постепенно само все изучится, ну можно статейки по отдельным командам посмотреть.
  • Python и его структуры данных. Структуры данных называются в питоне немного иначе, чем в других языках. Для изучения синтаксиса я настоятельно рекомендую самый обычный туториал на официальном сайте, он отлично написан — если не сильны в английском заодно и попрактикуете. Помните, если вы собираетесь работать питонистом, то английский нужен будет постоянно.
  • Библиотеки Python. Именно знание их в основном от вас будут ожидать работодатели. О существовании некоторых достаточно просто знать, а некоторые нужно знать хорошо. Django сейчас в тренде и хорошее знание этого фреймворка сильно упрощает поиск работы. Вкратце: с одним лишь знанием языка вы нафик никому не нужны. Нужно иметь представление о популярных библиотеках, а найти список таких можно просто полистав вакансии.
  • Форматы данных XML, HTML, JSON. Это форматы данных, без которых нынче никуда. Для изучения XML я рекомендую почитать документацию lxml (и попробовать все примеры оттуда), для HTML — htmlbook.ru, для json — хотя бы просто погуглите что это.
  • Протокол HTTP. Имхо, самое полезное в нем это знать статусы сообщений HTTP, что такое cookies, session, заголовки, тело и reason. Мне кажется статьи в википедии хватит для начала, но может кто подскажет хорошую статью?
  • Базы данных. Их можно изучать годами — настолько обширная тема и хорошее знание баз данных, умение оптимизировать структуру и запросы необходимы чтобы стать ведущим разработчиком с большой зарплатой. Но для начала вам нужен хотя бы минимум — уметь установить СУБД и знать что такое INSERT, UPDATE, SELECT, JOIN, GROUP BY для реляционных баз. Лично я рекомендую PostgreSQL, так как она хорошо поддерживает гео-данные, которые нынче в каждом втором стартапе. Помимо реляционных, вам надо знать, что есть ещё noSQL типа Mongo (и зачем они нужны) и key-value хранилища типа Redis.
  • (очень желательно) Javascript, jQuery и прочие AngularJS. Сейчас все больше сайтов уже не генерят HTML, а асинхронно обмениваются с сервером информацией и ее отображают. Надо понимать зачем это все и из этого вытекает следующий пункт.
  • (желательно) Архитектуры информационных систем. Фактически хорошее понимание архитектур вкупе с хорошим знанием баз данных делает вас сеньором. www.insight-it.ru — к сожалению мало обновляется последнее время, но даже то что там есть я нахожу крайне полезным.
  • (желательно) Еще один тренд — это асинхронное программирование. Это не является чем-то необходимым для того чтобы найти работу, но это может быть вектором для дальнейшего развития.

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

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

Постойте, а как же алгоритмы?

После митапа ко мне подошел один парень и спросил «а как же алгоритмы?». За 6 лет работы Python-разработчиком мне довольно редко приходилось писать что-то действительно не тривиальное, в основном все сводится к каким-нибудь манипуляциям с данными, их преобразование из одной формы в другую для дальнейших нужд ну и элементарная логика уровня школьной информатики. Чаще всего все алгоритмы давно реализованы в рамках специфичных библиотек и легко доступны.


Что нужно уметь?


  • Читать чужой код — если не умеете, то фактически вы не умеете пользоваться существующими ресурсами и каждый раз будете пилить велосипед. Как правило это не эффективно (ну давайте может быть еще язык программирования каждый раз снова создавать под каждую задачу?). Со временем вы поймете, что иногда быстрее написать что-то свое, но по началу — старайтесь учиться у других. Даже если вы в итоге решите писать что-то свое, у вас будет уже хоть какое-то представление о том как надо или как не надо делать.
  • Владеть IDE — это и ускорение написания кода и возможности отладки, тэстирования кода, подсказки ошибок и недочетов, где вы не следуете гайдлайнам, множество полезных инструментов. Я рекомендую PyCharm или PyDev — они достаточно зрелые и имеют хороший функционал прямо из коробки.
  • Сразу осваивайте и пользуйтесь стандартными инструментами — virtualenvwrapper, pip. Недавно наткнулся на pyenv — имхо тоже хорошая штука.
  • Немножко сисадминить — это пересекается со знанием ОС, рано или поздно надо все-таки уметь настраивать софт на сервере где ваше приложение/сайт будет жить (Дима, привет).
  • Совсем забыл сказать на митапе и ребята подсказали: конечно же системы контроля версий — хотя бы только git, но не помешают и mercurial с svn — мало ли где с ними столкнетесь. НИКОГДА не используйте архивы и прочий PHP-стайл. Владение git должно быть чуть ли не выше, чем самим Python, если вы устраиваетесь на работу в команду. Посмотрите github.com, bitbucket.org.
  • (желательно) освоить такие средства как vagrant, docker, puppet/chef/ansible, fabric — если у кого в этом пробелы, советую Moscow Python Conf, я вот сам пойду, если будет возможность.

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

Что нужно понимать


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

Язык — лишь малая часть того, что вам нужно знать. Может быть около 5% или даже меньше.

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

Мечта работодателя Что от вас требуется
делегирование — поставил задачу и её сделали правильно без твоего участия не боитесь брать на себя ответственность и достаточно компетентны
скорость разработки (основное преимущество питона) владеете языком, знаете сторонние библиотеки и понимаете, что скорость разработки очень важна
надежность системы тэстирование собственного кода насколько это возможно или требуется
поддерживаемость (еще одно преимущество синтаксиса и рекомендаций питона) знакомство с гайдлайнами (pep, import this) и по возможности следование им
эффективность системы знакомство со свежими технологиями, библиотеками и другими приложениями
эффективность разработчика заинтересованы в проекте. Тут я советую действительно выбирать проекты, которые интересны.
предсказуемость, возможность планирования ваши планы на ближайший год ясны


Интересно что он ей такое сказал на самом деле?

Советы


  1. Развивайте коммуникацию. Когда ищете работу — ходите на как можно больше собеседований. Успех собеседования напрямую зависит от навыка коммуникации и она отлично оттачивается на собеседованиях. Вот вам пример

    Приехали мы как-то в баню, и там чувак вениками орудует. А я веников 3 года не видал — в Азии туго с ними. Ну я ему “ого, братюня, фартануло тебе, где ты веников раздобыл?”. Он мне: “да вот привез с собой из России, че хочешь я тебя тоже напарю?”. Ну я не дурак отказываться, конечно. Пообщались с ним, нормальный такой чувак. Ну и разъехались по домам. Через пару недель опять приезжаем — там он же, опять с веником, стали снова общаться, он меня и спрашивает, мол, “а ты вообще чем занимаешься?”. Я говорю ну так-сяк, вот коворкинг у меня свой, а в свободное время на питоне программирую. Он “да ладно? Мне как раз питонщики нужны”. Оказался он основателем небезызвестной компании и я до сих пор с ним работаю.


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

    Жил у нас в коворкинге один парень — крутейший JS-программист, уровня сеньора с зп 120000+. Работает за 80, потому что неловко себя чувствует на собеседованиях, не может себя правильно позиционировать.


  3. Привирайте. Слегка, ну может процентов на 20, не больше. Например, можно сказать, что вы знаете что-то, о чем вы всего лишь слышали или слегка знакомы. Правда жизни

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


  4. Чаще меняйте работу. Профессиональный рост на новом месте работы длится обычно порядка 2-3 месяц, изредка до полугода, потом начинается рутина и мало нового. Чтобы этого избежать, надо как можно чаще менять место работы (примерно раз в полгода-год). Как вариант — переходить на другую должность или в другой проект в рамках одной крупной компании, но если вы засиделись на одной позиции уже год и никаких изменений не предвидится — смело уходите. Исключения

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


    UPD Этот пункт вызвал много споров в комментариях. Дело в том, что вас нанимают не за карму, а за ваше умение делать работу. Сидение 5 лет в одной конторе и делание одного и того же все это время сделает из вас мастера делать это одно и то же, но не сделает вас действительно хорошим специалистом. Умение решать любую задачу — это ценно, для этого вам надо сталкиваться с как можно большим количеством различных задач. Не надо впадать в крайности и менять работу каждые 2 месяца — это конечно чересчур (но и бояться уйти с говноработы где вам реально не нравится тоже не стоит — уходите и не парьтесь). В конечном итоге удержать вас в проекте — это головная боль работодателя, а не ваша. Это немного цинично, но это лишь совет и вам самим решать. Просто имейте ввиду — если вы уйдете с работы где как вы чувствуете у вас остановилось развитие или тем более вам что-то не нравится — скорее всего будет хорошей идеей.
  5. Изучайте смежные отрасли, новинки, новые библиотеки. Дедушка Ленин завещал ведь.
  6. Работайте за валюту напрямую на иностранных работодателей. Хорошим специалистам — на toptal.com, попроще — на upwork.com. С хорошим английским переехать в США, Австралию, Германию и прочие Великобритании дело вообще не хитрое. как я английский выучил

    Сперва я 9 лет изучал английский в школе, потом 3 года в институте и уже мог разве что читать и переводить со словарем. Потом я несколько лет оттачивал навык чтением документации, но сказать сложнее «how much for coconut» получалось с трудом. Первым действительно эффективным шагом был просмотр видеоуроков Дмитрия Петрова «Полиглот» с канала Культура, следующим шагом — практика общения с иностранцами в нашем коворкинге на Пхукете, ну а совсем легко стало после женитьбы на филиппинке. Кроме всего прочего один мой знакомых открыл школу английского с уникальным методом, который позволяет за месяц-два обучиться, правда это на Пхукетике опять же.


  7. Идите вообще на воркшоп. В США это нормальная практика — окончив школу (даже не вуз, представьте себе) пойти отучиться 2-3 месяца на воркшопе и всё — ты уже востребованный специалист, который без труда найдёт высокооплачиваемую работу наравне с выпускниками вузов и с опытом работы. Это мне рассказал один молодой-парень, американец, который жил у нас в коворкинге и прошёл именно такой путь. У нас в России такой практики пока, к сожалению, нет (чаще это трата 5 лет в вузе, просто курсы синтаксиса языка, который, как я надеюсь вы поняли — лишь малая часть того, что нужно знать). После митапа у меня возникла идея организовать воркшоп, но в конце октября я уже улетаю обратно в Азию и просто не успею провести его здесь. Поэтому если есть желающие уехать на зимовку вместе с нами, а заодно научиться всему тому, что я тут написал — пишите в личку, что-нибудь придумаем.

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

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

Сколько у вас ушло времени чтобы стать python junior developer? — Хабр Q&A

По литературе для начинающих и не только отвечал здесь. Далее по срокам вкатывания...

Если для собственных web-разработок, то python нормальный вариант. Можно довольно безболезненно вкатиться, сформировать грамотный фундамент у себя в голове, довольно быстро создать прототип и т.д.

Если намерен идти наемным питонистом-джуниором, то тут может постигнуть разочарование:

1. На реальном рынке python/django - самая невостребованная web-технология, как в СНГ, так и на западе, в сравнении с php/js/ruby/.net и т.д.
2. Полистай вакансии python-джуниоров - там либо требования к годам опыта, либо требования других языков. В общем, не джуниорские требования в основном.
3. В большинстве вакансий python упоминается либо в качестве доп.языка ("будет плюсом"), либо в качестве бэкграунда для дальнейшего переката на Go, либо в качестве технологии для разного рода аналитиков.
4. На фрилансе также не густо в сравнении с php/js/ruby. Опыт/порфолио по web-python там сложновато наработать (гораздо больший спрос на всякие скрипты автоматизации, парсеры и т.д.).
5. Если ты не из столицы (Москва/Питер/Киев/Минск), то про вакансии python-джуниора вообще забудь, в регионах они если и встречаются, то в качестве исключений, подтверждающих правило. Открыл сейчас HH - по моему миллионнику ни одной.

К чему я это всё...типичный путь в python-разработку лежит через условные "5 лет на php" у подавляющего большинства. Python-проекты также подворачиваются волей случая чаще всего. Естественно, эти люди будут отвечать, что от "hello world" до реальной разработки у них ушло от недели до месяца...но тебя это полезной смысловой нагрузки не принесет, кроме иллюзий.

В среднем, на любой web-технологии от знакомства до уверенного джуниора проходит не менее 1.5 лет ежедневного практического (!) обучения. Т.к. уверенный джуниор - тот, кто не менее полугода трудится в реальном командном проекте и показывает результаты, то с python по вышеобозначенным причинам этот срок может увеличиться.

От linux-админа к python-программисту или как и почему я менял профессию / Habr

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

И все бы хорошо, но со временем и по определенным причинам дискомфорт начал преобладать над комфортом.

Во-первых, сам процесс поддержки, а точнее его «постоянная» природа или отсутствие какой-либо завершенности. Мелкие задачи, выполняясь, накладываются друг на друга до бесконечности и превращаются в огромный ком, который постоянно меняет свои размеры, — соотношение выполненных и невыполненных задач. Что в итоге порождает вопросы: «Что полезного я уже сделал, Что еще сделаю и к Чему в итоге я двигаюсь?»

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

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

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

Чего же я хотел? Бо́льшего погружения в более творческую работу, уменьшения влияния со стороны по мелочам, видеть конечный результат и получать от этого удовлетворение. И все. Уставшим и отчужденным смотря на наш отдел программистов, читая хабр или смотря gif-ки на developerslife, я понял, что если я не могу получить этого на поприще админства, пора менять профессию, а так как писать код мне нравилось все больше и больше, выбор не заставил себя долго ждать.

Выбор языка для меня всегда был сплошным расстройством. На работе я писал на bash, так как писать на чем-то было нужно, да и его возможностей для системного администрирования хватает с головой. Perl — не нравился по синтаксису. Очень долго пытался приучить себя к ansi C, проработал две книги, — Unix разработка сетевых приложений (Уильям Ричард Стивенс) и Программирование для UNIX Наиболее полное руководство (Марк Дж. Рочкинд). Но так и не нашел применения приобретенным знаниям, до сих пор жалею потраченного времени. По требованиям хотелось, что бы он шел в ногу с linux, был универсальным, умел и sys (для текущих скриптов), и web (с заделом на будущее) и не вырвиглазным по синтаксису. Вокруг Python ходил очень долго, — тормозила его относительная молодость, невысокая популярность, и, не знаю почему, его название. Со временем, наблюдая за компаниями-гигантами, которые все больше используют python на production, и к моменту, когда я решил менять профессию, с языком я уже определился, хотя и выбирать было особо не из чего.

Первые полгода читал Марка Лутца, что-то пробовал писать, но знания были обрывочными и применять их на боевых серверах боялся, да и не видел выгоды в замене bash на python. Время тянулось, а моя затея нравилась мне все меньше и меньше. В итоге, убедил себя, что если не получается у меня, получится у других, — нужны курсы, в короткие сроки, с проработкой практики и чтобы была ответственность за оплаченные деньги. Так будет проще и быстрее.

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

Далее как по-накатанной, в течении полугода, постепенно и в свободное от работы время, переписал все скрипты и всю автоматизацию на python, написал сервер статистики для squid (python, wsgi). Уже за свои кровные, прошел курсы через вебинар по ООП и django, так как аргументировать их необходимость текущему работодателю решил даже не пытаться. Переписал все с учетом новых знаний. Далее, ради расширения кругозора, прошел еще курсы по тестированию, но оно мне не понравилось, — оставил как запасной вариант.

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

За это время прошел около десятка собеседований на позицию junior. Всего около десятка. Но везде требовался или django+frontend, либо с опытом от двух лет. Опыт на production'е отсутствует, а фронтендом заниматься у меня не было и нет до сих пор никакого желания. Что еще странно, вопросов именно по языку было не много, зато было много по теории, — ООП, паттерны, методологии scrum, agile — которых я естественно не знал. Продолжая биться головой о двери конференц-залов и выслушивая стандартную фразу «Мы вам перезвоним», я продолжал ходить по приглашениям. И в конечном итоге меня взяли backend разработчиком в закрытый проект.

На текущем месте работы я работаю уже несколько месяцев и могу подвести итоги.

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

То к чему я стремился, я конечно получил, хотя и радовался этому не долго, — чувство «У меня получилось, я стал программистом» прогорело очень быстро, примерно за неделю, и на смену ему пришли:

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

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

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

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

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

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

Python становится самым популярным языком программирования в мире / Habr

Еще летом на The economist вышла статья о том, что Python все активнее завоевывает рынок. Но завирусилась она только сейчас. Вероятно, так произошло из-за того, что она очень неоднозначная. Ведь несмотря на такой заголовок, автор заявляет, что Python, теоретически, может повторить судьбу Фортрана или Лиспа. Чтож, обсудим. Ниже перевод этой небольшой заметки.

Я ТОЧНО не собирался создавать язык, предназначенный для массового потребления
Так сказал Гвидо ван Россум, голландский ученый, который разработал язык программирования Python в 1989 году. Но три десятилетия спустя его изобретение обогнало почти всех своих конкурентов и дало возможность без барьеров кодить, без преувеличения, всем. За последние 12 месяцев в США «Python» гуглили чаще, чем «Ким Кардашьян» (В России «Python» по тому же принципу обогнал «Тимати». — Прим. ред.). Количество запросов утроилось с 2010 года, в то время как количество запросов по другим основным языкам программирования не изменилось или уменьшилось.

Два основных преимущества языка — это его простота и универсальность. Простой синтаксис позволяет легко учиться, читать и делиться. Универсальность же легко продемонстрировать на примере: ЦРУ использовало его для взломов, Google для веб-сканирования, Pixar для производства фильмов и Spotify для рекомендаций песен.

С такой быстрорастущей пользовательской базой и широким спектром возможностей Python может показаться тем языком, который имеет шансы убить всех конкурентов. Это маловероятно, считает Грэди Буч, главный специалист по программному обеспечению IBM, который сравнивает языки программирования с империями: хотя временами растущая сила может быть близка к мировому господству, ее соперники обычно выживают в технико-культурных нишах, в которых они зародились. Python не заменит C и C++, которые являются «языками более низкого уровня». Они дают пользователю больший контроль над тем, что происходит в процессоре компьютера. Он также не убьет Java, который популярен для создания сложных приложений, или JavaScript, который поддерживает большинство веб-страниц.

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

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

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