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

Блог компании барс груп

Перевод Парное программирование цели, преимущества

08.06.2021 10:08:20 | Автор: admin

Это продолжение перевода статьи о парном программировании. С первой частью можно ознакомиться здесь.

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

Итак, как же работа в паре поможет достичь этих целей?

Обмен знаниями

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

Практические советы

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

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

Размышления

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

Практические советы

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

Сосредоточение

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

Практические советы

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

Ревью кода на ходу

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

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

Но совместное ревью кода имеет также и свои минусы. К ним мы вернемся позже.

Практические советы

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

Совмещение двух моделей мышления

Как мы упоминали ранее (в первой части), рассматривая классическую модель Ведущий/Штурман, совместная работа позволяет получить разные взгляды на код. Мозг Ведущего обычно работает в режиме тактики, размышляет о деталях и текущих строчках кода. В то время как мозг Штурмана думает более стратегически и охватывает бОльшую картину, отмечает следующие шаги и идеи на клеющихся стикерах. Может ли один человек сочетать в себе оба режима одновременно? Конечно, нет! Поэтому такой "удвоенный" взгляд улучшает качество кода, так как включает рассмотрение и деталей, и общей картины.

Практические советы

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

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

Коллективное владение кодом

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

Мартин Фаулер

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

Практические советы

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

Установка WIP-лимитов для команды

Ограничение числа незавершенных задач, как один из базовых принципов Канбан, увеличивает продуктивность сотрудников. Следование технике WIP-лимитов (аббревиатура от Work In Progress) помогает сосредотачиваться на ключевых задачах. Многозадачность неэффективна даже для одного человека, что говорить о целой команде. Парное программирование позволяет ограничить число задач, прорабатываемых параллельно, и тем самым увеличить общую сосредоточенность. Это гарантирует непрерывность рабочего процесса без подводных камней.

Практические советы

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

Быстрая адаптация новых сотрудников

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

Практические советы

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

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

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

Подробнее..

Некоторые мысли о том, что такое автоматизированная информационная система (АИС)

19.08.2020 10:04:45 | Автор: admin


Я в ИТ-сфере официально около 15 лет, и большую часть этого времени занимался проектированием систем. Очень часто в работе или при знакомстве с новыми коллегами возникают споры на профессиональные темы, одним из которых является ответ на вопрос Что такое система?. Каждый понимает это понятие по-своему, чаще всего опираясь на свой опыт и знания, полученные в ИТ-сфере; другие трактуют определения, взятые из интернета или учебников. И чаще всего эти споры не приводят к единому мнению, так и сейчас я не претендую на 100% принятия моих рассуждений.

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

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

Мы творцы, мы рисуем мир цифрами.

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

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

Система это набор объектов и правила взаимодействия между ними

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

Скорее всего, вы сейчас думаете а причем тут АИС, как это поможет нам? Разберем для начала, что такое информационная система. Рассмотрим наше определение и доработаем его:

Информационная (Система это набор объектов и правила взаимодействия между ними) => Информационная система это набор информационных объектов и правила информационного взаимодействия между ними

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

Разберем, что такое информационный объект и что такое информационное взаимодействие между этими объектами.

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

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

Чтобы стало понятнее, я выделю из вышеперечисленного примера 2 сущности:
  • стулья объекты, определяющиеся наличием 4 ножек, основы, чтобы сидеть на нем, и спинки, на которую можно облокотиться. Возможно определение не точное, но оно подходит для понимания.
  • предметы интерьера, на которые можно садиться это объекты, имеющие плоскую опору, на которую можно сесть и которые стоят на полу и возвышаются на высоту не менее 40 см и не более 1,5 метров.

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

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

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


Еще один пример. Возьмем сущность Контрагент некоторое физическое или юридическое лицо, с которым осуществляется какая-либо деятельность; добавим к системе новую сущность Сделка. Если сущность Сделка связать с Контрагентом, то мы можем получить 2 новые сущности Покупатель и Поставщик.

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

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

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

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

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

Категории

Последние комментарии

  • Имя: Макс
    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