Як змусити людей припинити рух на велосипеді (зосередившись на дрібницях)?


139

Мені доручено навчати інших команд новій кодовій базі, але я продовжую працювати. Кожного разу, коли я дійсно пройдуся з кодом з людьми, ми не забуваємо дуже далеко, перш ніж вся вправа перетвориться на велосипедний пробіг (члени організації, що надає непропорційну вагу тривіальним питанням). Оскільки вони не знають кодової бази, але вважають, що їм потрібно допомогти вдосконалити її, вони зосереджуються на речах, які вони можуть зрозуміти:

Why is that named that? (2 хвилини, щоб пояснити, чому так його називають, 10+ хвилин обговорення нового імені)

Why is that an abstract base class rather than an interface? (2 хвилини для пояснення, 10+ хвилин для обговорення відносних достоїнств цього рішення)

...і так далі. Тепер не зрозумійте мене неправильно - важливі імена та хороший, послідовний дизайн, але ми ніколи не обговорюємо, що насправді робить код , або як система спроектована будь-яким значущим чином. Я провів декілька зустрічей із судженнями, щоб вивести людей з цих дотичних, але вони пішли - відволікаючись на те, яким буде код / ​​коли повинен бути встановлений тривіальність їх домашніх тварин, і вони пропускають більшу картину.

Тож ми намагаємося пізніше (або з іншою частиною кодової бази), і оскільки люди не отримали достатньо знань, щоб подолати ефект мотоцикла, це повторюється.

Я спробував менші групи, більші групи, код, дошка, візіограми, гігантські стінки тексту, дозволяючи їм просто доводити це до смерті, скорочуючи аргументи одразу ... деякі допомагають більше, ніж інші, але нічого не працює . Чорт, я навіть намагався, щоб інші люди з моєї команди пояснили це, тому що я подумав, що я можу погано пояснювати речі.

Тож як ви навчите інших програмістів достатньо, щоб вони перестали фіксуватись на дрібницях і могли змістовно внести свій внесок у дизайн?


44
Я ненавиджу це говорити, але мені здається, що це явище ілюструє більше проблеми з кодовою базою, ніж з новачками.
Ніколь

30
Ви намагалися відкласти питання до кінця? "Почекайте ще кілька хвилин, і я можу пояснити наприкінці", а потім просто просуваючи решту вмісту. Можливо, на деякі з цих запитань відповідуть самі
Юзефг

21
@NickC, я вважаю, що код хороший чи ні, не має нічого спільного з тим, як ви його розумієте, як вам вдається отримати чітку картину. Витрачати час на дрібні деталі з початку роботи, не витрачаючи часу на отримання початкової великої картини, це погано і ніколи не допоможе виправити потенційний поганий код.
Shivan Dragon

11
Яка мета навчити когось бази даних? Можливо, ви можете чіткіше донести цю мету, і чому це важливо, щоб вони бачили, що обговорення нового імені об’єкта відволікає від цієї мети і має бути зарезервоване для іншої зустрічі.
LarsH

56
У цих відповідях є хороші поради. Я коротко додам: подумайте про використання «процесу» як свого союзника. Коли хтось каже, що "ця конструкція є неоптимальною", правильна відповідь "відмінна, я радий, що ви помітили це. Після цієї зустрічі будь ласка, введіть помилку в базу даних відстеження з детальним описом проблеми та запропонованим виправленням. Команда триади перегляне вашу пропозицію, надасть їй пріоритет перед іншими робочими елементами та призначить її відповідному розробнику, щоб виправити її після того, як всі елементи вищого пріоритету будуть виправлені. Перехід далі ... "
Ерік Ліпперт

Відповіді:


159

Я думаю, що проблема полягає в тому, щоб це завдання: "Мені доручили навчати інші команди новій кодовій базі".

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

Представляючи на рівні коду, ви запрошуєте мислення на рівні коду.

