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