Архив рубрики: Общее

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

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

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

Ради эксперимента иногда отдавал задачу молодому и перспективному сотруднику в виде «как есть», т.е. без «разжёвывания» и декомпозиции. Конечно же такие задачи совсем зеленому и неопытном сотруднику давать нельзя, по понятным причинам. Мидл же должен, в моем понимании, разобраться с тем что надо сделать в задаче и предложить как минимум 1-2 пути решения, возможно отличающихся от того, который описан в задаче. Так же мидл должен уметь самостоятельно собрать недостающую информацию, по другому «изучить предметную область».

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

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

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

Условно разделим ход мыслей на несколько частей:

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

В принципе все. Части надо уточнить и сделать более емкими и понятными.

А теперь давайте остановимся на каждой части подробнее.

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

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

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

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

Изучение предметной области. Тут сложнее и проще одновременно. Много думать не надо, надо изучать. На этом этапе мы исследуем сперва бизнес-процесс (в контексте этапа, бизнес-процесс — это среда, в которой будет «работать» задача), потом программные продукты, реализацию существующих частей, окружение, в котором работает код, и зависимости.

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

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

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

Каждый вариант должен отвечать нескольким требованиям:

  • решать задачу
  • должен быть реализуем за адекватное время
  • не ломать архитектуру приложения
  • не вносить «мусор» и лишние «костыли» (ха-ха, «лишние»)
  • удобен для использования конечным пользователям

Выбрали варианты? Теперь пробуйте выбрать тот, который окажется полезнее. Тут две крайности — делается быстро, но разовое решение, делается дольше, но универсальное. Надо выбирать что-то среднее. Не закладывайте в код возможности, которые сейчас не нужны, но «возможно потребуются» в будущем. Эти возможности лягут «мертвым грузом» с вероятностью 60-70%. Об этом говорит мой опыт разработки (о ужас, более 14 лет уже о_О).

«Примерка» выбранного варианта на свою картину понимания. А если я сказу, что выбранный вариант неверный? Вы ответите — не может быть! Я же перебрал кучу вариантов, подобрал самый удобный и правильный!

Пусть будет так, но что будет, если начнем его делать? Какова вероятность, что ничего не сломается? Как раз на эти вопросы надо ответить на этом этапе. У ansible есть специальный режим работы, при котором он «проигрывает» плейбук, но не вносит никаких изменений на оборудовании. Dry run. Аналогично надо в голове «проиграть» реализацию, посмотреть на что повлияет. И только после того, как убедились, что вариант не ломает ничего (честно-честно, не ломает) идем дальше. А если все-таки есть шанс сломать — идем назад и ищем еще варианты.

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

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

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

Что ж, бывает. Но не стоим на месте и двигаемся дальше. Важно не паниковать. Ответьте на вопрос — новые данные мешают реализации или только вносят уточнение? Если только вносят уточнение, то вам повезло, двигаемся дальше.

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

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

Не торопимся и делаем как надо, а не как заставляют.

Как думает программист?

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

В далеком 2017 году в рамках конференции я участвовал в тренинге (веб архив, спасибо тебе, за то что помог мне найти название тренинга «Управление мотивацией персонала, или как заставить подчиненных работать»). На тренинге была озвучена мысль, что люди разных поколений по разному мыслят и по разному работают. Например поколение, рожденное в 60-70 более усидчивое и трудолюбивое, а поколение 80-90 более свободное, но с более живым умом и нестандартным подходом.

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

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

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

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

Недавно поймал себя на мысли, что я в возрасте 25-ти лет был был ведущим программистом (вот это да, почти 10 лет назад было это ), отвечающим за архитектуру сложного и коммерчески дорогого приложения. А сейчас 25-тилетние программисты (уже с 4-5 летним опытом) порой не могу описать простую архитектуру, а в случае незнакомого проекта сразу бегут с вопросами в надежде, что им разжуют непонятные части.

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

Минисказ 4: археология

Невероятно! Я первый кто видит это за тысячи лет.

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

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

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

