juan_gandhi: (Default)
[personal profile] juan_gandhi
they improve reliability and kill creativity

Date: 2012-03-15 07:54 pm (UTC)
From: [identity profile] sorhed.livejournal.com
Like all other social activity, it depends on who you review your code with and on if this voluntary.

Date: 2012-03-15 07:59 pm (UTC)
From: [identity profile] trurle.livejournal.com
Я бы сказал что настоящая креативность - это выразить сложные идеи просто.
А писать сложный код, с трудом проходящий ревью означает планировать ад в процессе отладки и сопровождения.

Date: 2012-03-15 08:13 pm (UTC)

Date: 2012-03-15 08:39 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Ха. Кто б спорил.

Date: 2012-03-16 12:34 am (UTC)
garote: (wasteland doctor)
From: [personal profile] garote
Exactly. A much better way of putting it.

Date: 2012-03-15 08:17 pm (UTC)
From: [identity profile] agathpher.livejournal.com
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." – Brian W. Kernighan

Date: 2012-03-15 08:38 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Kernigan! Debugging? Did they ever hear about unittesting? I hardly ever debug anything at all.

And complexity and cleverness are two very different things, you know. Simple vs easy, Rich Hickey.

Date: 2012-03-15 10:15 pm (UTC)
From: [identity profile] agathpher.livejournal.com
I hardly ever debug anything at all.
с чем вас и поздравляю :Р

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

Так вот "простые" - наиболее эффективны с точки зрения бизнеса (а ведь подавляющее большинство из нас работает за деньги, не правда ли). "простые" методы легче понять окружающим, их легче поддерживать, после того, как автор решит, что ему пора двигать из этого гадюшника, и т.д. Именно поэтому правильно организованный процесс (adequate change descriptions, code reviews, reproducible tests with every single change) - залог долговременного здоровья компании.

Да, "простой" код возмущает эстетов от программирования (я сам к таким когда-то относился). Но многолетний опыт заставил понять и противоположную точку зрения.
Edited Date: 2012-03-15 10:18 pm (UTC)

Date: 2012-03-16 01:06 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Чуть не год после Гугла я верил во всю эту премудрость. Больше не верю.

Впрочем, процентов на 80 я ещё верю в тесты.

Date: 2012-03-16 01:15 am (UTC)
From: [identity profile] agathpher.livejournal.com
А я это понял лет за десять до Гугла - и продолжаю "верить" :)

Date: 2012-03-20 03:37 pm (UTC)
From: [identity profile] sab123.livejournal.com
Как сказал классик, "When in doubt, use the brute force!"

Date: 2012-03-15 09:51 pm (UTC)
From: [identity profile] fatoff.livejournal.com
This is a joke of the famous author. :-)

Date: 2012-03-15 08:24 pm (UTC)
From: [identity profile] sab123.livejournal.com
Это вы их готовить не умеете.

Date: 2012-03-15 08:36 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Да довольно богатый опыт.

Date: 2012-03-16 04:20 pm (UTC)
From: [identity profile] sab123.livejournal.com
Ну вот например весь Г. их готовить не умеет.

