Елена Булыгина предлагает Вам запомнить сайт «Ленусик»
Вы хотите запомнить сайт «Ленусик»?
Да Нет
×
Прогноз погоды

Основная статья: Python

Продуктовая аналитика в GeekBrains: обзор учебного курса

Чтобы вы понимали, кто и чему учит на новом курсе продуктовой аналитики в GeekBrains, мы подготовили «панорамный» обзор специальности: задали вопросы кураторам каждого из пяти учебных блоков. Хотелось показать вам детализированную и объемную картину: какие темы и инструменты изучат студенты за четыре с половиной месяца.

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

Unit-экономика, аналитика продукта и бизнес-метрики

Елена Чернышева — 10 лет работает с разными видами B2B- и B2C-продуктов в сфере мобильной и веб-разработки, а также сбора данных. Участвовала в создании продукта для FMСG-производителей и торговых компаний, перезапустила сервис «Яндекс.Справочник», развивала B2C-направление сервиса «Яндекс.Недвижимость». Сейчас — product-менеджер «Яндекс.Шеф».

— Елена, привет! Первый вопрос о профессии продуктового аналитика: что он делает на практике, что должен уметь и какими инструментами владеть?

— Аналитик знает цели бизнеса и помогает ему принимать лучшие решения на основе данных.

Основное, чем занимается продуктовый аналитик:

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

Если работа выстроена правильно, аналитик не отвлекается на повторяющиеся задачи.

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

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

В других блоках курса студенты освоят инструменты аналитика, такие как Power BI и Python.

— Любому ли бизнесу нужны такие специалисты? Где они востребованы прежде всего?

— Любому бизнесу, который относится к тому, что он делает, как к продукту, или хочет перейти на такой подход. В России product-менеджеры и аналитики есть в штате 75 % самых богатых компаний Рунета по версии Forbes. Продуктовую аналитику берут на вооружение даже компании, которые больше про офлайн: ВТБ, Сбербанк, ПИК и другие.

Кстати, на западе многие продуктовые подходы впервые появились именно в производственных офлайн-компаниях и лишь позже пришли в IT. Например, метод OKR (Objectives and Key Results). У нас в стране, наоборот, — офлайн-компании перенимают практики у онлайновых.

— Есть ли смысл идти на эту специальность жителю маленького города?

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

— Это сугубо офисная работа? Аналитик должен постоянно находиться в гуще событий?

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

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

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

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

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

— Сколько длится твой блок и какие практические проекты сделают студенты?

— В блоке восемь занятий, на которых будут практические задания двух типов:

  1. Подробно разбираем известные сервисы.
  2. Студенты тренируются на своих проектах или чужих сервисах, которые сами выбрали.

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

Маркетинг, веб- и мобильная аналитика

Дмитрий Баланин — 10 лет в маркетинге и аналитике для рынков России, Германии и Китая. Развивал performance marketing и аналитику в «Эльдорадо», Яндексе и OneTwoTrip. Сейчас — CEO Room42.ru и CEO Differture.com.

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

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

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

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

А еще мы подробно рассмотрим инструменты для исследования рынка, анализа сайтов и мобильных приложений, организации A/B-тестирования.

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

— Курс целиком построен на практическом опыте: моем и компании, где мы уже реализовали более 150 аналитических проектов.

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

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

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

Евгений Малахов — 5 лет в разработке продуктов, маркетинге и аналитике. За последние два года реализовал более 100 аналитических проектов, в том числе для Pepsico, Philip Morris, KIA, Газпром. COO проекта Room42.ru. Победитель пяти всероссийских конкурсов по бизнес-проектам.

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

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

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

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

— Да, мы разбираем материал на реальных примерах. Главное, чему я научу студентов за две недели:

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

По итогам занятий студенты:

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

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

Работа с Power BI, DAX и Power Query

Константин Севастьянов — 7 лет в информационно-аналитическом подразделении ФСО РФ, полтора года в онлайн-кинотеатре TVzavr — создавал инфраструктуру и развивал аналитику практически с нуля. С июля 2018 развивает аналитику в «Ситимобил» (сервис заказа такси) в условиях быстрого роста компании, внедряет аналитическую базу данных и BI-инструменты.

— Константин, чему научатся студенты и что они смогут делать с помощью Power BI?

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

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

— Сделают ли слушатели практический проект за время учебы?

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

Работа с Python, pandas и SQL

Илья Браславский — Data Scientist в «Ситимобил». Анализировал финансовые данные в BlackmoonFG и геологические данные в Сколтехе. Окончил магистратуру МФТИ по направлению «Интеллектуальный анализ данных».

— Илья, зачем продуктовому аналитику изучать Python? И, в частности, библиотеку для научных вычислений pandas?

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

— Сколько длится блок? Много ли практических заданий нужно будет сделать студентам в ходе или по итогам занятий?

— Блок будет состоять из 7 занятий. В начале мы разберем основы синтаксиса и основные библиотеки для анализа данных. После этого студентов ждет введение в теорию вероятности и математическую статистику. Финальное занятие посвятим обзору ряда инструментов разработчика.

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

Остались вопросы? Напишите консультанту в чат или оставьте комментарий к статье. Записаться на курс продуктовой аналитики в GeekBrains можно прямо сейчас.

Пройти обучение

30 май 19, 17:41
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Разработчики ставят на Python и предпочитают живое общение

На вопросы исследователей ответили более 90 тысяч человек.

По данным Stack Overflow, ежемесячно площадку посещают около 50 миллионов человек. 21 миллион из них —  профессиональные разработчики и студенты вузов. Около 4 % респондентов считают программирование своим хобби, а чуть менее 2 % были профессиональными разработчиками, но отошли от дел.

Самые опытные работают с VBA, F# и Clojure

Более половины опрошенных назвали себя full-stack разработчиками, почти столько же — backend-разработчиками. У опрошенных была возможность выбрать сразу несколько позиций, поэтому сумма результатов дает более 100 %. Наиболее частое совмещение функционала было таким:

  • full-stack, back-end, front-end;
  • администратор баз данных и системный администратор;
  • DevOps-инженер и инженер эксплуатационной надежности (Site Reliability Engineer);
  • исследователь и ученый;
  • дизайнер и frontend-разработчик.

Около 65 % профессиональных разработчиков, по данным Stack Overflow, участвуют в open-source проектах раз в год и более. Их энтузиазм зависит от языка. Те, кто программирует на Rust, WebAssembly и Elixir, работают с открытым исходным кодом в два раза чаще, чем пишущие на VBA, C # и SQL.

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

Большинство опрошенных начали программировать более 5 лет назад. Среди респондентов оказались люди с пятидесятилетним стажем. Самые опытные работают с VBA, F# и Clojure.

Более половины пользователей Stack Overflow написали первую строчку кода до того, как им исполнилось 16. В среднем мужчины начинают программировать раньше женщин, но позже людей, которые идентифицируют себя вне бинарной гендерной системы.

Более чем у половины разработчиков есть высшее образование, 49,1 % остановились на степени бакалавра.

Подавляющее большинство опрошенных учились по специальности.

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

Средний российский разработчик постарел на 4,2 года

Чаще всего разработчик —  это белый мужчина старше 25, но моложе 29 лет.

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

Быстрее всего процесс идет в США.

