Написан пост о методе вашей собственной работы. Для этого определите, какая работа занимала у вас основное время на прошлой неделе. Опишите метод/способ, которым вы делали эту работу — и используйте для этого какие-то представления из пройденного раздела нашего курса.
Была попытка описать стек программирования и нам заботливо указали на дефицит мозгов. Шла недавно по улице, сидят девочки-работницы кухни и одна из них “Я ей говорю-говорю, а она понять меня не может, потому что нечем!”. Я очень посмеялась тогда. Так вот нам тоже часто нечем подумать. Давайте разбираться, что ж такое программисты делают во время работы.
Я себе на вопрос, почему выбрана именно такая сфера, отвечаю “потому что мне нравится решать задачки”. И там дальше у @ilandikov был в посте вопрос, а почему программистов учат технологиям, хотя технологии не важны. Технологиям учат на курсах, в университете учат не технологиям. В университете учат пласту знаний/объяснений без которых новоиспеченный программист на рабочем месте будет сильно ограничен своим незнанием. Плюс в универе могут поломать голову необходимостью менять мышление. Это достаточно старый спор, зачем и надо ли идти в универ. А после универа надо ли доучиваться прикладным знаниям на курсах или на работе. Когда такого засилия курсов не было, учили “на производстве”. Я например навыки пользования системами контроля версий получила даже не на первой своей работе. Потому что никакого гита не было, был svn. А до него и контроля никакого не было, файлы по ftp заливались на сервер. И до сих пор считаю, что научить нормально ветки создавать/называть/сливать можно на рабочем месте. Если уж каким-то загадочным образом в 2024 году человек приходит работать, имея 2-3 года промышленного опыта, а навыка у него нет. Хуже когда какой-нибудь СА пытается проектировать таблицы в БД, а курса по базам данных университетского у него нет за плечами. И он искренне не понимает почему хранить у нас в таблице название сущности из чужой таблицы это так себе идея. Он пропустил в своей жизни разбирательство, а зачем эти странные люди придумали делать отдельную колонку с уникальным идентификатором в таблице. Довольно часто искусственным идентификатором.
Нормальные курсы по программированию делают как раз что-то типа стажировки. Т.е. примеры учебные, но как нам научный руководитель говорит “по зубам получите тут сразу, чтобы на работе было полегче”. Вот например хороший курс, прям на главной странице написано “Легко не будет, будет результат”. А дальше внимательный читатель заметит две особенности: 1) препод тебя будет перепосылать в процессе ревью столько раз, сколько надо пока у тебя в голове шестерёнки на место не встанут (это прививка от нежности в плане критики твоего кода) 2) ценник по времени активной работы берём и считаем - 25 недель основного курса плюс месяц финальной работы по 10-15 часов в неделю. Т.к. я знаю ребят, которые там учились, то 15 минимум. А это 435 часов за 7,5 месяцев. 9 месяцев заявлено с поиском работы. Не абы какие курсы, мы же теперь ценники знаем на МиС и СМ. Попробуй без собранности справиться.
На первый взгляд по методу работы мы имеем две части. Первая это “решение задачи”: понимание самой задачи, проектирование решение, уточнение/формализация алгоритма решения, кодирование, тестирование/валидация, приёмка/верификация, передача результата дальше по конвейеру (сильно желательно до конечного пользователя). Массив знаний по первой части со времён, когда я файлики заливала по ftp сильно разросся и продолжает пухнуть. Но его всегда можно найти и дальше запланировать, когда обновиться, добрать то, чего нет. Roadmap - схема, на которой методы не выделены и в целом всё вперемешку: архитектура, тестирование, кодирование, решение конкретных задач (типа поиска или кэширования), куски из devops, security. В описание курса по RoR тоже салат: TDD, деплой, архитектура, gitflow.
Вторая это взаимодействия и предподготовка. С взаимодействием ситуация тоже странная. С одной стороны осталось старое - учишься работать с коллегами непосредственно на производстве. Идеально, если тебе попадались хорошие люди, который тебя научат. Мне попадались: “у вас всё в команде не работает, потому что вы не общаетесь”. С другой стороны товарищи маркетологи всё это назвали “soft skills”. И продают курсы, книжки. Нормального/согласованного roadmap по этим штукам нет. Есть попытки делать его для должностей с менеджерским уклоном. Но там снова дыра в фундаменте. Вместо собранности тайм-менеджмент, вместо онтологики и коммуникации какие-нибудь кривые делегирования и прочее.
Предподготовки нет. Потому что ролей стало много, каждый сидит в своей коробочке и дальше неё не видит. Или “не моё дело”.
Работать методом “дайте чёткие условия задачи - я вам её решу” уже давно не получается. Думала, на что у меня уходит основное время - на роль детектива. В целом нынешняя работа скорее похожа на ролевую игру (RPG). Надо пойти к хранителю леса, предварительно успешно миновать ворота “Неопределённости системного и бизнес анализа”. Когда хранитель найден, надо отгадать от него 33 загадки. Получить, а чаще сделать самому артефакт и только потом идти в свои катакомбы гномов, изготавливать “сапоги-скороходы”.
Пример работы по методу.
- Заметить::метод проблему::предмет метода.
Несколько раз уже была проблема, ломается сборка в разных ветках из-за обновления библиотек. - Описать::метод проблему::предмет метода. Рабочий продукт - описание. Описание заносится в задачу в таск-трекере::документ. Сама по себе задача это работа, на которую ставится исполнитель (я). Сроки не ставятся, потому что надо искать причину. Сроки я ставлю, когда у меня этап реализации выбранного решения. А до него ещё долго.
- Подумать::метод о возможных причинах проблемы. Определяем место проблемы в процессе разработки. Это место это CI. И это стык работы двух команд (нашей и devops).
- Изучить::метод файл с описанием процесса CI для наших репозиториев. Его бы ещё найти надо, но я знаю, где он. Потому что и мои строчки там есть.
- Подумать::метод какие особенности сборки кода не учтены. Там у devops чаще всего нет объектов внимания, потому что они не до конца понимают как у нас язык программирования работает. Один из таких объектов, которые я нашла в прошлый раз это версия языка. Когда мы переходим на новую версию, это делается постепенно. Для dev сред заезжает новая версия, потом тестируется и только потом она поедет дальше к людям. Т.е. процесс переезда растянут во времени. И в разных ветках на уровне CI должны быть поддержаны обе версии (старая и новая). Новый объект, который упущен это набор версий библиотек.
- Подумать::метод на что влияет набор версий библиотек. А ещё когда он меняется. И мы опять получаем что у нас в разных ветках может быть разный набор версий. Почему? Поход в документацию пакетного менеджера, указывает что есть определённая гибкость в описании какую версию библиотеки брать. Там только один вариант жёсткий, когда версия указана целиком (“0.12.4”). Тогда она прибита намертво. Её можно поменять только руками. А в других вариантах (как у нас), при получении библиотек будет попытка обновить версию в заданных рамках. Вот это первая проблема, самопроизвольное обновление версии происходит в CI, а соседние ветки ищут старую версию и сборка ломается.
- Кодируем::метод фиксацию версий библиотек. И думаем дальше.
Если версии “прибиты гвоздями”, что может пойти не так? Они всё равно будут меняться, мы же их обновляем время от времени. И мы снова в разных ветках получим разный набор. Очередной потерянный объект - CI не знает о наборе библиотек в конкретной ветке. Но у нас есть однозначное описание этого набора - lock файл пакетного менеджера. Решение - дописать в файле с CI необходимость учитывать этот файл. - Поиск::метод прописывания lock-файла в CI. Я погуглила и в прошлом проекте посмотрела. Нашла два варианта.
- Передать::метод описание решения проблемы в части CI девопсу. Примеры собрала, ссылки приложила, причинно-следственную связь описала. Дальше жду, всё-таки репозиторий чужой.
Сможете по моему описанию вычислить процентное соотношения применения знаний из backend roadmap и чего-то остального? Кстати что это за остальное? Процент именно технических “работ лопатой” очень скромный. Если глаза на блок знаний в голове по техничке закрыть (а он нужен конечно, никуда не денешься), то большую часть времени я работала навыками из МиС. А говорят непонятно, как применять эти ваши онтологики в работе. Хотя наверно уже из СМ тоже, удерживать важные объекты…