3. Процесс познания
Неосознанная некомпетентность
Осознанная некомпетентность
Осознанная компетентность
Неосознанная компетентность
• Переход к четвертой ступени познания
• Интернализация навыка
• Подмена формальными практиками
• Неустойчивость третьей ступени
• Ценность практического опыта (негативного)
• Дополнение теоретическим изучением
• Aha-эффект
4. Inversion of Control
• Управляющее воздействие осуществляется извне
• Принцип «шиворот-навыворот»
• Inversion of Control как инструмент aha-эффекта
Procedure 1 Procedure 2
Operation 1 Operation 2 Operation 3
Main
Procedure 1 Procedure 2
Operation 1 Operation 2 Operation 3
Main
Procedure 3
6. Agile manifesto
• Individuals and interactions over processes and tools
• Working software over comprehensive documentation
• Customer collaboration over contract negotiation
• Responding to change over following a plan
7. Testability
• Не пытаться тестировать то, что есть
• Подбираем технологии по критерию
testability
• Выгоды
• Продуктивность
• Инновации
• Человеческий фактор
8. Test-Driven Development
• Runnable requirements over dead documentation
• Реализация, направляемая тестами
• Пишем требование, код подгоняем под требование
• Сложная задача заменяется на две более простых
• Обобщение граничных/вырожденных
случаев
9. Test-Driven Development, пример
Задача: факторизовать
натуральное число
• 1 => [1]
return [1]
• 2 => [2]
return [n]
• 4 => [2, 2]
if n == 4
return [2, 2]
return [n]
• 6 => [2, 3]
if n > 2 && n % 2 == 0
return [2, n / 2]
return [n]
• 8 => [2, 2, 2]
result = []
while n > 2 && n % 2 == 0
result.append(2)
n /= 2
result.append(n)
return result
• 9 => [3, 3]
result = []
foreach i in [2..sqrt(n)]
while n > i && n % i == 0
result.append(i)
n /= i
result.append(n)
return result