Среднему российскому разработчику 28,9 лет. С прошлогоднего опроса он постарел на 4,2 года.

Разработчики считают, что живут лучше, чем их родители.

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

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

Наиболее влиятельным в мире IT в 2019 году разработчики считают Илона Маска. На четвертое место рейтинга они поставили себя. Правда, так проголосовали только 2,5 % респондентов.

Python продолжает набирать популярность

JavaScript седьмой год подряд возглавляет рейтинг наиболее используемых языков программирования. Python продолжает подниматься в перечне. В позапрошлом году он обошел PHP, в прошлом — C#, в этом — Java.

Что касается веб-фреймворков, то в сравнении с прошлым годом разработчики отдают большее предпочтение React.js, нежели Angular.

Среди остальных фреймворков лидером остается Node.js.

Как и в прошлом году, MySQL является наиболее популярной базой данных. PostgreSQL заняла второе место в этом году, опередив Microsoft SQL Server.

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

Программисты все еще любят Rust

Четвертый год подряд Rust остается для респондентов любимым языком программирования. За ним следует Python — самый быстрорастущий основной язык.

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

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

React.js и Vue.js наиболее любимы и востребованы разработчиками среди веб-фреймворков. А Drupal и jQuery не вызывают энтузиазма.

Третий год подряд Redis остается любимой базой данных. Couchbase и Oracle считаются самыми невыносимыми. MongoDB —  наиболее востребованная для изучения БД.

Linux — снова платформа-фаворит. WordPress —  самая пугающая. Многие разработчики говорят, что хотели бы поработать с Docker и AWS.

Популярность блокчейна преувеличена

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

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

Clojure, F #, Elixir и Rust — гарантия высокой зарплаты

Респонденты, которые используют Clojure, F #, Elixir и Rust, получают самые высокие зарплаты.

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

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

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

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

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

Пройти обучение

6 май 19, 16:10
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Постигая Python: учеба в GU, практика в Австрии, развитие

За время изучения Python в GeekUniversity Максим Столпасов успел пройти практику в Австрии и трудоустроиться. Рассылать резюме не пришлось — на стажировку, а затем и постоянную работу его пригласил преподаватель курса Django. Своей историей, впечатлениями от учебы и рекомендациями новичкам Максим поделился в интервью.

Привет! Расскажи, пожалуйста, чем ты занимался до GU? Был ли опыт с Python и почему решил изучать Django?

— До GeekUniversity я 10 лет занимался автоматизацией: внедрял ERP-систему и поддерживал ее работоспособность на предприятии клиента.

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

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

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

Шесть лет я изучал Python самостоятельно. В 2018 решил сменить работу и подобрать что-то связанное с «питоном». Достаточного опыта не было, фундаментальной теоретической подготовки тоже, а без этого никуда не брали.

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

— Что показали тесты?

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

— Как тебе учеба?

— За первые два месяца мы освоили все, что я до этого учил шесть лет! Для меня это был шок.

Занимался я всерьез: выполнял все домашние задания, читал методички и дополнительные материалы, старался сделать чуть больше, чем требовалось для оценки «отлично».

Курс Django 1 у нас вел Максим Данилов — очень рекомендую его как преподавателя! Мы общались не только на занятиях, но и в WhatsApp. Обсуждали домашние задания, подходы к решению задач. По окончании курса Максим предложил пройти практику в его фирме в Австрии. Надо было выйти из зоны комфорта: на месяц уехать в другую страну от семьи, детей. Со старой работы я тогда еще не уволился, пришлось договариваться. Но в итоге ради практики я смог все уладить и поехал.

Австрия, Ландек. Вид из окна офиса. Фото: Максим Столпасов

— Учебу на это время пришлось прервать?

— Нет. Практика совпала с периодом командной разработки в GU. Мои одногруппники делали очень классный проект: систему тестирования EasyTest. Я за ним следил, анализировал рекомендации преподавателей. Максим тоже шел навстречу — выделял мне время для учебы.

По возвращении я отчитался преподавателю по командной разработке — Сергею Кручинину, — что я делал, как взаимодействовал с коллегами и применял полученные в GU знания. Этот опыт мне засчитали за командный проект.

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

— Пригодились общие знания Python и все, что мы изучали на курсе Django. Особенно полезным оказалось умение сокращать объем потребляемой памяти в Python и работать с классами Django.

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

Приходилось узнавать на ходу и лучшие практики, которые мы еще не успели разобрать в GU. Максим показывал мне их на реальных примерах: хороших и плохих. Причем он объяснял, почему здравая на первый взгляд идея на деле плохо работает. Было очень интересно.

— А что за продукт вы делали и в чем была твоя роль?

— Продукт называется winePad Der Digitale Sommelier — это система автоматизации продаж вин. В приложении не нужно заводить номенклатуру — в него встроена одна из лучших баз данных по винам Европы, с фото и описаниями.

Винотека в офисе. Фото: Максим Столпасов

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

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

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

Я нашел библиотеку, которая обеспечивала похожие функции, но она была написана на Python 3. Мне пришлось править ее для совместимости с Python 2.7.

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

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

Где именно в Австрии находился офис? И насколько жизнь компании отличалась от того, к чему ты привык в России?

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

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

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

Нам наливают вино, сомелье о нем рассказывает (Максим мне переводит), затем предлагает понюхать и попробовать. Что ж, хорошее вкусное вино. «Поставьте его на пять минут», — говорит он и опять рассказывает. Через пять минут вино продышалось, пробуем снова — вкус абсолютно другой. Оставляем еще на пять минут — вкус третий. И так шесть раз! Плюс были всякие интересные закуски.

На открытии офиса. Фото: Максим Столпасов

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

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

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

— В этом курсе помимо практики дают теорию?

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

Еще нам объясняли, как работает распределенная команда, как правильно относиться к задачам и взаимодействовать. Рекомендации я брал на вооружение, польза их подтвердилась.

— Сейчас ты продолжаешь работать у Максима, но уже удаленно?

— Да. Когда я ехал в Австрию, не рассчитывал на последующее трудоустройство. Моей целью было погрузиться в практическую разработку на Python и Django, получить месяц опыта.

Я наслаждался процессом, и впервые ничто не отвлекало. Вечером после работы я читал о задачах, которыми занимался: какие есть варианты решений и библиотеки. Утром бежал обратно на работу, чтобы скорей опробовать подходы, о которых прочел. И так весь месяц без остановки!

Я был поглощен делом и не ждал большего. Но под католическое Рождество (25 декабря) Максим предложил сотрудничать на удаленной основе. Два раза в год я должен приезжать на месяц в Австрию, чтобы скорректировать планы на полугодие.

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

Раньше мне приходилось каждый день ездить на работу через всю Москву: с севера области на юг. На дорогу в одну сторону уходило в среднем 2–2,5 часа. Сейчас я снял себе коворкинг и работаю в двадцати минутах от дома. Зарплата чуть выше прежней. И главное — перспективы. Компания оплатила мне курсы английского, чтобы я мог лучше взаимодействовать с командой.

Работа мечты, по-другому назвать не могу!

Альпы. Вид из офиса. Фото: Максим Столпасов

— И ее не пришлось искать.

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

В итоге получилось еще проще: я полностью сконцентрировался на занятиях, а работа нашлась сама в процессе обучения.

