Мій колега не розуміє речей, з якими працює. Що робити? [зачинено]


13

Я провів 3 дні налагоджуючи одну дуже незрозумілу помилку в бібліотеці, зроблену моїм колегою, ця помилка трапляється дуже рідко. Зрештою я виявив, що ця помилка трапляється через перехресний доступ до об’єкта без будь-якого блокування. Насправді це не перша помилка такого роду, раніше були подібні помилки. Він просто виконує свої тести на одиницю, і якщо щось не вдається, ставить десь замок. І якщо нічого не виходить, угм, то його код ідеальний. Здається, він не має уявлення про безпеку різьби. Я на 100% впевнений, що існує багато подібних помилок, які просто ще не з'явилися. Здається, Прем'єр-міністр теж не розуміє різьблення матеріалів.
Проблема в тому, що він працює в компанії набагато більше часу, ніж я. У всякому разі, я не можу просто сказати, "цей хлопець некомпетентний у цій галузі", тому що це завжди показує вас як "поганого гравця команди" тощо.


Що це за країна?

Це міжнародна компанія.
тика

2
Якщо це справді велика проблема, і ви на 100% впевнені, що ваш колега допустив помилку, перше - це ввічливо вказати на це так, щоб він не загрожував. Друге, що ваш колега не слухає - це лише вказати на можливі збитки готівкою. Це те, що слухають усі менеджери, і дуже уважно це слухають. Проблема з нарізанням різьби, як ви описали, потенційно дуже шкідлива, і якщо ви не впевнені на 100% у своїх висловлюваннях, продовжуйте їх виконувати.
NB

Ймовірно, належить на сайті Project Management SE.
Бернард

1
На сайті Project Management SE немає тегу "Багатопоточність", який повинен мати це питання.
РальфЧапін

Відповіді:


13

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


Я боюся , що це не буде вітатися цим хлопцем, тому що він думає , що він є професіоналом в цій області (і сам може навчити кожен). Але я можу спробувати.
tika

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

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

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

8

Напишіть одиничний тест, який показує помилку, і попросіть його виправити.


1
Він уже знав про цю помилку. Він просто не може знайти причину.
тика

Ви не знайшли причину в триденній сесії налагодження? Або я неправильно прочитав ваше запитання?

1
@scarfridge Залежить від платформи. Для Java ви можете використовувати інструменти байтового коду або програмування, орієнтовані на аспект, щоб вставити очікування саме там, де проблема (або використовувати JVMTI для управління виконанням). Це можна зробити!

1
Справа не лише в послідовності. Задіяно багато інших факторів - які ядра виконують код, коли виникає GC та як він переміщує об’єкти, як зміни передаються з кешу одного ядра в інший тощо.
tika

1
Насправді це лише набір методів викликів, що повторюються мільярди разів. Але це не має великого значення. Справжня причина - доступ до об’єкта словника з 2-х потоків без блокування (тобто без бар'єрів пам'яті). Нитка A створює її, нитка B читає її.
tika

4
  • Завдання старшого розробника - переглянути його код та запропонувати вдосконалення.
  • Ви там не для того, щоб перевірити його роботу, я особисто ненавиджу, якщо хтось повторно перевіряв усі мої зміни, щоб побачити, чи щось зламалося
  • Якщо він не приймає ваші поради, то завдання прем'єр-міністра вирішити питання зв'язку.
  • Питання теми в одиничному тесті змушує мене замислитись, чи справді цей тест є одиничним тестом, а не тестом інтеграції чи компонентів.

Я розумію вашу думку. Дотримуйтесь своєї команди.
тика

2
Що має значення, якщо тест із проблемою називається "тест на одиницю" або "інтеграційний тест"? Вся ситуація залишається колишньою.
Док Браун

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

@CodeRush - я вважаю, ти не віриш у експертну оцінку? Що знадобиться, щоб ви насправді оцінили, що хтось ще перевіряв ваш код (на відміну від просто збою у виробництві)?

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