Почніть з системного рівня та представляйте дизайн та вибір дизайну, які були зроблені. Не допускайте розширеного обговорення: ви його не переглядаєте. Дозвольте запитати: ви хочете, щоб вони зрозуміли систему. Якби люди «зробили б це по-іншому», добре. Можливо, згоден. Чи ні. Але рухайся далі. Це так, як зараз.

Коли ви перейдете до рівня коду, ви вже отримаєте їх за допомогою ґрунтовних системних термінологій. Назви (я припускаю) матимуть сенс. Те саме, що вище: відсутність розширеної дискусії, питання для розуміння. Рухайся.

Тепер встановіть деякі проблеми класу для вирішення. Як ми можемо зробити покращення X? Виберіть щось нетривіальне, що "йде з потоком" дизайну системи, і працюйте над тим, що ви змінили б. Вони повинні отримувати обґрунтування системи вже зараз. Виберіть інше вдосконалення, яке може зламати систему, якщо зробити це неправильно, і покажіть, як це можна зробити правильно. Це повинно бути для них моментом Ah Ha . Деякі можуть вас навіть побити!

Це важкий концерт, особливо після помилкового старту, який ви мали. Здається, ви вже вклали багато часу та зусиль, і, можливо, є трохи я проти них. 'Знову, і почніть знову. Ми припускаємо, що вони розумні люди. Поставте їм виклик мислення на вищому рівні. І розбийте групи, які вже існують, вибравши різні перерізи команд для нових сесій.


3
Спочатку я провів невелику інструкцію з дизайну високого рівня, а також навчився деяким новим / незнайомим технологіям (IoC-контейнери, динаміка), щоб допомогти підготувати. Це навчання пройшло досить добре. Це хороший момент для підвищення.
Теластин

+1 fot не намагається боротися з людьми з "психічними хаками" на кшталт "Я відповім на ваші поза тематичні питання в і в ваш час!" але скоріше змінити точку зору
Buksy

3
Фантастична відповідь. Мені особливо подобається пропозиція зробити фокус саме на "те, що він робить", а не на те, як названі його внутрішні компоненти ".
Даніель Холлінрак

66

"Припаркуйте їх". На початку уроку поясніть, що ви маєте обговорити, і чітко поясніть, що вважається Off Topic. Якщо вам поставили запитання, яке чітко є СТ, скажіть так і рухайтеся далі. Якщо вони повернуться до нього, напишіть це питання на дошці (Це критично важливо) для подальшого обговорення та продовжуйте роботу. Наприкінці уроку, коли вони самостійно, а не ваш час, дивіться, як швидко ці питання вирішуються.


8
+1 Таким чином люди відчувають, що їх не ігнорують.
andy256

Я згоден з цим. ЯКЩО проблема занадто довго обговорює нерелевантні речі, тоді не обговорюйте ірелевантних речей ...
Кріс

7
Можливо, замість того, щоб усі брали на себе час, пишучи питання OT на дошці, попросіть запитувача взяти це до відома (на призначеній сторінці вікі, JIRA, де б не було).
LarsH

14
Я думаю, що фізичний акт, який миттєво запитуєш, щоб написати своє запитання на дошці, чітко показує запитувача, що ти відкладаєш їх питання (а не ігноруєш його) і показує решті аудиторії, яка задає всі питання і тим самим затримуєшся прогрес.
JBRWilkinson

1
@LarsH - точно. Поклавши на білу дошку, щоб усі побачили, розмова припиняється. Якщо воно з’явиться знову, інструктор просто вказує на запитання і каже: «Обіцяю, що ми повернемося до нього».
mattnz

21

Встановіть очікування правильно та будьте чесними, відкритими та випереджаючими.

Переконайтесь, що ваші цілі відкриті та прозорі.

Почніть дискусії з перегляду високого рівня, як рекламується andy256 (+1), але також переконайтеся, що ви включаєте свої цілі, наприклад