— Какие проекты ты реализовал в GU?

— Пока я продолжаю учиться и за плечами один «сквозной» проект, который мы дорабатывали в ходе каждого учебного курса — это интернет-магазин на Django. Мы начинали с верстки (курс HTML & CSS), затем нам показали, как увязать сайт с базой данных и фреймворком Django.

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

Мы привязали к сайту систему перевода страниц на другие языки. Дальше начался более продвинутый курс Django 2, по итогам которого мы реализовали для магазина авторизацию через соцсети.

Мы также научились пользоваться встроенными в Django тестами: провели нагрузочное, функциональное и unit-тестирование.

Прелесть «сквозного» проекта в том, что теперь я умею делать и frontend, и backend — все, кроме дизайна. Полноценный интернет-магазин уже есть, его можно дорабатывать. У меня появились идеи, как прикрутить к нему telegram-бота.

— Зачастую в GU и GB фронтендеры кооперируются с бэкендерами и делают курсовые проекты вместе. А вы, получается, — мастера на все руки.

— Нас готовят как Middle fullstack-разработчиков, поэтому учат всему.

Кстати, неожиданно Frontend меня очень зацепил! Этот курс у нас вел Алексей Кадочников — шикарный преподаватель. Он так заинтересовал нас этим HTML: я ночами не спал — изучал дальше. Потом Алексей посоветовал мне, в какие темы углубиться дополнительно.

Верстка. Первый экран главной страницы магазина

— Что из проектов у тебя впереди по учебному плану?

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

— Сейчас ты занимаешься вебом, но в принципе ты ведь «питонист широкого профиля». Есть планы освоить новые направления Python-разработки?

— Машинное обучение — обязательно. За ним будущее! Я заинтересовался этой темой в первые же месяцы учебы в GU.

Тогда, еще на старой моей работе, надо было оптимизировать распределение задач в отделе. Для начала их нужно было классифицировать, и вот на этом примере я впервые «пощупал» machine learning. Разобрался, как построить вектор по заголовку и описанию задачи. Удалось довести правильность распределения задач до 90 %.

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

Мы уже обсуждали с Максимом возможность прикрутить машинное обучение к проекту WinePad. Выяснились интересные моменты. Я раньше не представлял, как модель обучения может взаимодействовать с Django.

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

— Прикольно. Я пока в этом не разобрался, нужно будет вникнуть.

— В завершение беседы поделись, пожалуйста, опытом. Что ты посоветуешь поступающим на ту же специальность?

— Мой совет: помните, что в программе обучения GU нет ничего лишнего. Вам дают самый необходимый минимум, который обязательно пригодится в работе. Берите этот объем знаний целиком. Домашние задания — наше всё! Смотрите занятия онлайн, пересматривайте, читайте методички, в ДЗ обязательно делайте все задачи со звездочками и еще что-нибудь сверху. Вы оцените результат.

Когда Максим приходит ко мне с новой задачей, я думаю: «Где-то такое уже было!» — и сразу вспоминаю, в какую методичку смотреть и какой код поднимать.

— При твоей увлеченности и мотивации, что тебе задачи со звездочками... :) Думаю, секрет в этом.

— Не всегда. Мотивация — штука непостоянная! То она пропадает, то объективно времени нет и приходится сидеть ночами. Надо себя заставлять и не сдаваться! Домашнее задание — оно маленькое, примерно на два часа. Это время надо по-честному полностью уделять занятиям.

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

Пройти обучение

3 апр 19, 12:39
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Идеальный код на Python

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

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

У нас уже вышла публикация о том, как написать код для собеседования и получить работу. Мы пошли дальше и задали вопросы об идеальном коде декану Python-факультета GeekUniversity Алексею Петренко. Он рассказал, что в коде выдает джуниора.

Отступы: все разные

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

Что новички делают не так

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

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

Решение

Хороший тон — делать отступ четырьмя нажатиями пробела.

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

Для языка Python разработан официальный документ PEP-8, в котором прописаны правила красивого кода. Это соглашение всех программистов мира, которые пишут на Python, о том, какой код считать образцовым.

Переменные: непонятные

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

Что новички делают не так

  • Используют в качестве переменных обычные буквы алфавита: a, b, c, d, — не задумываясь о смысловой нагрузке.
  • Называют все переменные любимой буквой, добавляя цифры: а1, а2, а3. Если переменных двадцать, то будет и а20. Понять, какую информацию они хранят, очень сложно.
  • Используют строчную переменную l. Разработчики стараются избегать эту букву. Ее не принято использовать не только в Python, но и в других языках программирования, потому что при быстром чтении кода строчную l легко спутать с единицей. Аналогичная путаница возникает с O и 0.
  • Записывают переменные транслитом (massiv вместо array).
  • Придумывают новые переменные для общепринятых: для названия цикла (в цикле используют переменные i, j, k — именно в таком порядке, от внешнего i до вложенного k), для обозначения осей координат (x, y).

Решение

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

  • Если название переменной состоит из нескольких слов, используйте в Python нижнее подчеркивание: переменная со значением максимального размера — max_size.
  • Если именуете класс, записывайте каждое слово с заглавной буквы: имя_переменной должно отличаться от ИмениКласса.

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

Из этого вытекает еще одна ошибка новичков: они называют переменные так же, как функции.

В Python есть около 70 функций «из коробки»: функция sum() вычисляет сумму всех переданных аргументов, max() ищет максимальное значение. Если программист назовет переменную sum, она будет работать. Но такой переменной он переопределит функцию суммирования — и она сломается.

Пустые строки: отсутствуют или в избытке

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

Что новички делают не так

  • Не разделяют строки кода пустыми строками.
  • Отделяют каждую строчку кода пустой строкой.

В обоих случаях код очень сложно прочитать.

Решение

Код принято делить на логические блоки.

К примеру, если запрашивают информацию о пользователе, пишут несколько строк кода и оставляют одну пустую после блока.

Далее идет блок обработки информации. Если он содержит несколько подблоков, их тоже следует отделить пустой строкой.

Перед выводом информации в конце также добавляют пустую строку.

Слишком сжатый код

Что новички делают не так

  • Пытаются написать код максимально сжато и для этого помещают несколько составных операций в одну строку.

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

Решение

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

Советы декана начинающим разработчикам

  1. Ваш код будут читать другие программисты. Всегда думайте о том, как они его воспримут, насколько он будет понятен коллегам.
  2. Потратьте время на изучение синтаксиса, почитайте стандарты PEP8. Есть англоязычная версия и перевод. Работодатель будет встречать «по одежке»: ваш код должен выглядеть красиво.
  3. Если Python — не первый для вас язык программирования, повторяйте требования стиля. Когда разработчик пишет, не соблюдая их, возникает путаница: то ли перед нами человек, у которого в голове перемешались все языки программирования, то ли новичок, который вообще ничего не знает о Python.
  4. Воспользуйтесь командой import this. Это пасхалка от разработчиков: она выводит свод правил хорошего кода. Почаще перечитывайте этот Дзен Python — и ваш код будет идеален.

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

Пройти обучение

22 фев 19, 16:50
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

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

Как при этом ему удается учиться в полную силу и что он хотел бы изменить в GeekUniversity — читайте ниже.

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

