Русский
Русский
English
Статистика
Реклама

Самообразование

Pet-проект для джуна. Или зачем и как выбрать pet project. (личный опыт)

23.02.2021 14:15:47 | Автор: admin

Предисловие

Привет Хабр! Эта публикация написана джуном для джунов (но возможно и специалисты более высокого уровня что-то найдут для себя / своих падаванов).

Зачем нужны pet проекты?

Для саморазвития как разработчика и закрепления изученного материала.

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

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

Для джуна без постоянного места работы, pet проект заменяет тут самую работу (со стороны разработки). Вы ставите себе задачу/цель и делаете всё возможное что бы её выполнить. При разработке Вы ещё глубже погружаетесь в тему, а иногда находите новые объекты для изучения.

Суммируя pet проекты нам нужны для:

  • изучения / закрепления нового материала;

  • получения удовольствия от разработки чего-то интересного лично Вам;

  • пополнения своего портфолио;

  • (bonus) есть шанс что Ваш pet проект может кому-то приглянуться и тогда из этого можно получить финансовую выгоду.

Как выбрать и на что обратить внимание?

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

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

Технологии

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

Дизайн

Тут все зависит от человека и ситуации. Есть два варианта:

  1. Запариться и сделать крутейший дизайн.

    Плюсы:

    • lvl up как дизайнера;

    • обычно свой дизайн очень приятен;

    • так как это собственный макет Вы в нём хорошо ориентируетесь и ещё на этапе дизайна продумываете некоторые фичи.

    Минусы:

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

  2. Найти готовый дизайн и работать с ним.

    Плюсы:

    • быстро (хотя поиск может затянуться, об этом ниже);

    • не нужно отвлекаться на дизайн.

    Минусы:

    • не всегда можно найти дизайн для Вашей задумки, особенно если она не типичная;

    • готовые бесплатные макеты не всегда красивые.

Идея

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

Вот пару вечно актуальных примеров:

  • список задач;

  • список задач;

  • менеджер покупок;

  • сайт портфолио;

  • кино сайт;

  • калькулятор;

  • блог;

  • магазин чего-либо.

Личный опыт

В этом блоке я раcскажу как придумывались / создавались мои pet проекты.

Начало (AniList)

Шёл июль 2020 года. Спустя семестр изучения JavaScript'а в колледже я решил изучить какой-то фреймворк. Выбор пал на React. Через пару дней ознакомления с фреймворком я наткнулся на серию видеороликов по разработке веб-приложения пиццерии на ютуб канале Archakov Blog. И решил сразу же применять изученное в видео на реальном проекте, но просто переписывать код из видео в IDE было не интересно. По этому я решил делать аниме список.

Выше я писал про два варианта получения дизайна для проекта. Какой же из вариантов выбрал я при создании макета? Оба. Для начала я зашёл на уже существующие сайты с такой-же тематикой потом пролистал Behance и собрал своего "франкенштейна" из собственных идей и кусков уже готовых дизайнов.

Скриншот проекта из FigmaСкриншот проекта из Figma

По готовому макету я понял что мне нужно будет где-то брать информацию об аниме (API, AJAX), где-то хранить её (Redux), а также как-то организовать авторизацию и хранение информации о пользователях (Firebase) + работа с версиями файлов(GIT, GitHub). В итоге мне предстояло ознакомиться как минимум с 5 новыми технологиями помимо React.

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

ToDo list

Дизайн ToDo appДизайн ToDo app

Следующим проектом должен был стать todo list. Мой одногруппник (тоже начинающий фронтендер) должен был делать frontend на Angular, а я (неожиданно) backend. Тут мне пристояло погрузиться в мир backend'а и может не изучить, но хорошо так ознакомиться с NodeJS, Express, MongoDB, mongoose, cors, dotenv, способами авторизации, деплоем на Heroku и ещё глубже понять работу API.

По итогу вышло так что и я и мой товарищ каждый для себя писали back и front end.

Остальное

Потом было ещё пару проектов. Вкратце напишу что для себя я вынес из них.

Приложение погоды:

  • рисование на canvas'е;

  • работа с геолокацией;

  • анимация React компонентов.

Shedaily (front & back end) - приложение которое парсило расписание из сайта колледжа где я учусь и приводило его в приятный вид:

  • парсинг информации из сайта;

  • работа с Excel таблицами в NodeJS.

Terminal website - вдохновившись сайтом dodo.dev создал сайт с контактами:

  • SCSS;

  • Gulp.

Менеджер подписок:

  • MobX;

  • переключение темы.

Магазин аксесcуаров (backend) (в разработке):

  • более глубоко познал MongoDB + mongoose;

  • GraphQL.

Портфолио (на стадии дизайна):

  • JAM stack;

  • Gatsby;

  • создание кастомного курсора.

Заключение

Недавно меня постигла идея переписать свой первый pet project (Аниме список), но теперь с новыми навыками: backend на NodeJS, Express, GraphQl вместо Firebase, и frontend React + Apollo Client, ну и дизайн по красивше сделать. Эта мысль является результатом моего прогресcа который я постиг благодаря pet проектам.

Всякое дело совершенствуется овладением техники. Всякий навык достигается упражнением. - Гиппократ

Подробнее..

Учиться и работать как разработчику поставить образование на рельсы

27.01.2021 16:20:11 | Автор: admin

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

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

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

Шаг 1. Оценить себя

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

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

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

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

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

Шаг 2. Удерживать фокус

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

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

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

Шаг 3. Поддерживать интерес

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

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

Также необязательно начинать с начала: часто то, с чего принято погружаться в тему, бывает скучным или оторванным от реальности. Я начинаю сразу с интересного, постепенно возвращаюсь к пропущенным урокам.

Шаг 4.1. Учиться на работе

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

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

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

Результаты показали, что точность ответов на вопросы теста была выше у той группы, которая должна была объяснять свои действия во время решения задач: Почему вы выбрали этот метод?, Почему вы считаете, что здесь должно быть число 7? и так далее. Объяснение после теста тоже хорошо сказалось на итогах. Подробнее об этом можно почитать в статье.

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

Шаг 4.2. Учиться вне работы. Когда?

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

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


Расскажите, получается ли у вас постоянно учиться чему-то новому. Как вы решаете проблему прокрастинации и концентрации?

Подробнее..

Зачем айтишнику развивать личный бренд? 5 причин, 3 условия, 4 инструмента

13.05.2021 14:15:47 | Автор: admin

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

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

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

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

Очень просто! Начать можно с того, чтобы начать делиться своими экспертными материалами в социальных сетях и на тематических площадках. Но не только! Ваша личная жизнь, Ваш lifestyle это все тоже часть Вашего личного бренда.

Зачем оно нужно Вам?

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

Какие бывают сложности?

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

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

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

Попробуйте

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

А дальше?

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

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

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

Откуда пошло понятие личного бренда?

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

В более современное время этого понятия ярко коснулся в 1997 году журналист Том Петерс в статье The Brand Called You:

Независимо от возраста, независимо от должности, независимо от того, в каком бизнесе мы находимся, все мы должны понимать важность брендинга. Мы являемся генеральными директорами наших собственных компаний: Me Inc. Чтобы быть в бизнесе сегодня, наша самая важная работа-быть главным маркетологом для бренда под названием You.

Это так просто и так трудно. И это неизбежно.

Зачем развивать личный бренд айтишнику?

Ок, сухо несколько фактов:

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

  2. Со временем Вы даже сможете уйти из найма и построить свою команду со своими правилами! Вас уже будут знать, как эксперта, к Вам будет доверие!

  3. Вы сможете путешествовать, жить на море и вообще, где угодно! Если Вы еще этого не сделали, конечно

  4. Social Proof. Если у Вас здесь большое сопротивление, то это Ваша самая большая точка роста! Если Вы интроверт по своей сути, то это не значит, что Вы не можете преломить и изменить ход своей истории. Даже интроверты сейчас развивают личный бренд!

  5. Признание. Овации. О Вас будут говорить, Вами будут восхищаться (но и критиковать, конечно, тоже).

Если я Вас не убедил ни на 1%, то напишите мне 5 доводов, чтобы не делать этого, не развивать личный бренд, мне всегда интересно обратное мнение!

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

Какие условия нужно соблюдать для развития личного бренда:

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

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

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

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

Мощные инструменты для раскачки личного бренда:

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

  2. СМИ, тематические издания. Далеко не все люди любят что-то писать, тем более большие статьи, но этот способ будем лучшим подтверждением Вашей экспертности. Дальше я расскажу, как найти площадку для публикации.

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

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

Нам нужен план

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

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

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

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

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

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

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

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

  3. Также Вы можете озадачиться поиском других ресурсов, где можно свободно публиковаться (например, есть авторитетные онлайн-площадки Spark, Vc, Тиньков Журнал и много много других). Смотрите порталы для айтишников!

  4. Вы удивитесь, но Вы даже сможете опубликоваться в Forbes, Деловом Мире или Газета.ру

Где брать фотографии?

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

Как писать посты?

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

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

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

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

Как начать развивать личный бренд?

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

  2. Составить контент-план, план по развитию и план по своим публикациям

  3. Начать систематически следовать плану, выработать привычку добывать новые фото и писать новые тексты

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

Какие бывают сложности

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

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

  3. Нет сил. Обычно в начале дня у нас самое ресурсное состояние. Поэтому занимайтесь личным брендом именно в это время. Тогда у Вас всегда будут силы!

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

Что еще полезного можно почитать?

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

Почему бы не попробовать и Вам?

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

Подробнее..

Календарь онлайн-событий в сфере IT на июль 2020

01.07.2020 00:06:33 | Автор: admin
Если у вас в планах создать нечто гениальное до конца лета, июль точно стоит посвятить самообразованию. Собрала для вас свежую онлайн-афишу IT-мероприятий на ближайший месяц.

1 июля, 19:00 Вебинар Многопоточная очередь сообщений на С++

1 июля, 20:00 Вебинар Принципы мобильного тестирования

2 июля, 18:00 Онлайн-трансляция для тимлидов

2 июля, 17:00 Backend&Test Meetup

2 июля, 17:00 Innopolis Mobile MeetUp

3 июля, 13:00 Mobile Webinar Android

6 июля, 19:00 Онлайн-дискуссия о философии искусственного интеллекта

7 июля, 16:00 Безопасность WEB: Уязвимости авторизации

7 июля, 19:00 Онлайн-трансляция UX дизайн и архитектура

9 июля, 10:00 Бизнес-завтрак Управление мобильностью

15 июля, 18:00 Online IT HR meetup

16 июля, 12:00 Анализ данных с помощью Yandex Cloud Functions и Yandex Data Proc

16 июля, 20:00 Революционные нейронные сети 2020 года

21 июля, 16:00 Безопасность WEB: Ошибки бизнес-логики

22 июля, 18:00 Мини-Гипербатон Яндекса о качестве локализации программных продуктов

30 июля, 17:00 Geekhub Big Data Online Meetup
Подробнее..

Перевод Fastcore недооцененная но полезная библиотека Python

21.10.2020 16:06:58 | Автор: admin

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



Предыстория


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

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

Чем интересна fastcore?


  1. Ознакомление с идеями из других языков прямо в Python: Я постоянно слышу, что полезно изучать другие языки, чтобы стать лучшим программистом. Мне было трудно изучать другие языки с практической точки зрения, потому что я не мог применять их на работе. Fastcore расширяет Python, чтобы включить в него паттерны из разных языков: Julia, Ruby и Haskell. Теперь, когда я понимаю эти инструменты, у меня появилась мотивация изучать другие языки.
  2. Новый набор прагматичных инструментов: fastcore включает в себя утилиты, позволяющие писать более лаконичный выразительный код и, возможно, решать новые задачи.
  3. Изучение Python: fastcore расширяет Python, в этом процессе проявляются многие продвинутые понятия. Для мотивированных людей это прекрасный способ увидеть многое о внутренней работе языка.