"... переглядаючи цю проблему, давайте переконайтеся, що ми не зосереджуємось на x, y та z. Нехай також переконайтеся, що ми не дивимося на деталі впровадження, такі як a, b, c або тривіальні деталі наприклад, j, k, l. Я знаю, що в коді і деталях може бути багато деталей, які можна було б вирішити, вдосконалити або зробити більш стандартними, але давайте спершу спробувати подивитися, що це дійсно досягає на більш високому рівні "


+1 для перших 2 речень. Однак сказати людям не думати про щось - це не дуже вдалий спосіб змусити їх не думати про це. "Що б ви не робили, не думайте про рожеві єдинороги". Перш ніж я згадував рожеві єдинороги, ти думав про них? Напевно, ні. Якщо б замість цього я сказав: "Не відволікайтесь на уявних тварин, а натомість зосередьтесь на австралійських тваринах", то коали та кенгуру, можливо, у вас виникли, але, мабуть, не рожеві єдинороги.
Майкл Шоу

Влучне зауваження. Однак справжній сенс - не зупиняти людей на думці (і не сказано), а уникнути людей, що вступають у ті затяжні розмови, які зустрічаються з убивцями та пристрасниками моралі. Люди завжди будуть думати багато незареєстрованих речей. Це добре. У професійній бізнес-ситуації говорять про деякі речі, а про багато - ні.
Майкл Дюрант

17

Тож як ви навчите інших програмістів достатньо, щоб вони перестали фіксуватись на дрібницях і могли змістовно внести свій внесок у дизайн?

По-перше, не думайте про їхні занепокоєння як про "дрібниці" чи "велосипедисти". Це судження, і вони ображають. Їхні побоювання справедливі. Вони просто не важливі на даний момент.

Ключ до будь-якої доброї зустрічі полягає в тому, щоб усі знали:

  • чому у вас зустріч і
  • що ви сподіваєтеся вийти з цього
  • як довго це повинно тривати

Викладіть ці речі наперед, чітко та поясніть цілі.

Наприклад, ви можете сказати: "Ця зустріч призначена для мене, щоб ознайомити вас з пакетом Foo та способом його використання в нашому модулі звітності. Моя мета - дати вам достатньо розуміння щодо Foo, щоб ви могли працювати над проектом Bar Reports. наступного тижня. Я хотів би, щоб ми це зробили в найближчі 90 хвилин ".

Потім, коли з’являється тема, це може виглядати так:

Нова людина: "Чому FooWidget реалізований як візерунок фасаду?"

Ви: "Ну, я думаю, це тому, що (коротке пояснення дизайнерського рішення)" або "я не знаю".

Якщо відповіді достатньо, це чудово. Якщо ні, то це триває:

НП: "Ви не думаєте, що це краще зробити як одиночний?"

Ви: "Я не дуже думав про це, але хотів би продовжувати рухатись далі, пояснюючи, як працює FooWidget".

Н.П .: "Але якщо це буде зроблено як одиночний, то ми можемо ..."

Ви: "Вибачте, що перериваю, але мені потрібно зосередитись на тому, як працює FooWidget. Ця зустріч запланована лише до 11:00, і нам належить багато пройти. Дискусію щодо дизайну доведеться почекати ще раз . "

Після того, як ви переглянете це один чи два рази, ви можете скоротити його до "Це поза рамками цієї зустрічі".

Зауважте, що ви не говорите "Це нерозумно турбуватися" або "Неважливо", "Заткнись" або "Ти занадто новий, щоб мати інформацію". Ви просто зосереджуєте зустріч на тому, що потрібно зробити, і на час, що стосується.


1
Легко сказати, коли ведучий насправді не зацікавлений у відгуках. Ці зустрічі проходять швидко. Всім байдуже.
chux

4