— Сейчас я инженер по системам расчетов с агентами в компании «МегаФон». То есть мое направление — BSS (Business Support System) — поддержка бизнес-процессов и, в частности, биллинговых решений. Начинал мануальным тестировщиком, затем мне поручили создать автотесты на Python + Robot framework. Система, тестирование которой нужно автоматизировать, очень сложна, а с принятым в компании технологическим стеком я раньше не работал.

У меня был выбор: поучаствовать в конкурсе на новую менеджерскую позицию или «включить технаря» и освоить Python. Я выбрал учебу и рад этому!

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

— Что за проект ты сделал со своей командой в GeekUniversity?

— Это программа для хранения паролей PassVault (аналог KeePass). Команда у нас из шести человек. География: Тюмень, Казахстан, Москва — разные часовые пояса. Чтобы координировать работу, мы использовали доску планирования Trello и ежедневно проводили скрам-чаты в Telegram. Небольшую презентацию программы я выложил на YouTube.

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

— Командная разработка — один из завершающих этапов обучения. Какие проекты в GU ты делал до этого?

— Первым моим проектом был Dagobah-messenger. Это программа мгновенного обмена сообщениями, которая передает данные в формате JSON и использует AES-шифрование. По ходу пришлось разбираться со сложными темами из разных областей Python, так что не сразу все получилось. Сейчас переписываю этот проект с нуля: заложил в него асинхронность потоков (asyncio), GUI (на PyQt5) и БД на MongoDB.

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

Другой мой проект — сайт-визитка на Python + Django framework + HTML/CSS + SQLite3. В учебном плане web запланирован на третью четверть, но я решил начать заранее. Попутно проверил свои возможности по линии fullstack-разработки. Хочу после Нового года уже взять заказ на freelance.ru и более основательно прокачаться как web developer.

— В октябре ты победил в воркшопе GeekBrains по созданию Telegram-бота.

— Конкурсного бота Dobby я написал в офисе за девять ночных часов с четверга на пятницу. В качестве приза получил учебный курс на выбор. Раньше не имел дела ни с API Telegram, ни с ботами вообще. Но небольшой опыт с программными интерфейсами уже был — вне GU я делал свой парсер данных под VK API.

— Погоди! Ты писал бота ночью в офисе?!

— Дело было так: вечером я с работы посмотрел воркшоп. Там сказали, что код надо сдать до 22:00 следующего дня. А поскольку в пятницу я занят до 18:00, единственная возможность успеть была ночью.

Дописал бота и ушел из офиса я в 5:20 утра. Полтора часа поспал, переоделся, взял еду и к 9:00 вернулся на работу. Потом весь день с трудом держал глаза открытыми, но никто этого не заметил — с делами я справлялся. Только преследовала мысль: стоило ли так напрягаться. Победа показала — стоило.

— А что умеет бот и можно ли с ним познакомиться?

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

— Сам язык Python оправдывает твои ожидания? Не жалеешь, что его выбрал?

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

Кстати, посещаю Moscow Python Meetup-ы, начиная с № 55  — с апреля 2018. Как-то слышал доклад о программировании микросхем на Python! Поразительно универсальный язык.

— Как ты нашел идею для командного проекта? И насколько она в итоге оказалась подходящей для работы в группе?

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

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

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

Нам повезло: для командной разработки проект оказался очень подходящим. Все получилось.

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

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

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

— Как распределились роли в команде?

— У каждого была основная и резервная роль: если бы один «боец» вышел из строя, другой смог бы взять на себя его задачи. Например, моя основная роль — разработчик, технологии: SQLAlchemy для back-end и AES-шифрование. Резервная роль — team lead.

У Раиля Закирова основная роль — разработчик PyQt5, резервная — технический писатель. Кстати, Раиль первым откликнулся на мою идею. Он раньше уже участвовал в командном проекте, и это оказалось очень кстати. Мы быстро сработались, не было никаких проблем.

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

Леонид Михайлов совмещал сразу две роли разработчика: основная технология — PyQt5, резервная — SQLAlchemy.

Николай Котов — тестер, он же — разработчик в части AES-шифрования.

Данияр Калиев — также разработчик, его технологии — SQLAlchemy и PyTest.

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

— До GU у кого-то из команды был опыт программирования или все пришли из других сфер?

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

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

— С преподавателем советовались?

— И да и нет. Я договорился с Сергеем Кручининым, что добавлю его в наш Telegram-чат. Рад, что ему ни разу не пришлось вмешиваться в полемику внутри команды. Он в этой истории был «наблюдателем сверху».

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

— Сложно решать все удаленно? Насколько помогли Trello и scrum-чаты?

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

— Как проходил «скрам»?

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

— Что было самым трудным и как ты с этим справился?

— Сжатые сроки и параллельная работа над несколькими проектами (GU + основная работа + дополнительная практика в программировании) — вот что для меня лично было самым трудным. Спасло планирование.

— Что дала тебе учеба в GeekUniversity?

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

— Что хотелось бы улучшить в GU, что понравилось?

— В GU классные Преподаватели — с большой буквы. И еще я искренне доволен службой поддержки. Желаю им держать высокую планку. Даже в выходные я всегда могу рассчитывать на отличный сервис. Это приятно удивляет.

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

— У тебя уже есть планы трудоустройства по новой специальности?

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

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

— Чего еще ждешь от учебы?

— После Нового года начнется веб, Django. И снова будет большой командный проект. Что именно будем делать, пока под вопросом: посмотрю, как ребята будут себя чувствовать и какие у нас к этому моменту будут навыки.

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

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

Я себя заранее морально подготовил, что на протяжении года у меня фактически не будет другой жизни, кроме «работа — дом — учеба». Даже в отпуск не поехал. Пожертвовал развлечениями и личной жизнью. Это большой минус. В офисе люди в шутку спрашивают, на чем я сижу. Если бы мне было не так интересно, давно бы уже плюнул.

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

— Спасибо тебе большое! Много, подробно, интересно. А главное — при всей загруженности у тебя столько энергии, что она передается окружающим.

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

Пройти обучение

5 дек 18, 18:50
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Как проект студентов GeekUniversity вышел на мировой рынок

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

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

Идея

Проект начался с идеи, которая пришла извне. Ко мне обратился топ-менеджер девелоперской компании в Москве. Уже много лет он «цифровой кочевник», или digital nomad. Для таких людей постоянные перемещения по городам и странам — стиль жизни. Они часто переезжают и предпочитают не привязываться к одному месту жительства. Путешествия для них — не просто хобби, а часть повседневной действительности, как работа или поход в магазин. Мне предложили создать стартап в сфере недвижимости. Сайт, на котором такой обмен жильем был бы систематизирован, где каждый участник мог бы вести свой календарь переездов и обменов, общаться и быстро находить новые варианты.

Почему мы стали ориентироваться на рынок США? Для многих жителей России переезд — катастрофа. У американцев же кочевничество в крови. Оттуда направление digital nomads и пошло.

Идея пришла очень вовремя. Как раз в этот период я проходил обучение в GeekUniversity, познавал мощь Python. Увидел, что педагоги компетентны, а студенты рвутся к знаниям, и предложил реализовать MVP этого продукта в рамках учебного процесса. Среди учеников быстро нашлись единомышленники, и мы приступили: быстро прикинули архитектуру будущего проекта, сформировали команду из семи человек и распределили роли.

