Настоящий Just For Fun и снова Soft skills

Настоящий Just For Fun и снова Soft skills

27.06.2019

Compy

Андрей Зиновьев разрабатывает проект с открытым исходным кодом — Compy. Это среда для запуска переносимых GUI-приложений, которые вы пишете на своём любимом языке программирования.

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

Андрей избрал третий путь. Его программа является подобием бразуера, потому что позволяет скачивать ваш код из интернета. Вы не ограничены HTML, CSS и JavaScript, свой код вы можете написать на любом языке. Compy предоставляет набор компонентов GUI, который вы можете использовать для создания пользовательского интерфейса.

Внутри Compy живёт Qt, поэтому вы не ограничены примитивными элементами управления.

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

Слайды в формате PDF

GitLab

Airwatch

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

Это, вначале серверное приложение обрело интерфейс в виде Telegram-бота, который уведомляет вас о повышенной концентрации всякой бяки. Этого Андрею показалось мало, и он переписал программу на Swift, чтобы её можно было запускать на iPhone.

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

Серверная часть написана Андреем на Go. Проект не только интересен с программистской точки зрения, но и приносит реальную пользу.

Сайт проекта

Слайды

Программа Airwatch в Apple Store

Soft Skills (продолжение)

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

Остановились, как это обычно бывает, на самом интересном — на конкретике.

Исследование Марселя М. Робле из Университета Восточного Кентукки позволило вычленить десять гибких навыков, важных с точки зрения работодателя. Мы взяли этот список за основу для обсуждения.

Вопросы, которые нас интересовали:

  1. Все ли перечисленные навыки актуальны именно для программистов?
  2. Что коллективный интеллект может посоветовать для развития навыков?

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

Общение (Communication)

Устная и письменная речь; умение выступать и слушать (oral, speaking capability, written, presenting, listening).

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

Есть рабочий способ определения личностных навыков, так называемая Большая пятёрка (Big Five). Это модель личности человека с подтверждённой предсказательной силой. В отличие от классичской Юнговской типологии, например экстраверт-интроверт, Большая пятёрка состоит из пяти шкал, например шкалы экстраверсии-интроверии. По результаам тестирования можно определить не тип личности а её координату на шкале. Предполагается (и подтверждается статистически), что поскольку на общительность влиет множество несвязанных факторов — генетика, окружение, воспитание, обстоятельства — распределение личностей по степени общительности должно быть нормальным (Гауссовым).

В переводе на обычный русский язык это означает, что подавляющее большинство людей (~70%) средне-общительны. Истинных интровертов и экстравертов не так много — приблизительно по 15%. Можно сделать вывод, что бинарная типология не очень полезна, и большинство современных психологов с вами согласится.

Навыки, соответствующие шкалам Большой пятёрки, поддаются коррекции, что продемонстрировали Хадсон, Робертс и Фрейли в исследования 2014 и 2015 года.

Они рекомендуют:

  • Не заниматься самообманом. Пройдите тест и подумайте, что лично вас не устраивает. Если всё устраивает, не теряйте время на отращивание общительности.
  • Оценить время. Если вы решили повысить или понизить показатель по одной из шкал, оцените величину необходимых изменений. Обычно экстраординарные изменения не требуются, достаточно немного увеличить или уменьшить число. Имейте в виду, что скорость изменения состовляет 0,02–0,05 сигм в месяц. Если вы помните закон трёх сигм, то знаете, что вся шкала по ширине почти равна шести сигмам. Если общительность измеряется числом от 0 до 15, то одна сигма на этом распределении будет равна приблизительно 2,5, и 0,02–0,05 сигмы дадут изменение 0,05–0,13 в месяц на шкале общительности.
  • Оценить достижимость. Если вы хотите повысить общительность на 0,5 пунктов, то по предварительным оценкам потратие на это от 4 до 10 месяцев. Если вам потребуется гораздо больше времени: два года, три года, пять лет, то знайте, что эффективность длительного воздействия не подтверждена. Наш коллективный разум советует искать команду, где будут востребованы ваши сильные навыки, а слабые навыки будут прикрыты вашими коллегами. Конечно, даже в этом случае вы можете разивать нужные черты характера, но в более фоновом режиме, без отдачи в течение полугода-года.
  • Менять привычки. Методика изменения проста, надо менять привычки. Здесь, как мы поняли, используется подход КБТ (когнитивно-бихевиоральной терапии), только без терапевта. КБТ, как утверждают, весьма эффективна. Авторы исследования рекомендовали студентам ставить конкретные задачи на неделю, а также еженедельно оценивать результаты и прогресс. Например, если вы работаете над общительностью, вы можете заметить, что общительные люди без труда спрашивают у прохожих дорогу. Вы ставите себе задачу спрашивать дорогу три раза в день. Похожие задания вы придумываете самостоятельно. Они должны быть простыми и касаться изменения привычного поведения, не более того.

Вежливость (Courtesy)

