Nasiba Nasyrova 12 мая 2022

👨‍💻 Как грамотное программирование научит вас писать качественный код

Кажется довольно очевидным, но код пишется не только для компьютеров: он пишется и для людей. Упущение этого факта может обернуться дальнейшими проблемами. Рассказываем, что такое грамотное программирование и как писать качественный код.
👨‍💻 Как грамотное программирование научит вас писать качественный код

Оригинал статьи доступен по ссылке.

Друг моего отца рассказал мне о том, как однажды он наткнулся на действительно ужасный код на работе. Код был просто кошмарным: «плохо написанный, плохо прокомментированный», – рассказал Джоэл Франушич, инженер по решениям компании Okta, в интервью The New Stack по электронной почте. Он был так взбешен, что решил выяснить, кто же написал этот код, чтобы потом высказать ему все, что он думает.

Но оказалось, что это был его код.

Эта ситуация точно показывает распространенный, но мучительный для программистов опыт: разобраться в коде, независимо от того, чья эта работа – его собственная или постороннего человека. Существует ряд разнообразных способов решения этой проблемы, но есть особенно эффективный, хотя его часто игнорируют — грамотное программирование.

Что такое грамотное программирование?

👨‍💻 Как грамотное программирование научит вас писать качественный код

Грамотное программирование – это подход к программированию, при котором код разъясняется с использованием обычного языка наряду с кодом. Это отличается от смежных практик, таких как документация или комментарии к коду, где код первичен, а комментарии и объяснения вторичны. В грамотном программировании же объяснение кода имеет равные права с самим кодом.

Документация фундаментально отделена от кода. Зачастую документацию пишет человек, который не работает над кодом. Это затрудняет реальное понимание того, что делает код.
Джоэл Франушич

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

Разработанное в начале 80-х годов Дональдом Кнутом, ученым-компьютерщиком, ныне почетным профессором Стэнфордского университета, грамотное программирование некоторые инженеры откидывают как пережиток гораздо более ранней эпохи вычислительной техники.

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

Тот факт, что грамотное программирование имеет аудиторию в ряде сообществ является явным показателем того, что оно все еще имеет ценность. Единственный вопрос заключается в том, есть ли другие плюсы у этого подхода, которые программисты упускают?

Эволюция нового подхода

👨‍💻 Как грамотное программирование научит вас писать качественный код

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

Норман Рэмси, профессор информатики в Университете Тафтса, рассказал изданию The New Stack, как он познакомился с грамотным программированием, когда был техническим руководителем группы инженеров, работавших на американского государственного подрядчика.

Мы подписали контракт с ВВС на поставку программного обеспечения для проверки, и математика, лежащая в основе того, что мы разрабатывали, была довольно сложной.
Норман Рэмси

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

Если WEB – первый инструмент Кнута для грамотного программирования – был написан на Паскале, а CWEB, созданный Кнутом вместе с математиком Сильвио Леви, на Си, то проект, который Рэмси и его коллектив выполняли для ВВС, должен был быть написан на языке Ada. Это побудило Рэмси разработать Spidery WEB – инструмент, который позволял инженерам «красиво печатать» на языках, выходящих за рамки тех, которые ранее были в центре внимания сообщества грамотных программистов. В итоге работа Рэмси позволила сделать грамотное программирование более заметным и доступным.

После Spidery WEB Рэмси создал Noweb, возможно, один из самых распространенных инструментов, который позволяет людям заниматься грамотным программированием независимо от конкретного языка программирования.

Его главные достоинства, – утверждается в тексте на сайте проекта, – это простота, расширяемость и независимость от языка – особенно ощутимые по сравнению с другими инструментами грамотного программирования.

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

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

Грамотное программирование на сегодняшний день

👨‍💻 Как грамотное программирование научит вас писать качественный код

Рэмси стал меньше работать над грамотным программированием в 90-х годах. Он прекратил вносить свой вклад в экосистему инструментов и идей. Во многом это было связано с его работой в качестве исследователя; он сконцентрировался на новых проблемах.

Тем не менее, в последнее время его влияние можно заметить в таких различных инструментах, как Jupyter Notebooks и JS-Doc, инструмент разметки для аннотирования кода JavaScript. Язык Haskell также предоставляет способ грамотного программирования, с которым впервые и столкнулся Франушич.

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

Но невозможно не признать, что целый ряд современных практик извлекают пользу из идей, над которыми трудились Кнут и Рэмси в восьмидесятых и девяностых годах.

У Франушича есть своя личная история, которая может подтвердить его ценность в относительно новой сфере – евангелизме разработчиков и отношениях с ними.

Будучи евангелистом разработчиков в компании Twilio, специализирующейся на коммуникационных инструментах, он заметил, что пишет множество сообщений в блогах, содержащих код. «Особая проблема, с которой я неоднократно сталкивался, состояла в том, что трудно параллельно писать код и прозу, описывающую код», – написал он в The New Stack.