Я иду дальше. На пути попадаются прозрачные двери, покрытые толстым слоем пыли. Шум наших шагов заставляет эту пыль падать на пол. А когда упал большой пласт пыли, мы видим, что не только двери стеклянные, но и стены тоже! Это не вероятно, как можно было сделать такие огромные стеклянные стены?..

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

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

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

Первый заместитель его председательства Мера острова Оловянный.

21.04.6453 г. (15.02.3865 г. от Катастрофы)

Спасибо что прочитали.

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

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

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

Удачи всем и здоровья.

zen.yndex.ru

Минисказ 3

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

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

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

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

Земля никогда не будет прежней.

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

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

Спасибо что прочитали.

Это мини-челендж для меня. Я беру тему (любую) и пишу мини рассказ на эту тему.

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

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

Удачи всем и здоровья.

Zen.yandex.ru

Минисказ 2

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

О боже, какая красота. Неимоверная, необъятная и невероятная.

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

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

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

И вот свершилось, с околоземной орбиты был отправлен корабль, который спустя 10 лет достиг центра галактики. Как это получилось? Не спрашивайте, я не знаю. Все 10 лет я проспал, и проснулся уже будучи на расстоянии жалких 10 миллионов километров, Луна всего в 20 раз ближе к Земле. А я рядом с черной дырой…

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

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

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

Я не представляю что сейчас чувствует тот человек, который задумался «А не слетать ли нам к центру галактики?». Его переполняет эйфория или страх? Может быть он спокоен или вообще уже умер, пока я летел сюда?

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

Мне не страшно… Я готов…

Роботам никогда не бывает страшно.

Спасибо что прочитали.

Это мини-челендж для меня. Я беру тему (любую) и пишу мини рассказ на эту тему.

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

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

Удачи всем и здоровья.

Zen.yandex.ru

Минисказ 1

Вы не поверите. Никогда. Но я там был, точно…

И мне это не приснилось. Только как я смог вернуться назад? Может все-таки сон? Может выпитый накануне алкоголь был «паленкой», а все это просто метиловые галлюцинации?

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

А дело было так.

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

Единственное что я чувствовал, это падение. Меня тянуло вниз, но куда? Я не знал…

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

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

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

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

Спасибо что прочитали. Минисказ был первым в серии.

Это мини-челендж для меня. Я беру тему (любую) и пишу мини рассказ на эту тему.

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

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

Удачи всем и здоровья.

Zen.yandex.ru

QRge.ru — привет

Я тут запустил для себя сервис генерации QR кодов: https://qrge.ru/

Он предельно прост в эксплуатации:

  • вводишь текст, который надо закодировать;
  • выбираешь размер картинки;
  • нажимаешь кнопку «Создать».

Готово! 🙂

Вот так будет выглядеть наш новый QR код:

Теперь генерировать QR коды стало еще проще. А новые функции буду добавлять по мере необходимости.

И по секрету: он изначально умеет SVG, но через интерфейс QR код в формате SVG сгенерировать нельзя — мне пока лень добавлять выбор формата, но вот ссылка на картину выше только в SVG формате https://qrge.ru/g/svg?s=3&in=http%3A%2F%2Fqrge.ru%2F.

Анонс: что было, что будет, чем…

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

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

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

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

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

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

Начало…

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

Я программист. В основном пишу приложения для WEB, но иногда приходится написать что-нибудь для Desktop-систем. Часто приходилось заниматься веб-сатами, но, увы, эта тема хоть и хороша, но не сильно мне нравиться. Мне ближе написание узконаправленных приложений, работающих через браузер. Например, на текущей работе занимаюсь разработкой внутреннего приложения, которое управляет DHCP  сервером. С ним приходится поддерживать довольно большой «штат» утиллит, например, парсер логов или генератор конфигурации и т.д.

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

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

Вот. В общем начало положено, теперь надо продолжать. А то это уже будет 3 блог, который я пытаюсь начать :-). стимулом должен стать оплаченный хостинг и купленной доменное имя.