Хорошие манеры; знание этикета, в том числе делового этикета; обходительность, уважительность (manners, etiquette, business etiquette, gracious, says please and thank you, respectful).

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

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

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

Гибкость (Flexibility)

Адаптируемость; готовность к изменениям; непрерывное обучение; принятие нового; подстраиваемость; обучаемость (adaptability, willing to change, lifelong learner, accepts new things, adjusts, teachable).

Обычно программисты достаточно гибки. Даже самые консервативные консерваторы из нас худо-бедно любят осваивать новые технологии и языки. Особенность индустрии в том, что каждые 5–10 лет кардинально возрастает мощность железа, что приводит к смене технологий. Если в конце 80-х программисты массово писали на языке Ассемблера, C и Pascal, то уже с середины 90-х перешли на C++ и Object Pascal. Когда-то для работы с базами данных использовали dBase, FoxBase, Paradox и Clarion, а сейчас стандартном де факто является SQL, и более чем активно в наши проекты проникает NoSQL.

Интернет принёс в нашу жизнь Perl, PHP, а позже Python и Ruby. В корпоративной разработке прочно обосновались Java и C#. Мир продолжает меняться, и мы уже слышым про Rust, Go, Kotlin.

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

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

Целостность (Integrity)

Честность; этичность; моральность; наличие ценностей; правильность (honest, ethical, high morals, has personal values, does what’s right).

Здесь мы оказались бессильны. У нас нет уверенности, что можно перевоспитать взрослого человека. Иногда, наверное, проще уволить.

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

В целом же, хорошим подспорьем в деле само-воспитания команды является разумный кодекс поведения (CoC, Code of Conduct). Неплохо, если непосредственный руководитель являет собой пример целостной личности.

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

Межличностные навыки (Interpersonal Skills)

Приятность; представительность; чувство юмора; дружелюбие; забота; чуткость; самоконтроль; терпеливость; общительность; теплота; социальные навыки (nice, personable, sense of humor, friendly, nurturing, empathetic, has self-control, patient, sociability, warmth, social skills).

Мы сразу определили границу. Вежливость это не то же самое, что нерешительность, а решительность не равна невежливости. Оказалось, что большинство участников дискуссии хорошо понимают: чтобы на тебе не возили воду, нужно уметь говорить «нет».

Ваше «нет» не всегда будут слышать. Нужна твёрдость, может быть даже упёртость. Только в этих условиях вы можете проявлять истинную вежливость.

Очень романтично у нас получилось.

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

  • Йогу и медитацию. Те, кто практикуют, утверждают, что помогает. Профессор Келли Макгонигал утверждает, что ежедневная медитация положительно влияет на развитие силы воли. «Суть медитации — не в том, чтобы избавиться от всех мыслей. Она учит, как не теряться в них и не забывать, в чем состоит ваша цель. Не беспокойтесь, если вы отвлекаетесь во время медитации. Просто возвращайтесь к дыханию снова и снова.»
  • Выплёскивание. Иногда проще проораться или пробежаться — выплеснуть эмоцию и напряжение способом, который вы предпочитаете.
  • Самоанализ. Полезно рефлексировать время от времени своё поведение и ситуации. В спокойной обстановке можно вернуться к событию и постараться поставить себя на место другого человека.
  • Прототип. Найдите кого-то, на кого хочется быть похожим. Копируйте то поведение, которое вам нравится и кажется полезным.

Позитивность (Positive Attitude)

Оптимизм; энтузиазм; бодрость; жизнерадостность; уверенность в себе (optimistic, enthusiastic, encouraging, happy, confident).

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

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

Далее, мы оговорились, что речь идёт не об экстра-ординарных обстоятельствах. Агрессия в ситуации выживания понятная и объяснима, но в обычном офисе и в типичный рабочий день?

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

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

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

Профессионализм (Professionalism)

Деловой вид; хорошая одежда; приятная внешность; уравновешенность (businesslike, well-dressed, appearance, poised).

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

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

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

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

Ответственность (Responsibility)

Предсказуемость; надёжность; доведение дел до конца; находчивость; дисциплинированность; желание преуспеть; добросовестность; здравомыслие (accountable, reliable, gets the job done, resourceful, self-disciplined, wants to do well, conscientious, common sense).

Многое об ответственности написано Робертом Мартином в книге «Идеальный программист». В Google Books можно найти отрывок книги для ознакомления. Нас интересует глава 2, которая называется Как сказать нет, ищите её на 35-й странице.

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

Позиция необычная, но интересная и глубокая.

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

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

Командная работа (Teamwork)

Совместная деятельность; умение ладить с людьми; умение соглашаться; готовность оказать поддержку; полезность; сотрудничество (cooperative, gets along with others, agreeable, supportive, helpful, collaborative).

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

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

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

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

Деловая этика (Work Ethic)

Трудолюбие; готовность к работе; лояльность; инициативность; мотивированность; соблюдение сроков; присутствие на рабочем месте (hard working, willing to work, loyal, initiative, self-motivated, on time, good attendance).

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

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

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