У певній організації ви ніколи не зможете цього досягти. Багато організацій цінують політичну суперечку та сходи по сходах більше, ніж інтелектуальний потенціал, старанність та вірність. І чому б вони не стали. Сходження на сходах ставить людей на владні позиції, дозволяє їм покращити їх особисте життя з більш дискреційним доходом і насправді ніколи не застаріває.

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

Єдина порада, яку я пропоную, полягає в тому, щоб ви зрозуміли, якщо можливо, в контексті вашої організації особиста доля цих учасників від їх розуміння, внеску та зусиль у вирішення реальної проблеми, яку ви намагаєтеся вирішити. Якщо це архітектура підприємства, виражена в цій коді -errant-коді і всі її збої, це все. Роз'ясніть їм , що вони повинні забезпечити значний значний внесок про те , що . Не будь-яка інша випадковість, яка, можливо, є домашнім вихованцем старшого когось чи іншого, і отримає їм приємні точки огляду, домовившись із зазначеним старшим.

Це часто важко зробити, оскільки старший хтось зазвичай не розуміє технології, що відбувається, не цікавиться і, на жаль, контролює сировинні компоненти: час працівника; наймання та пожежа, політика для конференц-залів, акції тощо, тощо, серйозно, тощо.


3

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

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

Виходячи з цих двох ідей, я б запропонував розбити базу коду на одиниці, а учнів на групи для двох людей. Для кожної одиниці коду кожна група матиме, скажімо, 25 хвилин (залежно від LOC, звичайно), щоб мати змогу зробити 5-10 хвилин проходження коду для інших. Три хвилини запитань і повторіть із наступним блоком. Поясніть ключове слово; вони повинні переконатися, що інші зрозуміли це.

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

Можливо, вам потрібна схема складеного на високому рівні від них блоку коду, який буде скопійовано та збережено у спільних для команди документах, щоб вони мали щось відчутне для посилання в майбутньому. Це добре, щоб також прив’язати спогади.

Вибачте, якщо ви вже пробували це ...


1

Ви спробували зробити перед уроки, які люди переглядають індивідуально?

Створіть короткі відео чи презентації, які пояснюють вміст, як працює код, або в основному все, що ви хочете навчити їх у форматі, де їм потрібно переглянути його самостійно та дізнатися інформацію, якій ви намагаєтесь їх навчити.

Потім ви використовуєте командні сеанси для обговорення питань, пов’язаних із вмістом. Вам потрібно чітко визначити, що командні заняття призначені для обговорення та усунення неполадок, пов’язаних лише зі змістом.

Якщо ви надаєте уроки людям індивідуально, ви, можливо, зможете уникнути іншого соціального питання, коли одна справа може стати голосом групи як колективу та відволіктись від фактичної мети уроків.


13
Nooo ......., а не відео ..... "Death By Powerpoint" витіснила ще гірша доля ......, Хоча це матиме бажаний ефект від зупинки питань - погрожуйте їм більше відео, які потребують 10 хвилин, щоб пояснити, що можна прочитати за 30 і зрозуміти за секунди ....
mattnz

6
+1 mattnz Питання комунікації навряд чи вдасться покращити в один бік.
Майкл Дюрант

1
Я не хочу призупинятися, навіть якщо я переглядаю відео! Який формат відео / кодек відключає паузу? :) :) :)
Каз

1

Спробуйте спочатку навчити їх проектувати кодову базу, вкажіть їх навколо архітектури, ПЕРЕД, ніж ви почнете розглядати конкретні приклади. Таким чином вони можуть побачити, як приклади коду, які ви дивитесь, вписуються в більшу картину. Подумайте, як структурована ваша навчальна програма. І включайте ділову мотивацію, що стоїть за дизайном.

Я кілька років навчався інших розробників, і ніколи не вдавався в код, перш ніж показувати їм, як система поєднується. Потім, коли я змусив їх робити кодові вправи в рамках, запитання були структуровані та на тему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.