Суть

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

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

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

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

В процессе мы поняли, что страховая система — действительно то, что нужно пользователю. Шеринг-экономика США с каждым годом растет на 20 %. А это рынок, на который мы нацелены. Когда ты шеришься кофемолкой — это одна история. С жильем — совсем другая. Недвижимость — это составной объект, включающий много аспектов. Жилье ассоциируется с безопасностью: мы опросили людей и поняли, что их волнует именно защищенность их дома. Поэтому сейчас разрабатываем свою систему страхования от ущерба — это одна из актуальных задач в рамках развития нашего проекта.

Процесс

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

  • мы что-то сделали;
  • посмотрели на обратную реакцию;
  • проанализировали;
  • переделали;
  • снова посмотрели и проанализировали обратную связь;
  • и так до бесконечности, потому что развитие продукта — это длительный и непрерывный процесс.

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

Команда

Мы создавали проект в команде из семи человек. Это Артем Сухаренко, Денис Мыльников, Максим Дубич, Марина Репникова, Алексей Сидоров, Николай Мороз и я, Кирилл Комаров.

Хочется отдельно отметить работу ребят — если бы не они, ничего бы не получилось. Людей, с которыми мы стартовали еще полгода назад, уже сложно назвать джуниорами — несмотря на то, что в GeekBrains мы только начали изучать Python. До GB никто из нас на нем не работал, а тут взяли и всего за полгода забабахали работающий сайт! Де-факто мы подняли собственный проект с нуля — и это очень ценно. Теперь не боимся сложностей и очень легко разбираемся в новом. Мы все многому научились, а в наших портфолио появился достойный проект.

Вы спросите, за что я благодарен GeekBrains? Нет, не за знания по Python. А за то, что приобрел команду и возможность реализовать свои идеи. Это очень важно, если мы говорим про стартап. Большая мотивация — сделать что-то не ради галочки, а чтобы взлететь или хотя бы выкатиться на взлетную полосу. Речь идет не просто о хорошем обучении — о сообществе, тусовке людей, схожих по духу, целям и интересам.

Николай Мороз, developer: «Проект GLOLiving заинтересовал меня продуманностью концепции и использованием трендовой технологии — блокчейна. До проекта я не работал с Django, но с помощью коллег быстро разобрался и смог внести свой вклад в проект. Мы быстро определились с бесплатными инструментами для взаимодействия: планирование итераций в Trello, совещания в Hangouts, контроль версий в GitLab, общение в Telegram. Проблем с коммуникацией не возникало, все были в курсе работы остальных членов команды. Курс командной разработки оказался одним из самых полезных в программе факультета Python в GeekUniversity. Он позволил примерить роль профессионального разработчика и задал контекст для остальных курсов».

Марина Репникова, developer: «Команда набралась большая, поэтому задачи пришлось дробить. Мне досталась та, с которой логично начинать работу программистом, — тестирование. В начале для тестера работы было мало, и я дополнительно взялась создавать одну из моделей базы данных.

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

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

Алексей Сидоров, developer: «Мои задачи на проекте — написание моделей и форм Django, а также реализация взаимодействия пользователей с сетью blockchain: приобретение токенов, проверка баланса, фиксация сделок. Считаю, что мне повезло попасть в одну группу именно с этими людьми.

Я мечтал программировать еще с тех пор, как попал в телеком. Когда окончательно решил заняться разработкой, начал с языка Java, но потом плавно пришел к Python. Почти одновременно с этим стал интересоваться технологиями смарт-контрактов в сети blockchain и языком Solidity. Так что выбор проекта для меня был закономерным».

Максим Дубич, developer: «Blockchain — интересная, перспективная и развивающаяся технология. Поэтому я решил участвовать в проекте, как только его предложили на курсе. Это мой первый проект на Python. Моя роль — в основном backend-разработка, в том числе пользовательских и административных представлений. Также я работаю с требованиями от frontend-разработчика, вывожу информацию, чтобы ею мог пользоваться фронтендер, интегрирую сайт с Google API, администрирую командный репозиторий.

Роли распределены, и мы в какой-то степени зависим друг от друга. Свою часть работы я выполняю с большим удовольствием. Жаль, что на это удается выделить не так много времени. Нагрузки прибавилось, но не могу назвать ее неподъемной. Как говорится, глаза боятся — руки делают. Благодаря команде, где каждый вносит свой посильный вклад в общее дело, мы все успеваем вовремя. Коллективная работа, распределение задач и поддержка коллег позволяют нам находить выход даже из самых сложных ситуаций. Я получил ценный опыт в web-разработке, технологии blockchain и командной работе. Верю в успех нашего проекта и перспективы его развития!»

Артем Сухаренко, developer: «В проект я вступил из-за интереса к технологии смарт-контрактов и blockchain. На начальном этапе писал спринты для бэкенда. Разработал модель «пользователь — бэкенд» и админ-панель для менеджеров — фронтенд/бэкенд. Постепенно и ненавязчиво занял роль DevOps и микротимлида. Осуществляю ревью кода c UI-тестированием и мерж в dev-ветку (сейчас это ветка деплоя). Еще на мне администрирование сервера».

Денис Мыльников, developer: «Большую часть своего опыта в разработке я был программистом-одиночкой. Учеба в GeekBrains заинтересовала меня как раз практикой командной работы над совместными проектами. С одной стороны, я мог освоить направление программирования, которым ранее не занимался. С другой — попробовать себя в работе с командой программистов. Я выбрал направление web-разработки.

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

Меня заинтересовала команда с другого направления — факультета Python. Они проходили иные курсы с другими преподавателями. Работая с этими ребятами, я мог узнать что-то новое и проверить, как смогу влиться в коллектив с другим опытом. Это напоминает начало работы на новом предприятии. Кроме того, команда занималась интересным и необычным проектом.

Я стал frontend-разработчиком — укрепил и дополнил свои познания в HTML, CSS и JavaScript. Увидел, какие сложности возникают при совместной работе над проектом, и понял, как ценны коммуникация и синхронность в работе членов команды. Убедился, как важно предварительного тщательно планировать работу, механизмы обмена данными, кодом, способы взаимодействия в коллективе. Раньше эти тезисы звучали общими фразами. Но они обрели для меня новый смысл, соединившись с практикой».

От учебного к коммерческому

Если в самом начале мы еще слабо понимали, каким будет УТП, то сейчас мы его четко представляем и уверенно позиционируем инвесторам. На нашем пути было много ошибок, с которыми мы постоянно работали: в коде, архитектуре или составлении спринта — уже не имеет значения. Важно другое: проект перерос из учебного в коммерческий. И главное отличие учебного GLOliving от нынешнего — мы избавились от косяков. Проработали ошибки так, чтобы сегодня было видно: сайт сделан не на коленке.

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

Напутствие

Лайфхак один: не привязывайтесь к поиску работы. Старайтесь выйти за рамки — поверьте, оно того стоит. Идите в сторону стартапа:

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

Сформировали команду — можно в бой! Определитесь с концепцией, разработайте план действий, найдите инвесторов (на самом деле их много — просто ищите). По поводу финансирования: поначалу отлично действует правило трех f: friends, family and fools. Обычно первыми инвесторами становятся именно эти люди. Главное — вера в себя, в свои идеи и готовность работать много и вопреки всему!

