Comments 47
Имена — иногда смотришь код и диву даешься, как может писать такое человек, который не один год этим занимается(гляньте на код программ С/С++ в частности). Все эти сокращения, неосмысленные значения имен, а еще к этому приучают с универа и множества книг. Особенно смешно слушать отговорки о том, что это ради производительности. Вы серьезно??? Про компилируемые ЯП и говорить нечего, не буду строить из себя КО, а про интерпретируемые — для этого имеются минификаторы и без них нельзя выпускать код в продакшн!
Книга Мартина — это один из must read для каждого разработчика, вне зависимости от ЯП. Очень жаль, что правильные навыки не прививают с ранних лет.
О какой документации вы говорите?О документации к коду, методы, типы, поля.
C# (Xml documentation ) и Java (JavaDoc) поддерживают документирование «из коробки», на другие языки вроде как есть «примочки».
Если метод понятное и осмысленное значение, то он не нуждается в какой-либо документации/комментировании.Очень сильное и очень спорное утверждение. Я не знаю что там писал Мартин, но хотелось бы посмотреть какой-нить его рабочий код, которму лет 10. В теории всегда все красиво.
Обычно, по необходимости, документацию пишут к публичному(public)/защищенному(protected) контакту фреймворка, или в каких-то широко используемых библиотеках. В legacy коде в принципе всегда понятно что он делает, но непонятно по какой причине написали его именно так.
Хотел бы я посмотреть на людей, которые получают фреймворк без документации, бгг…
Я не знаю что там писал Мартин
А вот вы почитайте и все станет на свои места. Что касается рабочему коду 10 летней давности, то с очень большой вероятностью, равно как и сейчас, большая часть написанного кода будет отвратительной с точки зрения читабельности, просто потому, что мало кто читает подобные правильные книги и еще меньше из читающих тех, кто это понимает и применяет на практике.
Хотел бы я посмотреть на людей, которые получают фреймворк без документации, бгг…
Все мы так или иначе используем фреймворки. Лично я зачастую не обращаю внимание на Javadoc всяких там геттеров, сеттеров и прочих методов, т.к. итак понятно, что они делают, так зачем для них писать документацию? Лишняя трата времени и «шум» в коде. Естественно, в некоторых случаях документация нужна, без нее не обойтись, я же не говорю о тотальном запрете документирования, я говорю о ее минимизации, что лучше подольше посидеть, подумать, обсудить с коллегами/сообществом, как понятнее назвать метод/переменную, либо упростить код без потери функционала
Кстати сказать, Роберт сам говорит что документация к API это хорошо и с таким кодом приятно работать.
Проглядывая быстро некоторые главы почитаю.
Возможно у вас мало опыта и не попадались такие случаи, когда код понятный и хороший, а вот почему сделано именно так, непонятно. Код не объясняет бизнес особенностей, он всего лишь отражает некоторую бизнес модель.
А иногда очень хочется знать почему сделано именно так, а не иначе.
Самый ппц это когда получаешь код проекта, программисты которого уже все ушли.
Да и далеко не все упирается в сам код. Бывает неудачный дизайн, когда код красивый, но цепочки вызовов такие, что хочется застрелиться. Или поначитавшись паттернов лепят фабрики, стратегии, бездумно отделяют интерфейсы от реализации.
Попробуйте для интереса разобраться в коде, который работает в высокопроизводительных системах.
2)
А иногда очень хочется знать почему сделано именно так, а не иначе— если реализация потребовала не столь очевидного решения, то это должно быть отражено в виде заметки как минимум, возможно в той же системе, где и документация по п.1, в крайнем случае как комментарий к классу/модулю, но это не должно быть повсеместно, иначе вы придете к тому, что у вас плохой дизайн
3)по высокопроизводительным системам — тут должен быть у разработчика бекграунд, т.е. оптимизации и т.п. в коде должны быть понятны. Если вы их не понимаете, уточните или изучите. Если вы считаете, что они неуместны, а выяснить, почему так сделали — нет возможности, поменяйте на свою и убедитесь в правильности своего решения(также используйте п.2). Представьте, что каждая оптимизация/реализация, которые разбросаны по всему проекту и имеют один и тот же тип, будет иметь комментарий с пояснением. Подумайте, насколько код будет замусорен только ради того, чтобы новые разработчики, которые не владеют знаниями, загрязняли код еще больше, вместо того, чтобы учиться
1) Чем больше информации о бизнесе (предметной области) в коде и комментариях к нему, тем лучше. В идеале вся информация о бизнес-требованиях должна быть в коде, с генерируемыми по нему представлениями для бизнеса или представленная в коде в виде непосредственно понятным бизнесу. Код тестов приравнивается к основному коду. ТЗ может не быть в принципе в используемых методологиях разработки.
Код тестов приравнивается к основному коду— ага, это типичное заблуждение, согласен с вами(хотя вы так не считаете)
Что-то мне подсказывает, что вы смешиваете мух с котлетами, приравнивая методологии разработки с бизнес-требованиями. Вы уж определитесь для себя, что вы хотите, быть заказчиком и исполнителем в одном лице или все — таки быть разработчиком, код которого потом не «пахнет». Бизнесу по барабану на ваш код и методологии, ему важно, чтобы приложение работало и приносило деньги
Ну так бизнесу должно быть и всё равно где и как я фиксирую его требования, если он может:
а) ознакомиться с тем, что именно я счёл его требованиями
б) проверить, что они исполняются
Тесты типа формализованных User Story с использованием какого-то DSL в этом отношении практически идеальны. Бизнес может ознакомиться с ними непосредственно в коде или через более удобное автоматически сгенерированное по коду описанием через, например, веб-морду. И может как довериться результатам автоматического тестирования, так и вручную пройтись по шагам сценария на, например, стейдж-среде, а то и прод.
Чем функциональные тесты хуже функциональной части ТЗ?
Ну так бизнесу должно быть и всё равно где и как я фиксирую его требования— да, так и должно быть в идеале, главное, чтобы для него это было понятно и удобно
Чем функциональные тесты хуже функциональной части ТЗ?— А кто сказал, что они хуже? Тесты могут описывать ТЗ и требования в целом, но не кодовую базу, используемые технологии, ЯП и прочие низкоуровневые вещи с точки зрения бизнеса
Не только бизнесу должно быть понятно и удобно, но и разработчику. Более того, между "удобно бизнесу" и "понятно разработчику" однозначный выбор в пользу последнего. Ну или бизнес должен платить за перевод.
Функциональные тесты могут достаточно хорошо показывать используемые технологии, если не учитывать возможность того, что разработчик обернёт свои любимые технологии в технологии требуемые заказчиком. С другой стороны, если это вещи низкоуровневые, то какая бизнесу разница: "Бизнесу по барабану на ваш код и методологии, ему важно, чтобы приложение работало и приносило деньги"
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
— Martin Golding
Общее правило — имя переменной должно быть тем длиннее и подробнее чем шире область ее видимости.
Если это счетчик цикла или итератор, то он вполне может называться i, j,…
Чем короче имя переменной/функции, тем компактнее и проще для восприятия код.
Везде нужно соблюдать чувство меры и не впадать в крайности.
„Совершенный код“ Стива Макконнелла — почти 900 страниц обсуждалова! чуть ли не каждый год переиздается уже изданий 10 точно есть.
Все равно автору спасибо за статью!
- Боритесь со сложностью
- Анализируйте процесс разработки
- Пишите программы в первую очередь для людей и лишь во вторую — компьютеров
- Программируйте с использованием языка, а не на языке
- Концентрируйте внимание с помощью соглашений
- Программируйте в терминах проблемной области
- Итерируйте, итерируйте и итерируйте
- И да отделена будет религия от разработки ПО
В экстремальном программировании роль тестирования интереснее: теперь вначале идет тест, а потом код.
Реально, сколько уже по этому поводу сказано, но все никак не могут понять: "самый лучший и чистый код — код, который еще не написан".
А вообще, все уже давно придумано, несколько непонятно, зачем это перефразировать каждый раз (DRY, KISS, YAGNI)
Такие дела
„Совершенный код“ Стива Макконнелла, который упоминали выше — могли бы уже вынести в обязательный перечень при приеме на работу, потому что видеть посты на хабре в которых так или иначе описанное им уже много лет назад… ну как то не весело уже...
А может просто ушли читать книгу :)
Так что сомневаюсь что они вот так сразу, не дочитав статью, а скорее всего они ее не дочитали, рванули читать что-то :)
Вот только у школ и вузов другая задача стоит.
Школы учат азам, там нет задачи из каждого сделать программиста.
А в вузах все всегда на одноразовых задачках. Преподаватели обычно горе-теоретики, так что скорее всего и код не читают. Главное чтоб работало. А это не способствует развитию хорошего стиля кода/архитектуры. Теоретически это можно автоматизировать сбором метрик, но кто там заморачиваться будет?
Та же ситуация в веб студиях — там проект делается левой ногой на выброс, никто там долго поддерживать его не собирается.
По этому там недостаточно боли от плохого кода. Тесты не пишутся. Призрак архитектуры унаследованный от фреймворка.
Только в компании разрабатывающей свой продукт или там где ценится качество(принципиально), люди могут дойти до осознания что надо что-то менять.
К сожалению, если это дойдет до одного, но он не сможет объяснить другим — все пропало.
Под разжевывать — я предлагаю рассказать про все эти принципы на примере рефакторинга какого-либо типового проекта. Но чтоб там изначально была боль, которую народ не понимает. Рассказать как это влияет на эволюцию проекта, с примерами, как это лечится. Пошагово, вводя принципы и практики по одной. Чтоб новички увидели что-то знакомое, поняли что не так с этим и научились как делать хорошо.
Желательно при этом сделать это на примере JS UI приложения. Ибо имхо это самый большой пласт начинающих разрабов.
Но чтоб там изначально была боль, которую народ не понимает.
Надо строго обратное, чтобы изначально была боль, которую все понимают.
Перевести из «не осознанной некомпетентности» в «осознанную»
sergeykorol.ru/blog/competence
8. Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня.Из "50 цитат о программировании всех времён"
— Larry Wall
Пользователям часто нужно ещё и чтобы их "хотелки" воплощались быстро и дешево. А вот тут уже связь не столь опосредованная.
Как писать чистый и красивый код