-5

Я думаю, що ваша компанія не повинна використовувати багатопотокові.

Зробивши широкомасштабний багатопрофільний проект, я виявив, що дві техніки були вирішальними для того, щоб справи працювали. По-перше , код потрібно було написати правильно. Кожне поле повинно бути перевірено вручну, щоб переконатися, що воно було оголошено належним чином і належним чином синхронізовано, де б не було посилання. (Попередження: я трохи спрощую тут речі, щоб відповідь була короткою - або, в будь-якому разі, коротшою.) По-друге , код потрібно було перевірити, виправляючи його на одно- і багатоядерних машинах - багато хвилин, використовуючи 100% кожного ядра. (І якщо він використовує лише 2% кожного ядра, як це часто робив для мене, це теж помилка.)

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

Більшість мов надають способи цього уникнути. Якщо у вас є зчитувач сокетів, у якого зазвичай є своя нитка, попросіть його отримати інформацію до основного потоку якомога швидше та простіше. Ще краще, шукайте системні класи / функції, які будуть обробляти поточну частину читання для вас. Використовуйте чергу, яка виконує "події" одна за одною, як і більшість інтерфейсів API інтерфейсу. (Для цього використовуйте саму чергу подій API GUI.) Якщо вам потрібна паралельна обробка, ви, ймовірно, можете знайти якийсь "робочий потік", який дозволить вам зберігати дані / поля в одному потоці, обробляючи всі передачі для вас.

Підкресліть усі небезпеки багатопотокової роботи. (Страшні історії: Моя улюблена помилка включала пару рядків на кшталт:, в int i = 5; i = i * i;результаті чого було iотримано значення 35. Один, якого я багато бачив, був: if (thing != null) thing.reset();викидання нульового виключення вказівника.) Я думаю, що ваша єдина надія дає їм зрозуміти, що вони крокуючи в цілий новий, дивний світ, і що, можливо, вони повинні зробити один великий крок назад.

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


2
Ви не маєте поняття, що це за компанія чи що вони роблять, тому коментар "Ви, можливо, зможете цим керувати, але ваша організація не може" є трохи необгрунтованим - для всіх, хто знає, тика може працювати в Microsoft . Ким би вони не були, багатопотокове читання може бути найкращим способом вирішити свою проблему; є безліч ситуацій, коли це підходить. І відкладаючи все це в стороні, питання не в багатопотоковому читанні, а в справі з колегою, який викликає проблеми через брак досвіду.
anaximander

@anaximander: Multithreading створює помилки, які дуже важко відтворити і настільки важко відслідковувати. Щоб створити зручне програмне забезпечення для МТ, вам потрібно, як мінімум, мати програмістів та менеджмент, які знають про небезпеку. Організація Tika явно не могла впоратися з цим. Я бачив тестування / QA людей, що змушують програмістів писати звуковий код, випробовуючи жорсткі та вимогливі виправлення для кожної помилки. Це не працює з MT. Якщо колезі бракує здібностей, інтересу та мотивації, поводьтеся з ним, тримаючи його подалі від МТ.
RalphChapin

@anaximander: Ви, мабуть, мали кращий досвід роботи з Microsoft, ніж у мене. Хоча, щоб бути справедливим, я ніколи не бачив у них нічого, що було б схожим на помилку, що читає їх. .... І дякую за коментар.
RalphChapin

1
Незважаючи на те, що на питання "як я поводжусь з колегою, якій бракує досвіду?", Я не думаю, що "ваша компанія неправомірно будує програмне забезпечення" є коректною відповіддю. У будь-якій організації, якою б не була велика і обізнана, завжди знайдуться ті, хто має прогалини у своїх знаннях. Не знаючи, хто є організація чи чим займається програмне забезпечення, я не думаю, що ви можете надійно зробити висновок про те, що компанія не знає, що вони роблять, або що їх проблему можна вирішити без багатопотокової роботи.
anaximander
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.