Раніше я багато писав на цю тему на SoftwareEngineering.SE, і сам був у подібних ситуаціях. Тому я спробую дати декілька підказок і висвітлити кілька питань, які я зазначив, читаючи ваше запитання.
Але спочатку поговоримо про важливий аспект: вашу роль у компанії.
Ваша роль
У вас може бути чіткий мандат вашого шефа на покращення речей, а також місце в ієрархії, де інші розробники повинні слухати ваші накази . Або ви можете бути серед однолітків, маючи ту саму роль і той же авторитет, ваш вибір є лише ... ну ... думкою .
В обох випадках важливо менше вашого місця в ієрархії та іншого:
Що думають про вас інші розробники. Якщо вони ставляться до вас як до дратівливого хлопця, який запитує у них дурні речі, ви далеко не дістанетесь. Я бачив багато випадків, коли технічні керівники та керівники проектів не мали абсолютно ніякого впливу на команду, оскільки команда знала (або думала), що ці "керівники" не мають технічного підґрунтя для прийняття рішень, які вони приймали. З іншого боку, я бачив декількох розробників, яких насправді слухали їхні ровесники, бо вони знали, що ці розробники вмілі та досвідчені.
Наскільки міцна ваша команда і що їх мотивує. Уявіть собі компанію, де кожен розробник платить за KLOC / місяць. Чи хотіли б ви сказати про стиль стилю своїм колегам? Напевно, ні, тому що рідко зустрічаються особи, які хочуть платити менше. Загалом, якщо це не команда, а лише група людей, що працюють над одним проектом, ви нічого не зможете покращити.
Залежно від цього, ви можете вирішити, чи варто докладати зусиль, щоб внести якісь зміни. Якщо у вас немає голосу і немає згуртованості команди, просто зайдіть шукати іншу роботу. Якщо ви відомі як талановитий, шановний розробник, і ви відчуваєте сильне командне відчуття, ви зможете покращити речі порівняно легко, навіть якщо зіткнетесь з ворожістю з боку свого начальника чи інших команд.
У всіх випадках важливо не тиснути на вашу команду. Працюйте з ними, а не проти них. Не дайте їм наказів, а направляйте їх до мети.
Тепер, підказки.
Стиль
Одного разу я попросив добре дотримуватися стилю кодування та форматування більшості існуючих кодів (на жаль, у нас немає формального документа стилю кодування). Але не вийшло ...
Звичайно, це не так, оскільки це не так, як слід робити.
Стиль нудний .
Наступний стиль нудний .
Написання документа в стилі кодування є нудним ( і чорт затруднене ; навіть не намагайтеся це робити, якщо ви не працювали з мовою більше десяти років).
Документ про стиль читання нудний .
Перегляд коду на помилки стилю є нудним .
Тролінг, що мій стиль кращий за твій, викликає захоплення , особливо коли немає абсолютно об'єктивної переваги одного стилю над іншим. Серйозно, кожна розумна людина знає, що правильний спосіб написання if (x)
- це те, як я це написав, if(x)
чи ні if ( x )
!
Тому:
Не робіть оглядів стилів. Це робота перевіряльників стилів. Ці милі програми мають кілька переваг перед вашим мозком: вони перевіряють весь проект за лічені мілісекунди, а не години чи дні, і вони не роблять помилок і не пропускають помилок стилю.
Не пишіть власний стандарт стилю. Ви все одно зробите неправильно, і ваші колеги будуть заважати вам, що ви зробили поганий вибір.
Не змушуйте розробників виправляти 2 000 помилок стилю.
Виконуйте стиль автоматично під час здійснення. Код, який має помилки стилю, не має місця в контролі версій.
Зробіть це з початку проекту. Встановити контроль стилів у існуючому проекті важко неможливо.
Більш детальну інформацію про те, що прочитав першу частину цього іншої відповіді на SE.SE .
Також:
- Не будьте занадто суворими. Наприклад, написання
jslint
коду-сумісного дуже дратує, тому це слід робити виключно при необхідності (або якщо всі члени вашої команди із задоволенням користуються ним). Те саме стосується інструментів статичної перевірки; наприклад, аналіз коду .NET на максимальному рівні може бути дуже гнітючим і гнітючим, приносячи мало користі; той же інструмент, встановлений на помірному рівні, з іншого боку, виявляється дуже корисним.
Код оглядів
Тепер, коли вам не потрібно займатись стилем під час перегляду коду, ви можете зосередитись на більш цікавих матеріалах: поліпшенні (проти виправлення) вихідного коду.
Різні люди по-різному реагують на огляди коду. Деякі вважають це можливістю. Інші ненавидять це. Деякі слухають усе, що ви їм кажете, роблять записи, і не обговорюють, навіть якщо вони можуть мати рацію. Інші намагаються сперечатися з кожного питання. Ви вирішуєте знайти спосіб розібратися з кожним розробником відповідно до її особистості. Зазвичай корисно:
Робіть огляди коду приватно, особливо коли розробник є молодшим і пише справді поганий код.
Покажіть, що немає нічого особистого: ви переглядаєте код, а не вміння людини.
Покажіть фактичну мету огляду коду. Мета - не показати, наскільки поганий розробник. Мета - надання можливостей для вдосконалення.
Ніколи не сперечайтесь. Ви тут не для того, щоб переконати, а щоб надати свою експертизу.
Ніколи не вважайте, що рецензент є єдиним, хто може щось дізнатися з рецензії. Ви тут також для того, щоб навчитися, як читаючи код, так і запитуючи пояснення щодо деталей, які ви не розумієте.
Після того, як перевірка коду буде зроблена, переконайтеся, що людина фактично покращує її код. У мене було кілька випадків, коли розробники думали, що перегляд коду закінчується, коли закінчується фактична зустріч. Вони виходять і повертаються до своїх нових функцій, намагаючись застосувати те, що ви поділилися з ними, лише для нового коду. Достовірний інструмент відстеження коду для перегляду коду допомагає.
Зауважте, що незалежно від вашої конкретної ролі в компанії та вашої компетенції порівняно з іншими, ваш код також повинен підлягати перегляду. Ви не повинні бути єдиним, хто переглядає код інших.
У недавньому проекті, де я працював технічним керівником, я важко пояснив своїм колегам, що це їхня роль - перевіряти код один одного, включаючи мій. Страх перед стажером, який збирається переглянути код свого технічного керівника, зникає, як тільки він знайде перші питання в кодексі - і хто з нас пише бездоганний код?
Навчання
Огляди коду - це чудова можливість навчити та вивчити деякі аспекти програмування та розробки програмного забезпечення, але інші потребують навчання.
Якщо ви зможете навчити своїх колег, зробіть це. Якщо ваше керівництво вороже ставиться до ідеї навчання, робіть це неофіційно. Я проводив такі тренінги у формі неформальних зустрічей, а іноді навіть як прості дискусії, іноді перериваючі керівництвом і продовжуючі пізніше.
Крім прямого навчання, переконайтеся, що ви досить добре знаєте такі книги, як Кодекс Макконеля , і поговоріть про ці книги своїм колегам. Запропонуйте їм прочитати вихідний код проектів з відкритим кодом, наведіть їм конкретні приклади високоякісного коду. І, очевидно, написати якісний код самостійно.
Зосередьтеся на контексті, а не на особах
Як я можу вирішити цю ситуацію, не зосередившись на «поганій культурі компанії», «недосвідчених випускниках» тощо.
Ці випускники мають мету: набути досвіду, вивчити речі, стати більш майстерними. Якщо з року в рік вони пишуть хитромудрий код і нічого не знають про програмування, це, мабуть, тому, що ваша команда або ваша компанія не дає їм такої можливості.
Якщо ви зосереджуєтесь на тому, що у вашій команді є недосвідчені випускники, це не допоможе. Натомість зосередьтеся на тому, що ви можете зробити для них та з ними. Огляд коду та навчання - два з методів покращення ситуації.
Погана культура компанії - це інший звір. Іноді це можна змінити. Іноді це не може. У всіх випадках пам’ятайте, що ви є частиною цієї компанії, тому ви є частиною культури компанії. Якщо ви не можете змінити його і вважати його по суті поганим, рано чи пізно вам доведеться піти.
Налаштуйте свої показники правильно
Як саме ви вимірюєте код прямо зараз? Чи вимірюєте ви кількість комісій в день на одного розробника? Або KLOC на місяць на програміста? А може, покриття коду? Або кількість знайдених та виправлених помилок? Або кількість потенційних помилок, виявлених регресійними тестами? Або кількість ревертів, виконаних сервером безперервного розгортання?
Те, що ви вимірюєте, має значення, оскільки члени команди пристосовують свою роботу до вимірюваних факторів. Наприклад, в одній компанії, де мені довелося працювати кілька років тому, єдине, що вимірювалося, - це час, який ви проводите в офісі. Зайве говорити, що це не сприяло надавати кращий код, або працювати розумніше, або ... ну, взагалі працювати.
Виявлення позитивного та негативного підкріплення та коригування вимірюваних факторів у часі - це, по суті, важіль для членів команди. При правильному виконанні це дозволяє досягти результатів, які не будуть досягнуті простою ієрархією.
Те, що вас турбує, робить їх вимірними. Виміряйте їх та оприлюднюйте результати. Потім працюйте разом з іншими членами команди, щоб покращити результати.
Наприклад, розглянемо, що члени команди роблять занадто багато орфографічних помилок у назвах класів, членів класу та змінних. Це дратує. Як ти міг це виміряти? За допомогою аналізатора ви можете витягнути всі слова з коду, а за допомогою перевірки орфографії визначити співвідношення слів, що містять помилки та помилки, скажімо, 16,7%.
Наступним вашим кроком є узгодження з вашою командою щодо цільового співвідношення. Це може становити 15% для наступного спринту, 10% для наступного, 5% за шість тижнів і 0% за два місяці. Ці показники перераховуються автоматично під час кожного здійснення і відображаються на великому екрані в офісі.
Якщо не досягти цільового співвідношення, ваша команда може вирішити витратити трохи більше часу на виправлення орфографічних помилок. Або ваша команда може вважати за краще обчислити коефіцієнт на розробника та відобразити цю інформацію також на великому екрані. Або ваша команда може виявити, що мета була надто оптимістичною, і вам слід її переглянути.
Якщо ви досягнете цільового співвідношення, наступним кроком буде переконатися, що кількість помилок і помилок помилок з часом не збільшуватиметься. Для цього ви можете створити додаткове завдання у своїй збірці, яке перевіряє наявність орфографічних помилок і не дає змоги, якщо знайдена хоча б одна помилка. Тепер, коли ви позбулися цієї проблеми, ваш великий екран може бути повторно використаний для показу нової відповідної статистики.
Висновок
Я вважаю, що кожен аспект, згаданий у вашому запитанні, може бути вирішений методами, які я включив у свою відповідь:
Коли інші розробники долучилися до проекту, я помітив, що вони використовують інший стиль кодування (іноді зовсім інший стиль)
Вам довелося накладати стиль автоматично на фіксацію.
і часто не використовують сучасні мовні функції, такі як аксесуари властивостей (це відносно нове в Objective-C).
Як огляд коду, так і навчання тут, щоб передати свої знання з мови.
Іноді вони могли б вигадувати власні велосипеди замість того, щоб використовувати подібні функції рамок
Як огляд коду, так і навчання тут, щоб передати свої знання про рамки.
або перенести поняття з інших мов програмування або малюнків, які вони вивчили в нашій кодовій базі.
Це відмінна річ. Вам здається можливістю вчитися у них.
Часто вони не можуть правильно назвати методи або змінні через погану англійську мову
Огляди коду повинні також зосереджуватися на правильному іменуванні. У деяких ІДЕ є також перевірки орфографії.
Іноді я думаю, якби не IDE, я думаю, що вони писали б весь код без відступів або форматування.
Звичайно, вони б. Стиль нудний і його слід автоматизувати.
В основному я ненавиджу код, який вони пишуть.
Запам’ятайте з частини відгуків про код: “Мета - не показати, наскільки поганий розробник. Мета - забезпечити можливості для вдосконалення ».
Він погано відформатований / організований, а іноді кардинально відрізняється від решти проекту.
Автоматизована перевірка стилю .
Я дуже засмучений, коли вони додають спагетті до мого витвору мистецтва
Чекати, що?! Витвір мистецтва?! Вгадай що? Деякі особи (включаючи вас через півроку) можуть знайти ваш код далеко не витвором мистецтва. Тим часом розумійте, що розглядати вашу роботу як витвір мистецтва, а їхню роботу як лайно нікому не допомогти. У тому числі і вас.
Все більше відчувається, що їм не можна заважати вчитися чи байдуже: вони просто роблять те, що вимагається від них, і йдуть додому.
Звичайно, вони зроблять те, що від них потрібно. Пам’ятайте: контекст, а не особи, і правильні показники . Якщо контекст вимагає від них стати кращими в тому, що вони роблять, вони це зроблять. Якщо контекст вимагає виробляти якомога більше KLOC на місяць і нічого більше, вони також будуть робити це.