Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как бороться с "теоретиками"?

1336  1 2 все
dymanoid знакомое лицо31.07.17 19:38
dymanoid
31.07.17 19:38 
Последний раз изменено 31.07.17 19:40 (dymanoid)

У меня новая команда разрабов, весьма разношёрстная - от чуть-чуть нюхнувших пороху "уже не выпускников" до матёрых дядек с усами и в очках (как в гугле при поиске слова "программист").

Так вот один из таких дядек - "теоретик". Он в команде ответственный за каКчество продукта. Ну то есть авто-тесты, код-ревью и прочие кволити-гейты. Пишет умные "мыла" всем подряд. В личной беседе то и дело проскакивает "а вот в последнем номере <какого-то журнала для айтишников> <какой-то гуру> <чего-то там умное написал>". То есть вроде как мужик должен быть с башкой на плечах. Знает хотя бы названия фреймворков и концепций последних.


Но вот смотришь на его код - и хочется повеситься! ГРАНДИОЗНЫЕ методы по 2000 строк со штуками типа:

if (obj is Type1) { }
else if (obj is Type2) { }
else if (obj is Type3) { }
// MOAR ELSE IF!!!!!11111


Или XAML-разметка на 1 Мегабайт, из которых 80% копи-паста. Дизайнер в Студии вешается намертво при попытке открытия.


Или код типа (комментарий авторский)

public override int GetHashCode()
{
// this is actually the best solution
return (this as object).GetHashCode();
}

Кто не в курсе, в C# это железное переполнение стека.


На SOLID и DRY положено, причём очень толсто! Документации в коде нет, потому что "её же надо обновлять потом, ну на фиг".


В общем, на словах он Лев Толстой, а на деле уй простой. "Теоретик".


Как с ним бороться? Поделитесь опытом.

#1 
LifeRider постоялец31.07.17 20:25
LifeRider
NEW 31.07.17 20:25 
в ответ dymanoid 31.07.17 19:38, Последний раз изменено 31.07.17 20:42 (LifeRider)
Как с ним бороться? Поделитесь опытом.

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

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

#2 
  moose свой человек31.07.17 23:07
NEW 31.07.17 23:07 
в ответ dymanoid 31.07.17 19:38, Последний раз изменено 31.07.17 23:22 (moose)

Элементарно. Берете что-нибудь потяжелее и заходите к нему в комнату, когда он пишет очередной код. Бьете его тем, что принесли, несколько раз сильно по голове, затем протираете отпечатки, вкладываете в его бездыханные руки, прижав, чтобы оттиски были поярче, и было принято за самоубийство. Записочку можете от него тут же предсмертную отмылить (текст заранее нагуглить, или просто написать, что осознал, какое говно его код. и клаву не забудьте протереть и его фингеры туда потипать). Ну, и чтобы никто не видел, как Вы оттуда выходите.

Не стоит каждого идиота поить пивом и рассказывать ему про своих баб. Куда проще кусок арматуры в баумаркте...

#3 
Murr патриот01.08.17 03:21
Murr
NEW 01.08.17 03:21 
в ответ dymanoid 31.07.17 19:38

Как бороться с "теоретиками"?

-----

Хммм... Забей...


Бо, сильно лучше он писать не станет - научится хорошо кодить - это работа и не самая простая. Особенно при начальном уровне освоенности инструмента.


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


смотришь на его код

-----

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

А чтобы совсем не помереть - интерфейсы, абстрактные классы, снова интерфейсы и патерны... и почаще взаимодействие с такими же спецами.


а вот в последнем номере

-----

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

#4 
MrSanders старожил01.08.17 07:59
NEW 01.08.17 07:59 
в ответ dymanoid 31.07.17 19:38

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


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

#5 
  svnv местный житель01.08.17 08:48
NEW 01.08.17 08:48 
в ответ dymanoid 31.07.17 19:38
Как с ним бороться? Поделитесь опытом.

Это не совсем про программирование. Я как то по совету подписался на рассылку и до сих пор не отписался:


https://megaplan.ru/letters/


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


#6 
Simple Nothing is f*cked01.08.17 18:18
Simple
NEW 01.08.17 18:18 
в ответ dymanoid 31.07.17 19:38

Я согласен с MrSanders: отстранить от написания кода, если есть возможность.

#7 
Wanderer_ посетитель01.08.17 20:17
NEW 01.08.17 20:17 
в ответ dymanoid 31.07.17 19:38

Попробуйте с ним сделать код-ревью его кода. Если не поможет, тогда да, надо принимать меры.


public override int GetHashCode()
{
// this is actually the best solution
return (this as object).GetHashCode();
}
Кто не в курсе, в C# это железное переполнение стека.

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

Можете пояснить?

#8 
dymanoid знакомое лицо01.08.17 20:25
dymanoid
NEW 01.08.17 20:25 
в ответ dymanoid 31.07.17 19:38

Всем спасибо за советы! Особенно понравился вариант с арматуриной. Я бы предпочёл его.

От кода отстранить человека нереально. Он в конторе 15+ лет и считается гуру, поэтому особо сложные задачи дают ему (плюс архитектура, плюс каКчество).


так делать нельзя из-за замедления выполнения кода и из-за некоректной работы алгоритмов

Как - так? Что за замедление и какая такая некорректная работа?

Здесь всё элементарно. Переопределяется виртуальный метод, причём таким образом, что он вызывает сам себя. Бесконечная рекурсия --> переполнение стека мгновенно. Система динамического определения типа на то и существует, чтобы в рантайме выбирать подходящий метод. Из-за этого вызовы obj.GetHashCode() и (obj as object).GetHashCode() полностью равноценны, если в классе объекта obj переопределён (перекрыт) этот метод.

