- •Сформулируйте и поясните закон Брукса
- •Поясните, наличия, каких умений Закон Дырявых Абстракций требует от программиста.
- •Расскажите, что означает “вхождение в поток”.
- •Почему выдающихся программистов эффективнее “вербовать” в начале или середине обучения в университете, а не в конце?
- •Чем работа над одной задачей двух программистов в “хирургической бригаде” отличается от работы двух программистов в “классической” технологии?
- •Почему личные кабинеты могли бы увеличить эффективность работы программистов?
- •Программист осуществляет свои построения на основе чистого мышления. Какое отношение это имеет к оценке сроков задач?
- •Почему средняя производительность программистов резко падает в крупных проектах по сравнению с малыми?
- •Что такое “концептуальная целостность”? Опишите это своими словами.
- •Сильно ли различается производительность программистов? Приведите пример(ы).
- •Что отличает программу от программного продукта? Программу от программной системы?
- •Приведите примеры линейно разделимой и линейно неразделимой задач.
- •Как обмен информаций и получение первоначального опыта новыми сотрудниками влияет на время, затрачиваемое на разработку?
- •Стоит ли давать практикантам серьезные задачи?
- •Что такое архитектура, и чем она отличается от разработки?
- •Сформулируйте возможную проблему “подавления творческой активности разработчиков архитекторами”. Каково ваше отношение к ней?
- •Msf и другие методологии говорят о “вехах”. События с какой отличительной чертой должны приниматься в качестве “вех”?
- •Две отличительные черты разработки программного обеспечения по Бруксу - Согласованность и Изменяемость. Каким образом они усложняют разработку программного обеспечения?
- •Чем программный продукт сложнее, например, автомобиля?
- •В чем суть итеративной (пошаговой) разработки?
- •В чем психологическое преимущество итеративной разработки?
- •Почему принцип “планируйте на выброс” был признан устаревшим в 80-е?
- •Назовите несколько из Top-10 рисков it от Барри Боэма.
- •Чем спиральная модель отличается от итеративной разработки?
- •Программное обеспечение тиражируется практически бесплатно. Дает ли это дополнительные основания привлекать лучших спецов к его написанию?
- •Чем плохи генераторы кода?
- •Где искать выдающихся разработчиков?
- •Приведите пример вопроса, который не следует задавать кандидатам на собеседовании.
Что такое “концептуальная целостность”? Опишите это своими словами.
Концептуальная целостность - это единообразие стиля и простота структуры. Это когда в системе единый набор конструктивных идей, без всяких невзаимосвязанных и несогласованных отдельных необычных возможностей.
Концептуальная целостность, в свою очередь, требует, чтобы проект исходил от одного разработчика, или небольшого числа их, действующих согласованно и в унисон.
Пример такой разработки это «операционная бригада». Когда главный программист берет на себя всю работу по планированию и реализацию.
Отделение разработки архитектуры от реализации является эффективным способом достижения концептуальной целостности при работе над очень большими проектами.
Сильно ли различается производительность программистов? Приведите пример(ы).
Менеджеры программных проектов давно поняли, что хорошие и плохие
программисты очень сильно различаются между собой по производительности.
Однако реально измеренные величины поразительны. В одном из исследований измеряли производительность труда в группе опытных программистов. Внутри одной лишь этой группы
соотношение между лучшими и худшими результатами составило примерно 10:1 по производительности труда и 5:1 по скорости работы программ и требуемой для них памяти! Короче, программист, зарабатывающий 20 тысяч долларов в год, может быть в десять раз продуктивнее программиста, зарабатывающего 10 тысяч долларов.
Правда, возможно и обратное. Полученные данные не выявили какой-либо
корреляции между стажем работы и производительностью. (Я не уверен, что это всегда справедливо.)
Что отличает программу от программного продукта? Программу от программной системы?
-
А
Программа
А
Программный
комплекс
(интерфейсы, системная интеграция)
А
Программный продукт
(обобщение,
тестирование,
документирование,
сопровождение)
А
Система
Программа. В левом верхнем углу рисунка находится программа. Она является завершенным продуктом, пригодным для запуска своим автором на системе, на которой была разработана.
Есть два способа, которыми программу можно превратить в более полезный, но и более дорогой объект. Эти два способа представлены по краям рисунка.
Программный продукт. При перемещении вниз через горизонтальную границу программа превращается в программный продукт. Это программа, которую любой человек может запускать, тестировать, исправлять и развивать. Она может использоваться в различных операционных средах и со многими наборами данных. Чтобы стать общеупотребительным программным продуктом, программа должна быть написана в обобщенном стиле. В частности, диапазон и вид входных данных должны быть настолько обобщенными, насколько это допускается базовым алгоритмом. Затем программу нужно тщательно протестировать, чтобы быть уверенным в ее надежности. Для этого нужно подготовить достаточное количество контрольных примеров для проверки диапазона допустимых значений входных данных и определения его границ, обработать эти примеры и зафиксировать результаты.
Наконец, развитие программы в программный продукт требует создания подробной документации, с помощью которой каждый мог бы использовать ее, делать исправления и расширять.
Программный комплекс. При пересечении вертикальной границы программа становится компонентом программного комплекса. Последний представляет собой набор взаимодействующих программ, согласованных по функциям и форматам, и вкупе составляющих полное средство для решения больших задач. Чтобы стать частью программного комплекса, синтаксис и семантика ввода и вывода программы должны удовлетворять точно определенным интерфейсам. Программа должна быть также спроектирована таким образом, чтобы использовать заранее оговоренный бюджет ресурсов — объем памяти, устройства ввода/вывода, процессорное время. Наконец, программу нужно протестировать вместе с прочими системными компонентами во всех сочетаниях, которые могут встретиться. Это тестирование может оказаться большим по объему, поскольку количество тестируемых случаев растет экспоненциально. Оно также занимает много времени, так как скрытые ошибки выявляются при неожиданных взаимодействиях отлаживаемых компонентов. Компонент программного комплекса стоит, по крайней мере, втрое дороже, чем автономная программа с теми же функциями. Стоимость может увеличиться, если в системе много компонентов.
Системный программный продукт. В правом нижнем углу рисунка находится системный программный продукт. От обычной программы он отличается во всех перечисленных выше отношениях. И стоит, соответственно, в десять раз дороже. Но это действительно полезный объект, который является целью большинства системных программных проектов.