Pull to refresh

Comments 29

Далеко не все могут глубоко разбираться, но при этом должны писать хороший код. Для таких общепризнанные best practice — это вполне себе рабочее решение.
Далеко не все могут глубоко разбираться, но при этом должны писать хороший код.

Мне кажется, это вообще странный подход «не может, но должен». Если не может, так ведь и не напишет, вне зависимости от того, следует он лучшим практикам или нет. Не разобраться в должной мере = лотерея. Лучше решить нужную задачу средненько, чем взять готовое, возможно хорошее решение от другой задачи. Чтобы понять, подходит ли оно вообще нужно больше, чем глубоко разобраться в своей задаче, нужно разобраться еще и в решении.
Это как в телешоу где шутят знаменитости. Их все смотрят, расхватывают на мемы, хотя там ребята рассказывают обычные вещи.
UFO just landed and posted this here
Без конкретных примеров с фрагментами кода эта статья не имеет смысла.

В общем случае, обсуждаемая проблема вообще не имеет никакого отношения к программированию.

Статья при этом помещена в хаб «Программирование», а слово «программирование» в ней упоминается 15 раз, слово «код» − 10 раз. Удивительно!

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

Ради доказательства. Я, допустим, абсолютно уверен, что best practices нужно придерживаться всегда и во всём. Может ли эта статья убедить меня в чём-то? Ни малейшей вероятности.

Но если бы я своими глазами увидел кусок кода, написанный согласно best practice, но при этом неоправданно дорого обошедшийся в продакшне − уязвимый, неподдерживаемый, вызвавший потерю данных − тогда я поверил бы автору.

Частный пример не опровергает общую тенденцию — вы об этом никогда не слышали?

Какую общую тенденцию? Что надо всегда придерживаться лучших практик? То есть вы хотите сказать, что статья в любом случае бессмысленна − что с примерами, что без оных?

Любое общее утверждение не может быть опровергнуто частным примером, который ему противоречит, если утверждение не содержит квантор всеобщности.
В данном случае, утверждение, которое делается в статье — что слепое следование лучшим практикам — плохая идея, потому что они могут быть неприменимы к конкретной ситуации. Это утверждение не нуждается в примерах для того, чтобы быть правдой. Если вы считаете, что нуждается, вы ошибаетесь, логика так вообще не работает.

То есть основное утверждение статьи бессмысленно, потому что не фальсифицируемо. Ок, с этим я должен согласиться.

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

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

Но если бы я своими глазами увидел кусок кода,… − тогда я поверил бы автору.

Нет, тогда был бы срач вокруг этого куска кода, в котором потерялась бы более общая проблема.

Да возьмите тот-же упомянутый в статье аджайл, не знаю где работаете вы, а у нас в крупной компнаии его внедряют насильно «сверху» при этом нисколько не заботясь подходит этот процесс команде или нет. Best practices же!
Сочувствую вам. Я работаю в маленькой компании, с такими вещами не сталкивался. С другой стороны, я немножко сочувствую и вашему менеджменту тоже. Мы же все общаемся со всеми, можем потюнить воркфлоу на ходу, если видим, что при существующем порядке работа пробуксовывает. А для вашей организации в таком случае будет уже поздно пить боржом.
Да ничего страшного для организации не происходит, просто очередной карго культ: спринты есть, другие отличительные признаки есть, значит все внедрили. А то что работаем по-старому, так кого это волнует…
UFO just landed and posted this here

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

Возможно некоторые best practices и оказались не очень best, а вы как хотели? Программисты учатся программировать, иногда забредают не туда. Иногда от недостатка мозгов (а у кого они в достатке?), иногда просто из-за ограниченых возможностей языков, браузеров и проч.


Не знаю, за что заминусовали Tanner, примеров можно привести полно, просто вспомнив, что творилось в разработке лет 10 назад и дальше. Мне кажется, там все состояло из одной большой best practice, которую сейчас стыдно вспоминать. :-)

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


The hyperbole of The Architects Sketch may seem ridiculous, but consider how often we see software projects begin with adoption of the latest fad in architectural design, and only later discover whether or not the system requirements call for such an architecture. Design-by-buzzword is a common occurrence. t least some of this behavior within the software industry is due to a lack of understanding of why a given set of architectural constraints is useful. In other words, the reasoning behind good software architectures is not apparent to designers when those architectures are selected for reuse.
https://www.ics.uci.edu/~fielding/pubs/dissertation/introduction.htm

