tag:blogger.com,1999:blog-4880748087379545373.post9002681078197886033..comments2023-03-23T21:34:09.626+06:00Comments on PM-Jedi: Записки про проекты в IT: Как программисты пишут часы. Опасности общих моделейМихаил Пайсонhttp://www.blogger.com/profile/06121961388321549552noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-4880748087379545373.post-83038854335438449652012-04-30T11:12:28.003+07:002012-04-30T11:12:28.003+07:00Я бы извинил, если бы вы сказали, что я не умею ст...Я бы извинил, если бы вы сказали, что я не умею ставить задачу или неправильно использовал компонент или ещё чего-нибудь в том же духе, извинил бы. За программистов не извиню, даже не надейтесь.<br /><br />С другой стороны - я сам виноват, что весь контекст не передал. Мы пишем платформу для создания абсолютно произвольного виджета путём сборки из составных частей. Т.е. всё основано на более-менее абстрактных спидометрах-тахометрах и прочих переключателях. И, соответственно, писался некий абстрактный движок для визуализации таких объектов. Пока всё было абстрактно, всё было великолепно, а когда дошли до конкретики, как раз и обнаружились интересные особенности.Михаил Пайсонhttps://www.blogger.com/profile/06121961388321549552noreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-26908376681011375092012-04-30T10:33:15.581+07:002012-04-30T10:33:15.581+07:00Хотя нет - не верю в программистов-детей. Видимо у...Хотя нет - не верю в программистов-детей. Видимо у вас все слишком формализованно, и задача программиста сводится не к тому самому написанию продукта, а к реализации классов и интерфейсов, которые ему нарисовал кто-то старший.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-48228294345599653852012-04-30T10:29:11.116+07:002012-04-30T10:29:11.116+07:00Извините, но ваши программисты - или дети, или сфе...Извините, но ваши программисты - или дети, или сферические программисты в вакууме. Написать часы, которые не идут - это надо уметь. И не надо говорить про ТЗ, в котором этого нет. Любой несферический программист должен нормально относиться к спецификациям, в которых написано не все, а некоторые вещи просто подразумеваются.<br /><br />"Он мыслит не только интерфейсами, классами и методами, но и объектами предметной области" - это не про идеального программиста, а про нормального. Может я и не прав, но я, как программист, пишу не код, а продукт для пользователя. Код - всего лишь средство создания продукта, а хороший структурированный код с интерфейсами и всем прочим - всего лишь средство уменьшить затраты на написание и поддержку продукта.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-26449242485367343642012-04-23T20:38:35.374+07:002012-04-23T20:38:35.374+07:00Безусловно! Об этом и пытаюсь сказать.Безусловно! Об этом и пытаюсь сказать.Михаил Пайсонhttps://www.blogger.com/profile/06121961388321549552noreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-66601909456594301732012-04-23T19:03:54.296+07:002012-04-23T19:03:54.296+07:00Я ничего не имею против тестирования, без него ник...Я ничего не имею против тестирования, без него никуда. Если только сам заказчик от него не отказывается. <br /><br />А в том что у програмиста сформировалась не там модель поведения, не всегда виноват програмист.<br />Должны быть специальные люди: ПМ, тимлидер, (может еще кто-то другой), которые должны мысль клиента доносить до разработчика.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-74132208021783043812012-04-23T16:09:53.157+07:002012-04-23T16:09:53.157+07:00Зря вы так. Тестирование неготового продукта - это...Зря вы так. Тестирование неготового продукта - это отличный способ сэкономить кучу времени и отловить ошибки на первых стадиях. Вообще, "есть слона по частям" - фундамент, например, любого agile. Кстати, фича с анимацией на тот момент уже была закрыта.<br /><br />А вообще, я не говорю, что программисты делают ошибки.<br /><br />Я говорю, что у программистов и пользователей разные модели поведения в голове, которые в результате ведут к непониманию:<br /><br />Пользователь: У меня ваши часы не работают<br />Программист: У меня всё отлично работает, проблема на вашей стороне<br /><br />И, в общем-то, каждый из них прав со своей точки зрения.Михаил Пайсонhttps://www.blogger.com/profile/06121961388321549552noreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-55979615162424248072012-04-23T14:58:50.179+07:002012-04-23T14:58:50.179+07:00Так чему же удивляться если компонент еще "не...Так чему же удивляться если компонент еще "недоделанный". ;-)<br />Играться надо уже с готовым продуктом, а то что вы пытались работать с недоделаным компонентом, я бы назвал это тестированием.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-90651734922313288162012-04-22T09:42:26.839+07:002012-04-22T09:42:26.839+07:00Вот как раз промежуточным положением стрелок можно...Вот как раз промежуточным положением стрелок можно озаботиться пользователю...<br /><br />А по поводу шестерёнок - это да. Мы, кстати, как раз и делаем движок для всяких "вращающихся дисков с шестерёнками". То, что называется Gauges. Часы - это просто один из вариантов, собранный на той же базе "запчастей".Михаил Пайсонhttps://www.blogger.com/profile/06121961388321549552noreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-56419496572020921772012-04-22T09:37:46.684+07:002012-04-22T09:37:46.684+07:00Да :). Она просто очень показательна. Потому что с...Да :). Она просто очень показательна. Потому что с точки зрения разработчика всё работает отлично, а с точки зрения пользователя ничего не работает.<br /><br />И при этому ни одной ошибки в реализации не допущено и всё сделано именно так, как планировалось.Михаил Пайсонhttps://www.blogger.com/profile/06121961388321549552noreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-1468368756830676582012-04-22T09:34:59.856+07:002012-04-22T09:34:59.856+07:00Вот могу поспорить, что писал программист ;). Прав...Вот могу поспорить, что писал программист ;). Правильно? Просто очень характерное замечание, которое я практически в тех же словах слышал от своих ребят.<br /><br />На мой взгляд, это просто попытка "закопать проблему", сказав "а у меня всё работает". Не должно меня заботить, что всё работает у программиста. Мне важно, что с этим пользователь работать не может.<br /><br />Вот представьте, я - пользователь. У меня есть виджет, который принимает значения секунд от 0 до 59. О чём мне заботиться? Я могу получить это значение вызовом getSeconds(). Я что, должен написать свою обёртку в сто строк, чтобы удовлетворить изысканные требования вашего виджета к входным данным? Да я сам за это время такой же напишу!<br /><br />Ещё раз, может быть не уловлен основной смысл статьи: модель, взятая программистами за основу, реализована безупречно. И действительно, с точки зрения программистов всё работает. Но вдруг оказывается, что, если её примерять на реальную жизнь, она оказывается как минимум странной. Именно об этом я в первом пункте и написал.<br /><br />Программисты не могут не уходить в абстракции - это их работа. Но проблема в том, что очень часто эти абстракции становятся для них важнее, чем изначальный объект, который мы моделируем, постепенно его замещая.<br /><br />Да, кстати, решение-то очень простое. Если циферблат круглый, надо просто добавить возможность анимации "через 0".Михаил Пайсонhttps://www.blogger.com/profile/06121961388321549552noreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-8106536365018751712012-04-22T07:53:08.171+07:002012-04-22T07:53:08.171+07:00Cразу вопрос. А у них в рамках этого проекта не бы...Cразу вопрос. А у них в рамках этого проекта не было бага с тем, что когда часы показывают 16:30 часовая стрелка находится точно между 4 и 5, а то запросто может оказаться на 4 или на 5 заранее ;).<br /><br />P.S.<br />Часы конечно да. Но вот если бы заданием было написать Минигру с вращением из какой нить казуальной игры(ввод кода на сейфе, ввод времени на часах, мазайка из нескольких вращающихся дисков, и прочие диски с шестеренками), то там такие перлы программистические бывают, что картина Сальвадора становится как раз в тему.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-48178917845999668132012-04-22T03:11:19.217+07:002012-04-22T03:11:19.217+07:00Неужели такая небольшая ошибка в недоделанном комп...Неужели такая небольшая ошибка в недоделанном компоненте послужила толчком к написанию этой статьи ?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-4880748087379545373.post-65158789793158120442012-04-22T01:21:47.685+07:002012-04-22T01:21:47.685+07:00Время - это бесконечная величина. Представлять бес...Время - это бесконечная величина. Представлять бесконечную величину конечными величинами должен тот, кто поставляет данные на вход виджету. Вопрос тут вовсе не в постановке задачи, а в неправильной подаче данных виджету. Направление стрелки - это не то что должно заботить виджет. Ему вообще без разницы направление, у него может быть циферблат наоборот. В общем виноват не пулемет, из которого стреляли по воробьям.Anonymousnoreply@blogger.com