Пройти обучение

20 ноя 18, 18:13
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

5 языков программирования, которые надо учить первыми

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

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

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

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

def fib_recursion(i):
	if i > 1:
   	 return fib_recursion(i-1) + fib_recursion(i-2)
	return i
            	
for i in range(10):
	print i, fib_recursion(i)

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

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

JavaScript

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

function fib_recursion(n) {
   return n < 1 ? 0
    	: n <= 2 ? 1
    	: fib_recursion(n - 1) + fib_recursion(n - 2);
}
 
console.log(fib_recursion(10));

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

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

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

C#

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

static void Main(string[] args)
{
	int number = 10;
	fib_recursion(number);
}
 
static void fib_recursion(int n, int a = 0, int b = 1)
{
	if (n == 0) return;
	Console.WriteLine(a);
	fib_recursion(--n, b, b+a);
}

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

Swift

Подходим к самому интересному — языкам, безупречное владение которыми поможет вам попасть в сферу мобильной разработки. Swift не вполне универсален: он еще не полностью вытеснил Objective-C из приложений для Apple, но перспективы у него блестящие.

Четвертая версия Swift вышла в 2017 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

func fib_recursion(num1: Int, num2: Int, steps: Int) {
 
	if steps > 0 {
    	let newNum = num1 + num2
    	fib_recursion(num2, num2: newNum, steps: steps-1)
	}
	else {
    	print("result = \(num2)")
	}
}
fib_recursion(0, num2: 1, steps: 10)

Java

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

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

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

public class MainClass {
 
  public static long fib_recursion(long number) {
	if ((number == 0) || (number == 1))
  	return number;
	else
  	return fib_recursion(number - 1) + fib_recursion(number - 2);
  }
 
  public static void main(String[] args) {
	for (int counter = 0; counter <= 10; counter++)
  	System.out.printf("Fibonacci of %d is: %d\n", counter, fib_recursion(counter));
  }
}

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

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

Пройти обучение

24 июл 18, 16:59
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Логические ошибки. 7 бед начинающего программиста

Хуже багов в коде — только ошибки в логике программы и нашем мышлении. Сборка и запуск проходят гладко — до поры вы не подозреваете о проблеме. Но вдруг приложение начинает работать не так, как задумано. Обычно это происходит, если запустить код с непредвиденными входными данными. Результаты вычислений оказываются искаженными, или вы обнаруживаете дыры в безопасности. Ищете баг, но его нет — программа делает, что сказано. Остается вопрос: что вы не предусмотрели? Системная ошибка может потребовать переделать код полностью или почти с нуля. Застраховаться от таких неприятностей нельзя, но можно учиться на чужом опыте и обходить заведомо опасные ситуации.

Кунсткамера: «Почему это плохо работает?»

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

«Не туда положил», или неверный тип данных

Ошибка из разряда «Семен Семеныч!». Если вы неправильно выбрали тип переменной или он непредвиденно изменился во время работы кода, это может создать проблему. Например, программа попытается записать 64-битное значение в 32-разрядную переменную. Или число одинарной точности с плавающей запятой (float) попадает в переменную типа int (Integer).

