Построение междисциплинарного алгоритма с не разработчиками - PullRequest
2 голосов
/ 05 ноября 2008

Да, я знаю, что название - полный рот ...

То, что я имею в виду, это как вы общаетесь с экспертом по предмету, которому нужна кодировка и проверка теории?

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

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

Ответы [ 9 ]

2 голосов
/ 05 ноября 2008

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

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

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

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

Эта техника хорошо сработала для меня.

2 голосов
/ 05 ноября 2008

Самый короткий ответ - постоянное участие клиентов.

Все красивые UML-диаграммы, макеты пользовательского интерфейса crayola, объяснения для четырехлетних детей и другие техники никогда не дадут полного опыта использования работающего приложения. Удержание потребителя в цикле обеспечивает обратную связь как с клиентом, так и с клиентом для вас. Эти симбиотические отношения имеют наибольшую вероятность производства продукта, который будет им полезен.

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

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

Даже если вы считаете, что ваши коммуникативные / объяснительные навыки на высшем уровне, вам все равно придется учитывать ошибки в том, как они общаются.

1 голос
/ 15 декабря 2010

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

Большинство программных разработок не касаются этого режима - и, как вы говорите, он просто качественно отличается от реализации какого-либо бизнес-процесса или создания сервера, который должен реализовывать RFCxxxx.

Есть люди, работающие над этим с обеих сторон - пытающиеся научить ученых основам ответственной разработки программного обеспечения (например, Software Carpentry Грега Уилсона) и обучить специалистов по разработке программного обеспечения крупномасштабным вычислениям. наука (например, очень интересный блог Стива Истербрука , из которого этот особенно уместен). Почему вещи столь же примитивны, как и на этом фронте, я понятия не имею. У обоих есть ссылки на своих коллег по блогам.

В этом режиме есть ряд важных отличий от того, чему вас, возможно, учили. С одной стороны, общая структура научного программного обеспечения, как правило, довольно проста, но тонкость довольно высока - каждая строка чисел может быть результатом 10 лет научной литературы в ряде областей. Во-вторых, вся идея спецификаций вроде бы перевернулась с ног на голову - спецификация «точно моделирует реальность», и у ученого есть модель, которая, как они надеются, делает это. В некотором смысле, разработка научного кода - это реализация проекта спецификации и поиск реальной спецификации.

@ vfilby имеет правильную идею - постоянное участие клиентов - но это немного больше, чем это. Чтобы это сработало, вы попадете в научный цикл - вместо того, чтобы быть ученым & rarr; теория & rarr; тест & rarr; интерпретация & rarr; обновить теорию, это будет ученый & rarr; теория & rarr; вы код & rarr; вы и ученый оба истолковали свои собственные части & rarr; обновить теорию и / или реализацию. Ученые в области не узнают так же хорошо, как и вы, как наилучшим образом реализовать то, что они хотят, или как отделить результаты своей модели от результатов вашей реализации модели; с другой стороны, они гораздо лучше, чем вы, поймут значение модели и узнают, как обновить теорию.

Это сложный баланс, чтобы понять все правильно. Чтобы это сработало, обе стороны должны (а) уважать другие области знаний, (б) узнать немного об этой другой области, и (в) инвестировать в проект в целом, работая. Подобные междисциплинарные проекты разрушаются чаще, чем успешны, но они жизненно важны. Я действительно хотел бы иметь несколько простых, гарантированных для работы советов для вас.

1 голос
/ 05 ноября 2008

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

1 голос
/ 05 ноября 2008

«Самый короткий ответ - постоянное участие клиентов».

Я предлагаю вам сделать это с помощью определенных подходов.

  1. Язык, на котором вы можете быстро развиваться. Питон мой выбор, ваш может отличаться. Например, Java не может занимать важное место в вашем списке, потому что требуется время, чтобы начать работу. C ++ может быть слишком много усилий для быстрой разработки.

  2. Быстро создавай мелочи. Начните с чего-нибудь, с чего угодно, чтобы начать разговор. Сборка, просмотр, расширение.

  3. Формализуйте результаты с помощью модульных тестов, которые позволяют проводить рефакторинг рано и часто.

Если у вас есть что-то солидное, вы можете переписать на Java или C ++ или что-то еще, чтобы повысить производительность.

0 голосов
/ 14 декабря 2010

Действуйте как программист и используйте подход «наименьшая возможная связь».

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

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

Они не обсуждают метеорологию и не обсуждают код.

0 голосов
/ 03 апреля 2009

Вы всегда должны спрашивать себя: «Как бы я объяснил это этой бабушке на рынке?». Как только вы это осветите, вы можете поговорить и объяснить свои методы и процедуры практически любому. Если у них есть дополнительные знания, даже лучше.

Если вы не можете, то, возможно, вам следует спросить себя: «Может, проблема не в их стороне?». Даже если они на их стороне, нет ничего плохого в том, чтобы попытаться понять их точку зрения.

Лично я не программист по профессии, но у меня никогда не было проблем с общением, если мы оба придерживаемся вышеупомянутых принципов.

0 голосов
/ 03 апреля 2009

У меня был хороший успех с вещами Вейгера: http://www.processimpact.com/reqs_book/reqs_book.shtml

Начните с создания видения и области видимости документа: http://www.processimpact.com/pubs.shtml#requirements

0 голосов
/ 05 ноября 2008

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

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

Клиент не должен знать ваш язык, поэтому не пытайтесь обучать метеоролога языку CS. Вам нужно выучить его язык. Даже самое тривиальное требование должно быть проверено с помощью прототипа. Если они говорят: «Нам нужно увидеть карту США», то вам нужно нарисовать карту США, показать им и сказать «Это то, что вы хотите увидеть»? Затем он скажет: «Но я не вижу реки Миссисипи на этой карте», тогда вы говорите: «Но вы не просили реки». Затем вернитесь и заново нарисуйте карту. и т. д.

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

...