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

Сейчас нет времени учиться науке о данных, аналитике или инженерии. Быстрый поиск по Udemy показывает более 2000 результатов для курсов по данным. Люди даже составили свои собственные магистерские программы в области науки о данных, полностью состоящие из бесплатных онлайн-курсов.

По моему опыту работы инженером-самоучкой по данным, прохождение десятков массовых открытых онлайн-курсов (МООК) - не лучший подход. У меня это не сработало.

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

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

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

Сегодня я занимаюсь аналитикой в ​​Milk Bar, популярной компании, занимающейся выпечкой и интернет-магазином десертов. Большинство навыков, которыми я использую сегодня, я приобрел, работая над проектами, которые мне небезразличны, а не копаясь в очередном клоне Coursera.

Вот почему проектное обучение так эффективно.

Найти мотивацию сложнее, чем информацию

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

Интернет полон учебных пособий и МООК. Но если вы заняты профессиональным изучением данных по ночам и в выходные, у вас, вероятно, нет времени или интереса, чтобы прочитать 45-минутную лекцию, наполненную содержанием, которое вы, возможно, не помните или даже не нуждаетесь.

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

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

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

  • Полезность: «Это упростит мне жизнь и сэкономит время».
  • Страсть: «Это решит проблему, которая меня очень волнует».
  • Любопытство: «Этот набор данных меня действительно заинтриговал, и я хочу изучить его подробнее».
  • Соревнование: «Я хочу выиграть этот приз и победить других конкурентов».

Слабые стороны проектного обучения по сравнению с онлайн-курсами

Проектное обучение - это еще не все розы. У этого стиля обучения есть несколько важных недостатков.

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

  • Труднее быть структурированным. При обучении на основе проектов вы одновременно являетесь студентом и разработчиком учебной программы. Легко начать с середины материала случайно или выбрать проект, который слишком сложен для вашего текущего уровня навыков. Руководящий принцип: подумайте, прежде чем печатать.
  • Труднее быть всеобъемлющим. Обучение на основе проектов по своей сути специфично - вы приобретаете только те навыки, которые необходимы для создания проекта. Вы можете упустить другие навыки, которые необходимо освоить в вашей области. Руководящий принцип: Google с определенной целью.
  • Труднее понять, как выглядит чистый код. Легко усвоить вредные привычки или стиль, потому что у вас нет людей, проверяющих вашу работу, и у вас не так много ориентиров для чистого кода. Руководящий принцип: пишите код, который читается как роман.
  • Труднее получить экспертную оценку. Самостоятельное обучение может быть немного одиноким, и вы упускаете цикл положительной обратной связи, который возникает из-за того, что ваша работа оценивается и хвалится. У вас также нет организации или специалиста в данной области, который бы поручился за ваши навыки или вашу работу, если вы не поделитесь своей работой напрямую. Руководящий принцип: создавайте портфолио и делитесь своими работами.

Подумайте, прежде чем печатать

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

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

Это не обязательно должен занимать много времени, но он должен быть целенаправленным и продуманным.

Разделите свой проект на части и нарисуйте его

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

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

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

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

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

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

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

Составьте план навыков, которые вы разовьете, выполняя каждое задание.

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

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

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

Тем не менее, я считаю, что этот шаг помогает мне, когда я начинаю учиться и у меня возникают такие вопросы, как:

  • «Где мне искать учебные пособия или примеры?»
  • «Правильно ли я вообще гуглил? Если бы я знал, как это на самом деле называется, я бы лучше знал, как его искать… »
  • «Какие пакеты обычно используются для такого рода вещей? Для чего мне следует ознакомиться и прочитать документацию? »

Используя наш пример создания веб-парсера, мы могли бы придумать следующее:

  • Загрузите файл: прочтите документацию к пакету requests, узнайте, как использовать Инструменты разработчика Chrome для проверки HTML-кода, узнайте о кодах ответа HTTP.
  • Извлеките соответствующую информацию: узнайте, как загрузить CSV в Python, узнайте о фреймах данных Pandas и о том, как их фильтровать, узнайте, как создавать и сохранять файлы в Python.
  • Запланируйте запуск парсера в автоматическом режиме: узнайте, как запланировать фоновый процесс с помощью cron.

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

Возможно, построить нейронную сеть с нуля и развернуть ее на Google Cloud Platform нереально. Но научиться развертывать готовую модель вполне реально.

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

Google с целью

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

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

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

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

Я думаю о поиске в Google с целью (или, в более широком смысле, о поиске помощи) как о воронке.

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

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

Начните со статей из Medium, блогов или руководств.

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

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

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

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

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

Определите соответствующие пакеты и инструменты и прочтите их документацию

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

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

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

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

Почему? Скорее всего, автор пакета, вероятно, гораздо лучше разбирается в проблеме, которую вы пытаетесь решить, чем вы. Я вспоминаю часы, которые потратил на сборку мебели из ИКЕА. Никто в здравом уме не пошел бы на Quora, чтобы спросить, как построить свой стол, если бы перед ним были инструкции от производителя!

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

Опирайтесь на сайты вопросов и ответов, которые помогут вам решить тактические задачи

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

Если у вас возникла тактическая проблема (например, «Я не понимаю, почему я получаю эту ошибку» или «Я не получаю результат, которого ожидал бы от этого»), лучшего места для получения ответов нет.

Напишите код, который читается как роман

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

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

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

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

Не соглашайтесь на "это работает"

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

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

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

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

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

Следуйте стилевым принципам для выбранного вами языка

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

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

Взгляните на соответствующее руководство по стилю для вашего языка (см. PEP 8 для Python или Руководство по стилю Google R). Применяйте их основные рекомендации на практике.

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

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

Если бы младший разработчик попросил меня о работе и поделился портфолио GitHub и профилем Medium с интересными проектами, которые были тщательно задокументированы, меня бы не волновало содержание их резюме. Аналитика - это новая область, и самая востребованная способность - это способность выполнять свою работу.

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

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

Напишите сообщение в блоге о своем проекте

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

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

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

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

Поделитесь своим проектом в своей сети

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

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

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

Распространять любовь! Если после прочтения этой статьи вы захотели создать что-нибудь крутое, пришлите мне ссылку в LinkedIn. Я бы с удовольствием посмотрел. Удачи и счастливого строительства!

Если вам понравилась эта статья, пожалуйста, дайте ей несколько аплодисментов (по шкале от 1 до 50) ниже! Подпишитесь на меня здесь, чтобы узнать больше об инженерии данных и аналитике в малых и средних компаниях.