0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>27 мар 2020</li>
2
<ul><li>27 мар 2020</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><h2>Что такое плохой код и что с этим делать</h2>
4
</ul><h2>Что такое плохой код и что с этим делать</h2>
5
<p>Что такое качество кода, как его улучшить, и почему иногда хороший код - это плохо. Статья подготовлена на основе нашего вебинара с Глебом Михеевым.</p>
5
<p>Что такое качество кода, как его улучшить, и почему иногда хороший код - это плохо. Статья подготовлена на основе нашего вебинара с Глебом Михеевым.</p>
6
<p> vlada_maestro / shutterstock</p>
6
<p> vlada_maestro / shutterstock</p>
7
<p>В бэкграунде - программирование, французский язык, академическое рисование, капоэйра. Сейчас учит финский. Любит путешествия и Балтийское море.</p>
7
<p>В бэкграунде - программирование, французский язык, академическое рисование, капоэйра. Сейчас учит финский. Любит путешествия и Балтийское море.</p>
8
<p>ВРЕМЯ ПРОСМОТРА</p>
8
<p>ВРЕМЯ ПРОСМОТРА</p>
9
<p><strong>1 ч. 19 мин.</strong></p>
9
<p><strong>1 ч. 19 мин.</strong></p>
10
<p>Плохой код - как плохой ремонт. Работать может и даже работает, но плохо и недолго, выглядит так себе и исправить в нём что-то непросто. Он хаотичен, имеет непонятную структуру, и вообще не сразу поймёшь, что же хотел сказать автор.</p>
10
<p>Плохой код - как плохой ремонт. Работать может и даже работает, но плохо и недолго, выглядит так себе и исправить в нём что-то непросто. Он хаотичен, имеет непонятную структуру, и вообще не сразу поймёшь, что же хотел сказать автор.</p>
11
<p>Признаки некачественного кода:</p>
11
<p>Признаки некачественного кода:</p>
12
<ul><li>в нём тяжело ориентироваться;</li>
12
<ul><li>в нём тяжело ориентироваться;</li>
13
<li>части, которые можно написать двумя строчками, написаны десятью;</li>
13
<li>части, которые можно написать двумя строчками, написаны десятью;</li>
14
<li>по названию функции нельзя понять, что она делает (<em>xyz, function, n</em>);</li>
14
<li>по названию функции нельзя понять, что она делает (<em>xyz, function, n</em>);</li>
15
<li>если в него что-то добавить, остальное перестанет работать.</li>
15
<li>если в него что-то добавить, остальное перестанет работать.</li>
16
</ul><p>Вот такой логикой, как на картинке, всё-таки лучше не пользоваться: если программа работает, это ещё не значит, что с ней всё в порядке.</p>
16
</ul><p>Вот такой логикой, как на картинке, всё-таки лучше не пользоваться: если программа работает, это ещё не значит, что с ней всё в порядке.</p>
17
<p>На первый взгляд, плохой код - не катастрофа. Программа же работает, разве это не главное? На самом деле он приносит много проблем, особенно в долгосрочной перспективе. И вот почему:</p>
17
<p>На первый взгляд, плохой код - не катастрофа. Программа же работает, разве это не главное? На самом деле он приносит много проблем, особенно в долгосрочной перспективе. И вот почему:</p>
18
<ul><li>чтобы внести изменения в некачественный код, нужно много времени и стоит это дорого, причём<strong>со временем цена и продолжительность только увеличиваются;</strong></li>
18
<ul><li>чтобы внести изменения в некачественный код, нужно много времени и стоит это дорого, причём<strong>со временем цена и продолжительность только увеличиваются;</strong></li>
19
<li>добавить что-то новое тоже сложно;</li>
19
<li>добавить что-то новое тоже сложно;</li>
20
<li>код непредсказуем - вы никогда не знаете, что и когда перестанет работать;</li>
20
<li>код непредсказуем - вы никогда не знаете, что и когда перестанет работать;</li>
21
<li>командный дух падает, если людям приходится работать с такими шедеврами<em>("Да кто это вообще писал?!").</em></li>
21
<li>командный дух падает, если людям приходится работать с такими шедеврами<em>("Да кто это вообще писал?!").</em></li>
22
</ul><p>В итоге скорость разработки снижается, сроки удлиняются, стоимость изменений растёт. Если это критично для потребителя или заказчика, то плохой код может похоронить проект.</p>
22
</ul><p>В итоге скорость разработки снижается, сроки удлиняются, стоимость изменений растёт. Если это критично для потребителя или заказчика, то плохой код может похоронить проект.</p>
23
<p>Чтобы писать качественный код, надо знать, что он из себя представляет. Вот его основные качества:</p>
23
<p>Чтобы писать качественный код, надо знать, что он из себя представляет. Вот его основные качества:</p>
24
<ul><li>код легко читается, у него чёткая структура, в ней нет путаницы;</li>
24
<ul><li>код легко читается, у него чёткая структура, в ней нет путаницы;</li>
25
<li>он легко поддерживается: небольшие изменения не вызывают желания написать его заново;</li>
25
<li>он легко поддерживается: небольшие изменения не вызывают желания написать его заново;</li>
26
<li>его можно расширять;</li>
26
<li>его можно расширять;</li>
27
<li>код прошёл тестирование;</li>
27
<li>код прошёл тестирование;</li>
28
<li>он документирован;</li>
28
<li>он документирован;</li>
29
<li>производителен.</li>
29
<li>производителен.</li>
30
</ul><em>Журналист спрашивает программиста:</em><em>- Какой код плохой?</em><em>Программист:</em><em>- Без комментариев.</em><p>Комментарии действительно очень важны, чтобы код легко читался. Это поможет не только другим программистам, когда они будут работать с вашим кодом, но и вам в будущем.</p>
30
</ul><em>Журналист спрашивает программиста:</em><em>- Какой код плохой?</em><em>Программист:</em><em>- Без комментариев.</em><p>Комментарии действительно очень важны, чтобы код легко читался. Это поможет не только другим программистам, когда они будут работать с вашим кодом, но и вам в будущем.</p>
31
<p>Подробнее почитать об этом можно здесь: Как писать техническую документацию для программ на <a>C#</a></p>
31
<p>Подробнее почитать об этом можно здесь: Как писать техническую документацию для программ на <a>C#</a></p>
32
<p>Вот пять действий, которые улучшают код.</p>
32
<p>Вот пять действий, которые улучшают код.</p>
33
<ol><li><strong>Соблюдайте стандарты оформления кода.</strong>Это один из самых простых и важных ориентиров - когда вы заранее договариваетесь с коллегами, как оформлять код и как поступать в некоторых ситуациях. Тогда код, написанный разными программистами, будет визуально похож: вам будет проще работать с чужим кодом и наоборот.<p>Еще есть<strong>общепринятые стандарты</strong>оформления кода и даже платформы для программирования, которые вам подскажут, как этим стандартам следовать. Это важно и при работе в команде, и в том случае, если вы пишете код в одиночку.</p>
33
<ol><li><strong>Соблюдайте стандарты оформления кода.</strong>Это один из самых простых и важных ориентиров - когда вы заранее договариваетесь с коллегами, как оформлять код и как поступать в некоторых ситуациях. Тогда код, написанный разными программистами, будет визуально похож: вам будет проще работать с чужим кодом и наоборот.<p>Еще есть<strong>общепринятые стандарты</strong>оформления кода и даже платформы для программирования, которые вам подскажут, как этим стандартам следовать. Это важно и при работе в команде, и в том случае, если вы пишете код в одиночку.</p>
34
</li>
34
</li>
35
<li><strong>Рефакторинг.</strong>Это переработка кода программы без изменения её поведения. То есть сначала у вас креативный процесс: вы пишете так, чтобы программа работала, а потом "убираете за собой", приводите код в порядок, к нужному виду. В качестве бонуса рефакторинг помогает переосмыслить архитектурные решения программы.</li>
35
<li><strong>Рефакторинг.</strong>Это переработка кода программы без изменения её поведения. То есть сначала у вас креативный процесс: вы пишете так, чтобы программа работала, а потом "убираете за собой", приводите код в порядок, к нужному виду. В качестве бонуса рефакторинг помогает переосмыслить архитектурные решения программы.</li>
36
<li><strong>Типизация.</strong>Поясним на реальном примере. Разработчикам одной игры игроки писали о проблемах, а потом вдруг перестали. Сначала было разработчики обрадовались: всё настолько круто, что проблем нет. Позже оказалось, что в игре изменился<em>юзернейм</em>на <em>никнейм,</em>и из-за этого перестала работать форма обратной связи: жалобы просто не отправлялись.<p>Типизация<em>(декларирование типа данных)</em>поможет избежать таких ошибок и упростит поддержку и рефакторинг.</p>
36
<li><strong>Типизация.</strong>Поясним на реальном примере. Разработчикам одной игры игроки писали о проблемах, а потом вдруг перестали. Сначала было разработчики обрадовались: всё настолько круто, что проблем нет. Позже оказалось, что в игре изменился<em>юзернейм</em>на <em>никнейм,</em>и из-за этого перестала работать форма обратной связи: жалобы просто не отправлялись.<p>Типизация<em>(декларирование типа данных)</em>поможет избежать таких ошибок и упростит поддержку и рефакторинг.</p>
37
</li>
37
</li>
38
<li><strong>Код-ревью.</strong>Это когда вы с коллегой проверяете код друг друга и даете друг другу фидбэк. Такая практика помогает избежать глупых ошибок и непродуманностей. Кроме того<em>(и это тоже важно)</em>, вы в курсе того, чем занимается другой человек, и вам не приходится дублировать функции. Замечательный бонус - этот метод поможет мягко адаптировать новичков.</li>
38
<li><strong>Код-ревью.</strong>Это когда вы с коллегой проверяете код друг друга и даете друг другу фидбэк. Такая практика помогает избежать глупых ошибок и непродуманностей. Кроме того<em>(и это тоже важно)</em>, вы в курсе того, чем занимается другой человек, и вам не приходится дублировать функции. Замечательный бонус - этот метод поможет мягко адаптировать новичков.</li>
39
<li><strong>Автоматические тесты</strong> - о них мы поговорим чуть подробнее. Это простые программы, которые запускают код с разными параметрами и сверяют с уже известными результатами. Какие бывают тесты?</li>
39
<li><strong>Автоматические тесты</strong> - о них мы поговорим чуть подробнее. Это простые программы, которые запускают код с разными параметрами и сверяют с уже известными результатами. Какие бывают тесты?</li>
40
</ol><ul><li><em>Unit</em>тестируют отдельные части программы.</li>
40
</ol><ul><li><em>Unit</em>тестируют отдельные части программы.</li>
41
<li><em>e2e</em>тестируют систему в целом.</li>
41
<li><em>e2e</em>тестируют систему в целом.</li>
42
<li><em>Нагрузочные</em>проверяют, насколько хорошо программа справляется с нагрузками.</li>
42
<li><em>Нагрузочные</em>проверяют, насколько хорошо программа справляется с нагрузками.</li>
43
<li><em>Скриншотные</em>сравнивают скриншоты до и после, реагируют на изменения.</li>
43
<li><em>Скриншотные</em>сравнивают скриншоты до и после, реагируют на изменения.</li>
44
<li>Прочие: мутационные, пенетрационные…</li>
44
<li>Прочие: мутационные, пенетрационные…</li>
45
</ul><em>Мой код и правда так плох?.. Не-е-е, это тесты не правы!</em><p>С тестами действительно нужно быть внимательными, чтобы не получилось, что вы часами ищете ошибку в коде, а проблема в самих тестах. Поэтому полезно сначала писать тесты, а потом уже браться за сам код, когда у вас в голове есть чёткая структура и понимание, что надо делать и что вы хотите получить.</p>
45
</ul><em>Мой код и правда так плох?.. Не-е-е, это тесты не правы!</em><p>С тестами действительно нужно быть внимательными, чтобы не получилось, что вы часами ищете ошибку в коде, а проблема в самих тестах. Поэтому полезно сначала писать тесты, а потом уже браться за сам код, когда у вас в голове есть чёткая структура и понимание, что надо делать и что вы хотите получить.</p>
46
<p>Есть и другие способы улучшить код<em>(например, парное программирование)</em>. Самые лучшие результаты можно получить, если использовать сразу несколько способов: так надёжнее.</p>
46
<p>Есть и другие способы улучшить код<em>(например, парное программирование)</em>. Самые лучшие результаты можно получить, если использовать сразу несколько способов: так надёжнее.</p>
47
<p>Если хотите улучшить свой код, то советуем почитать эту статью: Ужасы чужого кода: как найти смысл и не умереть. Там много полезных советов и личного опыта.</p>
47
<p>Если хотите улучшить свой код, то советуем почитать эту статью: Ужасы чужого кода: как найти смысл и не умереть. Там много полезных советов и личного опыта.</p>
48
<p>Мы сейчас столько говорили о том, как важен качественный код, а теперь заявляем обратное? Да.<em>Иногда хороший, "правильный" код - это не так уж и замечательно.</em></p>
48
<p>Мы сейчас столько говорили о том, как важен качественный код, а теперь заявляем обратное? Да.<em>Иногда хороший, "правильный" код - это не так уж и замечательно.</em></p>
49
<p>Причина очень простая: в программировании, к сожалению, приходится выбирать между<em>качеством</em>и <em>скоростью работы</em>, и в некоторых случаях скорость важнее.</p>
49
<p>Причина очень простая: в программировании, к сожалению, приходится выбирать между<em>качеством</em>и <em>скоростью работы</em>, и в некоторых случаях скорость важнее.</p>
50
<p>Чтобы понять, насколько важна скорость, представим себе двух программистов: Петю и Васю. Один обстоятельный, педантичный, а второй - его полная противоположность. Обоим пришла в голову идея сделать какой-то продукт. Петя сел, придумал архитектуру и начал делать хорошо и неторопливо. И делает уже полгода. Вася сделал всё за месяц, с ошибками, багами - но сразу запустил, нашёл клиентов, сделал второй релиз… В итоге через полгода, когда Петя только доделал свой замечательный продукт, у Васи уже много пользователей и название продукта уже на слуху. А часть багов он почистил во втором релизе.</p>
50
<p>Чтобы понять, насколько важна скорость, представим себе двух программистов: Петю и Васю. Один обстоятельный, педантичный, а второй - его полная противоположность. Обоим пришла в голову идея сделать какой-то продукт. Петя сел, придумал архитектуру и начал делать хорошо и неторопливо. И делает уже полгода. Вася сделал всё за месяц, с ошибками, багами - но сразу запустил, нашёл клиентов, сделал второй релиз… В итоге через полгода, когда Петя только доделал свой замечательный продукт, у Васи уже много пользователей и название продукта уже на слуху. А часть багов он почистил во втором релизе.</p>
51
<p><strong>Мораль этой истории:</strong>иногда важнее быстрее выйти на рынок и занять нишу, чем сделать идеально.</p>
51
<p><strong>Мораль этой истории:</strong>иногда важнее быстрее выйти на рынок и занять нишу, чем сделать идеально.</p>
52
<p>Как тогда быть? Плохой код - плохо, хороший - тоже не всегда хорошо… Дело вот в чём:</p>
52
<p>Как тогда быть? Плохой код - плохо, хороший - тоже не всегда хорошо… Дело вот в чём:</p>
53
<p>Если вы пишете приложение для банка, то потратите много времени на тестирование и проработку, потому что ошибка может стоить сотен тысяч рублей.</p>
53
<p>Если вы пишете приложение для банка, то потратите много времени на тестирование и проработку, потому что ошибка может стоить сотен тысяч рублей.</p>
54
<p>Если же вы делаете лендинг, который просто расскажет о временной акции и соберёт мейлы в базу данных, то тут уже важна скорость. Вы знаете, что, как только акция закончится, ваш код больше не понадобится. Дорабатывать и поддерживать его не нужно, и другие разработчики его использовать тоже не будут - тут достаточно написать быстро и проверить, что он работает, остальное не важно.</p>
54
<p>Если же вы делаете лендинг, который просто расскажет о временной акции и соберёт мейлы в базу данных, то тут уже важна скорость. Вы знаете, что, как только акция закончится, ваш код больше не понадобится. Дорабатывать и поддерживать его не нужно, и другие разработчики его использовать тоже не будут - тут достаточно написать быстро и проверить, что он работает, остальное не важно.</p>
55
<p>Это основные принципы создания качественного кода: не забывать про стандарты, оглядываться на то, что вы уже написали, не бояться фидбека от коллег и не забывать тестировать. Но в самом начале стоит взвесить: важно вам сейчас качество, или надо закончить разработку как можно скорее.</p>
55
<p>Это основные принципы создания качественного кода: не забывать про стандарты, оглядываться на то, что вы уже написали, не бояться фидбека от коллег и не забывать тестировать. Но в самом начале стоит взвесить: важно вам сейчас качество, или надо закончить разработку как можно скорее.</p>
56
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
56
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>