«Мой обычный рабочий процесс, когда я пишу о коде, состоит из следующих шагов:

  1. Написать код.
  2. Начать писать статью в блог о коде.
  3. Описать часть кода прозой.
  4. Описывая код прозой, найти способы усовершенствовать код.
  5. Исправить код, перейти к шагу 3.
  6. Повторять, пока не завершу.»

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

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

Хотя это немного нестандартный случай, всё же интересно посмотреть, как грамотное программирование обрело новую значимость в контексте мира современного контента для разработчиков и евангелизма разработчиков – то, что было бы совершенно чуждо ориентированным на исследования компьютерным ученым в 80-х годах.

Рэмси говорит, что «грамотное программирование сегодня "скрыто" от студентов на его курсах, однако, он отметил, что много материалов, которые им даются, особенно домашние задания, готовятся, как грамотные программы». Это потому, что, по его словам, он может гарантировать, что код, который они видят, это код, который на самом деле выполняется.

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

<a href="https://proglib.io/p/97-sovetov-po-produktivnosti-dlya-programmistov-i-top-6-samyh-vazhnyh-2022-05-06" target="_blank">💪🔋👨‍💻 97 советов по продуктивности для программистов и ТОП-6 самых важных</a>
💪🔋👨‍💻 97 советов по продуктивности для программистов и ТОП-6 самых важных

Грамотное статистическое программирование

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

Этот способ, чаще называемый грамотным статистическим программированием, особенно удобен не только из-за сложной математики, которая является неотъемлемой частью статистического программирования, но и из-за потребности в совместном использовании кода и уточнении того, как статистическая программа выдает свои результаты. Это также имеет особый смысл, если учесть, что статистические вычисления – это практика, которая часто встречается в исследовательской среде.

Jupyter Notebooks, как упоминалось выше, является особенно популярным инструментом, который можно рассматривать как реконтекстуализацию грамотного программирования. Хотя вы, возможно, и не догадывались об этом – ни на странице проекта в Википедии, ни на его домашней странице нет никаких намеков на грамотное программирование – признание тайной истории инструмента, который вы можете использовать каждый день, в какой-то мере важно.

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

Франушич направил The New Stack на один из своих любимых репозиториев Jupyter Notebook, созданный Питером Норвигом, сотрудником Стэнфорда и директором по инженерным вопросам в Google. «Если вы не видели эти блокноты, я советую вам познакомиться с ними, чтобы понять, насколько убедительной может быть грамотная программа».

Они действительно таковыми являются; каждая из них – это своего рода повествование о решении проблем, объединяющее кодера и рассказчика таким образом, чтобы сделать нечто большее, чем просто «показать свою работу». В Jupyter Notebook Норвиг также может пояснить, почему он делает то, что делает. Это миниатюрные драмы, построенные на триумвирате человека, проблемы и кода.

<a href="https://proglib.io/p/klyuchevye-razlichiya-mezhdu-agile-scrum-i-kanban-2022-02-24" target="_blank">✔️ Ключевые различия между Agile, Scrum и Kanban</a>
✔️ Ключевые различия между Agile, Scrum и Kanban

Почему грамотное программирование не получило более массового распространения?

Хотя грамотное программирование, похоже, нашло свой путь в мир статистических вычислений, Рэмси рассказал The New Stack, почему этот подход не обязательно должен использоваться повсюду.

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

Франушич поддержал эту идею.

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

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

<a href="https://proglib.io/p/kak-napisat-kod-kotoryy-polyubyat-vse-2020-03-17" target="_blank">Как написать код, который полюбят все</a>
Как написать код, который полюбят все

Почему грамотное программирование важно сегодня?

Несмотря на очевидные недостатки этого подхода – его стоимость и отсутствие возможности изменять написанную программу, грамотное программирование может стать невероятно мощным навыком для разработчиков программного обеспечения, работающих в самых разных контекстах. Как показывает опыт Франушича по написанию постов в блоге компании Twilio, оно может быть полезным, позволяя вам объединить рассказ и код в одном месте.

Франушича особенно недвусмысленно говорит о его ценности: «Изучение грамотного программирования сделает вас более успешным программистом. Это также поможет вам писать более качественный код, за что ваше будущее «я» будет вам очень благодарно.

Рэмси повторил это мнение в более взвешенных выражениях: «Это действительно заставляет вас думать, прежде чем писать код».

Ценность этой вынужденной саморефлексии невозможно недооценить. Да, грамотное программирование должно помочь вам писать более качественный код, но оно также побуждает вас думать о том, почему вы делаете то, что делаете. Почему так, а не иначе? Почему я сделал это так, а не иначе?

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

***

Материалы по теме

Источники

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