Date: 2012-03-18 05:13 pm (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Как именно Google делает code review и в чём заключается ошибка?

Date: 2012-03-19 04:03 pm (UTC)
From: [identity profile] sab123.livejournal.com
В мелких изменениях, и ревьюях на каждое изменение. То есть, идея частых коммитов мне тоже нравится, но мне нравится их делать на рабочую ветку (или ствол), который до полного релиза не виден пользователям. А ревьюи по уму надо делать на большие законченные фичи. Если их делать на каждое мелкое изменение, то волей-неволей ревьюер следует за ходом мысли изначального автора и не видит большую картину. То есть, если ставить целью ревьюев поиск неправильно поставленных пробелов - то да, так проще. Но это плохие, негодные ревьюи. А если ставить целью оценку правильности всей фичи и мыслепоиск глюков в ней, то надо рвеьюить большие куски кода сразу, разглядывая всю суету с дистанции.

Date: 2012-03-20 07:28 am (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Так ведь большая картина может в мозг не уместиться.
Не зря же изменения делаются маленькими.

А как следует проводить code review: в одиночистве или в диалоге с писателем?

Date: 2012-03-20 03:33 pm (UTC)
From: [identity profile] sab123.livejournal.com
А для этого программу делят на уровни абстракции. На каждом уровне абстракции вся картина целиком должна помещаться в мозг. Я страшно не люблю, когда люди пишут много-много "плоского" кода, и потом в этой каше делается концов не найти (зато глюков полно).

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

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

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

Date: 2012-03-20 08:13 pm (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
1) Если всё понятно при одиночном code review, то зачем нужен диалог?
На мой взгляд диалог при code review полезен тем, что позволяет провести review в разы быстрее.
Быстрее обсудить альтернативные подходы к написанию кода.
Быстрее обсудить возможные подводные камни и где именно код их обходит.
Быстрее воссоздать контекст в голове проверяющего.

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

Date: 2012-03-15 10:13 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Красота - слишком хрупкая штука. Не выдержит вмешательства умелых ручек. Так что лучше всегда попроще и подубовее.

Date: 2012-03-15 10:17 pm (UTC)
From: [identity profile] agathpher.livejournal.com
совершенно верно. Причем не только хрупкая, но и субъективная.

Date: 2012-03-15 10:16 pm (UTC)
From: [identity profile] archaicos.livejournal.com
I'd rather have fewer creative WTFs in code in the first place than having to become creative in debugging and fixing them some time later.

Date: 2012-03-16 01:07 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Да что это все дебагингом-то заняты. Юниттесты ж на это есть.

Date: 2012-03-16 01:09 am (UTC)
From: [identity profile] archaicos.livejournal.com
Это если есть. И если они хорошие. А то ж бывает...

Date: 2012-03-18 10:37 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
в процессе дебагинга вы делаете что? проверяете инварианты.

Date: 2012-03-19 04:06 pm (UTC)
From: [identity profile] sab123.livejournal.com
И кто будет их отлаживать, когда результат получается неправильный?

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

Date: 2012-03-19 04:56 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Чё их отлаживать. Добавить более детальных тестов, есл сразу непонятно.

Date: 2012-03-19 07:08 pm (UTC)
From: [identity profile] sab123.livejournal.com
И когда окажется, что фактический результат тестов - неправильный, что делать?

Date: 2012-03-19 10:46 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Дык; разбить задачу на части; пофиксить тесты, если они не показывают ясно, в чём проблема.

Date: 2012-03-20 02:36 pm (UTC)
From: [identity profile] sab123.livejournal.com
Тесты не могут показывать ясно, в чем проблема. Они могут только показывать, совпадает результат с ожидаемым, или нет. Ну и это, чем дальше тесты лезут в нутря реализаций, тем тяжелее их писать и поддерживать. "Настоящие" (не-интегрированные) юнит-тесты - в массе своей штука не только малополезная, но и очень-очень тяжелая.

Date: 2012-03-20 05:08 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Ну хм, надо именно что интегрировать. Вчерась я так весело в командлайне, улучшая заодно логгинг, сделал шоб оно работало.

Date: 2012-03-21 04:31 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Ха. Но если что-то сломалось, и тест не говорит что, то это что-то должно быть отражено в логах. А если логи не показывают нужной информации, то нужно пофиксить логи. Чтобы дурь каждой программы видна была.

Date: 2012-03-21 05:39 pm (UTC)

Date: 2012-03-16 04:12 am (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Some code reviews made me throw away clever and creative code and replace it with something simple.
Other code reviews made me throw away clumsy code and be quite creative to express the same thing clearly and simply. (And shorter!)
Also, defending one's decisions in review comments is sometimes fun :)

Date: 2012-03-16 05:33 am (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Unit tests detect ~25% of bugs.
Integration tests detect ~35% of bugs.
Code review detects ~60% of bugs.

+ code review helps to share experience between team members, including creative experience.

Date: 2012-03-16 02:57 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
:) Would be nice. (I mostly agree though.)

Date: 2012-03-18 10:32 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
это разные баги

Date: 2012-03-18 05:11 pm (UTC)
dennisgorelik: 2020-06-13 in my home office (Default)
From: [personal profile] dennisgorelik
Частично разные, частично пересекающиеся.
Если бы были все разные, то находилось бы 120% багов
:-)

Конечно же, нужно использовать все три инструмента.
Это должно устранить ~95% багов.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1 234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 01:54 am
Powered by Dreamwidth Studios