У такой ситуации несколько вариантов развития:

  • В языках со статической типизацией (С++, Java, С#) значения переменных проверяются на этапе компиляции. Если мы явно положили значение типа long в int, получим ошибку и шанс ее исправить. Но баг всегда найдет лазейку — в С#, например, если по итогам вычислений записать 1,7 в int, это пройдет незаметно. Причем число будет округлено до 1 и результаты дальнейших вычислений с участием переменной исказятся.
  • В языках с динамической типизацией (JavaScript, Python, PHP) переменные получают значение во время работы программы. Ничто не укажет на ошибку, пока вы не столкнетесь с ней непосредственно. Неявное приведение типов в таких языках — норма жизни. Поэтому 32-битная int, если в нее поместить число с плавающей запятой, автоматически превратится во float, и никто вам об этом не скажет. Лучше еще на этапе создания алгоритма следить, чтобы у переменной не было случая самовольно обратиться «в другую веру».

Хрестоматийный пример — вещественные вычисления с целыми числами, такие как деление с остатком. Вещь настолько банальная, что в современных языках с ней просто не может что-то пойти криво… Или может.

int a = 25;
int b = 8;
float c = a/b;
Console.Write(c);
Console.Write("\n"+ c.GetType()); // Проверяем тип переменной c

Результат:

3
System.Single

На самом деле мы получили 3,125, но значение округлилось. Указание типа float для “с” не помогло сохранить точность. Компилятор сначала выполнил деление и округлил результат, а потом уже задумался о типе… и выбрал Single. Это тип, который хранит числа с плавающей запятой одиночной точности в диапазоне от -3,402823E38 до 3,402823E38. Типы float и Single — оба 32-разрядные. C# в таких случаях допускает неявное преобразование, так что компилятор не заметил подвоха.

Когда вы уверены, какой тип должен вернуться, лучше объявлять об этом явно:

float c = (float)a/b; 

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

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

Пример округления при делении int на int с остатком был актуален и для Python 2. В Python 3 это работает иначе:

a = 25
b = 8
c = a/b
print(c)
"""Проверяем тип переменной"""
print(type(c) == float)

Результат:

3.125
True

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

Вебинары GB: «Все, что вы должны знать о типах данных»  «Типы данных в PHP», «Типы данных языка C#», «Базовые типы данных, ветвление и циклы языка Java» .

Что читать: «Ликбез по типизации в языках программирования», «Статическая и динамическая типизация», «Исследование внутренних механизмов приведения типов в JavaScript», «Приведение и преобразование типов C#», «Опциональные типы данных в языке Swift».

«На волю, всех на волю!» — высвобождение ресурсов

Если вы используете язык программирования с автоматической сборкой мусора, не забывайте присматривать за высвобождением ресурсов. Большую часть времени все работает хорошо, но иногда сборщик начинает приносить больше проблем, чем пользы. Кто работал с Java, знает, что удаление отработанных данных может затянуться на неопределенный срок. Виртуальная машина ищет, какие объекты больше не нужны — в коде на них нет ссылок. Объекты попадают в очередь на уничтожение, но она может не дойти до них никогда. Хранение лишних ресурсов грузит память и создает уязвимость: среди отправленных на свалку объектов могут оставаться конфиденциальные данные.

Поэтому будьте внимательны. Можете принудительно освобождать ресурсы с помощью конструкций типа try-with-resources и try-finally. Так вы убедитесь, что все лишнее будет стерто при любом раскладе. Отпускать ресурсы на волю лучше «в естественную среду обитания» — в том же коде, где их захватили.

А еще привыкайте закрывать открытые файлы и сессии, как скобки в коде.

Что читать: «Правильно освобождаем ресурсы в Java», «Очистка неуправляемых ресурсов» (C#), «Как работает JS: управление памятью, четыре вида утечек памяти и борьба с ними».

Неслучайные случайности

На основе случайных чисел можно создавать уникальные ID для объектов и сессий, генерировать пароли, вносить разнообразие в геймплей или общение пользователя с программой. Главное, чтобы случайность не стала слишком предсказуемой. Увы, в языках программирования используют генераторы не случайных, а псевдослучайных чисел (ГПСЧ). Получить действительно случайное число не так просто. Для этого нужны внешние сигналы, последовательность которых для компьютера всегда неожиданна. Обычно в таких случаях используют аппаратуру, которая фиксирует хаотически меняющиеся параметры физического процесса. Основой рандомизации могут быть движущиеся частицы, белые шумы, микродвижения (смещение координат курсора мыши) или текущее число просмотров под самым популярным видео на YouTube (шутка). В 2017 году для получения истинно случайных чисел в МГУ специально собрали квантовый генератор.

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

Что читать/смотреть: «Подробно о генераторах случайных и псевдослучайных чисел» (с примерами уязвимостей ГПСЧ в Java и PHP), «Как написать генератор случайных чисел» (на JS), «Случайные числа и функция random» на Arduino.

Гонка за ресурсами

Если ваше приложение запускает несколько потоков, важно следить, чтобы они не конфликтовали. «Состояние гонки» — это когда потоки или процессы наперебой обращаются к общим ресурсам и нарушают целостность данных. Например, один поток увеличил значение переменной на 1, второй — обнулил, первый — сохранил. Вместо ожидаемой единицы на выходе получаем 0. Чтобы этого не происходило, нужно ставить блокировки (block), которые не позволят второму и последующим потокам работать с уже занятыми ресурсами. Либо использовать другие механизмы синхронизации: семафоры, события, критические секции. Если сказанное вам не совсем понятно, самое время разобраться в теме.

Вебинары GB: «Синтаксический сахар при работе с потоками на языке С#».

Что читать: о многопоточности, «Синхронизация процессов», «Процессы и потоки in-depth».

Публичность и «все общее»

Чтобы не было сквозняка, нужно закрывать двери, в которые никто не ходит. Так же и с объектами внутри программы: они должны быть открыты только тем участкам кода, которым действительно нужны. Это один из принципов инкапсуляции, и он важен для всех, кто применяет объектно-ориентированное программирование. «Сквозняк» в коде ведет к ошибкам во взаимодействии объектов и повышает риск перехвата данных извне. Для ограничения доступа во многих языках применяют модификаторы public, private и protected. Также избегайте использования глобальных переменных везде, где можно обойтись без них. Делиться чем-то — хорошо, но только не внутри программы, когда общий доступ к ресурсам становится источником проблем.

Что читать: «Все о модификаторах доступа» (с примерами на C#), «Модификаторы доступа и класса» в Java.

Особенности сериализации

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

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

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

Если по какой-то причине вы не хотите передавать объект в виде потока байт, есть удобные альтернативы: можно сохранить структуру объекта в формат XML или JSON.

Чтобы не писать все с нуля, можно использовать готовые классы-сериализаторы:

  • BinaryFormatter — обеспечивает бинарную (двоичную) сериализацию, т.е. преобразование в поток байт;
  • SoapFormatter — сериализует связанные объекты в SOAP-сообщение: особым образом структурированный XML-документ, который пересылают по протоколам HTTP, HTTPS, SMTP и другим;
  • Xstream — Java-класс для сериализации в XML и JSON-файлы. XML весит меньше SOAP и быстрее передается по сети, но не так гибок в описании типов данных. Данные формата JSON являются объектами JavaScript и удобны для использования в клиент-серверных приложениях.

Что читать: «Как не наступить на грабли, работая с сериализацией», «Сериализация (C#)», «Сериализация объектов PHP», «Обобщенное копирование связных графов объектов в C# и нюансы их сериализации».

С-библиотеки без присмотра и переполнение буфера

Есть мнение, что в языках более высокого, чем С, уровня (Java, Python, C#, Rust) проблема переполнения буфера решена. Например, Java по умолчанию контролирует размер буфера и границы массивов. Но для ускорения жадных к ресурсам участков кода многие программисты используют С-библиотеки. И вот здесь будьте осторожны. Языки С и С++ считаются сложными именно потому, что дают простор для ошибок, которые легко допустить, но трудно найти. В плане переполнения буфера код на C/С++ очень уязвим.

В чем суть проблемы? Если неправильно рассчитать или не проверить размер буфера, программа попытается записать данные за его пределами. Это не только ошибка, но и дыра в безопасности. Злоумышленники могут намеренно переполнить буфер, чтобы подменить хранимый в стеке адрес возврата, т.е. адрес функции, которую надо вызвать по завершении текущей. Подставная функция передаст дальнейшее управление мошенническому коду. Такой подход используется при создании вирусов с 1988 года. Чтобы не наступить на ржавые 30-летние грабли, узнайте больше о том, как бороться с переполнением буфера.

Что читать: «Как устроены дыры в безопасности: переполнение буфера» (или оригинал на английском).

Переменные впрок

Иногда начало кода у новичка выглядит как выставка достижений народного хозяйства. Там объявлены не только переменные и константы, необходимые сразу после запуска программы, но и те, которые потребуются намного позже или не нужны вовсе. Это говорит о пренебрежении инкапсуляцией и плохом планировании еще на этапе создания алгоритма. Разработчик не знает, где объявлять переменные в разных случаях, и складывает все «в коридоре».

Вносите в алгоритм только то, что готовы инициализировать!

Хотите на таком-то этапе присвоить вот этой переменной вот это значение? Так и пишите. Что-то переиграли? Не забудьте почистить код.

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

Что читать: «Переменные» (и где их объявляют — на примере С++), «Области видимости и замыкания в JavaScript».

Как найти остальные ошибки?

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

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

Пройти обучение

11 июл 18, 14:32
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

12 советов, как студенту GeekBrains найти работу

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

Выбирайте направление осознанно

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

Во-вторых, Python — перспективный язык. У него много библиотек и сильное комьюнити. Язык можно применять в разных областях: от WEB до программирования микроконтроллеров. Сегодня HeadHunter рекомендует 4,5 тысячи вакансий на моё резюме. Так вот я получаю столько звонков, что не на все собеседования успеваю сходить.

Делайте все домашние задания

В учебе главное — не лениться. Пока я не вышел на работу, делал д/з в двойном объеме. На курсе были домашние задания в методичках, но иногда преподаватель давал свой вариант домашки. Тогда я выполнял оба задания. В конце занятия преподаватель говорил: «Сегодня задание полегче, даю свой вариант». Я думал: «Опять два д/з делать». Зато сильно прокачиваешь навыки.

Учите SQL

SQL очень востребован. Его часто спрашивают на собеседованиях, по нему дают тестовые задания и требуют знания операторов Join и Select, поэтому подучите. Простого понимания здесь не хватит. Я лично несколько раз завалился на собеседовании из-за слабых знаний SQL, потому что не могу делать сложные вещи, только простые. В GeekBrains базы данных учат на видеокурсе без домашних заданий, но не хватает обучения с д/з и обратной связью от преподавателя. Можно еще программу по PostgreSQL добавить. Это мощная вещь, и SQL сейчас в тренде. MySQL тоже спрашивают, но реже.

Освойте Git

Советую сразу изучить Git, прямо с первых уроков, тем более это бесплатный курс. Чтобы в нем быстро работать, придется набить руку, а на это нужно время. Я сначала сильно сопротивлялся, не хотел осваивать. Сейчас без него никак. Я даже д/з делал в нем. Подключил Gitlab, все стало по-нормальному, как в жизни.

Найдите наставника

В учебе и работе мне помогает старший брат. Он — опытный программист, кодит на Python, C++ и других языках. Раньше занимался разработкой беспилотной складской техники, сейчас — в проекте по беспилотным автомобилям.

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

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

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

Набивайте руку

Это важный совет — набивайте руку постоянно. Например, смотришь занятия с Алексеем Кадочниковым — все понятно. Но то, что он делает за пять секунд, у меня занимает за час. Скорость просто не сопоставима! Посидишь, все сделаешь, переделаешь, прочитаешь два раза, потом тестируешь. Это занимает время, и скорость низкая. Советую всем как можно больше практиковаться. Один студент мне сказал, что прочитал несколько книг про ООП, но так и не разобрался. Пока кодить не начнешь, не поймешь. После того как что-то прочитал и изучил, надо закрепить знания, написать  программу самому.

Во всем не сможешь стать специалистом. У меня на работе пришлось использовать фронтенд, бекенд, Python и JavaScript. Всего по чуть-чуть, и нигде не идеально. Начнешь следить за фронтендом — в Python отстанешь. Будешь углубляться в JavaScript — остальное забудешь. Был у меня опыт работы на JS, но стану ли я еще писать на нем? Сомневаюсь. Поэтому лучше не тратить время, а развиваться в одной области. Тогда и знать будешь больше, и КПД будет выше. В итоге станешь профи.

Идите к профессионалам

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

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

Держите резюме в топе

Я получаю много приглашений от работодателей, потому что мое резюме находится наверху списка как новое. Яжпрограммист, написал небольшую программу-клиент, которая по API стучится на сайт HH и обновляет резюме каждые четыре часа. Например, сегодня у меня было 18 просмотров, а с начала года — 800.

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

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

Готовьтесь к тестовым заданиям

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

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

Потренируйтесь в ответах

Изредка попадаются компании, которые не дают практические задания, а проверяют знание теории. На одном собеседовании меня просто спрашивали. У интервьюеров была табличка по тематикам и список вопросов по каждой теме. Например: «Что такое регулярные выражения?».

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

Ходите на собеседования

Собеседование — это всего лишь переговоры. Чем чаще вы будете практиковаться, тем лучше сможете их проходить. Например, Алексей Кадочников говорит, что прошел порядка 100 собеседований. Мне до него далеко, но на интервью я бываю часто.

Ходите на собеседования, даже если не ищете работу. Это возможность «пощупать» рынок, пообщаться. Собеседования расширяют кругозор, позволяют узнать о востребованных направлениях. И потом, неизвестно, что будет завтра. Руководство переиграло бизнес-стратегию, сократило персонал — и вот вам уже нужно искать работу.

Знакомьтесь

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

Пройти обучение

5 июл 18, 16:10
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

10 свежих книг по Python для новичков

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

Но есть темы вечные. Одна из них — Python. Оно и понятно, язык прекрасно подойдёт тем, кто с программированием не знаком вовсе, изучить все основные библиотеки можно за пару недель, а возможности практически не ограничены. Илья Бубнов заглянул на электронные полки магазина Amazon, чтобы посмотреть, что полезного было выпущено или перевыпущено по Python в первой половине 2018 года.  

Computer Programming for Beginners: Fundamentals of Programming Terms and Concepts, Nathan Clark

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

Она прекрасно подойдёт тем, кто вообще ничего не понимает в программировании. Всего в двухстах страницах очень лаконично, но вместе с тем понятно описано:

  • Все основные термины программирования с определениями.
  • Что такое состояния, операторы, функции, области видимости и использования.
  • Как выглядят программы в разных языках: структура, сборка и отладка.
  • Что такое ООП, чем оно отличается от функционального программирования, и когда что применять.
  • Как работать с памятью: запись, управление, очистка, обращение.

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

Python Programming: For the Beginners , Navi Feroz

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

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

Python Programming: A Step By Step Guide For Beginners, Brian Jenkins

Эта книга больше подойдёт тем, кто не хочет углубляться в дебри теории, а постигать новый язык, строго следуя шагам от установки до написания первой серьёзной программы на Python 3. Разумеется, это не та книга, которую можно изучать вдали от компьютера.

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

Python: - The Bible- 3 Manuscripts in 1 book: -Python Programming For Beginners -Python Programming For Intermediates -Python Programming for Advanced, Maurice J. Thompson

Собрание из трёх книг, которое придётся по душе тем, кто уверен, что его будущее будет связано с Python. Каждая часть рассчитана на определённый уровень подготовки. Заявленная длительность обучения по этому руководству — 21 день. Однако не стоит думать, что этого времени хватит, чтобы стать готовым специалистом.

В первой части рассматриваются базовые вопросы:

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

Вторая и третья части раскрывают более глубокие вопросы, например:

  • Как в Python организована работа с памятью?
  • Как выглядит ООП в Python?
  • Как надо отлаживать и тестировать программы?
  • Что такое итераторы и генераторы? Как их использовать?

Это лишь малый перечень рассматриваемых тем — в «Библии» есть ответы на все вопросы по языку, но ровно в том объёме, который можно уместить всего в три книги.

Python Programming: The Basic, Blackhat, Intermediary and Advanced Guide to Python Programming, Richard Ozer

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

Python Machine Learning: A Guide For Beginners, Leonard Eddison

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

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

Python Programming Illustrated For Beginners & Intermediates:: “Learn By Doing” Approach-Step By Step Ultimate Guide To Mastering Python: The Future Is Here!, William Sullivan

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

Coding: Raspberry Pi &Python: A Guide For Beginners, Leonard Eddison

Ещё одна очень качественная книга от Эддисона, состоящая из двух частей. Первая посвящена ликбезу по Python — её вполне можно использовать в связке с вышеуказанной книгой “Python Machine Learning…”. Вторая часть — познание с помощью Python возможностей одной из самых популярных гиковских платформ. В целом, это очень удобное настольное руководство для тех, кто решил создать своего робота или сделать собственный дом чуть умнее.

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

Coding: The Bible: 2 Manuscripts - Python and Raspberry PI, Larry Lutz

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

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

Machine Learning: Step-by-Step Guide To Implement Machine Learning Algorithms with Python, Rudolph Russell

Завершим наш обзор ещё одной книгой по актуальной теме — машинному обучению. В отличие от книги Эддисона, здесь изначально предполагается, что у вас есть знания и опыт работы с Python. Книга придётся по душе всем, кому близка тема искусственного интеллекта и больших данных, но из-за обилия примеров с использованием таких библиотек, как pandas, matplotlib и sklearn, особенную ценность она представляет для питонистов. Здесь огромное количество иллюстраций и примеров кода (насколько это возможно в 100-страничной книге), а также пояснений, посредством которых автор объясняет основные алгоритмы обработки данных. В целом, это одна из лучших книг по МО на Python.

А какую свежую книгу по этому языку посоветуете вы?

Пройти обучение

3 июл 18, 16:06
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0
Темы с 11 по 20 | всего: 26

Последние комментарии

нет комментариев
Читать

Поиск по блогу

Люди

7 пользователям нравится сайт lena2018.mirtesen.ru