#9 
MrSanders старожил01.08.17 23:50
NEW 01.08.17 23:50 
в ответ dymanoid 01.08.17 20:25

Во, архитектура и качество. Такой опытный человек должен определять архитектуру приложения! Пусть документы пишет. Грамотно описанная система может быть реализована и не очень опытными кодерами! Так победим! :)

Опять же качество. Кроме документации пусть пишет тесты. Ведь это очень важно!

#10 
LifeRider постоялец02.08.17 08:57
LifeRider
NEW 02.08.17 08:57 
в ответ dymanoid 01.08.17 20:25
От кода отстранить человека нереально. Он в конторе 15+ лет и считается гуру...

Ну да, я как-то изначально предполагал подобную ситуацию, а иначе лучше рецепта тов. сталина (нет человека - нет проблемы) ничего не придумано. Здесь уж надо определиться, или мир, или война. Один раз был в подобной ситуации лет десять назад, только что пришел в контору, испытательный срок и все такое... Дали мне проект, изрядную часть которого (доступ к базе данных) должен был написать подобный сотрудник, и он меня реально сдерживал, ускорить процесс я не мог никак, человек работал в удовольствие, так сказать, и никуда не торопился. В итоге доступ к базе написал сам, проект запустил, а шефу сказал, что с радостью заменю свой код на "правильный", как только он будет готов. Разборки были, конечно, код ревью от "гуру" и все такое, на что я отвечал, что типа давай свой суперский код, и я его вставлю. Шеф в конфликте встал на мою сторону (ему этот концептуальный спор до фонаря был, а работающий проект - совсем другое дело), пару месяцев я еще ждал "код", но не дождался, гуру перекинули на другие проекты, но и там чего-то пошло не так, он попал под давление и в итоге слился.

#11 
daduda знакомое лицо14.08.17 19:40
NEW 14.08.17 19:40 
в ответ Wanderer_ 01.08.17 20:17

ну это азы. надо вызывать base.GetHashCode(), а не приводить к object. но видно тот всезнающий ламер за 15 лет так ничему и не научился...

#12 
dymanoid знакомое лицо14.08.17 22:00
dymanoid
NEW 14.08.17 22:00 
в ответ daduda 14.08.17 19:40

Зачем переопределять метод, если он всего лишь вызывает базовую реализацию? В этом случае лучше вообще ничего не трогать.

Это был просто пример. Это не значит, что весь его код такой. У него много кода, и этот код работает (за исключением таких вот приколов). Но этот код нечитабильный и нарушает все принципы SOLID и DRY.

#13 
Pchelka. постоялец14.08.17 23:07
Pchelka.
NEW 14.08.17 23:07 
в ответ dymanoid 14.08.17 22:00

Может завести обычай "для молодежи" но на общей планерке разбирать типичные случаи кода с наглядной демонстраций вариантов и общим обсуждением какой из них лучше и почему ; ) Так чтобы совсем отсидеться не удавалось (типа каждый себе номер варианта выбрать и записать должен). Медленно, но будет хоть привыкать к правильному подходу. И остальным обмен опытом не помешает.

#14 
Murr патриот15.08.17 00:11
Murr
NEW 15.08.17 00:11 
в ответ Pchelka. 14.08.17 23:07

на общей планерке разбирать

-----

Это не работает.

Даже если оппонент прав и докажет правоту - не работает.

Чтобы работало оппонент должен отработать в конторе столько же и на такой же должности. Ну либо быть его Гуру.


остальным обмен опытом не помешает.

-----

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

#15 
Pchelka. постоялец15.08.17 11:29
Pchelka.
NEW 15.08.17 11:29 
в ответ Murr 15.08.17 00:11

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

#16 
Murr патриот15.08.17 12:07
Murr
NEW 15.08.17 12:07 
в ответ Pchelka. 15.08.17 11:29

чтобы начать ими пользоваться надо

-----

Ими пользоваться, вообще-то, ужат в школе. Ну для инженера школа это институт или университет.


Минуты на своевременное обучение экономят потом часы

------

Это - 100% правда,

Просто планерка не место для обучения. Элементарно - там находятся десятки людей, оторванных от своей работы и не нуждающихся в данном обучении.



А внешне никто не заметил, что вначале иначе было.

------

Так внешне никто и не замечает.

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

У меня сейчас аккурат такая же ситуация - переработанный из ВБ6-лике кода код не использует базовый компонент Дистинкт (выборка селект дистинкт). В коде - все написано и должно работать. Но не согласуется по типам. Вот сижу и считаю сколько времени уйдет на замену. где-то от 300 до 500 вхождений...

Но! Никто не заметит и не оценит. Тем более - внешне.

#17 
new_book знакомое лицо23.08.17 12:59
new_book
NEW 23.08.17 12:59 
в ответ dymanoid 31.07.17 19:38

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

В США подход к работе несколько иначе, более свободный и в удовольствие с наименьшим количеством нахлебников

#18 
Murr патриот23.08.17 14:21
Murr
NEW 23.08.17 14:21 
в ответ new_book 23.08.17 12:59

В США подход к работе несколько иначе, более свободный и в удовольствие с наименьшим количеством нахлебников

-----

Ой... Только не рассказывай это тем кто поработал в и штатах, и в Германиi...

#19 
new_book знакомое лицо24.08.17 18:29
new_book
NEW 24.08.17 18:29 
в ответ Murr 23.08.17 14:21

Полностью о штатах я судить не могу, но кое что о силиконовой долине знаю

А если у тебя такой опыт в разнице штатах и Германии, то поделись

#20 
1 2 все