Пройдемся по fastcore ураганом


Вот некоторые привлекшие мое внимание вещи, которые возможно сделать с помощью fastcore.

Делаем kwargs прозрачными


Я немного поеживаюсь каждый раз, когда вижу функцию с аргументом kwargs. Это потому, что kwargs означает обфускацию API. Мне нужно прочитать исходный код, чтобы понять, какие параметры допустимы. Посмотрим на пример ниже:

def baz(a, b=2, c =3, d=4): return a + b + cdef foo(c, a, **kwargs):    return c + baz(a, **kwargs)inspect.signature(foo)

<Signature (c, a, **kwargs)>

Без чтения исходного кода может быть трудно узнать, что foo также принимает дополнительные параметрыb и d. Это можно исправить с помощью delegates:

def baz(a, b=2, c =3, d=4): return a + b + c@delegates(baz) # this decorator will pass down keyword arguments from bazdef foo(c, a, **kwargs):    return c + baz(a, **kwargs)inspect.signature(foo)

<Signature (c, a, b=2, d=4)>

Поведение этого декоратора настраивается. Например, вы можете передать аргументы и сохранить при этом kwargs:

@delegates(baz, keep=True)def foo(c, a, **kwargs):    return c + baz(a, **kwargs)inspect.signature(foo)

<Signature (c, a, b=2, d=4, **kwargs)>

Аргументы можно исключать. Например, ниже мы исключаем из делегирования аргумент d:

def basefoo(a, b=2, c =3, d=4): pass@delegates(basefoo, but= ['d']) # exclude `d`def foo(c, a, **kwargs): passinspect.signature(foo)

<Signature (c, a, b=2)>

Возможно делегирование между классами:

class BaseFoo:    def __init__(self, e, c=2): pass@delegates()# since no argument was passsed here we delegate to the superclassclass Foo(BaseFoo):    def __init__(self, a, b=1, **kwargs): super().__init__(**kwargs)inspect.signature(Foo)

<Signature (a, b=1, c=2)>

Для получения дополнительной информации прочтите документацию о delegates.

Избегаем шаблонного кода при установке атрибутов экземпляра


Вы когда-нибудь задумывались, можно ли избежать шаблонного кода, связанного с установкой атрибутов в __init__?

class Test:    def __init__(self, a, b ,c):         self.a, self.b, self.c = a, b, c

Ой! Это было больно. Посмотрите на все эти повторяющиеся имена переменных. Неужели действительно нужно повторять всё это при определении класса? Уже нет! Посмотрите на store_attr:

class Test:    def __init__(self, a, b, c):         store_attr()t = Test(5,4,3)assert t.b == 4

Вы также можете исключить определенные атрибуты:

class Test:    def __init__(self, a, b, c):         store_attr(but=['c'])t = Test(5,4,3)assert t.b == 4assert not hasattr(t, 'c')

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

P.S. Вы можете подумать, что классы данных тоже позволяют избежать такого шаблонного кода. Хотя в некоторых случаях это верно, store_attr более гибок. 1

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

Избегаем бойлерплейта подклассов


Одна вещь, которую я ненавижу в python связанный с подклассами шаблонный код __super__ ().__init__ (). Например:

class ParentClass:    def __init__(self): self.some_attr = 'hello'class ChildClass(ParentClass):    def __init__(self):        super().__init__()cc = ChildClass()assert cc.some_attr == 'hello' # only accessible b/c you used super

Мы можем избежать такого кода, используя метакласс PrePostInitMeta. Как? Определив новый класс под названием NewParent обертку вокруг ParentClass:

class NewParent(ParentClass, metaclass=PrePostInitMeta):    def __pre_init__(self, *args, **kwargs): super().__init__()class ChildClass(NewParent):    def __init__(self):passsc = ChildClass()assert sc.some_attr == 'hello' 

Диспетчеризация типа


Диспетчеризация типа или множественная диспетчеризация позволяет изменить поведение функции в зависимости от типов получаемых входных данных. Это характерная особенность некоторых языков программирования, таких как Julia. Вот концептуальный пример того, как работает множественная диспетчеризация в Julia. В зависимости от типов входных данных x и y возвращаются разные значения:

collide_with(x::Asteroid, y::Asteroid) = ... # deal with asteroid hitting asteroidcollide_with(x::Asteroid, y::Spaceship) = ... # deal with asteroid hitting spaceshipcollide_with(x::Spaceship, y::Asteroid) = ... # deal with spaceship hitting asteroidcollide_with(x::Spaceship, y::Spaceship) = ... # deal with spaceship hitting spaceship

Диспетчеризация типа может быть особенно полезна в Data Science, где возможно разрешить различные типы ввода (т.е. массивы numpy и фреймы данных Pandas) в обрабатывающей данные функции. Типовая диспетчеризация позволяет иметь общий API у выполняющих похожие задачи функций. К сожалению, Python не поддерживает такую функциональность из коробки. К счастью, у нас есть декоратор @typedispatch. Этот декоратор полагается на подсказки типа, чтобы маршрутизировать входные данные к правильной версии функции:

@typedispatchdef f(x:str, y:str): return f'{x}{y}'@typedispatchdef f(x:np.ndarray): return x.sum()@typedispatchdef f(x:int, y:int): return x+y

Ниже показывается диспетчеризации типа при работе для функции f:

f('Hello ', 'World!')

'Hello World!'

f(2,3)

5

f(np.array([5,5,5,5]))

20

У этой функциональности есть ограничения (также как у других способов использования этой функции) и о них вы можете прочитать здесь. В процессе изучения типовой диспетчеризации я также нашел библиотеку Python под названием multipledispatch, написанную Mathhew Rocklin создателем Dask.

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

Лучшая версия functools.partial


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

test_input = [1,2,3,4,5,6]def f(arr, val):     "Filter a list to remove any values that are less than val."    return [x for x in arr if x >= val]f(test_input, 3)

[3, 4, 5, 6]

Из этой функции вы можете создать новую функцию с помощью partial, которая устанавливает значение по умолчанию: 5:

filter5 = partial(f, val=5)filter5(test_input)

[5, 6]

Одна из проблем с partial заключается в том, что она удаляет исходную строку документации и заменяет ее общей строкой документации:

filter5.__doc__

'partial(func, *args, **keywords) - new function with partial application\n    of the given arguments and keywords.\n'


fastcore.utils.partialler исправляет это и обеспечивает сохранение строки документации таким образом, чтобы новый API был прозрачным:

filter5 = partialler(f, val=5)filter5.__doc__

'Filter a list to remove any values that are less than val.'

Композиция функций


Распространенный в функциональных языках программирования метод композиция функций, когда вы связываете несколько функций вместе, чтобы достичь определенного результата. Это особенно полезно в различных преобразований данных. Рассмотрим игрушечный пример, где у меня три функции: первая удаляет элементы списка меньше 5 (из предыдущего раздела), вторая добавляет 2 к каждому числу, третья суммирует все числа:

def add(arr, val): return [x + val for x in arr]def arrsum(arr): return sum(arr)# See the previous section on partialleradd2 = partialler(add, val=2)transform = compose(filter5, add2, arrsum)transform([1,2,3,4,5,6])

15

Почему это полезно? Вы можете подумать, что я могу сделать то же самое вот так:

arrsum(add2(filter5([1,2,3,4,5,6])))

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

def fit(x, transforms:list):    "fit a model after performing transformations"    x = compose(*transforms)(x)    y = [np.mean(x)] * len(x) # its a dumb model.  Don't judge me    return y# filters out elements < 5, adds 2, then predicts the meanfit(x=[1,2,3,4,5,6], transforms=[filter5, add2])

[7.5, 7.5]

Более подробную информацию о compose читайте в документации.

__repr__, но полезнее


В Python __repr__ помогает получить информацию об объекте для логирования и отладки. Ниже приведено то, что вы получите по умолчанию, когда определите новый класс. Примечание: мы используем store_attr, который обсуждался выше.

class Test:    def __init__(self, a, b=2, c=3): store_attr() # `store_attr` was discussed previouslyTest(1)

<__main__.Test at 0x7ffcd766cee0>

Мы можем использовать basic_repr, чтобы быстро получить более разумное значение по умолчанию:

class Test:    def __init__(self, a, b=2, c=3): store_attr()     __repr__ = basic_repr('a,b,c')Test(2)

Test(a=2, b=2, c=3)

Обезьяньи патчи через декоратор


Это может быть удобно для обезьяньих патчей с помощью декоратора, что особенно полезно, когда вы хотите пропатчить импортируемую внешнюю библиотеку. Мы можем использовать декоратор @patch из fastcore.foundation вместе с подсказками типа примерно так:

class MyClass(int): pass  @patchdef func(self:MyClass, a): return self+amc = MyClass(3)

Теперь в MyClass есть дополнительный метод под названием func:

mc.func(10)

13

Я еще не убедил вас? Тогда покажу вам еще один пример такого патча в следующем разделе.

pathlib.Path


Увидев эти расширения в pathlib.path, вы больше никогда не будете работать с vanilla pathlib! В pathlib добавлен ряд дополнительных методов, таких как:

  • Path.readlines: то же, что with open ('somefile', 'r') as f: f.readlines ()
  • Path.read: то же, что with open ('somefile', 'r') as f: f.read ()
  • Path.save: сохраняет файл как pickle
  • Path.load: загружает файл pickle
  • Path.ls: показывает содержимое пути в виде списка.
  • и так далее.

Подробнее об этом здесь. Вот демонстрация ls:

from fastcore.utils import *from pathlib import Pathp = Path('.')p.ls() # you don't get this with vanilla Pathlib.Path!!