Это было написано 20 лет назад автором REST. Позже этот термин превратится в один из самых заезженных базввордов в ИТ

Вот если бы хотя бы какой-нибудь пример привели конкретный

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


Ну допустим, TDD — не лучшая практика. А что тогда делать? Не применять ее? Применять частично? Применять другую практику (ага, значит тогда другая практика является лучшей)?


А выводы, типа: нам нужно тщательно, больше, глубже поощрять открытость, разбираться и прекратить уже наконец, научиться, увидеть и отказаться — это как-то не убедительно.

Не сотвори кумира себе…
© Какой-то из заветов
Увы, люди ничему не учатся. Вся история человечества учит тому что история ничему не учит. Возникает чувство что мы обречены повторять одни и те же ошибки снова и снова.
Никто не хочет читать, думать, анализировать, сравнивать, просчитывать последствия и альтернативные варианты развития ситуации…
Увы-увы, чукча не читатель, чукча писатель…
Если в статье поменять «программирование» на «ручная дуговая сварка» и статья будет такой же хорошей, то что-то тут не то.
Тут выше говорят, что без примеров это все пустой трёп. Я могу привести пример:
Нет, не пример кода, конечно же — он тут не нужен. Пример подхода к работе. Большинство привыкло к тому, что есть всего два вида разработки — или вы делаете web api или stand-alone приложение. Но есть ещё и другие виды разработки и один из них — моя ниша — разработка плагинов под приложения.

В моей организации мы занимаемся разработкой плагинов под Revit и недавно у нас решили «делать все правильно». И это самое «правильно» сводится к тому, что мы маниакально следуем лучшим практикам: как можно более чистый mvvm, где представление существует чуть ли не в вакууме, послойная архитектура. На каждый (!) сервис мы пишем интерфейсы. Юзаем DI. Каждую мелочь обязательно выносим в конфиг-файл (недавно выносил в конфиг «случайное большое число»).
И может показаться, что мы все делаем правильно — послойная архитектура с интерфейсами и разделение представления и логики позволят писать авто тесты, конфиги позволять менять параметры приложения без перекомпиляции и т.д. Звучит как песня, НО!

Но тестов никто не пишет, ибо это просто невозможно. Так как мы пишем плагины под Revit, используя его API, то без запущенного Revit тестировать нельзя. Есть фанаты, которые делали фреймворк для тестирования — запускается Revit, открывается документ, запускается плагин и прогоняются тесты. Худо-бедно, но работает. Правда сложность создания этой фигни перекрывает собой сложность создания самого плагина. Ок, даже если решиться на такое тестирование, то тут же следующие проблемы — Revit вряд-ли поставишь на систему непрерывной интеграции (у нас teamcity). К тому-же тестирование на пустых проектах бесполезно, а реальные проекты могут только открываться вплоть до полу-часа!
При создании окон плагинов иногда приходится сильно мучаться, чтобы реализовать какое-то решение, которое легко делается в code-behind. Или, например, сделать ViewModel, которая «знает» о View (т.е. банально в конструктор ViewModel передать окно) решает многие проблемы. Надо свернуть-развернуть окно — две строчки кода. Но нет — мы же делаем «правильно» — поэтому надо сделать интерфейс, наследовать от него окно и передавать экземпляр в команду через параметр! А что это дает? Да ни-че-го!
А про конфиги вообще можно коротко сказать — ни разу никто из пользователей никогда не правил их вручную, чтобы поменять параметры приложения. И я уверен на 100% — никогда и не будут менять!

Мне пришлось поработать и с web api: делал бэк, использовал послойную архитектуру, ORM, CRUDS, даже немного Blazor поюзал. В таком контексте я понимаю зачем нужны все эти лучшие практики. Но когда лучшие практики начинают натягивать на другие контексты как сову на глобус, только лишь потому что «так принято», то получается просто трата времени. То, что можно написать за день, пишется за три.

P.S. Когда на все сервисы пишутся интерфейсы, то нажимая в IDE «Перейти к определению» мне открывается интерфейс. А если вы работаете через DI с внедрением, то к реализации не сможете так перескочить вообще. Только открывать вручную. Тоже дико бесит :)
Всякий культ — почти всегда плохо, это правда.
Но, касаемо темы, на мой взгляд, о непригодности лучших практик, общеизвестных технологий и прочего, общепризнанного, чаще всего говорят люди, чья самоуверенность просто не дает им шансов банально ознакомиться с этими самыми общепризнанными вещами. Синдром NIH, в общем.
Sign up to leave a comment.