Готовимся к работе в команде с нуля

Дата: 25.02.18
Автор: Андрей, @duker33

Статья для тех, кто хочет работать в команде Фидалс, но ещё мало знаком с программированием.

Статья для продвинутых.

Советы в статье субъективны. Они описывают путь, который я бы прошёл сам, если б начинал с нуля.

Темы для изучения

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

Быстрые ссылки на разделы из этой статьи:

  1. Питон.
  2. БД.
  3. Веб-сервисы. Как работает http, что такое application server, как работать с Linux.
  4. Проектирование - кратко узнаём чем чистый код отличается от грязного.

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

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

Баланс работа/обучение

"Можно знать очень многое, не зная самого нужного." Лев Толстой.

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

Но не бросайтесь и в другую крайность. Рынок не ценит эникейщиков даже с опытом 12 лет. МакКонелл в "Совершенном коде" говорит, что программисты одинакового звания (junior, middle, senior) могут отличаться по продуктивности разработки в 10 раз. По продуктивности дебаггинга - в 100 раз. Отсюда такой разброс в доходе. Профессионалом быть выгодно. Решение ваших задач должно по возможности опираться на системные знания.

Вот почему важен баланс работы/обучения. У каждого он свой и удерживать его - искусство. Удачи вам в этом!

А теперь посмотрим на каждую тему в отдельности.

Питон

Что такое БД

Здесь достаточно совсем общего понимания. Рекомендую поиграться и пописать простые SELECT/INSERT запросы в sqlite (или mysql/postgres). А потом поделать тоже самое из Питона.

Для первого подойдёт что угодно, например CodeAcademy наверняка доступно объяснит что такое БД и что такое запросы в целом. Для второго - гуглим инструмент Питона для подключения к выбранной БД, копипастим примеры к себе в консоль и экспериментируем.

Веб-сервисы

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

Цельного материала порекомендовать не могу, но он наверняка существует. Освоение дисциплины "веб-сервисы" предполагает ещё и понимание инструментов, на которых эти веб-сервисы работают.

Рекомендую изучать в таком порядке:

  1. http. Гайд от Мозиллы
  2. linux + linux bash. Краткий гайд по башу или подбробный гайд
  3. nginx. Официальный гайд
  4. docker. Официальный гайд, альтернативный гайд

Проектирование

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

Обязательно читаем что такое ООП. Для начала достаточно будет Википедии, например.

Читаем гайд по написанию хорошего кода на Питоне.

Текущие технологии

Сюда мы относим несистемные знания, которые зависят от текущих проектов и задач. Они легко приобретаются при наличии хорошего технического бэкграунда. Это конкретные инструменты: фреймворки (вроде Джанго/Фласк), библиотеки, подходы вроде TDD, DDD.

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

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

Готовимся к работе

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

  1. Спирально изучаем темы из списка выше.
  2. Когда в песочнице всё получается, пробуем брать в работу задачи.
  3. При выполнении задачи изучаем её текущие технологии.
  4. Продолжаем системно изучать основы. К этому моменты вы сами будете в состоянии подобрать себе темы и график изучения.

Успехов в изучении, наши задачи ждут вас!