(#7) [Path('2020-09-01-fastcore.ipynb'),Path('README.md'),Path('fastcore_imgs'),Path('2020-02-20-test.ipynb'),Path('.ipynb_checkpoints'),Path('2020-02-21-introducing-fastpages.ipynb'),Path('my_icons')]

Подождите! Что здесь происходит? Мы только что импортировали pathlib.Path почему мы получили новую функциональность? Потому, что импортировали модуль fastcore.utils, который патчит pathlib.Path с помощью упомянутого выше декоратора @patch. Чтобы довести дело до конца и показать, чем полезен @patch, я пойду дальше и прямо сейчас добавлю еще один метод в Path:

@patchdef fun(self:Path): return "This is fun!"p.fun()

'This is fun!'

Волшебно, правда? Вот почему я пишу об этом!

Еще более лаконичный способ написать лямбду


Self с заглавной буквы S это еще более лаконичный способ написания вызывающих методы объекта лямбд. Например, создадим лямбду для получения суммы массива Numpy:

arr=np.array([5,4,3,2,1])f = lambda a: a.sum()assert f(arr) == 15

Вы можете таким же образом использовать Self:

f = Self.sum()assert f(arr) == 15

Давайте создадим лямбду, которая будет делать группировку и возвращать максимальный элемент фрейма данных Pandas:

import pandas as pddf=pd.DataFrame({'Some Column': ['a', 'a', 'b', 'b', ],                  'Another Column': [5, 7, 50, 70]})f = Self.groupby('Some Column').mean()f(df)

Another Column
Some Column
a 6
b 60

Подробнее о Self читайте в документации.

Функции блокнота


Они просты, но удобны и позволяют узнать, выполняется ли код в блокноте Jupyter, Colab или через оболочку IPython:

from fastcore.imports import in_notebook, in_colab, in_ipythonin_notebook(), in_colab(), in_ipython()

(True, False, True)

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

Замена стандартного списка


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

Лучший способ описать L сделать вид, что у list и numpy родился милый ребенок. Определите список (посмотрите на приятный __repr__, показывающий длину списка!)

L(1,2,3)

(#3) [1,2,3]

Перемешайте список:

p = L.range(20).shuffle()p

(#20) [8,7,5,12,14,16,2,15,19,6...]

Индекс [прим.перев. скорее позиция position] в списке:

p[2,4,6]

(#3) [5,14,2]

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

1 + L(2,3,4)

(#4) [1,2,3,4]

L может гораздо больше. Читайте документацию, чтобы узнать больше.

Но подождите Это еще не всё!


Есть еще кое-что, что я хотел бы показать вам, но это никак не вписываются в пост. Вот список некоторых любимых вещей, которые я не показывал в этом посте:

Утилиты


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

  • mk_class: быстро добавляет кучу атрибутов в класс
  • wrap_class: добавление новых методов в класс с помощью простого декоратора
  • groupby: похоже на groupby из Scala
  • merge: слияние словарей
  • fasttuple: кортеж на стероидах
  • Infinite Lists: полезно для увеличения размеров массивов и тестирования
  • chunked: упаковка и организация элементов

Многопроцессорная обработка


Раздел Многопроцессорная обработка расширяет соответствующую библиотеку Python, предлагая такие возможности:

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

Прокачивать себя в Python стало проще, ведь специально для хабравчан мы сделали промокод HABR, дающий дополнительную скидку 10% к скидке указанной на баннере.

image




Рекомендуемые статьи


Подробнее..

Из песочницы Итоги двух лет изучения Structure and Interpretation of Computer Programs

19.11.2020 12:06:35 | Автор: admin


Оригинал опубликован в моём блоге 11.07.20. Если я правильно понял, это не проблема.

Я считаю, что разработка ПО в значительной степени заключается в программировании на псевдокоде. Если ты представил псевдокод, то перевести его на Python, C, что угодно не проблема. Основная сложность заключается вот в этой концептуальной деятельности, а не в кодировании. Нужно знать, как подходить к тем или иным вопросам. Модульность, абстракция. Гибкость, надёжность, простота. Шаблоны проектирования. Юнит-тестирование. Ю ноу.

Есть на свете курс Структура и Интерпретация Компьютерных Программ (далее СИКП), который позиционируется как введение в Computer Science и ранее использовался в MIT для обучения первокурсников. Два года назад я с удовольствием одолел курс лекций по нему и взялся за книгу. Сначала расскажу о хорошем.

Текст повествует о штуках весьма далёких от моей ежедневной работы и позволил мне по-новому взглянуть на программирование. Функциональщина это целый мир, живущий по своим законам. Язык Лисп очень отличается от привычного мне языка Си бешеной гибкостью за счёт слабой типизации, автоматического управления памятью, возможности переопределения чего угодно во время выполнения. У меня сформировалась более разностороннее представление о том, как в принципе можно решать разные задачи. Говоря шахматным языком, я сильно пополнил свой репертуар домашних заготовок, которые пригождаются в работе (пусть и не каждый день). Упражнения заставляли мой мозг работать (временами очень интенсивно), переосмысливать и систематизировать ранее полученные знания. В общем и целом изучение СИКП сделало меня более хорошим разработчиком, расширило мой кругозор. Уверен, я стал смотреть на разные вещи более системным и зрелым взглядом.

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

А что там насчёт конкретных эффектов для работы? Я стал лучше видеть недочёты во время code review (в первую очередь, своего же кода). Полюбил маленькие функции, желательно как можно более общего вида. Стал практиковать аккуратное и уместное использование макросов иногда на Си можно осторожно сделать что-то не по правилам, и от этого все только победят. Опыт, полученный при решении упражнений из книги, помог мне в некоторых задачах по работе.

Но это одна сторона медали. Другая заключается в том, что подход этого курса к обучению можно выразить английским фразеологизмом sink or swim. Перед тобой стоит перекладина, рядом с ней задание: подтянуться 10 раз. В принципе, этого достаточно для выполнения задачи, но нельзя сказать, что такой подход приятен. Я бы сказал, он весьма выматывает! Тебя бросают в бой полуподготовленного, и часть материала ты познаёшь не на объяснениях, а на своих ошибках. Наверное, это допустимый способ обучения высокомотивированных людей, но меня-лентяя он порядком выжал. Я с трудом терпел его на протяжении 3 глав из 5 (порой я делал паузы на несколько месяцев!), сделал упражнения в них от начала и до конца, но кажется, моё терпение исчерпано.

Например, в книге нет ни слова о том, как организовать свой рабочий процесс. Нет даже приблизительного рассмотрения таких понятий, как отладка (она здесь специфическая), IDE (они здесь специфические), юнит-тесты, разбиение на файлы для повторного использования. Имеются фрагменты, где разрабатывается некая сложная система, которая будет целиком готова лишь к концу главы, а задания появляются после каждого пункта текста. Т.е. строго говоря, прочитав до страницы N, ты в ряде случаев не можешь решить задачу с этой страницы, не утащив код с последующих страниц. Код нужно тащить аккуратно, ибо в примечаниях могут обсуждаться неочевидные тонкости, а порой какой-то код приводится в качестве примера неработающей идеи. Это раздражает! Да, это прям как в реальной жизни надо самому доопределять задачу, искать что-то в интернетах, но блин Этожучебник! Я наедаюсь непростыми задачами на работе, и может, авторам стоило более педантично подойти к тексту? Ладно я, профессиональный погромист с быстрым доступом в интернеты, а как было первокурснику MIT в восьмидесятых? Уверен, несладко

Подчеркну главные плюсы книги: она позволяет получить личный опыт, набить свои шишки, подумать над сложными проблемами в общем виде. С ними непосредственно связаны минусы: она сложная и зачастую даёт тебе мало подсказок для понимания чего-то. Например, если ты имеешь какой-то боевой опыт, то знаешь, что код без юнит-тестов нельзя назвать решением, но книга тебе об этом не скажет. Надо самому до этого дойти! А как ты думал? Ну или вру, книга об этом скажет, но максимально садистским способом. У тебя будет следующее задание, опирающееся на предыдущее (такое там сплошь и рядом). Если у тебя раньше заработал один тестовый кейс и ты решил Отлично, едем дальше!, то за поворотом тебя ждёт счастливая отладка решений сразу двух заданий. Наверное, когда это произойдёт несколько раз, ты поймёшь, что делаешь что-то не так. Главное, чтобы в такие моменты ты не бросал курс, а разбирался, тогда всё будет хорошо!

Ещё одна раздражающая черта текста: задания (опять же, как и в реальной жизни) порой недостаточно хорошо определены. Я на днях делал упражнение, за полчаса набросал решение, стал перечитывать формулировку задачи. Оказалось, что если рассуждать педантично, то я выполнил его на 95%, затратив примерно 40% усилий. Большинство чуваков, с которыми я сверялся, сделали так же. Один сделал полноценно, но использовал хак из другого интерпретатора Лиспа. Я огорчился и плюнул, потеряв мотивацию продолжать в ближайшее время. Ещё раз проговорю суть проблемы: есть задания, в которых всё решается просто и логично, но только если не быть к себе строгим. Так и в реальной жизни, я понимаю, но у меня были другие ожидания от учебника. Когда делаешь упражнение в свободное время и сам себя проверяешь, то хочется решить проблему на 100%, а не достаточно хорошо для текущей итерации.

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

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

В общем и целом, я не жалею, что вписался в эту авантюру, она была для меня полезной. Тем не менее, другим людям я рекомендую поискать что-то получше. Например, на основе СИКП с учётом его ошибок (так говорят, я не проверял) недавно был сделан курс How to Design Programs. Полагаю, стоило и мне на него позариться, но время уже не отмотаешь.

P.S. Замечательную рецензию на СИКП написал Питер Норвиг.
Подробнее..

Как пять лет просидеть в саппорте и за две недели стать Python-тестировщиком

03.12.2020 14:20:34 | Автор: admin
Да-да, это будет еще одна статья про Python. Тот самый язык, который считается одним из наиболее популярных для изучения и использования. Статья будет полезна тем, кто еще только задумывается об изучении Python или делает первые шаги. Я попытаюсь описать свой опыт по изучению языка, поделюсь личными приемами, подскажу полезные и наиболее эффективные ресурсы, а также обозначу, на что бесполезно тратить время.

image


Почему я решила изучать Python


Меня зовут Маша. Мне 28 годиков, 6 из которых я провела в обычной сфере обслуживания, а еще 5 в сфере обслуживания с техническим уклоном (простыми словами саппорт). Надо ли говорить, насколько за эти годы я устала от однообразия задач? И вот, в один прекрасный момент я загорелась идеей кардинально поменять свою жизнь, для чего была поставлена цель перейти в тестировщики с применением автоматизации на Python.

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

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


Помимо самого желания сменить сферу деятельности, у меня все же был некоторый полезный багаж, а именно: высшее образование по специальности Информатика и вычислительная техника и предыдущий опыт работы инженером технической поддержки, где я тоже не стояла на месте и пыталась развиваться. У меня был стандартный набор знаний по HTTP, SQL, XML, а также небольшой опыт работы с PHP, Kotlin в связке с Selenium Webdriver. Кроме этого, я изучала теоретические основы по тестированию и пыталась их применять в работе, выполняя небольшие дополнительные задания.

Итак, цель поставлена: за две недели с нуля максимально эффективно изучить Python.

С чего все обычно начинают


Будучи дитём девяностых, я начала с запроса в поисковой системе. Пролистав блок с рекламой (к нему я вернусь чуть позже), я принялась штудировать многочисленные статьи с подборками ресурсов по изучению Python. Каждая статья состоит минимум из 10-15 отборных и наилучших ресурсов, которые обязательно нужно использовать. Много статей просто перечисляют шедевры классики по Python, и читай их потом годами.

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

Мой совет на начальном этапе не тратить время на изучение книг. Огромный объем информации, представленный в них, без практики не усваивается. В качестве справочников удобно использовать такие онлайн-ресурсы, как python.org, pythonworld.ru и подобные, где в структурированном виде можно найти необходимую информацию с примерами использования.

Хорошие практики


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

  • praktikum.yandex.ru/data-analyst и praktikum.yandex.ru/backend-developer два моих первых курса, будем считать их одним целым.

    Отличное начало, которое показало, что изучение языка может быть нескучным занятием. На этих курсах без занудства дается теоретическая часть, которую затем нужно сразу же применить практически при написании кода.
    Честно признаюсь, что я прошла только бесплатную часть курсов. Этого все равно оказалось достаточно, чтобы вдохновиться на последующее более углубленное изучение языка.
    Очень советую заглянуть на Практикум. Полезные курсы там могут найти не только начинающие. И это не реклама, а действительно мое честное мнение.
  • checkio.org англоязычный ресурс с выполнением задач в виде игры. Значительная часть задач имеет перевод на русский язык. Потрясающая возможность увидеть элегантные решения через код-ревью.

    Обычно при прохождении курсов я считала важным только выполнить полученную задачу, чтоб хоть как-то работало. Однако, chekio.org после выполнения задачи предложил мне оценить решения других учеников, где я неожиданно для себя сделала открытие, что одну и ту же простенькую задачу можно решить намного короче, элегантно используя конструкции языка.
  • hackerrank.com тоже англоязычный ресурс с преподнесением теории небольшими порциями и актуальными задачками. Запомнился четкой постановкой задач и очень строгими требованиями для зачета прохождения задачи схалтурить не получится!


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

Самый лучший способ


Итак, потратив немало времени на разные курсы, я сделала для себя простой, но важный вывод. Хочешь изучить Python найди ему применение, пиши код каждый день. Если ваша работа хоть как-то связана с обработкой данных или IT-сферой, попробуйте найти рутинную задачу, которую можно решить с помощью Python. Даже если написание скрипта займет намного больше времени, чем само выполнение действия, это уже будет большая победа. Как говорят в шутку, если действие занимает больше 1.5 секунды вашего времени напишите для него скрипт.

image

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

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

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

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

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

Что показалось менее эффективным


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

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

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

Мое мнение о платных курсах


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

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

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

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

Обучение должно быть в радость


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

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

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

  • Совет 1
    Не ограничивайте себя поиском ответов на возникшие вопросы только в том материале, который был получен во время онлайн-уроков. Время от времени пытайтесь сформулировать свой вопрос (в этом может помочь отличное пособие sitengine.ru//smart-question-ru.html) и найти ответ самостоятельно в интернете. Поверьте, в дальнейшем такие ситуации будут возникать все чаще и чаще, а умение находить нужные данные в современном информационном потоке одно из главных умений будущего программиста и тестировщика.
  • Совет 2
    Разберитесь в типах данных и их методах. Запомните, какие есть типы данных в Python и какие у них особенности. При написании собственных скриптов это поможет вам лучше понять, какой тип данных подходит под конкретный случай. Также не стесняйтесь проверять, а не существует ли нужный метод у типа данных или уже готовая библиотека для выполнения какого-либо действия.
  • Совет 3
    Заранее перед написанием кода составьте примерный план, схему или описание работы скрипта. Это позволит сэкономить огромное количество времени и сил по сравнению с подходом, когда вы сразу начинаете писать код и уже в процессе написания приходится нагромождать дополнительные фичи.
  • Совет 4
    Проверяйте код малыми порциями. Ошибаются и делают опечатки абсолютно все, поэтому я советую при написании кода как можно чаще делать проверку, что код работает так, как нужно. У меня это происходит так: я запускаю код и делаю проверку после того, как доделаю очередной блок связанного кода. Например, блок получения или обработки данных, блок с условным оператором (if) или циклом (for, while).
  • Совет 5
    Не останавливайтесь в своем развитии и стремлении получить больше знаний, чем есть сейчас. Продолжайте изучать новую информацию и шлифовать свое мастерство. Посещайте тематические конференции и вебинары. Попробуйте сходить на собеседования, чтобы получить независимую оценку со стороны. Кстати, на этом этапе могут помочь книги, о которых я, возможно, продолжу речь в своей следующей статье.


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

Из 1С в Android-разработку мой опыт перехода внутри Lamoda

14.01.2021 12:05:51 | Автор: admin
Меня зовут Виталий Хмелёв, с 2019 года я работаю в команде Аndroid-разработки в Lamoda, а до того почти семь лет проработал здесь же программистом 1C. В этой статье хочу поделиться своим опытом и дать некоторые советы, которые, я надеюсь, помогут, если вы тоже задумываетесь заняться разработкой на Android.

image

Как я попал в программирование


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

В 2012 году я пришёл в Lamoda в отдел 1С-разработки и остался в нем на целых 7 лет. В самом начале моей работы все процессы товародвижения были автоматизированы на 1С. На нём же работала наша собственная фотостудия. Это всё входило в одну большую конфигурацию, основанную на решении 1С: Комплексная Автоматизация. В ней же были бухгалтерия и кадровый учёт.

Постепенно какие-то части стали выводить из состава большой конфигурации. Первой стала фотостудия, которую переписали на PHP. Затем в компании начали внедрять Microsoft Dynamics AX, и товародвижение и бухгалтерия перешли на нее. Кадровый учёт переехал в отдельное готовое решение 1С: ЗУП.

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

Карьера складывалась успешно почему же я решил заняться чем-то другим?


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

Мне нравилась моя работа. Хотелось глубже погружаться в разработку, профессионально расти в программировании. Я читал книги, статьи, но из-за особенностей самого языка 1С, и среды разработки, многие концепции для него просто неприменимы. По сравнению с другими популярными языками PHP, Java, С 1С достаточно простой, и в нем много чего нет.

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

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

В итоге я признался себе, что да, мне нравится 1С, но не настолько, чтобы идти с ним до уровня Эксперта =)

Как я выбирал, в какую область перейти?


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

Хотелось выбрать мощный язык, не нишевый. Чтобы можно было использовать удобную среду разработки в 1С с этим не очень. Есть решение 1С:EDT, которое позволяет приложить некоторые дополнительные усилия и пользоваться не встроенной средой (Конфигуратором), а Eclipse. Однако в 2018 году мы посчитали его достаточно сырым и неподходящим для каждодневной разработки, поэтому в Lamoda мы продолжали писать в Конфигураторе.

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

Подготовка к переходу самообучение


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

Сразу решил, что платные курсы проходить не буду, но старался, чтобы мое самообучение было достаточно структурированным. Начал с курса Гугла, потом добавил ютуб курсы от Яндекса и Mail.ru, плюс книги (в основном по Java). Конечно, изучал официальные гайды по Android от Google их много, они качественные и постоянно обновляются. В какой-то момент Google официально рекомендовал Kotlin как язык для разработки под Android. Я понимал, что работать буду, скорее всего, на Kotlin, и добавил его в свою программу обучения.

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

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

Переход на новое (?) место работы


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

Хотелось узнать, как вообще выглядит Android-разработка в Lamoda. Я установил и изучил приложение компании как пользователь, но хотелось больше узнать про техническую сторону. В Lamoda есть TechTalks встречи внутри компании, где разные команды выступают с докладами о том, чем они занимаются, какие технологии используют. Они открыты для всех желающих, и я стал слушать доклады команды Android-разработки. После внутренних выступлений специалисты с этими же докладами идут во внешний мир. Вот, например, запись того доклада, что я слушал, но уже с конференции Mosdroid. Из докладов я узнал, какие у них в принципе задачи, а заодно стал изучать именно те технологии, которые используются в компании это помогло мне в дальнейшем с переходом.

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

На новом месте


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

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

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

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

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

Мне нравится, что в нашей команде организована постоянная работа с техдолгом. Мы регулярно занимаемся рефакторингом старого кода, переписываем с Java на Kotlin. Это погружение в чистое программирование, когда нет необходимости думать даже про дизайн: берешь старый legacy код, и переписываешь его в удобный, быстрый, легко читаемый, в соответствии с современными подходами. Привычка сразу задумываться о качестве и удобстве кода, которую я получил еще в команде 1С-разработки, сильно помогла мне здесь.

По чему из 1С-разработки я скучаю больше всего, так это по хорошей подробной документации полностью на русском языке =) И русскоязычному профессиональному сообществу в интернете. В Android в 9 случаях из 10 ответ на какой-то вопрос есть только на английском. На английском я читаю пока что медленнее, чем на русском, и времени на то, чтобы в чем-то разобраться, уходит больше.

Кратко: как перейти в Android из какой-то другой области?


  1. Изучить теорию. Либо на платных курсах, сейчас их достаточно много. Либо заниматься самообучением. Есть хорошие бесплатные вводные курсы от Google и целые плейлисты на ютубе . Объем теории большой (посмотрите, например, на эту дорожную карту), но если это ваше вам будет интересно.
  2. Написать свое демо-приложение, которое можно будет приложить к резюме. Опыта коммерческой разработки у вас нет, но будущим работодателям нужно хоть как-то оценить ваши навыки. Приложение даст им возможность это сделать. Код нужно выложить в открытый репозиторий, например, на GitHub.
  3. Хорошо подготовиться к техническому интервью. Первые два пункта нужны, чтобы вас позвали на собеседование, но потом его нужно еще пройти =)
  4. Готовиться я советую по телеграм-каналам. Есть хорошие каналы отдельно для подготовки к общим IT-вопросам, вопросам по Android и по Java. Там разбираются все основные вопросы, которые задают на собеседованиях. Многие из них и мы в Lamoda задаем кандидатам. Сейчас я сам принимаю участие в собеседованиях, и когда видно, что человек подготовился это всегда создает хорошее впечатление.

Эти три пункта должны помочь найти первую работу в Android.
Если у вас появились какие-то вопросы буду рад ответить на них в комментариях!
Подробнее..

Сынок, запрыгивай в вагон, я закину чемоданы! Экспресс-вход в индустрию когда почти прошел мимо

30.11.2020 22:22:08 | Автор: admin

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


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

В предыдущей серии упоминалась такая бодрая цель:


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

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



если вы понимаете о чем я


Пара слов обо мне, если интересно

Сейчас я вполне состоявшийся 35-летний middle Android-разработчик в крупном и вполне хипстерском финтехе. За плечами около 3 лет профильного опыта, работа в 4 компаниях и печальный скепсис к скрамам и аджайлам. И так вышло, что уже через пару лет я проводил технические собеседования, где лишний раз убедился в правильности выводов об устройстве индустрии.


Онлайн-курсы действительно работают, но есть нюанс


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


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


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

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


Нет никакого смысла знать побольше аббревиатур из вакансий


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


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


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


Одно из моих первых "пристрелочных" собеседований было сущим позором я вдруг забыл половину собственного проекта (игра по типу "2048"); начал путать хоткеи IDEA, когда меня попросили исправить тестовый код. Но обиднее всего было ответить лишь на 2 технических вопроса из 10, да и то "жиденько". Это было больно, позорно, но очень наглядно. И чтобы совсем вас добить, скажу что это сразу был собес в компанию с буквой "Я".

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


Джунов не должны нанимать слишком легко


Ажиотаж на профессию привел к тому, что джунов на рынке можно грузить лопатой и нанимать килограммами. Соответственно, конкуренция во все более-менее нормальные компании просто огромна. Помножьте это на отсутствие работы в регионах и популяризацию удаленки. Любой, кто предлагает вам оффер после первого же собеса и без дополнительных проверок/условий скорее всего планирует закрыть джуном какую-то дыру. В лучшем случае, получите часть обещанной ЗП; в худшем будете работать на домашнем ноутбуке, а вместо зарплаты получать "бесценный опыт".


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

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


Частые смены работы это хорошо


Несмотря на популярную в HR-кругах теорию о том, что меняющий работу чаще чем раз в N лет ненадежен и нежелателен, в ИТ индустрии это норма. Более того, средняя продолжительность работы разработчика в организации около 2 лет. Значит, что кто-то работает 4 года, а кто-то 6 месяцев. Пруфы привести не могу это комментарии знакомых HR-специалистов, подтверждающие собственные наблюдения.
У меня трудовая книжка уже с двумя вкладышами, так что будем считать такую позицию моей личной "деформацией". Однако, периодическая смена мест работы даст вам следующие преимущества в период прокачки себя как специалиста:


  • Смена контекста применяемых технологий и методик разработки. Работая 5 лет на одном предприятии, вы никогда не составите свое мнение о том, как лучше работать над задачами, какие паттерны не работают, и где та граница, за которой абстракции в коде превращаются в бессмысленный оверинжиниринг.
  • Работа в одном и том же коллективе не позволит составить собственное мнение о том, какие условия для вас действительно комфортны. Поработав в стартапе из 14 человек, и в огромном банке, я понял что больше не готов сидеть в опен-спейсе на 30 человек со всей России. Слишком разное у людей представление о приемлемом поведении в подобных условиях.
  • Может оказаться, что при всей крутости проекта вас будут каждый день раздражать отсутствие чайника и ресепшена. То есть, всякие простые вопросы вроде "нужна тетрадь" или "нужно отдать ноутбук в ремонт" будут порождать целый квест с вами в главной роли. В то же время, отсутствие кофе-машины легко нивелируется покупкой маленькой ручной Wacaco (не сочтите за рекламу, но уж очень полюбилась эта малышка).

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

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


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

Большинство собеседований одинаковые, а ваше резюме или код никто особо не смотрит


По моим наблюдениям, 8 из 10 собеседующих получили ваше резюме за 10 мин до встречи. И да, им тоже лень всем этим заниматься, поэтому вас встретят списком найденных в сети вопросов по Java\Android\подставь_что_актуально. А значит, эти списки вы можете нагуглить самостоятельно и обстоятельно их разобрать. Это прибавит уверенности на встрече и поможет лучше сыграть свою партию.


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


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

Подробнее..

Сынок, запрыгивай в вагон, я закину чемоданы! Экспресс-вход в индустрию, когда почти прошел мимо

01.12.2020 00:06:56 | Автор: admin

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


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

В предыдущей серии упоминалась такая бодрая цель:


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

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



если вы понимаете о чем я


Пара слов обо мне, если интересно

Сейчас я вполне состоявшийся 35-летний middle Android-разработчик в крупном и вполне хипстерском финтехе. За плечами около 3 лет профильного опыта, работа в 4 компаниях и печальный скепсис к скрамам и аджайлам. И так вышло, что уже через пару лет я проводил технические собеседования, где лишний раз убедился в правильности выводов об устройстве индустрии.


Онлайн-курсы действительно работают, но есть нюанс


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


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


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

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


Нет никакого смысла знать побольше аббревиатур из вакансий


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


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


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


Одно из моих первых "пристрелочных" собеседований было сущим позором я вдруг забыл половину собственного проекта (игра по типу "2048"); начал путать хоткеи IDEA, когда меня попросили исправить тестовый код. Но обиднее всего было ответить лишь на 2 технических вопроса из 10, да и то "жиденько". Это было больно, позорно, но очень наглядно. И чтобы совсем вас добить, скажу что это сразу был собес в компанию с буквой "Я".

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


Джунов не должны нанимать слишком легко


Ажиотаж на профессию привел к тому, что джунов на рынке можно грузить лопатой и нанимать килограммами. Соответственно, конкуренция во все более-менее нормальные компании просто огромна. Помножьте это на отсутствие работы в регионах и популяризацию удаленки. Любой, кто предлагает вам оффер после первого же собеса и без дополнительных проверок/условий скорее всего планирует закрыть джуном какую-то дыру. В лучшем случае, получите часть обещанной ЗП; в худшем будете работать на домашнем ноутбуке, а вместо зарплаты получать "бесценный опыт".


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

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


Частые смены работы это хорошо


Несмотря на популярную в HR-кругах теорию о том, что меняющий работу чаще чем раз в N лет ненадежен и нежелателен, в ИТ индустрии это норма. Более того, средняя продолжительность работы разработчика в организации около 2 лет. Значит, что кто-то работает 4 года, а кто-то 6 месяцев. Пруфы привести не могу это комментарии знакомых HR-специалистов, подтверждающие собственные наблюдения.
У меня трудовая книжка уже с двумя вкладышами, так что будем считать такую позицию моей личной "деформацией". Однако, периодическая смена мест работы даст вам следующие преимущества в период прокачки себя как специалиста:


  • Смена контекста применяемых технологий и методик разработки. Работая 5 лет на одном предприятии, вы никогда не составите свое мнение о том, как лучше работать над задачами, какие паттерны не работают, и где та граница, за которой абстракции в коде превращаются в бессмысленный оверинжиниринг.
  • Работа в одном и том же коллективе не позволит составить собственное мнение о том, какие условия для вас действительно комфортны. Поработав в стартапе из 14 человек, и в огромном банке, я понял что больше не готов сидеть в опен-спейсе на 30 человек со всей России. Слишком разное у людей представление о приемлемом поведении в подобных условиях.
  • Может оказаться, что при всей крутости проекта вас будут каждый день раздражать отсутствие чайника и ресепшена. То есть, всякие простые вопросы вроде "нужна тетрадь" или "нужно отдать ноутбук в ремонт" будут порождать целый квест с вами в главной роли. В то же время, отсутствие кофе-машины легко нивелируется покупкой маленькой ручной Wacaco (не сочтите за рекламу, но уж очень полюбилась эта малышка).

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

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


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

Большинство собеседований одинаковые, а ваше резюме или код никто особо не смотрит


По моим наблюдениям, 8 из 10 собеседующих получили ваше резюме за 10 мин до встречи. И да, им тоже лень всем этим заниматься, поэтому вас встретят списком найденных в сети вопросов по Java\Android\подставь_что_актуально. А значит, эти списки вы можете нагуглить самостоятельно и обстоятельно их разобрать. Это прибавит уверенности на встрече и поможет лучше сыграть свою партию.


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


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

Подробнее..

Изучение data science c нуля этапы и вехи

22.01.2021 02:23:24 | Автор: admin

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

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

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

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

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

Этап 1. Базовые инструменты анализа данных: SQL, Excel

  • SQL, основы (20ч). Самостоятельное знание SQL может пригодится для выполнения кучи других задачи. И оно, в любом случае, необходимо для большой (большей?) части вакансий на позицию аналитика, дата сайентиста и, тем более, machine learning engineer.

  • Основы Excel (10ч): фильтры и сортировка данных, формулы, vlookup, pivot tables, базовая работа с графиками. Коллеги, партнеры или руководство будут присылать входящие данные в excel, и вам нужно будет уметь их быстро понять и изучить. Нередко и результаты анализа сделанного на Питоне удобнее подготовить и предоставить в Excel.

  • Базовый английский (20-200ч, зависит от предыдущего уровня), на уровне самостоятельного чтения технической документации и спец.литературы. Например, вам совершенно необходимо уметь читать официальную документацию pandas/scikit, и также многие хорошие материалы по Python доступны только на английском.

В некоторые компании с таким набором знаний берут на позиции: аналитика/ младшего аналитика/ веб-аналитика. В Москве хорошие знания этих вещей могут, иногда, давать ЗП до 100тыс, но вероятнее ЗП порядка 50-70 тыс и начальная позиция .

Этап 2. Основы Python и Pandas

  • Основы Python (80ч). Без знания Питона невозможно использовать львиную часть инструментов машинного обучения. Другие языки менее эффективны в этой сфере и непопулярны.

  • pandas (20 ч) - основа основ в работе с данными в Питоне. На первых порах достаточно хотя бы самых базовых знаний: индексирование, выбор данных по условиям, группировка данных, и соединение разных датафреймов

  • Также научиться основам работы с разными API и парсингом данных (requests, beatiful soup)

На этом этапе дополнительные знания Python позволяют вытаскивать данные из разных API, или путем веб-парсинга.

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

Этап 3. Базовые понятия и классические алгоритмы машинного обучения

(Этот этап может занять 200-400 ч в зависимости от того, насколько хорошо изначально вы владеете математикой)

Базовые понятия машинного обучения:

  • Кросс-валидация

  • Overfitting

  • Регуляризация

  • Data leakage

  • Экстраполяции (понимание возможности в контексте разных алгоритмов)

Базовые алгоритмы, которые достаточно знать на уровне главных принципов:

  • Прогнозирование и классификация:

    • Линейная регрессия

    • Дерево решений

    • Логистическая регрессия

    • Random forest

    • Градиентный бустинг

    • kNN

  • Кластерзиация: k-means

  • Работа с временными рядами: экспоненциальное сглаживание

  • Понижение размерности: PCA

Базовые приёмы подготовки данных: dummy переменные, one-hot encoding, tf-idf

Математика:

  • умение считать вероятности: основы комбинаторики, вероятности независимых событий и условные вероятности (формула Байеса).

  • Понимать смысл фразы: "correlation does not imply causation", чтобы верно трактовать результаты моделей.

  • Мат.методы, необходимые для полного понимания, как работают ключевые модели машинного обучения: Градиентный спуск. Максимальное правдоподобие (max likelihood), понимание зачем на практике используются логарифмы (log-likelihood). Понимание как строиться целевая функция логистической регрессии (зачем log в log-odds), понимание сути логистической функции (часто называемой "сигмоид"). С одной стороны, нет жесткой необходимости всё это понять на данном этапе, т.к все алгоритмы можно использовать как черные ящики, зная только основные принципы. Но понимание математики поможет глубже понять разные модели и придать уверенности в их использовании. Позднее, для уровня senior, эти знания являются уже обязательным:

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

Этап 4. Набор базовых навыков решения задач

Цель данного этапа - получение навыков применения всех ранее изученных методов машинного обучения с помощью scikit-learn, pandas (numpy).

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

Тут же следует инвестировать время в изучение разных приёмов и трюков feature engineering

По завершению данного этапа есть шанс устроиться на позицию junior data scientist. ЗП будет низкая. Но главное будет продолжать учиться. До достижения уровня senior возможность учиться у коллег ценнее, чем текущая зарплата.

Знакомство с основами нейронных сетей

На данном этапе может быть полезно знание основ нейронных сетей, CNN, RNN/LSTM слоев, vector embeddings. Но не обязательно уметь тренировать их самому, на данном этапе. Пока это важно для "общего развития" и чтобы вы не хотели применять нейронные сети там, где без можно обойтись, и, наоборот, понимали где они могут быть полезны и когда имеет смысл или обращаться к коллеге уже их знающему, или браться за глубокое изучение и практику.

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

Рекомендую ограничить это объемом в 20-40ч, необходимым только для общего понимания концепций.

Этап 5. Дополнительные технические навыки, необходимые в работе

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

  • Conda, понимание проблем зависимостей версий библиотек, и как conda это может решить

  • основы bash

  • Python standard library, если не освоили ранее (необходимый минимум itertools, collections, contextlib), умение эффективно разбивать код на функции и модули, классы; умение применять context managers.

  • Основы git, также очень полезно умение работать с IDE: pycharm/vs code. Их использование облегчит работу с git, заменив графическим интерфейсом работу с командной строкой

  • Библиотеки визуализации (matplotlib+seaborn, plotnine, plotly), если не освоили их раньше.

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

В принципе, на этом уровне знаний можно работать годами, практикуясь в применении разных из уже изученных моделей, библиотек и инструментов, осваивая вспомогательные методы (feature engineering), нюансы, и способы решения похожих же задач, с помощью разных библиотек (xgboost, cat-boost). Постепенно будет уровень рост ЗП. Но это не уровень Senior специалиста.

Изучаем по необходимости, этапы 2-5

Визуализация данных

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

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

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

  • plotnine - позволяет создавать очень креативные графики. Супер-мощный инструмент, позволяющий в несколько строчек кода создать самые нетривиальные графики. В сравнении - seaborn не имеет подобной гибкости, а в matplotlib замучаешься разбираться чтобы сделать такой же график, если он не совсем примитивный. Однако, поначалу, plotnine требует определенного времени на освоение. Если бы не существовал plotly - это был бы самый мощный инструмент.

  • plotly - позволяет делать все графики интерактивными. Сложен в изучении и плохо документирован. Вероятно, не имеет смысл его изучать, пока вы не поймёте точно что вам это необходимо (интерактивность).

До начала применения в реальной практике, на обучение можно себя ограничить в 10-20ч на одну библиотеку.

Если вам нет нужды сначала применять питон для подготовки данных, или вы хотите создать визуальные дэшборды которыми смогут пользоваться другие люди - посмотрите в сторону PowerBI и Tableau, это крайне мощные и популярные инструменты визуализации данных. Изучить каждый из этих инструментов на минимальном рабочем уровне можно, примерно, за 60ч. Знание связки SQL+Excel+PowerBI/Tableau откроет вам позиции аналитиков и "BI-специалистов" c окладами в Москве от 100 тыс., коммуникабельные специалисты с хорошими знаниями этих инструментов находят позиции с ЗП от 150 тыс. Подобные вакансии в основном встречаются в корпорациях и системных интеграторах.

Средства работы с данными

Можно учить на разных этапах, в зависимости от задач, с которыми столкнётесь

  • Основы regular expressions, aka RegExp (10ч). Знания regexp необходимо для продвинутой фильтрации данных в разных инструментах для работы с данными.

  • PySpark (40ч на изучение основ, 100-200ч на достижение хорошего рабочего навыка) . Он необходим когда у вас данных очень много, и приходиться обрабатывать их сразу на целой группе серверов (кластере). Это уже Big data. Не имеет смысл разбираться с ним заранее, т.к. знания являются не фундаментальными и легко забываются. Эффективнее осваивать когда планируете начать использовать (или перед тем как подать резюме на позицию, требующую данных знаний).

    Внутри Spark устроен сильно не так, как обычные базы данных, но с точки зрения использования он оказывается сильно похожим, т.к. поддерживает почти стандартный SQL синтаксис или, как альтернативу, API отдалённо похожий на pandas. Определенные концептуальные отличия присутствуют, но больших сложностей в освоении это не вызывает. В последнее время продвигают библиотеку Koalas, которая будет использовать команды совсем как у pandas для работы с spark-кластером, но пока не советую делать это основным подходом по работе с Spark.

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

Этап 6

Углубление и развитие технических навыков

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

  • Python на хорошем уровне: декораторы, уверенное знание классов и наследования, изучение базовых классов, dunderscore __методы__ .

  • Уверенное пользование bash, понимание основ linux

  • Полезно изучить основы docker

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

Другие области машинного обучения

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

Нейронные сети

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

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

Другие статьи о самообразовании

Вводная статья о том, как понять, стоит ли вам вообще идти в data science и как сделать первые шаги

Принципы эффективного самообучения

Как минимум, планируется статья с рекомендациями книг и курсов, в соответствии с приведенными этапами

Готов стать ментором

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

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

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

self.development.mentor в домене gmail.com, Олег

Подробнее..

Обзор платформ для изучения машинного обучения с нуля

31.01.2021 14:19:04 | Автор: admin

Один из главных вопросов у людей изучающих что-либо - выбор источников информации: курсов, книг, статей. В последнее время, и особенно в изучении data science, широта выбора вводит в ступор: курсов и книг просто море, особенно если рассматривать доступные на английском языке. В данной статье дам субъективный обзор платформ он-лайн обучения, показывая те, которые дают изначально более фундаментальные знания (спойлер: coursera.org и learning.oreilly.com мои фавориты).

Введение. Мотивация к данной статье

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

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

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

т.к. вы можете выбрать абсолютно любой курс и преподавателя - можно найти того, кто объясняет наиболее понятно;

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

В итоге, у меня сложилось мнение, что эффективное изучение материала, в первую очередь, зависит от качества и формы его подачи, а не от талантов ученика. Поэтому, для себя я решил, что стоит тратить силы на нахождение лучших, в своём роде, книг и курсов. В итоге, пока изучал основы DS, я просматривал десятки разных источников, и заметил, что есть настоящие жемчужины, отлично объясняющие материал, и, наоборот, многие курсы и книги не дают принципиальное понимание предмета, а просто приводят отдельные примеры, призывая их повторять (набрать программный код), но не объясняя общих принципов так, чтобы вы смогли решить принципиально похожую, но отличающуюся задачу. Т.к. издание книг и курсов дело прибыльное, то курсов и книг второго типа намного больше: большая часть книг и курсов, которые я просматривал, не давали ничего полезного (запоминающегося).

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

Платформы

coursera.org

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

Данный портал был первопроходцем в он-лайн образовании, выводя в он-лайн разные курсы от топовых преподавателей американских университетов. Т.к. изначально это был вывод он-лайн лучших университетских курсов - они были ориентированы на преподавание базовых и фундаментных принципов. Именно это свойство качественно отличает курсы на данной платформе, от других платформ. Сейчас кроме университетских курсов там также есть курсы от ведущих организаций (Google, Яндекс, deeplearning.ai, т.п.)

Также на этой платформе есть хорошие курсы по математике ( а т.ч. специальные "математика для data science") и много других университетских курсов по самым разным областям знаний.

Следите за курсами данных организаций

Возможно, лучшие курсы по самым основам машинного обучения и дата сайенс - изначально русскоязычные и доступны на этой платформе. Это хорошие курсы и специализации Высшей школы экономики, Яндекс (+МФТИ). Даже если вы прекрасно владеете английским - основы я рекомендую изучать по этим русскоязычным курсам. В целом, каждый курс от представленных выше организацией, был мне в чём-то полезен.

Англоязычный курс по нейронным сетям от Andrew Ng (deeplearning.ai), вероятно, самые известный из всех курсов по нейронным сетям. Другие курсы от "deeplearning.ai" по нейронным сетям также хороши.

На coursera.org очень много хороших курсов (хотя есть и плохие, или неактуальные). Но поиск на этом сайте - отвратительный. Рекомендую через страницу "Партнёры" открывать списки курсов всех упомянутых выше организаций, и смотреть что они предлагают, у них плохих курсов нет (пример https://www.coursera.org/hse).

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

Как бесплатно просматривать курсы на coursera.org

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

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

Другая возможность - написать в coursera.org и попросить дать вам бесплатный доступ, с мотивировкой почему вам следует его дать. Эта возможность явно указана у них на сайте. По опыту знакомых (высокооплачиваемая мать-одиночка из Германии) - они вполне идут на встречу.

edx.org

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

stepik.org

Это полностью русскоязычная платформа. Многие курсы бесплатные/дешёвые и интерактивные (важно для отработки навыков). Среди всего, доступного на русском языке, некоторые курсы могут быть очень привлекательными (бесплатно и хороший материал). Но лучших, в своём роде, курсов встретилось мало. Сложилось впечатление, что многие (большинство?) курсов скорее вводные, недостаточные для глубокого погружения в тему. Ряд курсов были устаревшими или очень узкими по своей подаче материала, хотя материал и был дан хорошо и может оказаться полезным для понимания общей картины.

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

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

udemy.com

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

Хотя как раз для отработки концептуально не сложных навыков (основы Питон), курсы на этой платформе могут быть эффективны. Например, с нуля по Python могут быть полезны курсы: 1, 2. Это курсы ориентированные на кого-либо без предыдущего опыта программирования.

Также, на этой платформе, вероятно, можно найти хорошие курсы по SQL (если они дают большую базу практических заданий). Я проходил отличный курс по PowerBI (который является не сложным инструментом, и не требует фундаментальных курсов).

БОльшая часть курсов на данной платформе - платные. И способы просмотреть их бесплатно мне не известен.

datacamp.com

Я не брал ни один курс, т.к. они все были платными. Судя по бесплатно доступным первым урокам, их подходы хороши для того чтобы "набить руку" на использовании базовых библиотек. И, в таком качестве, их можно использовать (отработка навыков Python, Pandas, SQL, и разных инструментов и библиотек). В этом качестве, вероятно, они будет лучше альтернатив с udemy, т.к. datacamp изначально разрабатывалась как платформа обучения навыкам data science, с хорошей проработкой способов делать интерактивные упражениния.

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

Способ сэкономить, если хотите учиться на этих курсах - следить за распродажами. В последнюю "черную пятницу" там были скидки до 50%.

Книги: learning.oreilly.com (также есть и курсы)

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

Эта платформа издательства O'Reilly, которое, кажется, является самым крупным издательством, специализирующемся на ИТ-литературе. И на их платформе не только их книги. Можно найти книги бОльшинства издательств, специализирующихся на ИТ-литературе.

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

В последние годы они также развивают он-лайн курсы на своей платформе, которые доступны в рамках той же подписки. Я их пробовал только в 2019г, тогда им не хватало возможностей отработки практических навыков. Кажется, курсов, ориентированных фундаментальные знания, как на coursera.org, там было мало. Но курсов, посвященных отдельным ИТ-технологиям на этой платформе множество и самых разнообразных.

В бесплатном доступе ничего нет, и подписка достаточно дорогая (~400$ в год). Если подписаться на новости и рассылки на сайте oreilly.com - раз в год они устраивают 2 недели распродаж (в разное время! обычно - осенью). В этот период подписку можно купить со скидкой 50%

Книги: b-ok.org

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

Но, как я писал ранее, бОльшая часть книг и курсов по data science - не самые лучшие, и не на столько полезные, как хотелось бы. Поэтому, не имеет смысл с ликованием "О! Халява!" скачивать всё подряд.

Обычный способ отбора хороших книг: сначала ищем книгу на amazon.com, смотрим её рейтинг (число звёзд) и количество оценивших (должно идти на десятки). Я еще ни разу не видел чтобы хорошая книга имела рейтинг 4 звезды или ниж. Все хорошие книги будут иметь выше 4 звёзд, и, если они были изданы не в последний месяц, у них будут уже десятки отзывов. Заметьте, что эта эвристика по рейтингу является необходимой, но не достаточной: немало не самых идеальных книг имеет рейтинг 4.5+ и десятки оценивших, к тому же - конкретная книга может давать материал не идеально вам подходящий (писал об этом ранее). Как правило, на amazon можно посмотреть оглавление книги и пролистать несколько страниц. Далее отобранные книги я уже ищу на b-ok.org. Там есть не все книги, но их львиная часть.

khanacademy.org - математика

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

Однако, в последние годы, конкурирующие курсы на уровне школьной (high school) программы стали появляться и на coursera.org, и там, на мой взгляд, есть более качественные курсы. В том числе на coursera.org есть очень удачные курсы "математика для data science", которые неплохо подбирают самые важные темы для данной профессии. Единственным недостатком coursera.org является множество альтернативных курсов по одной и той же теме, между которыми придётся выбирать, и также плохо организованный каталог/поисковик курсов. Тем не менее, рекомендую инвестировать время в том, чтобы найти лучшее из доступного там.

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

"Упакованные" программы: Яндекс.Практикум, skillfactory, geekbrains

К сожалению (к счастью?) я не учился на курсах ШАД, Яндекс.Практикум, skillfactory, geekbrains. Поэтому не могу дать о них полностью информированное мнение.

Но из изучения их учебных программ сложилось некоторые ощущения:

Теоретическая часть курсов (фундаментальные знания)

В теоретической части, отдельные курсы Яндекса и других платформ в значительной части пересекаются с теми, которые тот же Яндекс предоставляется на coursera.org, сам или через Высшую Школу Экономики (в ней факультет анализа данных сделан тем же Яндексом). Как писал выше, на coursera.org материалы этих курсов можно просмотреть бесплатно, и там можно скомбинировать, просмотрев каждую тему в том курсе, который её объясняет лучше всего. Риск такого подхода - может быть небольшая каша из кучи отдельных знаний. Но умение ориентироваться в разной информации о методах машинного обучения, и отделять актуальное от неакутального - тоже навык, полезный в дальнейшем саморазвитии. Поэтому, это не является большим минусом.

Субъективно, в ШАД будет больше математической подготовки, на coursera на таком уровне её будет сложно получить. Но, потенциально, частично эта подготовка может быть избыточной.

Яндекс.Практикум, skillfactory, geekbrains

Как указал выше - - теорию можно изучить по бесплатно доступным альтернативам (coursera.org) и книгам.

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

Второй огромный плюс данных программ - наличие бизнес-кейсов. В итоге, самой полезной, вероятно, будет программа с наибольшим разнообразием и их проработанностью (в т.ч. реалистичностью постановки). К сожалению, не могу сказать какая из указанных программ будет лучшей по этому критерию. У кого есть опыт - пожалуйста, напишите. Но, потратив определнные усилия, можно найти альтернативные способы потренироваться на практических задачах: найти релевантные бизнес-кейсы на kaggle и поучаствовать в соревнованиях, попробовать там же изучить как это делали другие, проделать практические задания из разных курсов, доступных на coursera.org.

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

Что я забыл?

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

Мои другие статьи, по самообучению в дата сайенс

Самообучение в Data science, с нуля до Senior за два года

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

Изучение data science c нуля: этапы и вехи

Готов ответить на индивидуальные вопросы / стать ментором

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

Если у вас есть индивидуальные вопросы, на которые не отвечают данные статьи -пишите на почту self.development.mentor в gmail.com, Олег

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

Как отблагодарить автора

Отчасти, я пишу статьи и отвечаю в почте в надежде, что когда вы почувствуете результат - вы за него заплатите, сколько сочтёте нужным. Мне нравится делиться знаниями, но написание подобных статей занимает очень много времени. Поэтому дополнительная мотивация поможет продолжить делиться полезной информацией и идеями.
вариант: перевод на карту Тинькофф (укажите своё имя!): 5213 2477 4720 7719.
И/или напишите мне на почту, о том в чём именно я был полезен, чтобы я смог продолжать в том же духе.

Подробнее..

Стоит ли смотреть в сторону Data science?

21.06.2021 16:11:25 | Автор: admin

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

С точки зрения потенциального работодателя: вы скорее возьмёте выпускника технического вуза, или человека за 40, без профильного опыта, решившего изменить свою жизнь? Ведь вузы тоже ведут активную подготовку профильных специалистов (пусть и не всегда высокого уровня). На рынке явный недостаток специалистов с профильным опытом. Но среди людей с непрофильным опытом - вероятно, больше шансов найти работу у выпускников с профильным образованием.

Написать этот пост меня натолкнуло то, что полгода назад я начал писать цикл статей о самообучении и переквалификации в data sceince. В итоге, за 5 месяцев мне написало больше сотни людей с разными вопросами по такой переквалификации. И, вероятно, многие недооценивают объем знаний, который необходимо получить для этого. В этом, наверное, виноваты и заголовки моих постов "с нуля до senior data scientist за 2 года". Как мне подсказали в комментариях к тому посту - мой начальный уровень был отнюдь не нулевой (был топовым разработчиком 1С).

Почему в data science сложно попасть

Это очень много учебы и практики

Идеальный data scientist - специалист максимально высокой квалификации, знающий, одновременно:

  • всё что должны знать "простые аналитики" (SQL+визуализация данных)

  • хороший Python программист

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

  • с отличным знанием хотя бы основ теории вероятностей (в идеале - значительно глубже + линал, мат.анализ)

  • хорошие коммуникативные навыки и понимание бизнеса (невозможно эффективно обрабатывать данные из предметной области, если вы её не понимаете)

По большому счету, это несколько лет профильного (само)образования + опыт работы.

Это дорого

Даже с большим опытом работы в ИТ я потратил 8 месяцев, не работая и проедая все свои накопления, только на учебу, оставаясь без работы. Мой уровень ЗП в первый год после того как я нашёл работу, был ниже, чем до этого. Только спустя 2 года я вышел на тот же уровень дохода. И это всё было достаточно страшновато, при том что у меня были своя квартира, большая финансовая подушка, и отсутствие финансово зависимых родственников. Большая часть людей, желающих поменять свою жизнь, не могут себе позволить такую траекторию переобучения, по её финансовым ограничениям.

Аналитика - сестра Data science

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

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

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

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

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

Суть решаемых задач аналитка: разобраться в данных, понять их и найти интересные закономерности, представить результаты в удобном и понятном для коллег виде (обычно, графики и презентации).
Ключевой набор навыков для подобной работы: это прирожденные "аналитические способности" + знания базовых инструментов (SQL+Excel) + инструменты визуализации данных (Tableau, PowerBI).

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

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

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

Рекомендуемый набор знаний для аналитика:

  • SQL + Excel

  • Tableau / PowerBI

  • Когортный анализ (принципы)

  • Понимать парадокс симпсона, чтобы не делать ошибок, к которым он приводит

  • Нужно знать основы теории вероятностей:

    • вероятности зависимых и независимых событий, условные вероятности

    • разные статистики: среднее, медиана, мода, стандартное отклонение.

  • знать что такое АВ-тесты: понимать принципы, калькуляторы есть онлайн

  • знать основы regexp. Например, веб-аналитике он используется в инструментах типа google analytics

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

Маркетинговая/веб аналитика

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

Знания специфические для веб-маркетинга (помимо обще-аналитических):

  • Понимание принципов работы контекстной рекламы (основные метрики и схемы оплаты).

  • Знание как работают UTM метки.

  • Понимание основных принципов юнит-экономики.

  • Желательно знание основ HTML

  • Популярные инструменты: Google Analytics, Яндекс.Метрика (эти инструменты можно учить уже выйдя на первую работу)

Продуктовая аналитика

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

Data engineer - брат для Data scientist

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

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

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

  • SQL

  • Python (Java, Kotlin)

  • bash

  • Docker, Kubernets

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

Ищете работу, которая вам подходит

Цель этого поста - показать что есть море вариантов интересной работы.

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

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

Подробнее..

Перевод 10 фантастических книг от разработчиков и для разработчиков

17.01.2021 14:23:45 | Автор: admin
Чтение книг по-прежнему прекрасный способ открыть нечто новое или научиться чему-то, особенно если вы разработчик, чтобы оставаться востребованным в изменчивой индустрии.
В этой подборке я представлю 10 фантастических книг для разработчиков, которые написали разработчики. Здесь не будет привычных общепринятых книг, которые вы найдете в любой подборке мастрид для программистов, в этой статье вручную отобранные сокровища от экспертов с проверенным послужным списком.




Десять способов разработчика делать деньги / Ten Ways To Make Money As A Developer




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

В своей новой книге Florin показывает 10 оригинальных способов заработать, если вы разработчик. Так что, если вам любопытно, как делать деньги на сторонних проектах: в блоге, на создании продуктов SaaS, на фрилансе, с помощью менторства и не только, вы просто обязаны прочитать эту книгу.

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

Книга на Gumroad

Техническое резюме наизнанку / The Tech Resume Inside Out




Многие стремятся получить работу в сфере технологий, но не знают, как написать резюме настоящий актив, который поможет выделиться из толпы. К счастью, у нас есть Гергели Ороз, который работал на фантастические компании: Uber, Skype, Microsoft. Автор видел сотни резюме разработчиков и вложил свой обширный опыт в чудесную книгу. В ней Gergely показывает, как именно написать выдающееся резюме. Более того, он конкретно пишет о том, на что на самом деле смотрят рекрутеры, о том, что происходит, когда вы отправляете резюме в крупную компанию. И последнее, но только по порядку: в книге есть три готовых шаблона резюме для разных технических должностей.

Книга на Gumroad

Контент для разработчиков / Content For Developers




Будь то маркетинг, рассказ об обучении, ведение блога, документирование проекта или что-то другое, разработчику важно уметь писать. Не всё так просто в разработке хорошей стратегии написания контента, да и в распорядке его написания. Многим разработчикам трудно писать в аутентичном и профессиональном стиле.
Маэда Батул, контент-стратег, спикер и специалист по работе с сообществом Node.js, перечислит простые правила, а также даст более 30 советов и профессиональных приёмов создания контента, которые помогут писать лучше!

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

Эффективное портфолио разработчика / Building an Effective Dev Portfolio




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

Книга на сайте автора

Лучшее в AWS




Помните, как вы смотрели на консоль Amazon AWS и думали: Что это за сервисы? Что с ними делать? Так было и со мной. Много раз Пока я не нашёл эту замечательную книгу Даниэля Вассалло и Джоша Пшорра, которые проработали в Amazon AWS более 10 лет. Авторы охватывают не всё, что предлагает Amazon, а только те сервисы, с которыми работали сами, а также сервисы, о которых разработчики должны знать.

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

Книга на Gumroad

Выдающийся разработчик / The Standout Developer




Автор этой прекрасной книги, Рандал Канна, сама пережила множество стрессов, пока искала работу в сфере технологий. Непростые собеседования с программированием, соперничество с десятками выпускников CS и специалистами с многолетним опытом И это лишь часть трудностей, с которыми сталкиваются люди в поиске работы.
К счастью, книга Randall поможет преодолеть эти трудности. Рандалл не только расскажет, как выковать резюме, но и поделится тем, каким образом она заставила компании FAANG обратиться к ней, а не наоборот!

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

Ссылка на книгу

Облачная разработка сайтов / Cloud Native Web Development




Вы когда-нибудь задумывались о том, как выглядит типичное веб-приложение в наши дни? Может быть, веб-приложение это немного статического HTML, немного CSS для стилизации и общий бэкенд для обработки форм? Если вы так думаете, я уже могу сказать, что сейчас веб-приложения немного сложнее.

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

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

Книга на сайте автора

Руководство: карьера программиста / The Coding Career Handbook




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

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

Ссылка на книгу

Чистый React / Pure React




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

Дэйв Седия на практике научит думать на React, вы определённо научитесь чему-то новому, пока будете разрабатывать небольшие специализированные приложения. Чтобы вы проверили свои знания, Дэйв включил несколько замечательных упражнений. И самое прекрасное в этой книге никаких приложений типа TODO! Если хотите найти больше книг по React, читайте этот пост.

Книга на сайте автора

Разбираемся глубоко: собеседования Java / Grokking the Java Interview




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

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

Если вы спрашиваете себя, какой язык выбрать, Java или JavaScript, посмотрите пост по ссылке.

Книга на Gumroad




Подробнее..

Перевод 10 полезных книг от разработчиков и для разработчиков

17.01.2021 16:22:22 | Автор: admin
Чтение книг по-прежнему прекрасный способ открыть нечто новое или научиться чему-то, особенно если вы разработчик, чтобы оставаться востребованным в изменчивой индустрии.
В этой подборке я представлю 10 фантастических книг для разработчиков, которые написали разработчики. Здесь не будет привычных общепринятых книг, которые вы найдете в любой подборке мастрид для программистов, в этой статье вручную отобранные сокровища от экспертов с проверенным послужным списком.




Десять способов разработчика делать деньги / Ten Ways To Make Money As A Developer




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

В своей новой книге Florin показывает 10 оригинальных способов заработать, если вы разработчик. Так что, если вам любопытно, как делать деньги на сторонних проектах: в блоге, на создании продуктов SaaS, на фрилансе, с помощью менторства и не только, вы просто обязаны прочитать эту книгу.

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

Книга на Gumroad

Техническое резюме наизнанку / The Tech Resume Inside Out




Многие стремятся получить работу в сфере технологий, но не знают, как написать резюме настоящий актив, который поможет выделиться из толпы. К счастью, у нас есть Гергели Ороз, который работал на фантастические компании: Uber, Skype, Microsoft. Автор видел сотни резюме разработчиков и вложил свой обширный опыт в чудесную книгу. В ней Gergely показывает, как именно написать выдающееся резюме. Более того, он конкретно пишет о том, на что на самом деле смотрят рекрутеры, о том, что происходит, когда вы отправляете резюме в крупную компанию. И последнее, но только по порядку: в книге есть три готовых шаблона резюме для разных технических должностей.

Книга на Gumroad

Контент для разработчиков / Content For Developers




Будь то маркетинг, рассказ об обучении, ведение блога, документирование проекта или что-то другое, разработчику важно уметь писать. Не всё так просто в разработке хорошей стратегии написания контента, да и в распорядке его написания. Многим разработчикам трудно писать в аутентичном и профессиональном стиле.
Маэда Батул, контент-стратег, спикер и специалист по работе с сообществом Node.js, перечислит простые правила, а также даст более 30 советов и профессиональных приёмов создания контента, которые помогут писать лучше!

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

Эффективное портфолио разработчика / Building an Effective Dev Portfolio




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

Книга на сайте автора

Лучшее в AWS




Помните, как вы смотрели на консоль Amazon AWS и думали: Что это за сервисы? Что с ними делать? Так было и со мной. Много раз Пока я не нашёл эту замечательную книгу Даниэля Вассалло и Джоша Пшорра, которые проработали в Amazon AWS более 10 лет. Авторы охватывают не всё, что предлагает Amazon, а только те сервисы, с которыми работали сами, а также сервисы, о которых разработчики должны знать.

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

Книга на Gumroad

Выдающийся разработчик / The Standout Developer




Автор этой прекрасной книги, Рандал Канна, сама пережила множество стрессов, пока искала работу в сфере технологий. Непростые собеседования с программированием, соперничество с десятками выпускников CS и специалистами с многолетним опытом И это лишь часть трудностей, с которыми сталкиваются люди в поиске работы.
К счастью, книга Randall поможет преодолеть эти трудности. Рандалл не только расскажет, как выковать резюме, но и поделится тем, каким образом она заставила компании FAANG обратиться к ней, а не наоборот!

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

Ссылка на книгу

Облачная разработка сайтов / Cloud Native Web Development




Вы когда-нибудь задумывались о том, как выглядит типичное веб-приложение в наши дни? Может быть, веб-приложение это немного статического HTML, немного CSS для стилизации и общий бэкенд для обработки форм? Если вы так думаете, я уже могу сказать, что сейчас веб-приложения немного сложнее.

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

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

Книга на сайте автора

Руководство: карьера программиста / The Coding Career Handbook




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

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

Ссылка на книгу

Чистый React / Pure React




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

Дэйв Седия на практике научит думать на React, вы определённо научитесь чему-то новому, пока будете разрабатывать небольшие специализированные приложения. Чтобы вы проверили свои знания, Дэйв включил несколько замечательных упражнений. И самое прекрасное в этой книге никаких приложений типа TODO! Если хотите найти больше книг по React, читайте этот пост.

Книга на сайте автора

Разбираемся глубоко: собеседования Java / Grokking the Java Interview




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

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

Если вы спрашиваете себя, какой язык выбрать, Java или JavaScript, посмотрите пост по ссылке.

Книга на Gumroad




Подробнее..

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

11.05.2021 12:14:21 | Автор: admin

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

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

Как все начиналось

90-е. Украинская провинция. Ларьки, меховые шапки, яблочный сок в трехлитровых банках, песни Круга и Мистера Кредо попеременно доносящиеся из малиновых девяток. Я хожу в обычную городскую школу, где пару часов в неделю уставшая от жизни учительница по английскому рассказывает нам про грамматику, месторасположение фруктов на мебели и заставляет читать вслух роман Джейн Эйр, в котором главная героиня на протяжении всего сюжета переживает смерть близких и терпит унижения от окружающих. Отличный выбор обучающего материала, Наталья Викторовна!

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

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

Так во мне поселилось осознание того, что я не знаю английский. С этим следовало что-то делать.

Занятия с репетиторами

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

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

Впоследствие, цикл начинания и бросания занятий повторялся еще с 3-4 репетиторами нашими и носителями английского. Каждый раз мне казалось, что вот этот новый преподаватель точно поймет мои пробелы в знаниях, даст индивидуальную программу, и объяснит все тонкости, которых не найдешь в учебниках. Этого не происходило. Все они работали по своим привычным схемам, опираясь на учебники, и все объяснения от себя от учебников отличались не сильно. Имея ценник 20$ в час. Тогда как сам учебник стоит 30$ и находится под рукой всегда.

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

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

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

Фильмы и передачи

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

Первым выбор пал на фильм Тренировочный день. Но посмотреть его, даже с субтитрами, я сходу не смог. В 9 предложениях из 10 я не понимал даже общего смысла сказанного (характерная сцена). Пришлось читать каждый кусок субтитров, переводить отдельные слова из него, складывать из них смысл, и проигрывать этот кусок пока не разберу хотя бы где какое слово сказано. Заняло это дня три. Я изрядно посерел в лице, но таки дошел до конца и получил на выходе список из нескольких сотен новых слов. Всего в фильме их было 1400. То есть, не знал я примерно каждое пятое слово. При том, что половина всех слов в фильме это я, ты, нет, для, хорошо итд.

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

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

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

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

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

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

Подкасты

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

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

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

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

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

Чтение

В одно время со своим киноспринтом я решил налечь на другие крупные формы книги. Заказав на Амазоне Трэйнспоттинг Уэлша и Голый завтрак Берроуза, я начал обратный отсчет до того дня, когда смогу прикоснуться к Настоящей Английской Литературе.

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

The sweat wis lashing oafay Sick Boy; he wis trembling. Ah wis jist sitting thair, focusing oan the telly, tryin no tae notice the cunt. He wis bringing me doon.

Так я невольно познакомился с шотландской версией падонковского языка. Наталья Викторовна, по крайней мере, давала нам читать настоящие слова

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

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

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

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

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

Общение

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

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

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

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

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

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

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

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

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

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

Греческий опыт

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

До начала звонка я ожидал, что мой собеседник будет говорить на посредственном английском, вроде моего, и это сделает разговор более равным чем оригинальные беседы с британцами. Реальность оказалась малость иной. Грек тараторил на английском с такой скоростью, с какой я по-русски могу только по большим праздникам. У него был жирнейший акцент, но это совершенно не мешало я понимал 100% сказанного. Он был примерно моего возраста.

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

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

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

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

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

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

Это был мой третий прорыв в изучении.

Вывод:
Регулярный контакт с языком ключ к его знанию.

Жизнь в мультиязычной среде

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

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

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

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

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

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

Вывод:
Регулярный контакт с языком ключ к его знанию.


Ну и зачем ты нам рассказал эти пронзительные истории, касатик?, спросите вы, Мы занятые люди. Нам нужно резюмировать!

Легко.


Резюме

Почему английский непонятен начинающим

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

Вот что из относительно простого текста понимает человек знающий 100 самых распространенных английских слов:

Не густо.

А вот что из этого же текста понимает человек с запасом в 1000 слов:

Гораздо лучше!

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

Пример:

Show me your watch (Покажи свои часы)

Если вы не знаете, что show может значить показать, понять это предложение невозможно. Однако если вы знаете только это значение, то вам будет сложно понять это предложение:

Show some respect (Прояви уважение)

Ок, знаем оба значения. Как насчет этого примера:

Quit showing off (Харэ выпендриваться)

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

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

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

Суть изучения английского языка

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

Например, чтобы понимать слово book в тексте, вам нужно, условно, 20 раз считать его в разных формах и контекстах в разное время:

Bring me the book, please (Принеси мне книгу, пожалуйста)

I need a book (Мне нужна книга)

There are too many books (Там слишком много книг)

You can book tickets on the internet (Ты можешь забронировать билеты в интернете)

Ill book a table somewhere (Я закажу столик где-нибудь)

и так далее

Чтобы понимать book на слух, нужно 20 раз его услышать в разных формах и контекстах. Хотя, если вы уже хорошо знаете его из текста, количество требуемых контактов будет меньше. Скажем, 10. Говорить должны разные люди, в разных ситуациях, в разное время.

То же самое с письмом и говорением. Количество повторений определяет качество вашего навыка.

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

Практика требует времени

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

Например, я хочу хорошо читать и слышать общий и IT английский. Видео на ютубе, статьи на Медиуме, обсуждения на Реддите и Стак Оверфлоу. Скажем, для этого нужно знать 8000 слов и словосочетаний. Каждое нужно считать 20 раз. Одно считывание занимает в среднем 10 секунд. Умножить на 2 навыка: чтение, слушание. Но я тугодум, и мне требуется в 1,5 раза больше времени на усвоение, чем другим ребятам. Значит считываний потребуется 30. Читаю и смотрю я что-то, например, 2 часа каждый день.

Итого: 8000x30x10x2 = 1333 часа / 2 часа в день = 668 дней

Но усваивать по 12 новых слов и словосочетаний каждый день вы, конечно, не сможете. Особенно когда закончатся слова вроде point и late, а начнется что-то вроде astute и drizzle. Поэтому срок можно умножить минимум на 2. Хотя, может быть, вы гений.

Практика должна быть интересной

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

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

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

Грамматика

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

Проиллюстрирую степень важности грамматики по сравнению со словарным запасом.

Так мы видим предложение написанное с идеальной грамматикой:
Мы сходили на Красную площадь и выпили два стакана лимонада.

Предложение c достаточной грамматикой:
Мы ходили на Красный площадь и пили два стакана лимонад.

Предложение без грамматики вообще:
Мы ходить красный площадь и пить два стакан лимонад.

Предложение с идеальной грамматикой, но без слов:
[______________________________]

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

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

Кроме того, огромная часть грамматики имеет исключения или нелогична в принципе, и как следствие, формальные правила с ней не помогут. Знаете почему район Нью-Йорка Brooklyn не имеет артикля, а у соседнего The Bronx он есть? Нью-Йоркцы не знают. Или почему в русском автобус ходит, хотя у него нет ног? С этими фактами просто нужно встретиться и запомнить, как и со многими другими.

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

Произношение

Второй самый переоцененный фактор.

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

А умеренный иностранный акцент вообще не проблема. Директор Гугла говорит с индийским акцентом, жена Алека Болдуина притворяется испанкой, а акцент Арнольда Шварценеггера стал его визитной карточкой.

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

Единственное, за чем стоит последить сознательно это слова, которые от неправильного произношения превращаются в другие: mouth mouse (рот мышь), piece piss (кусок моча) и тому подобные. Но все равно, в большинстве случаев вас поймут и осуждать будут не сильно.

Записка себе в прошлое, или как бы я учил английский, если бы пришлось начать все сначала

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

  2. Запиши своими словами все что не получается сказать. Это те грамматические темы, которые тебе нужно повторить/выучить. Базовые 5-6 времен и артикли стоит повторить в любом случае.

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

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

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

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

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

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

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

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

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

  10. Какого контента стоит, по возможности, избегать:

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

    2. Все что создано ранее 70-80-х годов устаревшая лексика и манера речи .

    3. Исторический, фэнтезийный бесполезно.

    4. Поначалу: крупные формы и любые источники искусственного языка, как художественные книги (не стоит тратить 20 часов на сотни прочтений слов профессор и магия) и фильмы (бандитско-ментовско-военная лексика вряд ли пригодится + сложно понимать).

    5. Поначалу: новости, аналитика, Википедия очень сложно.

    6. Песни непонятно и бесполезно.

    7. Любой адаптированный контент скучно и не сильно проще обычного.

  11. Одновременно с началом занятий купи или скачай в сети красного или синего Мерфи (по твоему уровню). Когда начинаешь замечать на практике какую-то регулярную проблему или непонятность по части грамматики заглядывай в него. Заодно, просмотри оглавление, чтобы знать что в нем есть. С огромной вероятностью, это две книги содержат всю формальную грамматику, которая тебе когда-либо понадобится.

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

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

    1. Как бесплатную альтернативу консультациям можно использовать языковые сообщества вроде English Stack Exchange и Word Reference, а для проверки правописания Grammarly.

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

  15. Отдохни.

Приложение для чтения и изучения слов

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

TL;DR

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

Подробнее..

Категории

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

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru