HTML Diff
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>